47 return sensor_msgs::PointField::INT8;
53 return sensor_msgs::PointField::UINT8;
59 return sensor_msgs::PointField::INT16;
65 return sensor_msgs::PointField::UINT16;
71 return sensor_msgs::PointField::INT32;
77 return sensor_msgs::PointField::UINT32;
83 return sensor_msgs::PointField::FLOAT32;
89 return sensor_msgs::PointField::FLOAT64;
92 void writePoint(sensor_msgs::PointCloud2 &pointcloud,
const size_t index,
const Eigen::Vector3f &point)
94 assert(index * pointcloud.point_step < pointcloud.data.size());
96 assert(pointcloud.fields.size() >= 3);
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];
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)
114 switch (bitsPerPixel)
118 const uint8_t luma =
reinterpret_cast<const uint8_t*
>(imageDataP)[image_index];
119 return writePoint(pointcloud, pointcloud_index, point, luma);
123 const uint16_t luma =
reinterpret_cast<const uint16_t*
>(imageDataP)[image_index];
124 return writePoint(pointcloud, pointcloud_index, point, luma);
128 const uint32_t luma =
reinterpret_cast<const uint32_t*
>(imageDataP)[image_index];
129 return writePoint(pointcloud, pointcloud_index, point, luma);
133 throw std::runtime_error(
"Invalid bits per pixel value");