使用livox雷达常涉及至少3种点云格式,一个是livox官方定义的custom格式,另外两个就是激光、视觉常用的pcl类型和ros类型。之前总结过Livox雷达驱动程序发布点云格式CustomMsg和pcl::PointXYZI、pcl::PointXYZINormal之间的关系,现在再来复盘一下、
1.livox驱动 CustomMsg类型
Header header # ROS standard message header
uint64 timebase # The time of first point
uint32 point_num # Total number of pointclouds
uint8 lidar_id # Lidar device id number
uint8[3] rsvd # Reserved use
CustomPoint[] points # Pointcloud data
第一个是ros消息标准的头,第二个为该帧第一个点的时间戳,然后是该帧总共的点数量,然后是id,rsvd是保留部分,还没有意义,最后一个就是每个激光点数据了,它的格式是这样的:
uint32 offset_time # offset time relative to the base time
float32 x # X axis, unit:m
float32 y # Y axis, unit:m
float32 z # Z axis, unit:m
uint8 reflectivity # reflectivity, 0~255
uint8 tag # livox tag
uint8 line # laser number in lidar
offset_time应该是基于base的时间补偿;
然后是点的xyz坐标,单位是米;
reflectivity对应点的反射率,转化为激光点的强度,8位对应值为0-255;
tag是激光点的一些属性,主要涉及多回波信息及噪点信息。是一个二进制表达,通过与二进制tag做解算得回波、噪点信息(注:);
line是激光雷达扫描的线数(livox avia为6线,从原始扫描点云可以看出,从原始扫描点云可以看出,后期可以按线来对原始点处理、筛选;
2.ros类型 sensor_msgs/PointCloud2
ros官方数据:http://docs.ros.org/en/jade/api/sensor_msgs/html/msg/PointCloud2.html
此消息包含 N 维点的集合,这些点包含附加信息,例如法线、强度等。 点数据存储为二进制 blob,由 “fields”数组的内容。
header是message的头;
height、width对应点云的高和宽;
fields是点云的具体信息,下面详述;
is_bigendian 不懂
point_step 一个点的长度(以字节为单位)
row_step 一行的长度(以字节为单位)
data 实际点数据,大小为(row_step*height)
is_dense 如果没有无效点则为真