34 #ifndef MULTISENSE_ROS_POINT_CLOUD_UTILITY_H 35 #define MULTISENSE_ROS_POINT_CLOUD_UTILITY_H 37 #include <arpa/inet.h> 39 #include <sensor_msgs/PointCloud2.h> 48 const std::string& frame_id,
49 const std::string &color_channel)
51 const auto datatype = message_format<T>();
53 sensor_msgs::PointCloud2 point_cloud;
54 point_cloud.is_bigendian = (htonl(1) == 1);
55 point_cloud.is_dense = dense;
56 point_cloud.point_step = 4 *
sizeof(T);
57 point_cloud.header.frame_id = frame_id;
58 point_cloud.fields.resize(4);
59 point_cloud.fields[0].name =
"x";
60 point_cloud.fields[0].offset = 0;
61 point_cloud.fields[0].count = 1;
62 point_cloud.fields[0].datatype = datatype;
63 point_cloud.fields[1].name =
"y";
64 point_cloud.fields[1].offset =
sizeof(T);
65 point_cloud.fields[1].count = 1;
66 point_cloud.fields[1].datatype = datatype;
67 point_cloud.fields[2].name =
"z";
68 point_cloud.fields[2].offset = 2 *
sizeof(T);
69 point_cloud.fields[2].count = 1;
70 point_cloud.fields[2].datatype = datatype;
71 point_cloud.fields[3].name = color_channel;
72 point_cloud.fields[3].offset = 3 *
sizeof(T);
73 point_cloud.fields[3].count = 1;
74 point_cloud.fields[3].datatype = datatype;
sensor_msgs::PointCloud2 initialize_pointcloud(bool dense, const std::string &frame_id, const std::string &color_channel)