System Overview
Segmentation
Pt 代表在时间 t 获取的点云数据,首先将Pt 投影到深度图像上,深度图像的分辨率是180016(与雷达参数有关,计算方法为:360/水平分辨率线数),每个像素的深度值ri与点pi到雷达的欧氏距离有关。
在做点云分割前,先要提取出地面点(ground points),这部分点云不参与segmentation过程。然后采取基于图像的分割方法将点云分割成许多点簇。
由于室外环境中会有很多噪声点,例如树叶、垃圾等小型物体,这些都是不可靠的特征,在连续两帧里都在同一位置出现的可能性不大,所以应该将它们剔除掉,不参与帧间匹配。文中采用的方法是计算每个点簇中点的个数,将所有个数小于30的点簇都剔除掉。剔除前后点云如下图所示:
经过这一步后每个点都具备了三种特性:
(1)点的类别(属于地面点还是分割点)
(2)点在深度图中的行和列
(3)点的深度值
这些特性在后面的模块中会被用到。
Feature Extraction
这个模块的原理与LOAM类似,先在水平方向上将深度图均分成许多子图像,然后计算每个点的曲率,然后在每个子图(submap)的每一行根据曲率的大小选择若干个角点(edge points)和若干个平面点(planar points)。
不同的地方在于本文的方法只需要计算ground points和segmentation points,而不是所有的点云数据。并且在计算角点时不需要考虑ground points。
提取特征后如下图所示,c是一个submap角点和平面点,d是所有submap的角点和平面点。
Lidar Odometry
这个模块与LOAM也类似,主要是通过点对线和点对面进行相邻两帧的匹配,来估计传感器的运动,关键点就在于如何确定相邻两帧特征的对应关系。
但是在细节上做了一些改动,提高了特征匹配的精度和效率:
(1)Label Matching:由于前面已经知道了每个点的Label property,所以在匹配过程中只需要匹配具有相同标签的特征。
(2)Two-step L-M Optimization:在LOAM中,计算相邻两帧的旋转平移关系的时候,只将所有对应点的综合距离存储在一个容器内然后通过L-M优化方法计算两帧点云综合距离最小时的转换关系。这篇文章中作者先通过平面特征和它们的对应关系计算出[tz,θroll,θpitch],然后以[tz,θroll,θpitch]作为约束,通过角点特征和它们的对应关系计算[tx,ty,θyaw]。实际上在第一步中也能得到[tx,ty,θyaw],但是通过平面点计算得到的精度比较低,所以就不在第二步中使用。作者的实验显示这种方法能够减少35%的计算量。