57 #if __ROS_VERSION == 1
75 int num_fields =
msg.fields.size;
77 pointcloud.
fields.resize(num_fields);
78 for(
int n = 0; n < num_fields; n++)
80 pointcloud.
fields[n].name = msg_fields_buffer[n].
name;
81 pointcloud.
fields[n].offset = msg_fields_buffer[n].
offset;
82 pointcloud.
fields[n].count = msg_fields_buffer[n].
count;
86 pointcloud.
data.resize(
msg.row_step *
msg.height, 0);
87 memcpy(&pointcloud.
data[0],
msg.data.buffer,
msg.row_step *
msg.height);
106 int num_fields =
msg.fields.size;
108 int field_offset_range = -1, field_offset_azimuth = -1, field_offset_elevation = -1, field_offset_intensity = -1;
109 for(
int n = 0; n < num_fields; n++)
112 field_offset_range = msg_fields_buffer[n].offset;
114 field_offset_azimuth = msg_fields_buffer[n].offset;
116 field_offset_elevation = msg_fields_buffer[n].offset;
118 field_offset_intensity = msg_fields_buffer[n].offset;
120 pointcloud.
fields.resize(4);
121 for (
int i = 0; i < pointcloud.
fields.size(); i++)
123 std::string channelId[] = {
"x",
"y",
"z",
"intensity"};
124 pointcloud.
fields[i].name = channelId[i];
125 pointcloud.
fields[i].offset = i *
sizeof(float);
126 pointcloud.
fields[i].count = 1;
133 int cartesian_point_cloud_offset = 0;
134 float* cartesian_point_cloud_buffer = (
float*)pointcloud.
data.data();
135 for (
int row_idx = 0; row_idx <
msg.height; row_idx++)
137 for (
int col_idx = 0; col_idx <
msg.width; col_idx++, cartesian_point_cloud_offset+=4)
140 int polar_point_offset = row_idx *
msg.row_step + col_idx *
msg.point_step;
141 float point_range = ((
float*)(
msg.data.buffer + polar_point_offset + field_offset_range))[0];
142 float point_azimuth = ((
float*)(
msg.data.buffer + polar_point_offset + field_offset_azimuth))[0];
143 float point_elevation = ((
float*)(
msg.data.buffer + polar_point_offset + field_offset_elevation))[0];
144 float point_intensity = 0;
145 if (field_offset_intensity >= 0)
146 point_intensity = ((
float*)(
msg.data.buffer + polar_point_offset + field_offset_intensity))[0];
148 float point_x = point_range * cosf(point_elevation) * cosf(point_azimuth);
149 float point_y = point_range * cosf(point_elevation) * sinf(point_azimuth);
150 float point_z = point_range * sinf(point_elevation);
153 cartesian_point_cloud_buffer[cartesian_point_cloud_offset + 0] = point_x;
154 cartesian_point_cloud_buffer[cartesian_point_cloud_offset + 1] = point_y;
155 cartesian_point_cloud_buffer[cartesian_point_cloud_offset + 2] = point_z;
156 cartesian_point_cloud_buffer[cartesian_point_cloud_offset + 3] = point_intensity;
176 for(
int n = 0; n < 9; n++)
181 for(
int n = 0; n < 9; n++)
186 for(
int n = 0; n < 9; n++)
241 for(
int n = 0; n < max_states; n++)
243 for(
int n = 0; n < max_counts; n++)
248 dst_msg.
day = src_msg.
day;
304 for(
int m = 0; m < 36; m++)
323 for(
int m = 0; m < 36; m++)
348 ros_pointcloud.
width = num_objects;
349 ros_pointcloud.
height = 1;
353 std::vector<std::string> field_names = {
"x",
"y",
"z",
"vx",
"vy",
"vz"};
354 ros_pointcloud.
fields.resize(field_names.size());
355 for(
int n = 0; n < ros_pointcloud.
fields.size(); n++)
357 ros_pointcloud.
fields[n].name = field_names[n];
358 ros_pointcloud.
fields[n].offset = n *
sizeof(float);
360 ros_pointcloud.
fields[n].count = 1;
366 float* dst_data_p = (
float*)ros_pointcloud.
data.data();
367 for(
int n = 0; n < num_objects; n++, dst_data_p+=6)
376 return ros_pointcloud;
404 for(
int m = 0; m < 36; m++)
423 for(
int m = 0; m < 36; m++)
457 dst_marker.
ns = src_marker.
ns;
458 dst_marker.
id = src_marker.
id;
482 for(
int m = 0; m < src_marker.
points.
size; m++)
489 for(
int m = 0; m < src_marker.
colors.
size; m++)
501 #endif // __ROS_VERSION == 1