loam论文与Aloam代码学习归纳(一)--论文

一.前言

**
本人渣硕研一一枚,由于疫情在家闲置半年,本来就很薄弱的基础更加雪上加霜!还好有博客,知乎各位大佬的解答与文章,让我有所学习进步,现在对loam论文和Aloam代码进行一些归纳,为什么不谈解析,因为本人的能力谈不上“解析”二字,就想进行一下阶段总结,方便日后回顾,也更希望大佬们多多帮助,看见有什么不对的地方,及时给小弟指出来,也更愿意相互探讨,向各位大佬前辈请教!
在整个阶段参考了很多前辈的文章解析,已经数不过来了,每一部分主要参考的我会列出引用,可能还会有所遗漏,如果涉嫌引用没有列出还请见谅,您的知识很有用,后辈感谢您的分享!
**

二.相关论文:

**

    《LOAM_Lidar Odometry and Mapping in Real-time》
    《Low-drift and real-time lidar odometry and mapping》

**

三.正文

**
本文作为三维激光SLAM的经典之作,是众多入行激光SLAM的必修课,为激光雷达和IMU融合的算法。Ji Zhang 曾经在网上公开过有关LOAM的算法,但在很快的时间里,代码就下线了。但借助github平台强大的力量和开发者的激情,众多激光SLAM的研究者纷纷在github上放出自己开发的的LOAM算法版本,不同于Zhangji使用的Hokuyo UTM-30LX激光雷达传感器,研究者更多依赖的是Velodyne公司开发的相关激光雷达,所以目前网上最为出名的LOAM算法版本大多称为LOAM_Velodyne。其中最出名的是github用户Leonid Laboshin用户和Daobilige Su分别开发的版本。后续的众多研究者在上面继续开发,出现了一系列优秀的有关LOAM的进一步开发。在2018年4月,港科大秦通等人,对LOAM-Velodyne进行再次开发,发布了A-LOAM算法版本。

**

1.摘要

**
本文提出了一种利用两轴激光雷达在六个自由度中运动的距离测量来实时测量里程数和测绘地图的方法。这个问题之所以困难是因为距离测量是在不同的时间接收的,并且运动估计中的错误可能会导致结果点云的错误配准。到目前为止,连贯的3D地图可以通过离线批处理方法构建,通常使用循环闭合来校正随时间的漂移。该方法实现了低漂移和低计算复杂度,而不需要高精度的测距或惯性测量。获得这一性能水平的关键思想是通过两种算法对同时定位和建图这一复杂问题进行划分,该问题寻求同时优化大量变量。一种算法是在高频但低保真的情况下执行里程计来估计激光雷达的速度。另一种算法以较低数量级的频率运行,用于点云的精细匹配和配准。这两种算法的结合允许该方法实时建图。该方法已经通过大量实验和Kitti里程计基准进行了评估。结果表明,该方法可以达到目前离线批处理方法的准确度。
loam论文与Aloam代码学习归纳(一)--论文_第1张图片
该图左侧为运用点云运动畸变去除的激光雷达里程计,右图为激光雷达建图
该方法的目标是使用移动的2轴激光雷达进行运动估计和建图。由于激光点是在不同的时间接收的,因此由于激光雷达的运动(如左边的激光雷达云所示),点云中会出现变形。该方法将问题分解为两个并行运行的算法。里程计算法估计激光雷达的速度并校正点云中的变形,然后,建图算法匹配并配准点云以创建地图,两种算法的结合保证了问题实时求解的可行性。

**

2.主要贡献

**
(1)在前端里程计特征提取和点云配准方面,提出了新颖的ICP算法,提取边缘点与平面点作为关键特征点,用点对线,点对面进行点云帧间配准,提高了配准精度;
(2)将同时定位与建图分为两部分进行,第一部分为高频率(10HZ)低精度的里程计odometry过程,另一个是低频率(1HZ)高精度的建图mapping过程,二者结合可实现低漂移、低计算量、高精度的SLAM。
loam论文与Aloam代码学习归纳(一)--论文_第2张图片
由图可知,整个过程主要分四部分完成,首先是获得激光雷达坐标系下的点云数据P^,然后把第k次扫描获得的点云组成一帧数据Pk。然后将Pk在两个算法中进行处理,也就是上面Liar Odometry节点和Lidar Mapping节点。Liar Odometry节点的作用是获取两帧连续点云数据间的运动,估计出来的运动用于去除Pk中的运动畸变。这个节点执行的频率为10Hz,作用相当于scan-to-scan匹配获得粗糙的运动估计用于去除匀速运动造成的运动畸变,并将处理后的结果给了Lidar Mapping节点做进一步处理。Lidar Mapping节点使用地图去匹配和注册没有畸变的点云数据以1Hz的频率,作用相当于scan to map。最后由Transform integration节点接收前面两个节点输出的Transform信息并将其进行融合处理以活动频率为10Hz的Transform信息即里程计。
接下来按照这四部分进行讲解:

**

3. 前端–激光里程计

**
**

3.1 特征点提取

**
选择位于边缘和平面上的特征点。设I是PK中的一个点,I∈PK,S是激光扫描仪在同一扫描中返回的I的连续点的集合。由于激光扫描仪以顺时针或逆时针的顺序生成点云,因此S在I的两边各包含一半的点,两点之间的间隔为0.25◦。如何选取边缘点和平面点呢?利用点i周围连续几个点集合S用于求曲率c。
在这里插入图片描述
基于曲率c值对扫描中的点进行排序,然后选择c最大的(即边缘点)和最小的c(即平面点)的特征点。为了在环境中均匀分布特征点,将扫描分为四个相同的子区域。每个子区域最多可以提供2个边缘点和4个平面点。只有当点i的c值大于或小于阈值,并且选定的点数不超过最大值时,才能将点i选作边缘点或平面点。
在选择特征点时,我们希望避免选择已经选择的点的临近点,或局部平面上大致平行于激光束的点(下图(a)中的点B),因为这些点太近了,很不可靠。此外,我们还希望避免位于遮挡区域边界上的点(下图(b)中的点A)。
loam论文与Aloam代码学习归纳(一)--论文_第3张图片
(a)实线段表示局部平面。点A位于与激光束成一定角度的平面上(橙色虚线段),点B位于大致平行于激光束的平面上。我们将B视为不可靠的激光点,则不选择它作为特征点。
(b)实线段是激光雷达的可观察对象。点A位于遮挡区域(橙色虚线段)的边界上,那么可以视为边缘点。但是,如果从不同的角度观察,被遮挡的区域可能会改变并变得可见,则不会将A视为明显的边缘点,也不会选择它作为特征点。、
那么特征点的选取规则如下:
(1)从最大曲率c值开始选取边缘点,从最小c值开始选取平面点;
(2)所选边缘点或平面点的数量不能超过子区域的最大值;
(3)所选点的临近点不剋被选择
(4)不能位于与激光束大致平行的平面上,也不能位于被遮挡区域的边界上。
选取特征点的实例如下图所示:在长走廊场景中提取特征点
loam论文与Aloam代码学习归纳(一)--论文_第4张图片
黄色:边缘点edge points 红色:平面点planar points
**

3.2 点云配准

**
里程计算法估计激光雷达在1帧sweep范围内的运动。1帧扫描开始的时间为 t k t_k tk。在每次扫描结束时,得到扫描期间感知的点云 P k P_k Pk,将其重新投影到下一帧扫描时间戳 t k + 1 t_{k+1} tk+1,得到 P ˉ k \bar{P}_k Pˉk在下一次扫描k+1期间, P ˉ k \bar{P}_k Pˉk与新接收的点云 P k + 1 P_{k+1} Pk+1一起使用来估计雷达的位姿。
loam论文与Aloam代码学习归纳(一)--论文_第5张图片

       点云配准的过程用到了K-D tree 最近邻快速搜索和ICP点云配准算法。

让我们假设 P ˉ k \bar{P}_k Pˉk P k + 1 P_{k+1} Pk+1现在都可用,并从寻找两组激光点云云之间的对应开始。对于 P k + 1 P_{k+1} Pk+1,我们使用上一节讨论的方法从激光雷达点云中找到边缘点和平面点。设 E k + 1 E_{k+1} Ek+1 H k + 1 H_{k+1} Hk+1分别是边缘点和平面点的集合。我们将找到 P ˉ k \bar{P}_k Pˉk中的边缘线作为 E k + 1 E_{k+1} Ek+1中的点的对应,平面作为 H k + 1 H_{k+1} Hk+1中的点的对应。
注意:(1)是从下一帧k+1向上一帧k寻找对应;
(2)在扫描k+1开始时, P k + 1 P_{k+1} Pk+1是一个空集,但随着扫描的稳步推进,随着接收的点越多, P k + 1 P_{k+1} Pk+1的集合将会变大。
(3)激光雷达里程计在扫描过程中递归估计6自由度的运动,并随着 P k + 1 P_{k+1} Pk+1的增加逐渐包含更多的点。在每次迭代中,使用当前估计的变换将 E k + 1 E_{k+1} Ek+1 H k + 1 H_{k+1} Hk+1重新投影到扫描的开始。那么设 E ~ k + 1 \widetilde{E}_{k+1} E k+1 H ~ k + 1 \widetilde{H}_{k+1} H k+1重新投影的点集。对于他们中的每个点,我们将在 P ˉ k \bar{P}_k Pˉk中查找最近邻近点。而 P ˉ k \bar{P}_k Pˉk被存储在3D KD树中以用于快速索引。

              接下来就进入点云配准的正式工作:
              边缘点配准:通过在上一时刻寻找两点确定一条与当前时刻的角点距离最近的直线作为该角点的配准对应;
              平面点配准:在上一时刻寻找三点确定一个与当前时刻的平面点距离最近的平面作为该平面点的配准对应。

1>边缘点配准
下图中(a)表示寻找作为边缘点对应的边缘线的过程。
设i是 E ~ k + 1 \widetilde{E}_{k+1} E k+1中的一个点,边线由两个点表示。接下来要寻找离i点最近的两个点,组成边缘线。设j是i在 P ˉ k \bar{P}_k Pˉk中的最近邻域点,l是j的扫描的连续两次扫描中i的最近邻域点,则(J,l)形成i的对应线。然后,检查局部曲面的光滑性来验证j和l都是边缘点。
注意:这里,考虑到单个扫描不能包含来自同一边缘线的多于一个点,我们特别要求j和l来自不同的扫描。只有一个例外,即边缘线位于扫描平面。然而,如果是这样,则边缘线退化,并且在扫描平面上显示为直线,则不应首先提取边缘线上的特征点。
过程概括为:1.在当前帧点云 E ~ k + 1 \widetilde{E}_{k+1} E k+1中选取一点i;
2.在 P ˉ k \bar{P}_k Pˉk找到与i最近的点j;
3.在 P ˉ k \bar{P}_k Pˉk找到与j相邻扫描线中最近的点l;
4.确保i,j,l不共线,则构成一个三角形,组成平面;
5.求点i到(j,l)直线的距离小于阈值,即为配准成功;
在这里插入图片描述
2>平面点配准
下图(a)显示了作为平面点的对应关系来寻找平面的过程。
设I是 H ~ k + 1 \widetilde{H}_{k+1} H k+1中的一个点,平面由三个点表示,接下来要寻找离i点最近的三个点,组成平面。与上一段寻找边缘线相似,在 P ˉ k \bar{P}_k Pˉk中找到i的最近邻点,表示为j。然后,我们找到另外两个点l和m,作为i的最近邻点,一个在j的同一扫描中,另一个在j的扫描的两个连续扫描中。这保证了这三个点不共线。再次检查局部曲面的光滑度来验证j、l和m都是平面点。
过程概括为:1.在当前帧点云 E ~ k + 1 \widetilde{E}_{k+1} E k+1中选取一点i;
2.在 P ˉ k \bar{P}_k Pˉk找到与i最近的点j;
3.在 P ˉ k \bar{P}_k Pˉk找到与点j在相同激光扫描束的最近点l;
4.在 P ˉ k \bar{P}_k Pˉk找到相邻扫描束中与点j最相近的点m;
5.确保j,l,m不共线,则构成一个三角形,组成平面,i不在平面内,形成空间上的对应;
5.求点i到(j,l,m)平面的距离小于阈值,即为配准成功;
loam论文与Aloam代码学习归纳(一)--论文_第6张图片
loam论文与Aloam代码学习归纳(一)--论文_第7张图片
**

4.里程计位姿估计

**
(此部分还需在代码中详细解读)
loam论文与Aloam代码学习归纳(一)--论文_第8张图片
loam论文与Aloam代码学习归纳(一)--论文_第9张图片
注意:我们的假设是车辆匀速运动;
loam论文与Aloam代码学习归纳(一)--论文_第10张图片
loam论文与Aloam代码学习归纳(一)--论文_第11张图片
**

5.激光雷达建图

**
该部分是一个map to map 的过程,且运行频率比Odometry 算法低。
loam论文与Aloam代码学习归纳(一)--论文_第12张图片
loam论文与Aloam代码学习归纳(一)--论文_第13张图片
大佬的讲解比较通透:link
**

6.实验部分

**
作者分别在1)室内、室外环境;
2)有无IMU等条件下对算法的精度做了验证;
3)并在kitti的城市、乡村、高速公路场景下做了测试。
1)室内室外环境
实验结果如下图:室内要好于室外,因为室内环境是结构化的,特征点提取上比室外自然场景下更多、并且更加稳定。
loam论文与Aloam代码学习归纳(一)--论文_第14张图片
此外,还对室内走廊和室外果园两个场景的漂移误差做了验证。室内:把起始点和结束点的gap作为漂移误差。室外:搭载高精度GPS/INS作为真值。结果表明室内精确度高。
loam论文与Aloam代码学习归纳(一)--论文_第15张图片
2)有IMU
添加IMU后,点云经过两种方式进行预处理:
1)利用IMU确定方向,旋转一次扫描接收的点云以使其与该扫描中激光雷达的初始方向对齐;
2)进行加速度测量,像激光雷达在扫描期间以恒定速度移动一样,可以部分消除失真。通过将来自陀螺仪的角速率和来自加速度计的读数积分在卡尔曼滤波器中,可以得到IMU方向。一个人手持激光雷达在楼梯上行走。红色为单纯IMU,所提方法为绿色,结合IMU为蓝色线。
下图中右上部为结合IMU,右下部为单纯所提算法,明显看出上图中的边缘较锐利。
loam论文与Aloam代码学习归纳(一)--论文_第16张图片
误差:激光雷达由一个以0.5m / s的速度行走并以0.5m左右的幅度上下移动激光雷达的人握住。地面真相由卷尺手动测量。
loam论文与Aloam代码学习归纳(一)--论文_第17张图片
3)KITTI数据集
loam论文与Aloam代码学习归纳(一)--论文_第18张图片
**

7.优缺点

**
优点:
新颖的边缘点和平面点提取方式。
运动补偿(时间戳)
融合了scan-to-scan和map-to-map两种方式。
缺点:
没有后端优化
不能处理大规模的旋转变量(旋转向量的求解)

**

四.本次为论文总结,主要参考:

**

 (1)https://www.cnblogs.com/wellp/p/8877990.html
 (2)https://blog.csdn.net/robinvista/article/details/104379087
 (3)https://blog.csdn.net/Kamfai_Row/article/details/102963056
 (4)https://blog.csdn.net/try_again_later/article/details/105341390

你可能感兴趣的:(LidarSLAM,自动驾驶)