google cartographer的论文Real-Time Loop Closure in 2D LIDAR SLAM
刚刚研究完gmapping,现在来看看谷歌开源的cartographer,在看源码之前先研究一下它的论文;
(所有的都是在看完后根据自己理解写的,如有疑问、疏漏、错误等可留言)
摘要:便携式激光测距仪比如雷达再配合SLAM是获得平面地图的一种有效方法,实时的产生可视化平面图可以帮助处理评估所捕获数据的质量。在有限的计算资源下建立一个易用的平台很有必要,我们实现了在mapping后台的一种实时建图和闭环检测的方法,可以生成5cm分辨率的栅格地图。为了实现闭环检测,我们采用了branch-and-bound方法来作为计算scan-to-submap的约束。
(总而言之,他们使用了branch-and-bound作为计算scan-to-submap的约束,然后与其它现有建图方法对比,谷歌认为他们的的方法是有竞争性的。。。)
简介:建立平面图对很多应用很有用,人工使用激光测量设备并使用CAD等辅助设计软件任然需要大量的方法对直线等进行优化,这也不一定会得到空间准确的测量数据。而使用SLAM就可能短时间能够准确的建立空间尺寸和复杂结构。
应用SLAM在这个领域并不是一个新的方法,但是本文的贡献在于减少了计算从激光数据中回环约束的需求量,这样能够保证我们建立更大的地图,1w平米的尺寸,并且提供实时的优化结果。
(也不知道计算资源是不是真的减少了,是在什么平台、什么计算硬件下进行的???)
相关工作:
Scan-to-scan 是基于激光SLAM中频繁使用的用来计算坐标变换的的方法,比如文献【1-4】,就本身而言,scan-to-scan匹配法是会积累累计误差的。
scan-to-map匹配法有助于减少这种误差,这种方法使用高斯牛顿法采用线性插值图找出局部最优解(参考文献5),当前坐标的估计由高数据平率的雷达提供,局部最优scan-to-map匹配是有效的和鲁邦的,在不稳定的平台,可以使用IMU获得重力方位。(本论文使用的方法)
pixel-accurate scan方法能够进一步减少局部误差,尽管有很大的花费,这个方法使用用于回环除错。一些方法通过匹配激光额外的特征来改善计算花费。其他的用于回环检测的比如histogram-based matching、feature detection in scan data 和用machine learning。
解决累计误差的方法有两种,粒子滤波和基于图优化。
粒子滤波会为每一个粒子保存系统状态,这会使得地图花费的资源你大大增加。
图优化是基于位姿和特征的集合法,图中的边事从观察的结果中得到的约束,节点存储位置和特征。
系统综述:
谷歌的cartographer提供实时的室内slam,可以采用背包形式背着传感器建立分辨率为5cm的室内地图。激光数据在最好的估计位置时插入子图,这个最好的位置是使用短期的数据进行测量的,误差会在全局进行积累。
为了在较差的传感器上获得好的表现,我们的SLAM没有采用粒子滤波器,为了处理积累误,我们定时跑一个坐标优化,当一个子图生成完毕,将不会有新的激光加入,这个子图将用来进行回环检测。所有完成的子图和激光数据将自动进行回环检测。如果基于现在的坐标估计足够近,那么一个极光数据的试图匹配会在子图中找到接近的激光数据,如果找到了,那么将添加作为优化问题的闭环约束。通过几秒钟就进行一次优化,要求闭环检测必须在新的点被加入到submap中之前完成,否则失败,通过分支上界法以及对于每个完成的submap有对应的几个预处理的网格。
局部SLAM:
这个系统包括了局部和全局的优化方法(关于2Dslam)。每一个连续的激光点集与全局地图的一部分进行匹配,也是submap,使用非线性优化法把激光和suamap进行匹配,最后再在全局中进行优化去除累积误差。
A.Scans
子图的构建,是激光数据的连续处理,。。。这个地方的描述看得不是很明白;需要研究一下。
B.Submaps
少数连续的激光数据用来构建一个子图 ,这些子图以栅格地图的形式存在,这种图以给的雷达距离给定激光点,
拿5cm举例,表示5*5的范围内被占据。对于每一个栅格,我们定义这个像素代表着所有的栅格内的点。
无论何时插入一个激光数据到栅格地图上,一系列被占据的栅格和没有被占据的栅格计算出来,对于每一个激光线,我们把点插入到最近点,hit?miss?似乎没怎么看明白,好吧。。。这部分也忽略。。