VisionaryTData.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2023 SICK AG, Waldkirch
3 //
4 // SPDX-License-Identifier: Unlicense
5 
6 #include <cmath>
7 #include <cstdio>
8 
9 #include "VisionaryEndian.h"
10 #include "VisionaryTData.h"
11 
12 #include <iostream>
13 // Boost library used for parseXML function
14 #if defined(__GNUC__) // GCC compiler
15 # pragma GCC diagnostic push // Save warning levels for later restoration
16 # pragma GCC diagnostic ignored "-Wpragmas"
17 # pragma GCC diagnostic ignored "-Wsign-conversion"
18 # pragma GCC diagnostic ignored "-Wold-style-cast"
19 # pragma GCC diagnostic ignored "-Wdeprecated-copy"
20 # pragma GCC diagnostic ignored "-Wshadow"
21 # pragma GCC diagnostic ignored "-Wparentheses"
22 # pragma GCC diagnostic ignored "-Wcast-align"
23 # pragma GCC diagnostic ignored "-Wstrict-overflow"
24 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
25 #endif
26 
27 #include <boost/foreach.hpp>
29 
30 #if defined(__GNUC__) // GCC compiler
31 # pragma GCC diagnostic pop // Restore previous warning levels
32 #endif
33 
34 namespace visionary {
35 
37 {
39  return t;
40 }
41 
43  : VisionaryData()
44  , m_dataSetsActive()
45  , m_distanceByteDepth(0)
46  , m_intensityByteDepth(0)
47  , m_confidenceByteDepth(0)
48  , m_angleFirstScanPoint(0)
49  , m_angularResolution(0)
50  , m_numPolarValues(0)
51  , m_numCartesianValues(0)
52 {
53 }
54 
56 
57 bool VisionaryTData::parseXML(const std::string& xmlString, uint32_t changeCounter)
58 {
59  //-----------------------------------------------
60  // Check if the segment data changed since last receive
61  if (m_changeCounter == changeCounter)
62  {
63  return true; // Same XML content as on last received blob
64  }
65  m_changeCounter = changeCounter;
67 
68  //-----------------------------------------------
69  // Build boost::property_tree for easy XML handling
71  std::istringstream ss(xmlString);
72  try
73  {
75  }
76  catch (...)
77  {
78  std::cout << "Reading XML tree in BLOB failed." << std::endl;
79  return false;
80  }
81 
82  //-----------------------------------------------
83  // Extract information stored in XML with boost::property_tree
84  const boost::property_tree::ptree dataSetsTree = xmlTree.get_child("SickRecord.DataSets", empty_ptree());
85  m_dataSetsActive.hasDataSetDepthMap = static_cast<bool>(dataSetsTree.get_child_optional("DataSetDepthMap"));
86  m_dataSetsActive.hasDataSetPolar2D = static_cast<bool>(dataSetsTree.get_child_optional("DataSetPolar2D"));
87  m_dataSetsActive.hasDataSetCartesian = static_cast<bool>(dataSetsTree.get_child_optional("DataSetCartesian"));
88 
89  // DataSetDepthMap specific data
90  {
91  boost::property_tree::ptree dataStreamTree =
92  dataSetsTree.get_child("DataSetDepthMap.FormatDescriptionDepthMap.DataStream", empty_ptree());
93 
94  m_cameraParams.width = dataStreamTree.get<int>("Width", 0);
95  m_cameraParams.height = dataStreamTree.get<int>("Height", 0);
96 
98  {
99  int i = 0;
101  dataStreamTree.get_child("CameraToWorldTransform"))
102  {
103  m_cameraParams.cam2worldMatrix[i] = item.second.get_value<double>(0.);
104  ++i;
105  }
106  }
107  else
108  {
109  std::fill_n(m_cameraParams.cam2worldMatrix, 16, 0.0);
110  }
111 
112  m_cameraParams.fx = dataStreamTree.get<double>("CameraMatrix.FX", 0.0);
113  m_cameraParams.fy = dataStreamTree.get<double>("CameraMatrix.FY", 0.0);
114  m_cameraParams.cx = dataStreamTree.get<double>("CameraMatrix.CX", 0.0);
115  m_cameraParams.cy = dataStreamTree.get<double>("CameraMatrix.CY", 0.0);
116 
117  m_cameraParams.k1 = dataStreamTree.get<double>("CameraDistortionParams.K1", 0.0);
118  m_cameraParams.k2 = dataStreamTree.get<double>("CameraDistortionParams.K2", 0.0);
119  m_cameraParams.p1 = dataStreamTree.get<double>("CameraDistortionParams.P1", 0.0);
120  m_cameraParams.p2 = dataStreamTree.get<double>("CameraDistortionParams.P2", 0.0);
121  m_cameraParams.k3 = dataStreamTree.get<double>("CameraDistortionParams.K3", 0.0);
122 
123  m_cameraParams.f2rc = dataStreamTree.get<double>("FocalToRayCross", 0.0);
124 
125  m_distanceByteDepth = getItemLength(dataStreamTree.get<std::string>("Distance", ""));
126  m_intensityByteDepth = getItemLength(dataStreamTree.get<std::string>("Intensity", ""));
127  m_confidenceByteDepth = getItemLength(dataStreamTree.get<std::string>("Confidence", ""));
128 
129  const auto distanceDecimalExponent = dataStreamTree.get<int>("Distance.<xmlattr>.decimalexponent", 0);
130  m_scaleZ = powf(10.0f, static_cast<float>(distanceDecimalExponent));
131  }
132  // DataSetPolar2D specific data
134  dataSetsTree.get_child("DataSetPolar2D.FormatDescription.DataStream.<xmlattr>.datalength", empty_ptree())
135  .get_value<uint8_t>(0);
136 
137  // DataSetCartesian specific data
139  {
140  boost::property_tree::ptree dataStreamTree =
141  dataSetsTree.get_child("DataSetCartesian.FormatDescriptionCartesian.DataStream", empty_ptree());
142  if ("uint32" != dataStreamTree.get<std::string>("Length", "")
143  || "float32" != dataStreamTree.get<std::string>("X", "")
144  || "float32" != dataStreamTree.get<std::string>("Y", "")
145  || "float32" != dataStreamTree.get<std::string>("Z", "")
146  || "float32" != dataStreamTree.get<std::string>("Intensity", ""))
147  {
148  std::cout << "DataSet Cartesian does not contain the expected format. Won't be used" << std::endl;
150  }
151  // To be sure float is 32 bit on this machine, otherwise the parsing of the binary part won't work
152  assert(sizeof(float) == 4);
153  }
154 
155  return true;
156 }
157 
158 bool VisionaryTData::parseBinaryData(std::vector<uint8_t>::iterator itBuf, size_t size)
159 {
160  if (m_cameraParams.height < 1 || m_cameraParams.width < 1)
161  {
162  std::cout << __FUNCTION__ << ": Invalid image size" << std::endl;
163  return false;
164  }
165  size_t dataSetslength = 0;
166  auto remainingSize = size;
167 
169  {
170  const size_t numPixel = static_cast<size_t>(m_cameraParams.width * m_cameraParams.height);
171  const size_t numBytesDistance = numPixel * static_cast<size_t>(m_distanceByteDepth);
172  const size_t numBytesIntensity = numPixel * static_cast<size_t>(m_intensityByteDepth);
173  const size_t numBytesConfidence = numPixel * static_cast<size_t>(m_confidenceByteDepth);
174 
175  const size_t headerSize = 4u + 8u + 2u; // Length(32bit) + TimeStamp(64bit) + version(16bit)
176  if (remainingSize < headerSize)
177  {
178  std::cout << "Malformed data. Did not receive enough data to parse header of binary segment" << std::endl;
179  return false;
180  }
181  remainingSize -= headerSize;
182 
183  //-----------------------------------------------
184  // The binary part starts with entries for length, a timestamp
185  // and a version identifier
186  const auto length = readUnalignLittleEndian<uint32_t>(&*itBuf);
187  dataSetslength += length;
188  if (dataSetslength > size)
189  {
190  std::cout << "Malformed data, length in depth map header does not match package size." << std::endl;
191  return false;
192  }
193  itBuf += sizeof(uint32_t);
194 
195  m_blobTimestamp = readUnalignLittleEndian<uint64_t>(&*itBuf);
196  itBuf += sizeof(uint64_t);
197 
198  const auto version = readUnalignLittleEndian<uint16_t>(&*itBuf);
199  itBuf += sizeof(uint16_t);
200 
201  //-----------------------------------------------
202  // The content of the Data part inside a data set has changed since the first released version.
203  if (version > 1)
204  {
205  const size_t extendedHeaderSize = 4u + 1u + 1u; // Framenumber(32bit) + dataQuality(8bit) + deviceStatus(8bit)
206  if (remainingSize < extendedHeaderSize)
207  {
208  std::cout << "Malformed data. Did not receive enough Data to parse extended header of binary segment"
209  << std::endl;
210  return false;
211  }
212  remainingSize -= extendedHeaderSize;
213  // more frame information follows in this case: frame number, data quality, device status
214  m_frameNum = readUnalignLittleEndian<uint32_t>(&*itBuf);
215  itBuf += sizeof(uint32_t);
216 
217  // const uint8_t dataQuality = readUnalignLittleEndian<uint8_t>(&*itBuf);
218  itBuf += sizeof(uint8_t);
219 
220  // const uint8_t deviceStatus = readUnalignLittleEndian<uint8_t>(&*itBuf);
221  itBuf += sizeof(uint8_t);
222  }
223  else
224  {
225  ++m_frameNum;
226  }
227 
228  //-----------------------------------------------
229  // Extract the Images depending on the informations extracted from the XML part
230  const auto imageSetSize = (numBytesDistance + numBytesIntensity + numBytesConfidence);
231  if (remainingSize < imageSetSize)
232  {
233  std::cout << "Malformed data. Did not receive enough Data to parse images of binary Segment" << std::endl;
234  return false;
235  }
236  remainingSize -= imageSetSize;
237  m_distanceMap.resize(numPixel);
238  memcpy((m_distanceMap).data(), &*itBuf, numBytesDistance);
239  std::advance(itBuf, numBytesDistance);
240 
241  m_intensityMap.resize(numPixel);
242  memcpy((m_intensityMap).data(), &*itBuf, numBytesIntensity);
243  std::advance(itBuf, numBytesIntensity);
244 
245  m_confidenceMap.resize(numPixel);
246  memcpy((m_confidenceMap).data(), &*itBuf, numBytesConfidence);
247  std::advance(itBuf, numBytesConfidence);
248 
249  const auto footerSize = (4u + 4u); // CRC(32bit) + LengthCopy(32bit)
250  if (remainingSize < footerSize)
251  {
252  std::cout << "Malformed data. Did not receive enough Data to parse images of binary Segment" << std::endl;
253  return false;
254  }
255 
256  //-----------------------------------------------
257  // Data ends with a (unused) 4 Byte CRC field and a copy of the length byte
258  // const uint32_t unusedCrc = readUnalignLittleEndian<uint32_t>(&*itBuf);
259  itBuf += sizeof(uint32_t);
260 
261  const auto lengthCopy = readUnalignLittleEndian<uint32_t>(&*itBuf);
262  itBuf += sizeof(uint32_t);
263 
264  if (length != lengthCopy)
265  {
266  std::cout << "Malformed data, length in header does not match package size." << std::endl;
267  return false;
268  }
269  }
270  else
271  {
272  m_distanceMap.clear();
273  m_intensityMap.clear();
274  m_confidenceMap.clear();
275  }
276 
278  {
279  const auto length = readUnalignLittleEndian<uint32_t>(&*itBuf);
280  dataSetslength += length;
281  if (dataSetslength > size)
282  {
283  std::cout << "Malformed data, length in polar scan header does not match package size." << std::endl;
284  return false;
285  }
286  itBuf += sizeof(uint32_t);
287  m_blobTimestamp = readUnalignLittleEndian<uint64_t>(&*itBuf);
288  itBuf += sizeof(uint64_t);
289 
290  // const uint16_t deviceID = readUnalignLittleEndian<uint16_t>(&*itBuf);
291  itBuf += sizeof(uint16_t);
292  // const uint32_t scanCounter = readUnalignLittleEndian<uint32_t>(&*itBuf);
293  itBuf += sizeof(uint32_t);
294  // const uint32_t systemCounterScan = readUnalignLittleEndian<uint32_t>(&*itBuf);
295  itBuf += sizeof(uint32_t);
296  // const float scanFrequency = readUnalignLittleEndian<float>(&*itBuf);
297  itBuf += sizeof(float);
298  // const float measurementFrequency = readUnalignLittleEndian<float>(&*itBuf);
299  itBuf += sizeof(float);
300 
301  m_angleFirstScanPoint = readUnalignLittleEndian<float>(&*itBuf);
302  itBuf += sizeof(float);
303  m_angularResolution = readUnalignLittleEndian<float>(&*itBuf);
304  itBuf += sizeof(float);
305  // const float polarScale = readUnalignLittleEndian<float>(&*itBuf);
306  itBuf += sizeof(float);
307  // const float polarOffset = readUnalignLittleEndian<float>(&*itBuf);
308  itBuf += sizeof(float);
309 
311 
312  memcpy((m_polarDistanceData).data(), &*itBuf, (m_numPolarValues * sizeof(float)));
313  std::advance(itBuf, (m_numPolarValues * sizeof(float)));
314 
315  // const float rssiAngleFirstScanPoint = readUnalignLittleEndian<float>(&*itBuf);
316  itBuf += sizeof(float);
317  // const float rssiAngularResolution = readUnalignLittleEndian<float>(&*itBuf);
318  itBuf += sizeof(float);
319  // const float rssiPolarScale = readUnalignLittleEndian<float>(&*itBuf);
320  itBuf += sizeof(float);
321  // const float rssiPolarOffset = readUnalignLittleEndian<float>(&*itBuf);
322  itBuf += sizeof(float);
323 
325  memcpy((m_polarConfidenceData).data(), &*itBuf, (m_numPolarValues * sizeof(float)));
326  std::advance(itBuf, (m_numPolarValues * sizeof(float)));
327 
328  //-----------------------------------------------
329  // Data ends with a (unused) 4 Byte CRC field and a copy of the length byte
330  // const uint32_t unusedCrc = readUnalignLittleEndian<uint32_t>(&*itBuf);
331  itBuf += sizeof(uint32_t);
332 
333  const auto lengthCopy = readUnalignLittleEndian<uint32_t>(&*itBuf);
334  itBuf += sizeof(uint32_t);
335 
336  if (length != lengthCopy)
337  {
338  std::cout << "Malformed data, length in header does not match package size." << std::endl;
339  return false;
340  }
341  }
342  else
343  {
344  m_polarDistanceData.clear();
345  m_polarConfidenceData.clear();
346  }
347 
350  {
351  const auto length = readUnalignLittleEndian<uint32_t>(&*itBuf);
352  dataSetslength += length;
353  if (dataSetslength > size)
354  {
355  std::cout << "Malformed data, length in cartesian header does not match package size." << std::endl;
356  return false;
357  }
358  itBuf += sizeof(uint32_t);
359  m_blobTimestamp = readUnalignLittleEndian<uint64_t>(&*itBuf);
360  itBuf += sizeof(uint64_t);
361  // const uint16_t version = readUnalignLittleEndian<uint16_t>(&*itBuf);
362  itBuf += sizeof(uint16_t);
363 
364  m_numCartesianValues = readUnalignLittleEndian<uint32_t>(&*itBuf);
365  itBuf += sizeof(uint32_t);
366 
368  memcpy((m_cartesianData).data(), &*itBuf, (m_numCartesianValues * sizeof(PointXYZC)));
369  std::advance(itBuf, (m_numCartesianValues * sizeof(PointXYZC)));
370 
371  //-----------------------------------------------
372  // Data ends with a (unused) 4 Byte CRC field and a copy of the length byte
373  // const uint32_t unusedCrc = readUnalignLittleEndian<uint32_t>(&*itBuf);
374  itBuf += sizeof(uint32_t);
375 
376  const auto lengthCopy = readUnalignLittleEndian<uint32_t>(&*itBuf);
377  itBuf += sizeof(uint32_t);
378 
379  if (length != lengthCopy)
380  {
381  std::cout << "Malformed data, length in header does not match package size." << std::endl;
382  return false;
383  }
384  }
385  else
386  {
387  m_cartesianData.clear();
388  }
389 
390  return true;
391 }
392 
393 void VisionaryTData::generatePointCloud(std::vector<PointXYZ>& pointCloud)
394 {
396 }
397 
398 const std::vector<uint16_t>& VisionaryTData::getDistanceMap() const
399 {
400  return m_distanceMap;
401 }
402 
403 const std::vector<uint16_t>& VisionaryTData::getIntensityMap() const
404 {
405  return m_intensityMap;
406 }
407 
408 const std::vector<uint16_t>& VisionaryTData::getConfidenceMap() const
409 {
410  return m_confidenceMap;
411 }
412 
414 {
415  return m_numPolarValues;
416 }
417 
419 {
420  return m_angleFirstScanPoint;
421 }
422 
424 {
425  return m_angularResolution;
426 }
427 
428 const std::vector<float>& VisionaryTData::getPolarDistanceData() const
429 {
430  return m_polarDistanceData;
431 }
432 
433 const std::vector<float>& VisionaryTData::getPolarConfidenceData() const
434 {
435  return m_polarConfidenceData;
436 }
437 
439 {
440  return m_numCartesianValues;
441 }
442 
443 const std::vector<PointXYZC>& VisionaryTData::getCartesianData() const
444 {
445  return m_cartesianData;
446 }
447 
448 } // namespace visionary
assert
Definition: mpl/assert.hpp:79
visionary::CameraParameters::fy
double fy
Definition: VisionaryData.h:27
visionary::VisionaryTData::getPolarConfidenceData
const std::vector< float > & getPolarConfidenceData() const
Definition: VisionaryTData.cpp:433
boost::property_tree::basic_ptree::get
boost::enable_if< detail::is_translator< Translator >, Type >::type get(const path_type &path, Translator tr) const
Definition: ptree_implementation.hpp:741
visionary::VisionaryTData::getPolarStartAngle
float getPolarStartAngle() const
Definition: VisionaryTData.cpp:418
VisionaryEndian.h
visionary::CameraParameters::p1
double p1
Definition: VisionaryData.h:29
visionary::VisionaryTData::m_polarDistanceData
std::vector< float > m_polarDistanceData
Definition: VisionaryTData.h:87
visionary::VisionaryData::UNKNOWN
@ UNKNOWN
Definition: VisionaryData.h:98
visionary::VisionaryTData::parseXML
bool parseXML(const std::string &xmlString, std::uint32_t changeCounter) override
Definition: VisionaryTData.cpp:57
visionary::CameraParameters::cy
double cy
Definition: VisionaryData.h:27
visionary::VisionaryData::generatePointCloud
virtual void generatePointCloud(std::vector< PointXYZ > &pointCloud)=0
visionary
Definition: MD5.cpp:44
visionary::VisionaryTData::getCartesianData
const std::vector< PointXYZC > & getCartesianData() const
Definition: VisionaryTData.cpp:443
visionary::CameraParameters::fx
double fx
Camera Matrix.
Definition: VisionaryData.h:27
visionary::VisionaryData::m_frameNum
std::uint_fast32_t m_frameNum
Definition: VisionaryData.h:131
visionary::VisionaryData::m_changeCounter
std::uint_fast32_t m_changeCounter
Change counter to detect changes in XML.
Definition: VisionaryData.h:126
visionary::VisionaryTData::generatePointCloud
void generatePointCloud(std::vector< PointXYZ > &pointCloud) override
Definition: VisionaryTData.cpp:393
visionary::VisionaryTData::getPolarSize
std::uint8_t getPolarSize() const
Definition: VisionaryTData.cpp:413
visionary::VisionaryTData::m_numPolarValues
std::uint_fast8_t m_numPolarValues
Definition: VisionaryTData.h:79
visionary::DataSetsActive::hasDataSetPolar2D
bool hasDataSetPolar2D
Definition: VisionaryData.h:37
xml_parser.hpp
visionary::CameraParameters::k3
double k3
Definition: VisionaryData.h:29
visionary::VisionaryTData::m_polarConfidenceData
std::vector< float > m_polarConfidenceData
Definition: VisionaryTData.h:88
boost::property_tree::basic_ptree::get_child_optional
optional< self_type & > get_child_optional(const path_type &path)
Definition: ptree_implementation.hpp:610
data
data
boost::property_tree::basic_ptree::get_value
boost::enable_if< detail::is_translator< Translator >, Type >::type get_value(Translator tr) const
Definition: ptree_implementation.hpp:665
f
f
visionary::VisionaryTData::m_cartesianData
std::vector< PointXYZC > m_cartesianData
Definition: VisionaryTData.h:89
visionary::VisionaryTData::m_numCartesianValues
std::uint_fast32_t m_numCartesianValues
Definition: VisionaryTData.h:81
visionary::VisionaryData::m_preCalcCamInfoType
ImageType m_preCalcCamInfoType
Definition: VisionaryData.h:139
visionary::VisionaryTData::getCartesianSize
std::uint32_t getCartesianSize() const
Definition: VisionaryTData.cpp:438
visionary::VisionaryTData::getConfidenceMap
const std::vector< std::uint16_t > & getConfidenceMap() const
Definition: VisionaryTData.cpp:408
visionary::VisionaryTData::VisionaryTData
VisionaryTData()
Definition: VisionaryTData.cpp:42
visionary::VisionaryTData::m_confidenceByteDepth
std::size_t m_confidenceByteDepth
Definition: VisionaryTData.h:72
visionary::VisionaryTData::m_angleFirstScanPoint
float m_angleFirstScanPoint
Definition: VisionaryTData.h:75
visionary::VisionaryTData::m_distanceMap
std::vector< std::uint16_t > m_distanceMap
Definition: VisionaryTData.h:84
visionary::PointXYZC
Definition: VisionaryData.h:41
VisionaryTData.h
visionary::VisionaryData::getItemLength
std::size_t getItemLength(const std::string &dataType) const
Definition: VisionaryData.cpp:36
visionary::VisionaryTData::m_dataSetsActive
DataSetsActive m_dataSetsActive
Definition: VisionaryTData.h:69
visionary::VisionaryTData::m_distanceByteDepth
std::size_t m_distanceByteDepth
Definition: VisionaryTData.h:72
visionary::VisionaryTData::m_intensityMap
std::vector< std::uint16_t > m_intensityMap
Definition: VisionaryTData.h:85
visionary::VisionaryTData::m_intensityByteDepth
std::size_t m_intensityByteDepth
Definition: VisionaryTData.h:72
visionary::VisionaryTData::getPolarDistanceData
const std::vector< float > & getPolarDistanceData() const
Definition: VisionaryTData.cpp:428
visionary::CameraParameters::cx
double cx
Definition: VisionaryData.h:27
visionary::VisionaryTData::parseBinaryData
bool parseBinaryData(ByteBuffer::iterator itBuf, std::size_t size) override
Definition: VisionaryTData.cpp:158
visionary::CameraParameters::height
int height
The height of the frame in pixels.
Definition: VisionaryData.h:21
visionary::VisionaryTData::m_confidenceMap
std::vector< std::uint16_t > m_confidenceMap
Definition: VisionaryTData.h:86
visionary::VisionaryTData::getIntensityMap
const std::vector< std::uint16_t > & getIntensityMap() const
Definition: VisionaryTData.cpp:403
visionary::VisionaryData
Definition: VisionaryData.h:49
visionary::VisionaryData::m_scaleZ
float m_scaleZ
Factor to convert unit of distance image to mm.
Definition: VisionaryData.h:123
boost::iterators::i
D const & i
Definition: iterator_facade.hpp:956
visionary::CameraParameters::k2
double k2
Definition: VisionaryData.h:29
visionary::CameraParameters::width
int width
The width of the frame in pixels.
Definition: VisionaryData.h:23
visionary::VisionaryTData::getDistanceMap
const std::vector< std::uint16_t > & getDistanceMap() const
Definition: VisionaryTData.cpp:398
visionary::VisionaryTData::getPolarAngularResolution
float getPolarAngularResolution() const
Definition: VisionaryTData.cpp:423
foreach.hpp
boost::property_tree::basic_ptree::value_type
std::pair< const Key, self_type > value_type
Definition: ptree.hpp:67
length
TFSIMD_FORCE_INLINE tfScalar length(const Quaternion &q)
BOOST_FOREACH
#define BOOST_FOREACH(VAR, COL)
Definition: foreach.hpp:1098
visionary::CameraParameters::f2rc
double f2rc
FocalToRayCross - Correction Offset for depth info.
Definition: VisionaryData.h:31
visionary::VisionaryData::m_cameraParams
CameraParameters m_cameraParams
Definition: VisionaryData.h:120
boost::property_tree::xml_parser::read_xml
void read_xml(std::basic_istream< typename Ptree::key_type::value_type > &stream, Ptree &pt, int flags=0)
Definition: xml_parser.hpp:46
visionary::CameraParameters::p2
double p2
Definition: VisionaryData.h:29
boost::property_tree::basic_ptree
Definition: ptree.hpp:48
visionary::DataSetsActive::hasDataSetDepthMap
bool hasDataSetDepthMap
Definition: VisionaryData.h:36
visionary::CameraParameters::cam2worldMatrix
double cam2worldMatrix[4 *4]
Camera to world transformation matrix.
Definition: VisionaryData.h:25
boost::property_tree::basic_ptree::get_child
self_type & get_child(const path_type &path)
Definition: ptree_implementation.hpp:571
visionary::empty_ptree
static const boost::property_tree::ptree & empty_ptree()
Definition: VisionaryTData.cpp:36
visionary::VisionaryTData::m_angularResolution
float m_angularResolution
Definition: VisionaryTData.h:76
visionary::VisionaryData::RADIAL
@ RADIAL
Definition: VisionaryData.h:100
visionary::VisionaryData::m_blobTimestamp
std::uint64_t m_blobTimestamp
Definition: VisionaryData.h:135
visionary::DataSetsActive::hasDataSetCartesian
bool hasDataSetCartesian
Definition: VisionaryData.h:38
visionary::CameraParameters::k1
double k1
Camera Distortion Parameters.
Definition: VisionaryData.h:29
visionary::VisionaryTData::~VisionaryTData
~VisionaryTData() override


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:56:19