【论文阅读】ART-SLAM: Accurate Real-Time 6DoF LiDAR SLAM

一、系统概述

模块化是这篇论文强调的一个突出特点,根据论文给出的图示,ARTSLAM框架分为了可选模块和必选模块,下图中灰色的代表必选模块,而彩色的则代表可选模块,橙色的原始点云代表的是输入,也属于必选模块,可以根据设备的性能以及传感器的类型进行补充。
【论文阅读】ART-SLAM: Accurate Real-Time 6DoF LiDAR SLAM_第1张图片
论文认为这种模块化的方式有三个好处,首先数据是从模块发送往其它模块的,在发送之前都会在模块中存储旧数据,所以一定程度上能够防止内容的丢失,其次这种模块化的框架能够方便新的模块整合进入现有的框架,最后多个模块之间可以并行运行,从而提高程序的时间效率。根据论文里面的描述,这种模块化的实现方法应该是用ROS的节点机制,个人感觉,模块化这个特点属于编程思想而不是一种能够放在论文里面的改进点,就好比有人把ORBSLAM的内容用ROS重新写了一遍,然后说这是他的改进,不可否认这确实是一种改进,但只能算是实际应用层面的改进,本质上还是ORBSLAM的内容,所以个人认为这个模块化就是在凑工作量。

二、预过滤模块

原始的点云数据根据框架的流程,首先进入的就是pre-filter模块,在这个模块中,主要的任务就是降低点云的体积并一定程度上消除其中的噪声数据。降低点云的体积是出于计算开销的考量,如果不对点云做下采样,采用ICP那样的整帧的点云配准方法的开销是很大的,论文这里采用的是另一篇论文中的下采样的方法,并在其基础上做了改进,ARTSLAM借鉴的论文是A portable 3d lidar-based system
for long-term and wide-area people behavior measurement
,在他的基础上,将点云划分为八个扇形区域,每两个扇形区域成一组,在每个组内进行下采样,从而得到一个体积较小的点云。

三、跟踪器

跟踪器模块我们可以直接认为就是计算位姿变化的模块,ARTSLAM采用的是基于关键帧的全局扫描的计算方法。全局扫描的方法论文用的表述方法是scan-to-scan,类似的方法有ICP/GICP/VGICP/NDT,个人感觉就是利用整帧点云或者说下采样后的整帧点云,所有的输入都会纳入到位姿计算中,这样计算出来的结果必然准确,但是计算开销很大,与这种方法相反的是LOAM,LOAM采用划分边点和面点的方法,配准的过程只使用这些点,所以计算开销小了很多,但是相应地准确度也会受影响,这本身是一个取舍的问题,时间开销和效果只能二选一。
而基于关键帧的方法,则强调的是每次计算位姿变化时,两帧的选择。在ARTSLAM中,每个关键帧都保存了点云信息、位姿信息、时间戳、累积距离等内容,如果传感器情况允许,还可以保留加速度、旋转角等内容。关键帧的选择论文给出了三个条件,只要满足其中一个就可以认为是一个新的关键帧。
【论文阅读】ART-SLAM: Accurate Real-Time 6DoF LiDAR SLAM_第2张图片
这三个条件分别从距离、旋转和时间上对关键帧做了限制,距离上一个关键帧过远、旋转过大或者时间间隔太大,都会新建一个关键帧。
而论文中所谓的基于关键帧的方法,指的就是每次计算位姿时,使用的点云一个是当前帧的点云,而另一个则是上一个关键帧的点云。一般来说无论是激光SLAM还是视觉SLAM,计算位姿时使用的大多数是相邻的两帧,因为这两帧的偏差不大,计算的收敛速度可能会快一些,在ARTSLAM中换成了上一个关键帧和当前帧,论文作者认为这样做可以减小累积误差,仔细考虑一下确实是这样,如果按照原来的计算方法,第十帧的误差会是前面十次计算的误差的累积,而换用这种方法,每一帧的误差都只有一帧的量,而且误差不会累计,相对地计算的误差也会大一些,并且对关键帧的选择策略也有一定的要求,个人感觉采用这种方法必须要让关键帧的数量多一些,不然帧与关键帧之间的差距一旦过大,虽然不会让累积误差增大,但会让当前帧计算出来的位姿误差偏大。除此之外,为了加速位姿的计算过程,可以采用其它传感器的平均值或者采用恒速模型来提供一个初值,从而加速收敛。

四、预跟踪器

这个模块属于一个可选模块,放在跟踪器模块之前,根据论文的描述,对于一些低端设备而言,点云体积过大会导致计算的时间开销过大,所以一个比较靠谱的初值能够起到一个很好的辅助效果。因此在ARTSLAM中增加了这一个模块,简单来说就是对同一对点云,做不同规模的下采样,重复计算多次位姿,利用这些低体积点云计算出来的结果给跟踪器模块提供一个初值,从而加速计算过程,如果计算结果足够准确甚至可以短路跟踪器模块。

个人感觉这个模块有些奇奇怪怪,论文使用的位姿计算方法是基于全局扫描的,所以计算一次的时间开销必然是不小的,不管采用什么程度的下采样,时间开销终归是不可忽略的,这样做对于低端设备而言可能会有负面效果。但是如果从多线程的角度来看,这个模块是和预过滤模块并行的,而下面的模块都必须要等待预过滤模块的结果,是不是可以理解为预跟踪器就是在利用预过滤模块的计算时间,这段时间等也是干等着不如做点什么,于是就引入了这个模块,将点云体积下降到足够快的程度,计算一个不靠谱的初值给后续模块,这样去理解可能合理一些。

五、地面检测

地面检测的部分主要是为了增加高度和旋转的一致性,这个模块在很多的激光SLAM里面都有体现,在ARTSLAM中,改进主要体现在整合了很多种场景的地面检测。
论文一共提出了三种场景下的计算策略。首先对于最普通的场景下,也就是对平面以及类平面的筛选,首先在一个可接受的范围内做点云的筛选,只保留近距离的点云,之后对点云的法线向量做筛选,如果明显非垂直,则直接排除,之后再利用RANSAC剔除离群点,最后用剩下的点拟合平面。
第二种场景是崎岖不平的场景,这个场景下由于地面是崎岖不平的,所以没法用RANSAC剔除离群点,论文的处理方法是根据水平距离做筛选,之后直接拟合平面。一个问题在于,这种场景和上一种场景关于距离筛选的区别,论文的表述几乎是一样的,在崎岖不平场景下多了一个horizontally,所以是不是说该场景是用点云的xy坐标做筛选,而第一类场景则是利用xyz来筛选。
最后一种场景则是斜面的情况,斜面的检测需要依赖后端的位姿图,如果两个关键帧中出现了明显的法向量方向的改变,则可以认为是检测到的是一个斜面。

六、回环检测

在ARTSLAM中,回环检测一共有四个检测。每次有新的关键帧插入,都会进行一次回环检测。如果待检测的两帧轨迹上的距离过近,则认为不构成后续回环帧对,如果位姿的相似性相似性过小,也不认为是候选回环帧对,经过这两步得到的待检测对,会通过第三步做筛选,这一步中会将点云投影到2D平面上,利用极坐标网格分布来做进一步检测。通过了这三步,还只能认为是候选对,在最后一步中户在用全局扫描的方法进行一次相似性的计算,计算出来的位姿变换才可以认为是真正的回环。

简单来说就是点云的回环检测的计算开销实际上是很大的,尤其是采用全局扫描的方法,所以ARTSLAM加了三个预筛选,利用距离、相似性以及投影,通过三次剪枝得到的候选对少了很多,从而计算的数量也会少很多,以此加速计算过程。

总的来说,这篇论文更像是一个大合集,将很多论文中使用的比较先进的方法整合到了一起,模块化其实是ROS的节点机制,高效性则是体现在多种剪枝策略,准确性则是放在了一些计算上的优化以及多场景的计算,主要的改进有三点:基于关键帧的跟踪来减小累积误差、用不同规模的点云下采样来提供位姿计算的初值、地面检测的分情况讨论以及回环检测的剪枝。其中个人感觉基于关键帧的计算方法可以借鉴,但是应该需要对关键帧的数量做一定的限制,关键帧数量过少可能也会影响计算的结果。

你可能感兴趣的:(激光SLAM,人工智能,自动驾驶,深度学习)