LIO-SAM传感器输入
mapOptmization.cpp
GPS数据输入
nav_msgs::Odometry 里程计消息类型
GPS信息可以通过ros开源的robot_localization节点对gps信号进行处理得到。
会用到其中的header.stamp、pose.pose、pose.covariance
。
imuPreintegration.cpp
IMU数据输入
sensor_msgs::Imu IMU消息类型
IMU消息可以通过直接读取串口数据,保存为对应的消息类型。
会用到其中除了协方差矩阵信息之外的其他信息。
imageProjection.cpp
IMU数据输入
sensor_msgs::Imu IMU消息类型
在该进程中也没有用到协方差矩阵信息。
雷达点云数据输入
sensor_msgs::PointCloud2 雷达点云消息类型
接收到的点云消息会被转换为pcl::PointCloud<T>类型,因此点云中的消息含义与pcl::PointCloud<T>相同或相似。
雷达消息列数是由角度求得得,且在程序中没有用到width、height
信息,因此认为所使用点云数据是无序点云。
点云有效消息包含在字节流格式的data
数据当中,每个点都是一个struct
,其格式由fields
给出。fields
中的每一个元素都对应点格式struct
当中的一个成员。在使用雷达点云数据时,需要对其进行反序列化,PointCloud(PCL)库定义了自动执行此操作的方法,可以根据fields
中的内容对data
数据进行反序列化,得到相应的点列表。参考文章
字节流表示的优点是它是一种传输数据的紧凑方式,非常灵活,允许将任意结构用于点。 缺点是没有反序列化的消息不可读。
基本消息格式
std_msgs::Header 消息头
uint32 seq # 序列号
time stamp # 时间戳
string frame_id # 信息所在的坐标系
geometry_msgs::Point 三维位置
float64 x
float64 y
float64 z
geometry_msgs::Quaternion 姿态信息(旋转四元数)
float64 x
float64 y
float64 z
float64 w
geometry_msgs::Pose 位姿信息
geometry_msgs/Point position # 三维位置
geometry_msgs/Quaternion orientation # 旋转四元数
geometry_msgs::Vector3 三维向量
float64 x
float64 y
float64 z
geometry_msgs::Twist 速度信息
geometry_msgs/Vector3 linear
geometry_msgs/Vector3 angular
geometry_msgs::PoseWithCovariance 带协方差的位姿类型
geometry_msgs/Pose pose # 6自由度位姿信息(xyzrpy)
float64[36] covariance # 6x6位姿的协方差矩阵
geometry_msgs/TwistWithCovariance 带协方差的速度类型
geometry_msgs/Twist twist # 线速度和角速度信息
float64[36] covariance # 6x6协方差矩阵
nav_msgs::Odometry 里程计消息类型
std_msgs/Header header # 消息头
string child_frame_id # 供速度参考的坐标系
geometry_msgs/PoseWithCovariance pose # 相对于header中frame_id的位姿信息
geometry_msgs/TwistWithCovariance twist # 相对于frame_id的速度信息
sensor_msgs::Imu IMU消息类型
std_msgs/Header header # 消息头
geometry_msgs/Quaternion orientation # 姿态信息
float64[9] orientation_covariance # 3x3姿态协方差矩阵
geometry_msgs/Vector3 angular_velocity # 角速度信息
float64[9] angular_velocity_covariance # 3x3角速度协方差矩阵
geometry_msgs/Vector3 linear_acceleration # 线加速度信息
float64[9] linear_acceleration_covariance # 3x3线加速度协方差矩阵
sensor_msgs::PointField 字段消息类型
uint8 INT8=1
uint8 UINT8=2
uint8 INT16=3
uint8 UINT16=4
uint8 INT32=5
uint8 UINT32=6
uint8 FLOAT32=7
uint8 FLOAT64=8
string name
uint32 offset
uint8 datatype
uint32 count
sensor_msgs::PointCloud2 雷达点云消息类型
std_msgs/Header header # 消息头
uint32 height # 对于有序点云,为点云2D图像(将3D点云展开为2D平面形式)的高度(行数);对于无序点云,该值为1
uint32 width # 对于有序点云,为点云2D图像(将3D点云展开为2D平面形式)的宽度(列数);对于无序点云,为点云总数
sensor_msgs/PointField[] fields # 用于反序列化data字节流的数据格式说明
bool is_bigendian # 数据是否为大端格式
uint32 point_step # 一个点占的比特数
uint32 row_step # 一行的长度占用的比特数
uint8[] data # 编码为字节流的点列表
bool is_dense # 如果包含Inf/NaN值,则为false,否则为true