SLAM系列之FAST-LIVO2代码分析-LIV(LiDAR-Inertial-Visual)多传感器数据预处理过程介绍

这篇文章将向大家介绍FAST-LIVO2开源系统中的数据预处理部分。包括多传感器数据同步、IMU预积分与激光点云去畸变(运动补偿)等。关于激光点云和IMU传感器的数据特性的详细说明请参考附录(基于像素表示的摄像头RGB图像数据比较普及不做介绍)。

其中多传感器数据同步的实现在sync_packages函数里,这里主要分析slam模式在LIVO下的数据同步方法。其主要的思想是以图片帧作为处理的时间基准(从lidar_header_time_buffer找出小于当前图片基准时间戳的所有点云原始帧数据),将原始的pcl数据帧按照时间关系重新组织到两个逻辑点云帧结构体(pcl_proc_cur和pcl_proc_next)中。

激光点云数据的时间戳是以point为粒度,扫描时间不同,激光雷达传感器的帧率相比图像和IMU是最低的(大概10-20Hz),在一帧图像数据中,点云之间被扫描到的时间点各异(因为扫描有先后,位置在时间上没有对齐),可以根据IMU的预积分的结果进行运动补偿。一般将这个过程分为两步:1、IMU预积分,也称前向传播(propogation of IMU); 2、基于IMU的预积分的结果对PointCloudXYZI类型的待处理的点云数据用反向传播的方式进行运动补偿。

图1:多传感器数据同步示意图

附录:

附录A:关于激光点云的基本数据结构的介绍

1、激光点云原始数据帧PointCloudXYZI类,包含XYZ坐标和强度值(Intensity),为激光点的容器集合。在本开源系统中,点云数据等传感器数据通过ROS的message发出来,并进行预处理,激光点云信息中,将curvature属性作为当前点云点扫描时的时间信息加以存储(相对于原始点云帧的起始点时间差)。激光点云数据的一帧数据一般定义为一个完整的扫描周期内所获取的所有点云的集合,而且以最先扫描到的点的时间戳作为帧起始时间。激光雷达传感器也分为传统的激光的旋转式机械激光扫描和livox非重复式较高密度点云点采样扫描。有时如果点云分辨率过高,会需要更多的计算资源,点云处理库pcl中也有针对点云进行降采样的相关类pcl::VoxelGrid,直接调用相关函数即可实现点云降采样。

2、Voxel,体素,相对于二维平面的像素而言,为三维空间的细分表示单元,通常表示为一个小的立方体,存储的信息可能包括:1、该空间是否被占据;2、颜色或强度值;3、法向量;4、置信度。在体素地图(Voxel map)中,三维空间被划分成类似于魔方结构的多个体素单元,体素地图用于点云建图,三维重建等任务;

3、Octree(八叉树),满足一般的树结构的递归定义,为一种八叉空间划分树,如一开始的L*L*L尺寸的空间,第一级划分将空间的“长宽高”各对半切分,上下各四个子体素(八个子节点),以此类推进行递归再划分。八叉树的表示空间的好处在于对于稀疏的区域表示,可以用大体素(对应的叶子节点的层次比较低,可以提高存储效率),对于密集表面比较丰富的区域,可以用小体素(可以有更高的精细度),这种表示方法又称为自适应体素分割。

4、Octree Voxel Map(八叉树体素地图),体素的位置按照整数坐标存储,在空间上对应三个坐标轴上的整数索引x,y,z。某个点云的索引为点云的三个维度世界坐标除以根体素的大小(max_voxel_size)。八叉树体素地图可以基于字典结构(unordered_map,哈希表)实现体素的快速索引(map的key为三维整数坐标缩影,value为八叉树的根节点,可以存储多个点云数据)。一般如果max_voxel_size=0.5,则表示根体素的分辨率为0.5m*0.5m*0.5m。在该体素内部一般也会有几个到几十上百个点云点,具体要看采样的设备和是否进行了降采样处理。体素地图基于世界坐标构建,在系统运行过程中其体量可能较大。通过八叉树体素地图可以动态构建和更新全局地图。同时该体素地图支持点云的自适应体素分割,在代码实现中max_layer和voxel_size密切相关,如max_layer>1,则当原始体素内的点云点如果不满足拟合出平面的条件(说明表面为较为丰富的曲面),则会递归的进行八叉树子节点创建以支持构建更加丰富的表面信息。

5、Voxel Plane,代表了体素对应的局部平面信息,常用于基于八叉树的三维环境建模,对于体素内的多个点云,通过拟合平面模型,提取点云在该体素单元内的主要几何结构信息(如物体所表现的在该位置处的主体表面信息)。如果拟合平面成功,说明该体素对应的区域为平面如地面,否则可能对应着丰富的曲面表面,需要再进行细粒度的分割,用更小的平面去拟合曲面。

附录B:IMU数据基本结构介绍

IMU(Inertial Measurement Unit),即惯性测量单元,一般提供智能体运动的线性加速度(linear_acceleration,通过加速度计获取),角速度(angular_velocity,通过陀螺仪获取)等信息,通过线速度和角速度以及时间戳信息就可以通过预积分获取智能体的在时间戳上累积运动的位姿。

References

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *