LOAM在UGV上的问题
(1)UGV 没有足够的算力来计算每个点的 smoothness
(2)安装在 UGV 上的传感器靠近地面,容易得到不稳定的特征。例如 grass,tree leaf 等
核心思想
(1)在特征提取步骤,对地面进行分割(适用于 UGV,减小特征搜索范围)以及对点云聚类(去除散乱的点)来保证特征的质量,并且采用两步L-M算法来进行里程计位姿求解。相比于LOAM,可以实现在嵌入式平台上实时运行。
(2)以帧为单位构建 pose-graph 进行回环优化,使得全局地图可以调整
系统框图
里程计
(1)将当前帧点云投影到 range image,利用“a column-wise evaluation”提取地面
(2)对非地面点云进行聚类(BFS,广度优先搜索),丢掉点云数量少于30的类
(3)按照 LOAM 中的公式计算每个点的 Smoothness,并将每条线划分为6个区域,在每个区域中提取线面特征(线特征只在非地面点云中提取,面特征只在地面点云中提取)
(4)同类特征匹配并结合两步 L-M 算法计算位姿(误差函数还是点到线,点到面的距离)
注:只在 scan to scan 环节使用两步 L-M 算法
两步 L-M 算法:
1.使用地面面特征优化高度和水平角,2.使用线特征优化水平位移和航向角
与 LOAM 相比,两步 L-M 算法精度可以达到一样,但运算时间会减少很多,这里我觉得时间减少很大程度是因为构建的约束少了,因为从实验来看迭代次数并没有减少
建图
利用局部特征组成局部地图。有两种方式获得局部特征:(1)距离当前帧 100 m 内的帧,(2)相邻的 k 帧
其中,利用第二种方式可以构建 pose graph,同时可以进行闭环优化(利用 ICP 获得闭环约束,优化库采用gtsam)
总结
Lego-LOAM 的大部分改进算法主要针对于 UGV,所以局限性比较大。但是对点云进行聚类后再提取特征的思想值得借鉴