SLAM系列之FAST-LIVO2代码分析-基于点云的体素地图构建和更新方法介绍

在参考文献[2]中,已经向大家介绍了点云相关的数据结构, 比如基于激光点集合的点云帧数据,体素地图的构建以及自适应体素分割方法。这篇短文将继续以问答的形式介绍FAST-LIVO2中的体素地图构建的更多内容。

问题1:该系统中有没有维护全局地图,还是只维护车机当前局部地图,以及如何实现的?

回答:该系统中只维护了局部地图,通过mapSliding()函数处理激光传感器所处位置的变化所带来的体素地图中点云数据的“可见性”,将当前“不可见”的点云数据从地图中进行清理删除,从而维护了当前系统运行所需的局部地图。当每次调用LIO处理激光点云和IMU进行ESKF算法联合优化位姿后,会判断地图当前的激光传感器所处的世界坐标位置和上一次进行滑动操作时激光传感器所处位置的距离,如果大于设定的阈值,则会将超过当前位置为中心点的地图大小范围外(定义了half_map_size变量可以作为参数在系统初始化时进行设定,体素坐标在x,y,z三个轴方向上在[-half_map_size:half_map_size]范围内的点云数据从地图内存中进行删除,从而维护了精简的局部地图。

问题2:地图创建及更新,自适应体素分割,体素平面的拟合等操作实现的关键的思想和作用分别是什么?

回答:1、地图的创建在系统初始化的时候进行,实现的函数为BuildVoxelMap,其主要思想是根据点云数据构建点云索引到八叉树地图节点的字典(unordered_map),并对每一个节点进行自适应体素划分;2、地图的更新函数为UpdateVoxelMap,当新的lidar帧到达的时候,会基于lidar帧的每一个点云点来更新体素地图,相邻lidar帧的点云可能会更新到同一个体素八叉树的节点上,需要根据具体的体素节点的状态,是否更新平面拟合,或进一步进行体素分割等;3、自适应体素分割主要针对的是体素内的点云的几何特征属性,如果能成功拟合一个平面,则保存拟合平面信息,否则如果体素内点云可能构成丰富的曲面,需要进一步去细分体素用更小的平面去拟合曲面信息;4、体素平面拟合的思路为:计算体素内三维点云的协方差矩阵的特征向量和对应的特征值,如果最小的特征值小于一定的阈值,说明只有两个主要向量,这两个主要的向量近似构成一个平面。

References


by

Tags:

Comments

Leave a Reply

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