LOAM
1. 摘要部分
使用一个三维空间中运动的两轴单线激光雷达来构建实时激光里程计并建图。难点在于点云不能在相同时间获得:因为点云数据会随着激光雷达的移动产生运动畸变。运动畸变会造成点云在匹配时发生错误,导致无法正确得到相邻帧之间的相对位置关系,即无法获得正确的里程计信息。论文提出了一种方法可以同时获得低漂移和低复杂度,且不需要高精度的测距和惯性测量。核心思想是将定位和建图分割,通过两个算法:一个是执行高频率的里程计但是低精度的运动估计(定位),另一个算法在比定位低一个数量级的频率执行匹配和注册点云信息(建图和校正里程计)。
**算法的核心部分**:特征提取(Lidar Registration)、里程计解算(Odometry and Mapping)。
2.简介
对于移动中的激光雷达,通常使用独立的位姿估计方法,如:使用GPS/INS提供的位姿信息来融合点云。另一种方法是使用车轮编码器或视觉里程计提供的里程计信息来注册点云信息。但里程计会不断地对运动积分,即这个过程中会不断进行误差累积,造成需要花费额外的精力去抑制里程计的漂移。
为了很好的降低漂移和计算量,作者主要从特征提取和点云匹配两方面着手处理。匹配的问题分为scan-to-scan、scan-to-map、map-to-map,三者各有特点。
(1)scan-to-scan:优点是计算量小,缺点是误差累计大,长距离误差累计后地图无法直视。
(2)map-to-map:优点是精度高,误差累计小;缺点就是计算量大,实时性压力大。
(3)scan-to-map:居中。
LOAM的综合利用3种匹配的优缺点:首先,scan-to-scan匹配精度差,但是可以只用它做一个获取粗的里程计,获取的结果用于去除匀速运动造成的运动畸变,由于其计算量较小因此可以高频执行。其次,有了里程计校正后的点云数据,接下来就可以做一个map-to-map的匹配了。但map-to-map计算量太大,因此可以让其低频执行。这样的高低频率结合就保证了计算量的同时又兼具了精度。
另外,减少计算量的方法就是提取特征点,之前的特征点提取方法:特征向量、直方图、旋转图片等,这些方法好但是计算量大。 作者提出的方法是提取边缘点和平面点作为特征点来使用,这种提取的方法就很简单只需要计算一个点前后五个点就可以得到该点的曲率,计算量就减少了很多。
3.流程
主要问题为:已知一段点云序列 Pk ,计算在前 k个时期内的雷达位姿以及构建全局地图。
如上图,激光里程计主要由四部分组成。
(1)获得激光雷达坐标系下的点云数据P;
(2)把第k次扫描获得的点云组成一帧数据Pk;
(3)将Pk在两个算法中进行处理,也就是Liar Odometry节点和Lidar Mapping节点。Lidar Odometry节点的作用是获取连续两帧点云数据间雷达的运动,用于估计和去除Pk中的运动畸变。执行的频率为10Hz,相当于scan-to-scan匹配获得粗糙的运动估计用于去除匀速运动造成的运动畸变,并将处理后的结果给了Lidar Mapping节点做进一步处理。Lidar Mapping节点使用地图去匹配和注册没有畸变的点云数据以1Hz的频率。
(4)最后由Transform integration节点接收前面两个节点输出的Transform信息并将其进行融合处理以活动频率为10Hz的Transform信息即里程计。
特征点选取:判断点到底X(k,i)是底面的点还是边缘点,方法是得到我们想要求曲率点i周围连续几个点集合S用于求曲率。S中的点一半在i的一侧从而避免雷达顺时针和逆时针的影响。具体到代码的实现就是使用计算当前点和前后五个点,来得到对应的平滑度数据,计算量减少了很多。
平面点:在三维空间中处于平滑平面上的点,其和周围点的大小差距不大,曲率较低,平滑度较低。
边缘点:在三维空间中处于尖锐边缘上的点,其和周围点的大小差距较大,曲率较高,平滑度较高。
对集合S内的点进行排序,最小的点c作为平面点,最大的点c作为边缘点。就可以在一帧中得到有效的点数了。论文中是对整个扫描进行化段,分四段,每段各取2个边缘点和4个平面点。
同时,对所取的点也有一定的限制:
(1)该点的周围的点尽量不要被再被取到,这样可以使整体的特征点分布更加的平均
(2)该点不能与雷达扫描束过于平行,这样也会出现问题
(a) 图中实线表示当前表面的一小簇。表面簇上的点A有一个相对于激光器的角度angle,即橙色虚线表示。点B所在簇的实线和激光线束大致是平行的,认为B点时不可信的,因此不会选择B点。
(b)图中的实线段表示能被激光器观测到的物体。点A是闭合区域的边缘点(橙色虚线段),且能被检测到为边缘点。然而,如果从一个不同的角度观察,此闭合区域会发生变化且变的可观测。因此,不能将点A作为一个有用的边缘点,也不能将其选为特征点。