VisionaryData.h
Go to the documentation of this file.
1 // -- BEGIN LICENSE BLOCK ----------------------------------------------
20 // -- END LICENSE BLOCK ------------------------------------------------
21 
22 #pragma once
23 
24 #include <iostream>
25 #include <stdint.h>
26 #include <string>
27 #include <vector>
28 
29 #include "PointXYZ.h"
30 #define TOTAL_SEGMENT_NUMBER 9
31 
32 namespace visionary {
33 
34 // Parameters to be extracted from the XML metadata part
36 {
38  int height;
40  int width;
42  double cam2worldMatrix[4 * 4];
44  double fx, fy, cx, cy;
46  double k1, k2, p1, p2, k3;
48  double f2rc;
49 };
50 
52 {
62 };
63 
64 struct PointXYZC
65 {
66  float x;
67  float y;
68  float z;
69  float c;
70 };
71 
73 {
74 public:
75  VisionaryData();
77 
78  //-----------------------------------------------
79  // Getter Functions
80 
81  // Calculate and return the Point Cloud in the camera perspective. Units are in meters.
82  virtual void generatePointCloud(std::vector<PointXYZ>& pointCloud) = 0;
83 
84  // Transform the XYZ point cloud with the Cam2World matrix got from device
85  // IN/OUT pointCloud - Reference to the point cloud to be transformed. Contains the transformed
86  // point cloud afterwards.
87  void transformPointCloud(std::vector<PointXYZ>& pointCloud) const;
88 
89  int getHeight() const;
90 
91  int getWidth() const;
92  // Returns the Byte length compared to data types
93 
94  uint32_t getFrameNum() const;
95  // Returns the timestamp in device format
96  // Bits of the devices timestamp: 5 unused - 12 Year - 4 Month - 5 Day - 11 Timezone - 5 Hour - 6
97  // Minute - 6 Seconds - 10 Milliseconds
98  // .....YYYYYYYYYYYYMMMMDDDDDTTTTTTTTTTTHHHHHMMMMMMSSSSSSmmmmmmmmmm
99  uint64_t getTimestamp() const;
100  // Returns the timestamp in milliseconds
101  uint64_t getTimestampMS() const;
102  // Return the time stamp in milliseconds for the specific segment
103  uint64_t getSegmentTimestampMS(uint8_t segNum) const;
104 
105  // Returns a reference to the camera parameter struct
106  // Returns a reference to the camera parameter struct
107  const CameraParameters& getCameraParameters() const;
108 
109  //-----------------------------------------------
110  // functions for parsing received blob
111 
112  // Parse the XML Metadata part to get information about the sensor and the following image data.
113  // Returns true when parsing was successful.
114  virtual bool parseXML(const std::string& xmlString, uint32_t changeCounter) = 0;
115 
116  // Parse the Binary data part to extract the image data.
117  // Returns true when parsing was successful.
118  virtual bool parseBinaryData(std::vector<uint8_t>::iterator inputBuffer, size_t length) = 0;
119 
122  virtual bool parseDepthMap(std::vector<uint8_t>::iterator itBuf, size_t length)
123  {
124  (void)(itBuf);
125  (void)(length);
126  return false;
127  };
128 
131  virtual bool parseRoiData(std::vector<uint8_t>::iterator itBuf, size_t length)
132  {
133  (void)(itBuf);
134  (void)(length);
135  return false;
136  };
137 
140  virtual bool parseDeviceStatusData(std::vector<uint8_t>::iterator itBuf, size_t length)
141  {
142  (void)(itBuf);
143  (void)(length);
144  return false;
145  };
146 
149  virtual bool parseLocalIOsData(std::vector<uint8_t>::iterator itBuf, size_t length)
150  {
151  (void)(itBuf);
152  (void)(length);
153  return false;
154  };
155 
158  virtual bool parseFieldInformationData(std::vector<uint8_t>::iterator itBuf, size_t length)
159  {
160  (void)(itBuf);
161  (void)(length);
162  return false;
163  };
164 
167  virtual bool parseLogicSignalsData(std::vector<uint8_t>::iterator itBuf, size_t length)
168  {
169  (void)(itBuf);
170  (void)(length);
171  return false;
172  };
173 
176  virtual bool parseIMUData(std::vector<uint8_t>::iterator itBuf, size_t length)
177  {
178  (void)(itBuf);
179  (void)(length);
180  return false;
181  };
182 
189  virtual void clearData(uint32_t changedCounter) { (void)(changedCounter); };
190 
195 
196 protected:
197  // Device specific image types
199  {
203  };
204 
205  // Returns the Byte length compared to data type given as String
206  int getItemLength(std::string dataType);
207 
208  // Pre-calculate lookup table for lens distortion correction,
209  // which is needed for point cloud calculation.
210  void preCalcCamInfo(const ImageType& type);
211 
212  // Calculate and return the Point Cloud in the camera perspective. Units are in meters.
213  // IN map - Image to be transformed
214  // IN imgType - Type of the image (needed for correct transformation)
215  // OUT pointCloud - Reference to pass back the point cloud. Will be resized and only contain new
216  // point cloud.
217  void generatePointCloud(const std::vector<uint16_t>& map,
218  const ImageType& imgType,
219  std::vector<PointXYZ>& pointCloud);
220 
221  //-----------------------------------------------
222  // Camera parameters to be read from XML Metadata part
224 
225 
227  float m_scaleZ;
228 
230  uint_fast32_t m_changeCounter;
231 
232  // Framenumber of the frame
235  uint_fast32_t m_frameNum;
236 
237  // Timestamp in blob format
238  // To get timestamp in milliseconds call getTimestampMS()
239  uint64_t m_blobTimestamp;
240 
241  // Timestamp in blob format in each segment
242  // To get timestamp in milliseconds call getTimestampMS()
244 
245  // Camera undistort pre-calculations (look-up-tables) are generated to speed up computations. True
246  // if this has been done.
248  // The look-up-tables containing pre-calculations
249  std::vector<PointXYZ> m_preCalcCamInfo;
250 
251 private:
252  // Bitmasks to calculate the timestamp in milliseconds
253  // Bits of the devices timestamp: 5 unused - 12 Year - 4 Month - 5 Day - 11 Timezone - 5 Hour - 6
254  // Minute - 6 Seconds - 10 Milliseconds
255  // .....YYYYYYYYYYYYMMMMDDDDDTTTTTTTTTTTHHHHHMMMMMMSSSSSSmmmmmmmmmm
256  static const uint64_t BITMASK_YEAR =
257  0x7FF800000000000; // 0000011111111111100000000000000000000000000000000000000000000000
258  static const uint64_t BITMASK_MONTH =
259  0x780000000000; // 0000000000000000011110000000000000000000000000000000000000000000
260  static const uint64_t BITMASK_DAY =
261  0x7C000000000; // 0000000000000000000001111100000000000000000000000000000000000000
262  static const uint64_t BITMASK_HOUR =
263  0x7C00000; // 0000000000000000000000000000000000000111110000000000000000000000
264  static const uint64_t BITMASK_MINUTE =
265  0x3F0000; // 0000000000000000000000000000000000000000001111110000000000000000
266  static const uint64_t BITMASK_SECOND =
267  0xFC00; // 0000000000000000000000000000000000000000000000001111110000000000
268  static const uint64_t BITMASK_MILLISECOND =
269  0x3FF; // 0000000000000000000000000000000000000000000000000000001111111111
270 };
271 
272 } // namespace visionary
visionary::CameraParameters::fy
double fy
Definition: VisionaryData.h:44
visionary::VisionaryData::getSegmentTimestampMS
uint64_t getSegmentTimestampMS(uint8_t segNum) const
Definition: VisionaryData.cpp:236
visionary::DataSetsActive::hasDataSetDeviceStatus
bool hasDataSetDeviceStatus
Definition: VisionaryData.h:56
visionary::DataSetsActive::hasDataSetFieldInfo
bool hasDataSetFieldInfo
Definition: VisionaryData.h:59
visionary::CameraParameters::p1
double p1
Definition: VisionaryData.h:46
TOTAL_SEGMENT_NUMBER
#define TOTAL_SEGMENT_NUMBER
Definition: VisionaryData.h:30
visionary::VisionaryData::UNKNOWN
@ UNKNOWN
Definition: VisionaryData.h:200
visionary::CameraParameters::cy
double cy
Definition: VisionaryData.h:44
visionary::VisionaryData::getDataSetsActive
virtual DataSetsActive getDataSetsActive()
Definition: VisionaryData.h:194
visionary::VisionaryData::clearData
virtual void clearData(uint32_t changedCounter)
Definition: VisionaryData.h:189
visionary::VisionaryData::generatePointCloud
virtual void generatePointCloud(std::vector< PointXYZ > &pointCloud)=0
visionary
Definition: AuthenticationLegacy.h:25
visionary::VisionaryData::getTimestamp
uint64_t getTimestamp() const
Definition: VisionaryData.cpp:214
visionary::VisionaryData::parseLogicSignalsData
virtual bool parseLogicSignalsData(std::vector< uint8_t >::iterator itBuf, size_t length)
Definition: VisionaryData.h:167
visionary::VisionaryData::parseBinaryData
virtual bool parseBinaryData(std::vector< uint8_t >::iterator inputBuffer, size_t length)=0
visionary::VisionaryData::BITMASK_MILLISECOND
static const uint64_t BITMASK_MILLISECOND
Definition: VisionaryData.h:268
visionary::VisionaryData::getTimestampMS
uint64_t getTimestampMS() const
Definition: VisionaryData.cpp:219
visionary::DataSetsActive
Definition: VisionaryData.h:51
visionary::CameraParameters::fx
double fx
Camera Matrix.
Definition: VisionaryData.h:44
visionary::VisionaryData::getWidth
int getWidth() const
Definition: VisionaryData.cpp:204
visionary::DataSetsActive::hasDataSetPolar2D
bool hasDataSetPolar2D
Definition: VisionaryData.h:54
visionary::CameraParameters::k3
double k3
Definition: VisionaryData.h:46
visionary::VisionaryData::parseDeviceStatusData
virtual bool parseDeviceStatusData(std::vector< uint8_t >::iterator itBuf, size_t length)
Definition: VisionaryData.h:140
visionary::VisionaryData::getFrameNum
uint32_t getFrameNum() const
Definition: VisionaryData.cpp:209
visionary::VisionaryData::BITMASK_HOUR
static const uint64_t BITMASK_HOUR
Definition: VisionaryData.h:262
visionary::VisionaryData::m_changeCounter
uint_fast32_t m_changeCounter
Change counter to detect changes in XML.
Definition: VisionaryData.h:230
visionary::VisionaryData::preCalcCamInfo
void preCalcCamInfo(const ImageType &type)
Definition: VisionaryData.cpp:70
visionary::PointXYZC::y
float y
Definition: VisionaryData.h:67
visionary::PointXYZC::z
float z
Definition: VisionaryData.h:68
visionary::PointXYZC::c
float c
Definition: VisionaryData.h:69
visionary::VisionaryData::BITMASK_SECOND
static const uint64_t BITMASK_SECOND
Definition: VisionaryData.h:266
visionary::VisionaryData::m_preCalcCamInfoType
ImageType m_preCalcCamInfoType
Definition: VisionaryData.h:247
visionary::VisionaryData::BITMASK_YEAR
static const uint64_t BITMASK_YEAR
Definition: VisionaryData.h:256
visionary::VisionaryData::m_blobTimestamp
uint64_t m_blobTimestamp
Definition: VisionaryData.h:239
visionary::DataSetsActive::hasDataSetROI
bool hasDataSetROI
Definition: VisionaryData.h:57
visionary::VisionaryData::parseXML
virtual bool parseXML(const std::string &xmlString, uint32_t changeCounter)=0
visionary::VisionaryData::parseRoiData
virtual bool parseRoiData(std::vector< uint8_t >::iterator itBuf, size_t length)
Definition: VisionaryData.h:131
visionary::VisionaryData::getCameraParameters
const CameraParameters & getCameraParameters() const
Definition: VisionaryData.cpp:253
visionary::VisionaryData::~VisionaryData
~VisionaryData()
Definition: VisionaryData.cpp:44
visionary::PointXYZC
Definition: VisionaryData.h:64
visionary::DataSetsActive::hasDataSetLocalIOs
bool hasDataSetLocalIOs
Definition: VisionaryData.h:58
PointXYZ.h
visionary::DataSetsActive::hasDataSetIMU
bool hasDataSetIMU
Definition: VisionaryData.h:61
visionary::VisionaryData::PLANAR
@ PLANAR
Definition: VisionaryData.h:201
visionary::VisionaryData::m_frameNum
uint_fast32_t m_frameNum
Definition: VisionaryData.h:235
visionary::VisionaryData::VisionaryData
VisionaryData()
Definition: VisionaryData.cpp:36
visionary::CameraParameters::cx
double cx
Definition: VisionaryData.h:44
visionary::CameraParameters::height
int height
The height of the frame in pixels.
Definition: VisionaryData.h:38
visionary::VisionaryData::parseLocalIOsData
virtual bool parseLocalIOsData(std::vector< uint8_t >::iterator itBuf, size_t length)
Definition: VisionaryData.h:149
visionary::VisionaryData::parseFieldInformationData
virtual bool parseFieldInformationData(std::vector< uint8_t >::iterator itBuf, size_t length)
Definition: VisionaryData.h:158
visionary::VisionaryData
Definition: VisionaryData.h:72
visionary::DataSetsActive::hasDataSetLogicSignals
bool hasDataSetLogicSignals
Definition: VisionaryData.h:60
visionary::VisionaryData::BITMASK_MINUTE
static const uint64_t BITMASK_MINUTE
Definition: VisionaryData.h:264
visionary::VisionaryData::m_scaleZ
float m_scaleZ
Factor to convert unit of distance image to mm.
Definition: VisionaryData.h:227
visionary::CameraParameters::k2
double k2
Definition: VisionaryData.h:46
visionary::CameraParameters::width
int width
The width of the frame in pixels.
Definition: VisionaryData.h:40
visionary::VisionaryData::m_preCalcCamInfo
std::vector< PointXYZ > m_preCalcCamInfo
Definition: VisionaryData.h:249
visionary::VisionaryData::transformPointCloud
void transformPointCloud(std::vector< PointXYZ > &pointCloud) const
Definition: VisionaryData.cpp:172
visionary::CameraParameters::f2rc
double f2rc
FocalToRayCross - Correction Offset for depth info.
Definition: VisionaryData.h:48
visionary::VisionaryData::getHeight
int getHeight() const
Definition: VisionaryData.cpp:199
visionary::PointXYZC::x
float x
Definition: VisionaryData.h:66
visionary::VisionaryData::parseIMUData
virtual bool parseIMUData(std::vector< uint8_t >::iterator itBuf, size_t length)
Definition: VisionaryData.h:176
visionary::VisionaryData::parseDepthMap
virtual bool parseDepthMap(std::vector< uint8_t >::iterator itBuf, size_t length)
Definition: VisionaryData.h:122
visionary::VisionaryData::m_cameraParams
CameraParameters m_cameraParams
Definition: VisionaryData.h:223
visionary::CameraParameters::p2
double p2
Definition: VisionaryData.h:46
visionary::CameraParameters
Definition: VisionaryData.h:35
visionary::VisionaryData::BITMASK_DAY
static const uint64_t BITMASK_DAY
Definition: VisionaryData.h:260
visionary::DataSetsActive::hasDataSetDepthMap
bool hasDataSetDepthMap
Definition: VisionaryData.h:53
visionary::CameraParameters::cam2worldMatrix
double cam2worldMatrix[4 *4]
Camera to world transformation matrix.
Definition: VisionaryData.h:42
visionary::VisionaryData::getItemLength
int getItemLength(std::string dataType)
Definition: VisionaryData.cpp:46
visionary::VisionaryData::RADIAL
@ RADIAL
Definition: VisionaryData.h:202
visionary::DataSetsActive::hasDataSetCartesian
bool hasDataSetCartesian
Definition: VisionaryData.h:55
visionary::CameraParameters::k1
double k1
Camera Distortion Parameters.
Definition: VisionaryData.h:46
visionary::VisionaryData::m_segmentTimestamp
uint64_t m_segmentTimestamp[TOTAL_SEGMENT_NUMBER]
Definition: VisionaryData.h:243
visionary::VisionaryData::BITMASK_MONTH
static const uint64_t BITMASK_MONTH
Definition: VisionaryData.h:258
visionary::VisionaryData::ImageType
ImageType
Definition: VisionaryData.h:198


sick_safevisionary_base
Author(s):
autogenerated on Sat Oct 21 2023 02:24:26