VisionaryData.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2023 SICK AG, Waldkirch
3 //
4 // SPDX-License-Identifier: Unlicense
5 
6 #pragma once
7 
8 #include <cstddef> // for size_t
9 #include <cstdint>
10 #include <string>
11 #include <vector>
12 
13 #include "PointXYZ.h"
14 
15 namespace visionary {
16 
17 // Parameters to be extracted from the XML metadata part
19 {
21  int height;
23  int width;
25  double cam2worldMatrix[4 * 4];
27  double fx, fy, cx, cy;
29  double k1, k2, p1, p2, k3;
31  double f2rc;
32 };
33 
35 {
39 };
40 
41 struct PointXYZC
42 {
43  float x;
44  float y;
45  float z;
46  float c;
47 };
48 
50 {
51 public:
52  VisionaryData();
53  virtual ~VisionaryData();
54 
55  //-----------------------------------------------
56  // Getter Functions
57 
58  // Calculate and return the Point Cloud in the camera perspective. Units are in meters.
59  virtual void generatePointCloud(std::vector<PointXYZ>& pointCloud) = 0;
60 
61  // Transform the XYZ point cloud with the Cam2World matrix got from device
62  // IN/OUT pointCloud - Reference to the point cloud to be transformed. Contains the transformed point cloud
63  // afterwards.
64  void transformPointCloud(std::vector<PointXYZ>& pointCloud) const;
65 
66  int getHeight() const;
67  int getWidth() const;
68 
69  // Returns the Byte length compared to data types
70  std::uint32_t getFrameNum() const;
71 
72  // Returns the timestamp in device format
73  // Bits of the devices timestamp: 5 unused - 12 Year - 4 Month - 5 Day - 11 Timezone - 5 Hour - 6 Minute - 6 Seconds -
74  // 10 Milliseconds
75  // .....YYYYYYYYYYYYMMMMDDDDDTTTTTTTTTTTHHHHHMMMMMMSSSSSSmmmmmmmmmm
76  std::uint64_t getTimestamp() const;
77  // Returns the timestamp in milliseconds (UTC)
78  std::uint64_t getTimestampMS() const;
79 
80  // Returns a reference to the camera parameter struct
82 
83  //-----------------------------------------------
84  // functions for parsing received blob
85 
86  // Parse the XML Metadata part to get information about the sensor and the following image data.
87  // Returns true when parsing was successful.
88  virtual bool parseXML(const std::string& xmlString, std::uint32_t changeCounter) = 0;
89 
90  // Parse the Binary data part to extract the image data.
91  // Returns true when parsing was successful.
92  virtual bool parseBinaryData(std::vector<uint8_t>::iterator inputBuffer, std::size_t length) = 0;
93 
94 protected:
95  // Device specific image types
96  enum ImageType
97  {
101  };
102 
103  // Returns the Byte length compared to data type given as String
104  std::size_t getItemLength(const std::string& dataType) const;
105 
106  // Pre-calculate lookup table for lens distortion correction,
107  // which is needed for point cloud calculation.
108  void preCalcCamInfo(const ImageType& type);
109 
110  // Calculate and return the Point Cloud in the camera perspective. Units are in meters.
111  // IN map - Image to be transformed
112  // IN imgType - Type of the image (needed for correct transformation)
113  // OUT pointCloud - Reference to pass back the point cloud. Will be resized and only contain new point cloud.
114  void generatePointCloud(const std::vector<std::uint16_t>& map,
115  const ImageType& imgType,
116  std::vector<PointXYZ>& pointCloud);
117 
118  //-----------------------------------------------
119  // Camera parameters to be read from XML Metadata part
121 
123  float m_scaleZ;
124 
126  std::uint_fast32_t m_changeCounter;
127 
128  // Framenumber of the frame
131  std::uint_fast32_t m_frameNum;
132 
133  // Timestamp in blob format
134  // To get timestamp in milliseconds call getTimestampMS()
135  std::uint64_t m_blobTimestamp;
136 
137  // Camera undistort pre-calculations (look-up-tables) are generated to speed up computations. True if this has been
138  // done.
140  // The look-up-tables containing pre-calculations
141  std::vector<PointXYZ> m_preCalcCamInfo;
142 
143 private:
144  // Bitmasks to calculate the timestamp in milliseconds
145  // Bits of the devices timestamp: 5 unused - 12 Year - 4 Month - 5 Day - 11 Timezone - 5 Hour - 6 Minute - 6 Seconds -
146  // 10 Milliseconds
147  // .....YYYYYYYYYYYYMMMMDDDDDTTTTTTTTTTTHHHHHMMMMMMSSSSSSmmmmmmmmmm
148  static constexpr std::uint64_t BITMASK_YEAR =
149  0x7FF800000000000ull; // 0000011111111111100000000000000000000000000000000000000000000000
150  static constexpr std::uint64_t BITMASK_MONTH =
151  0x780000000000ull; // 0000000000000000011110000000000000000000000000000000000000000000
152  static constexpr std::uint64_t BITMASK_DAY =
153  0x7C000000000ull; // 0000000000000000000001111100000000000000000000000000000000000000
154  static constexpr std::uint64_t BITMASK_HOUR =
155  0x7C00000ull; // 0000000000000000000000000000000000000111110000000000000000000000
156  static constexpr std::uint64_t BITMASK_MINUTE =
157  0x3F0000ull; // 0000000000000000000000000000000000000000001111110000000000000000
158  static constexpr std::uint64_t BITMASK_SECOND =
159  0xFC00ull; // 0000000000000000000000000000000000000000000000001111110000000000
160  static constexpr std::uint64_t BITMASK_MILLISECOND =
161  0x3FFull; // 0000000000000000000000000000000000000000000000000000001111111111
162 };
163 
164 } // namespace visionary
visionary::CameraParameters::fy
double fy
Definition: VisionaryData.h:27
visionary::CameraParameters::p1
double p1
Definition: VisionaryData.h:29
visionary::VisionaryData::parseXML
virtual bool parseXML(const std::string &xmlString, std::uint32_t changeCounter)=0
visionary::VisionaryData::UNKNOWN
@ UNKNOWN
Definition: VisionaryData.h:98
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::VisionaryData::getTimestamp
std::uint64_t getTimestamp() const
Definition: VisionaryData.cpp:208
visionary::VisionaryData::BITMASK_MILLISECOND
static constexpr std::uint64_t BITMASK_MILLISECOND
Definition: VisionaryData.h:160
visionary::VisionaryData::getTimestampMS
std::uint64_t getTimestampMS() const
Definition: VisionaryData.cpp:213
visionary::DataSetsActive
Definition: VisionaryData.h:34
visionary::CameraParameters::fx
double fx
Camera Matrix.
Definition: VisionaryData.h:27
visionary::VisionaryData::getWidth
int getWidth() const
Definition: VisionaryData.cpp:198
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::DataSetsActive::hasDataSetPolar2D
bool hasDataSetPolar2D
Definition: VisionaryData.h:37
visionary::CameraParameters::k3
double k3
Definition: VisionaryData.h:29
visionary::VisionaryData::getFrameNum
std::uint32_t getFrameNum() const
Definition: VisionaryData.cpp:203
visionary::VisionaryData::preCalcCamInfo
void preCalcCamInfo(const ImageType &type)
Definition: VisionaryData.cpp:62
visionary::PointXYZC::y
float y
Definition: VisionaryData.h:44
visionary::PointXYZC::z
float z
Definition: VisionaryData.h:45
visionary::PointXYZC::c
float c
Definition: VisionaryData.h:46
visionary::VisionaryData::parseBinaryData
virtual bool parseBinaryData(std::vector< uint8_t >::iterator inputBuffer, std::size_t length)=0
visionary::VisionaryData::BITMASK_HOUR
static constexpr std::uint64_t BITMASK_HOUR
Definition: VisionaryData.h:154
visionary::VisionaryData::m_preCalcCamInfoType
ImageType m_preCalcCamInfoType
Definition: VisionaryData.h:139
visionary::VisionaryData::BITMASK_YEAR
static constexpr std::uint64_t BITMASK_YEAR
Definition: VisionaryData.h:148
visionary::VisionaryData::getCameraParameters
const CameraParameters & getCameraParameters() const
Definition: VisionaryData.cpp:235
visionary::VisionaryData::~VisionaryData
virtual ~VisionaryData()
visionary::PointXYZC
Definition: VisionaryData.h:41
visionary::VisionaryData::getItemLength
std::size_t getItemLength(const std::string &dataType) const
Definition: VisionaryData.cpp:36
PointXYZ.h
visionary::VisionaryData::PLANAR
@ PLANAR
Definition: VisionaryData.h:99
visionary::VisionaryData::VisionaryData
VisionaryData()
Definition: VisionaryData.cpp:23
visionary::CameraParameters::cx
double cx
Definition: VisionaryData.h:27
visionary::CameraParameters::height
int height
The height of the frame in pixels.
Definition: VisionaryData.h:21
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
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::VisionaryData::m_preCalcCamInfo
std::vector< PointXYZ > m_preCalcCamInfo
Definition: VisionaryData.h:141
visionary::VisionaryData::transformPointCloud
void transformPointCloud(std::vector< PointXYZ > &pointCloud) const
Definition: VisionaryData.cpp:171
visionary::VisionaryData::BITMASK_SECOND
static constexpr std::uint64_t BITMASK_SECOND
Definition: VisionaryData.h:158
length
TFSIMD_FORCE_INLINE tfScalar length(const Quaternion &q)
visionary::CameraParameters::f2rc
double f2rc
FocalToRayCross - Correction Offset for depth info.
Definition: VisionaryData.h:31
visionary::VisionaryData::getHeight
int getHeight() const
Definition: VisionaryData.cpp:193
visionary::PointXYZC::x
float x
Definition: VisionaryData.h:43
visionary::VisionaryData::m_cameraParams
CameraParameters m_cameraParams
Definition: VisionaryData.h:120
visionary::VisionaryData::BITMASK_MONTH
static constexpr std::uint64_t BITMASK_MONTH
Definition: VisionaryData.h:150
visionary::CameraParameters::p2
double p2
Definition: VisionaryData.h:29
visionary::CameraParameters
Definition: VisionaryData.h:18
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
visionary::VisionaryData::BITMASK_DAY
static constexpr std::uint64_t BITMASK_DAY
Definition: VisionaryData.h:152
visionary::VisionaryData::BITMASK_MINUTE
static constexpr std::uint64_t BITMASK_MINUTE
Definition: VisionaryData.h:156
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::VisionaryData::ImageType
ImageType
Definition: VisionaryData.h:96


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