论文名称:Loam livox: A fast, robust, high-precision LiDAR odometry and mapping package for LiDARs of small FoV

开源代码:github.com/hku-mars/loa

一、整体概述

做激光slam的应该都知道loam,原版loam是基于机械雷达的,当我们使用固态雷达的时候,loam则不兼容了。这篇论文就是为了解决这个问题,固态雷达的主要问题是视角比较小,原版loam提取特征则不容易得到高精度里程计,需要提高鲁棒性,为了解决这些问题,作者从以下几个大的方面入手:

1. 首先设计了基于固态雷达的特征提取和里程解算流程

2. 为了增加鲁棒性,设计了一些策略,移除了不好的特征点,并且增加反射强度作为判断条件

3. 补畸变

4. 对于一些outliers的特征做了剔除

二、算法介绍

1. 算法流程

像loam一样,本论文方法也是提取线特征和面特征,然后根据前后两帧特征对应做优化,以解算得到位姿,仍然分为高频率的里程计和低频率的建图。

也就是说整体的算法流程和原版loam是一致的,而且整个特征提取方法和残差优化公式和原版loam也是一样的,就不在这里一一列出了。

既然都和原版loam一样,那这个算法做了哪些自己的工作呢,这就是下面我们要说的问题了

2. 提取"good points"

所谓提取good points,其实就是滤除bad points,那什么样的是bad points呢?主要包括以下几种

1)接近视角边缘的点

接近视角边缘的点会有一部分变形,会影响特征提取精度

2)反射强度过大或过小的点

作者给出的解释是反射强度过大,会对雷达硬件的信号接收电路产生冲击,从而影响这个点的精度,而反射强度过小的点,信噪比会低

3)和平面夹角过小的点

雷达光束和面特征会有一个夹角,而当夹角过小,即光束和平面接近平行时,这样的特征就不利于匹配,如下图所示,点f就属于这种情况。(这个技巧在原版loam里其实就有)

4)部分被遮挡的点

在上图中,相邻的两个光束d和e确在不同的面上,这说明e所在的面是被遮挡的,这样的不能要,因为当雷达移动的时候,被遮挡的这个面可能在下一帧中就消失了。(这个技巧原版loam里也有)

3. 补畸变

补畸变是一个在使用雷达时必须做的事情,但是它又是一个很简单的活,不要被哪些公式吓到,补了运动带来的平移和旋转就完事了。资料在网上有很多,代码在loam里也写得很详细,不在这里多说了。

4. 剔除异常特征

所谓异常特征就是在这一帧里和在下一帧里,按照解算的位姿投影以后,仍然对应的不是很好的特征。最常见的原因就是特征在一个移动的物体上,之前测试的时候就发现会把人当成线特征。

这里的做法就是先用一部分特征计算出一个位姿,然后按照位姿投影到上一帧,把投影之后残差比较大的特征就去掉,作者是按照残差排序,去掉了其中20%的特征。然后用剩下的特征再做一次优化,这样就可以防止没对应好的特征对优化结果造成的影响。

这是一个好主意

三、实验结果

作者从位移和姿态两个方面分别对精度进行了评价。

位移评价的方法是以gps为基准,分别使用激光里程计和gps测量起点和终点的距离(如下图所示),使用两组数据测量的结果分别是0.41% 和 0.65%,在激光里程计里算是很高的精度了,大家看kitti里面odometry榜单上的那些里程计指标就明白了。当然kitti那个是机械雷达,这个是固态雷达,可能会造成一些区别。

角度评价是以一个运动测量系统做基准,对欧拉角进行比较,曲线如下图。欧拉角平均误差是1.1°

最后给个效果图吧,看效果还不错