point_cloud_utilities.cpp
Go to the documentation of this file.
1 
35 
36 namespace multisense_ros {
37 
38 template <>
40 {
41  return 0;
42 }
43 
44 template <>
46 {
47  return sensor_msgs::PointField::INT8;
48 }
49 
50 template <>
52 {
53  return sensor_msgs::PointField::UINT8;
54 }
55 
56 template <>
58 {
59  return sensor_msgs::PointField::INT16;
60 }
61 
62 template <>
64 {
65  return sensor_msgs::PointField::UINT16;
66 }
67 
68 template <>
70 {
71  return sensor_msgs::PointField::INT32;
72 }
73 
74 template <>
76 {
77  return sensor_msgs::PointField::UINT32;
78 }
79 
80 template <>
82 {
83  return sensor_msgs::PointField::FLOAT32;
84 }
85 
86 template <>
88 {
89  return sensor_msgs::PointField::FLOAT64;
90 }
91 
92 void writePoint(sensor_msgs::PointCloud2 &pointcloud, const size_t index, const Eigen::Vector3f &point)
93 {
94  assert(index * pointcloud.point_step < pointcloud.data.size());
95 
96  assert(pointcloud.fields.size() >= 3);
97  assert(pointcloud.fields[0].datatype == messageFormat<float>());
98  assert(pointcloud.fields[1].datatype == messageFormat<float>());
99  assert(pointcloud.fields[2].datatype == messageFormat<float>());
100 
101  float* cloudP = reinterpret_cast<float*>(&(pointcloud.data[index * pointcloud.point_step]));
102  cloudP[0] = point[0];
103  cloudP[1] = point[1];
104  cloudP[2] = point[2];
105 }
106 
107 void writePoint(sensor_msgs::PointCloud2 &pointcloud,
108  const size_t pointcloud_index,
109  const Eigen::Vector3f &point,
110  const size_t image_index,
111  const uint32_t bitsPerPixel,
112  const void* imageDataP)
113 {
114  switch (bitsPerPixel)
115  {
116  case 8:
117  {
118  const uint8_t luma = reinterpret_cast<const uint8_t*>(imageDataP)[image_index];
119  return writePoint(pointcloud, pointcloud_index, point, luma);
120  }
121  case 16:
122  {
123  const uint16_t luma = reinterpret_cast<const uint16_t*>(imageDataP)[image_index];
124  return writePoint(pointcloud, pointcloud_index, point, luma);
125  }
126  case 32:
127  {
128  const uint32_t luma = reinterpret_cast<const uint32_t*>(imageDataP)[image_index];
129  return writePoint(pointcloud, pointcloud_index, point, luma);
130  }
131  default:
132  {
133  throw std::runtime_error("Invalid bits per pixel value");
134  }
135  }
136 }
137 
138 }// namespace
multisense_ros::messageFormat< int32_t >
uint8_t messageFormat< int32_t >()
Definition: point_cloud_utilities.cpp:69
multisense_ros::messageFormat< double >
uint8_t messageFormat< double >()
Definition: point_cloud_utilities.cpp:87
multisense_ros::messageFormat< uint8_t >
uint8_t messageFormat< uint8_t >()
Definition: point_cloud_utilities.cpp:51
multisense_ros::messageFormat< int16_t >
uint8_t messageFormat< int16_t >()
Definition: point_cloud_utilities.cpp:57
multisense_ros::messageFormat< int8_t >
uint8_t messageFormat< int8_t >()
Definition: point_cloud_utilities.cpp:45
point_cloud_utilities.h
multisense_ros
Definition: camera.h:58
multisense_ros::messageFormat< float >
uint8_t messageFormat< float >()
Definition: point_cloud_utilities.cpp:81
multisense_ros::messageFormat< uint32_t >
uint8_t messageFormat< uint32_t >()
Definition: point_cloud_utilities.cpp:75
multisense_ros::writePoint
void writePoint(sensor_msgs::PointCloud2 &pointcloud, const size_t index, const Eigen::Vector3f &point)
Definition: point_cloud_utilities.cpp:92
multisense_ros::messageFormat< void >
uint8_t messageFormat< void >()
Definition: point_cloud_utilities.cpp:39
multisense_ros::messageFormat< uint16_t >
uint8_t messageFormat< uint16_t >()
Definition: point_cloud_utilities.cpp:63


multisense_ros
Author(s):
autogenerated on Thu Feb 20 2025 03:51:03