看完这篇论文很久了,现在再做一下学习笔记。希望大家一起交流学习呀~
这篇论文的重点在于分支定界算法回环检测时对CSM相关算法的搜索加速。
论文中文翻译可看:real-time loop closure in 2D LIDAR SLAM
I.INTRODUCTION
讲这篇论文的重点在于减少在计算回环约束时的计算量。
II.RELATED WORK
提出几种常用的回环检测时用到的扫描匹配方法:
(1)Scan-to-Scan
(2)Scan-to-Map
(3)Pixel-accurate scan matching
提到两种解决局部建图时累积误差的方法:
(1)particle filter
(2)graph-based SLAM
III.SYSTEM OVERVIEW
前言:首先,cartographer是用背包在室内实时的建立了一个5cm精度的地图。他的重点在于基于IMU、里程计、激光雷达、gps等多传感器融合构建局部submap和回环检测用的scan match策略。其中imu除了可以提供良好的初始位姿,还可以检测重力的方向将scan投影到水平面上
当一个submap完成后,就不会有新的laser scan 插入改submap中,然后该submap会加入回环检测的候选队列中。当当前的laser scan 来临时,首先会以最优位姿插入与之对应的submap中(也就是frontend的scan matching过程)。然后在当前的laser scan 附近划取一个窗口,在窗口内寻找一个先前某个submap中某个scan最合适的匹配,一旦找到这个匹配,就将回环约束的优化问题中,进行建图的一个矫正过程。(个人理解,若有误欢迎一起交流)
IV.LOCAL 2D SLAM
文中的slam系统联合路局部和全局的方法,两个方法都对pose位姿进行了优化。在局部的方法中,一个连续的scan 会和地图中的一部分通过使用非线性优化的方法进行匹配,也就是submap进行匹配。这一个过程也称为scan matching ,这一过程累计的误差惠子global slam中回环检测的时候消除。
A.scans
submap的构建是不断校准scan点集和submap的坐标,也就是将scan转换到submap坐标系下。表示公式如下:
B.submaps
一定数量的laser scan 会用来构建一个submap,而submap是由概率网格表示,也可以说是栅格地图。一个地图是由离散的栅格点表示,栅格的大小是由给定的分辨率r决定的。而这些栅格的值可以表示这个栅格是障碍物的概率。当有一个新的laser scan插入submap时候,根据下面的公式对其栅格概率值进行更新;
其中,clamp是区间限定函数,大于max,返回max;小于min,返回min.
C.ceres scan matching
在将scan插入到submao中,需要先对scan相对与当前的local submap进行优化。使得该次scan/点集在subamap中的概率最大。文中采用最小二乘法解决这个问题:公式如下
其中M函数用的双立方插值(bicubic interpolation),是一个平滑函数。文中提到因为这是一个局部优化问题,所以需要用imu提供一个好的角度初始值。如果没有,也可以用高概率的scan matcher 或者pixel-accurate来获得值作为初始值,但是计算很复杂。
ceres scan matching这一过程文中只给了一个公式,具体怎么进行优化的没有细讲。
V.CLOSING LOOPS
回环检测需要注意的:这一部分分为两个过程,首先是检测回环,也就是scan matching过程,cartographer采用CSM的方法,该方法相对于icp、plicp等的优点是通过暴力搜索避免陷入了局部极值情况的出现,对应的缺点就是计算量太大,所以文中提出的分支定界方法(BBS)方法就是加速搜索过程,同时减少计算量。第二部分就是在检测到回环之后的位姿约束的优化问题,本质上将位姿之间的差值变为最小二乘问题后解决。
A.Optimization problem
优化问题和scan matching一样,被简化成了非线性最小二乘问题,此文中每隔几秒就会用ceres对最小二乘问题求解。在图中,约束(constraints)为scan和submap的相对位姿和相对的协方差矩阵。对应的最小二乘问题公式如下:
第一个参数是submap位姿,第二个参数是scan位姿,第三个参数是他俩的相对位姿(空间约束,图的边),第四个参数是对应的协方差(表明激光雷达测量值的权重)对应的残差E计算公式:
其实这个就是一个损失函数,比如Huber loss等等。使用损失函数的目的是减少加入到优化问题中的离群点对于系统的影响。但是这样计算约束很可能在局部对称的环境下引发错误的约束,比如对称的办公室隔间(容易匹配错)。
B.branch and bouned scan matcing
这里提到了两种算法,简称算法1和算法2:
算法1(这个算法在文中没用):在scan 点集周围选定一个窗口w中,然后不断在这个w中搜索寻找最佳位置,搜索距离和角度进行了限制,如下:
这个可以称之为信度和,是将当前帧scan插入到submap中,遍历所有位姿得到的最高分,这个值越高,表示越匹配,我们的目的就是要找到这个分值最高的数值。
遍历的时候,按照以下步长:
hk是点集,r是分辨率。在分支定界的时候,多分辨率搜索时这个r值时从大往小的。
这里面W是搜索空间(窗口)。
下面是算法流程:
算法2:使用分枝定界上界法来寻找最佳位置。文中分为三部分:
(1)节点选择:DFS(depth-first search深度优先搜索)方法
从第一个节点a开始,随机(也可以左边优先)访问相邻的节点b,再访问相邻的节点d,d已经没有相邻的节点了,返回上一级访问e,再h,h没有相邻的节点,之前访问的所以节点都已经置为已经访问,所以往上搜索到没有置为访问的节点,如此递归,知道访问完一次所以节点。
(2)分支原则:(这一部分存有疑问)
(3)计算上届(得分)
整个算法流程如下: