问题
2D SLAM 中比较核心的问题是地图更新速度问题,对于路径规划和避障有非常多的好处。
方法
可行和产品化的方法是通过subsequent maps的方式进行地图的设计和更新。
Graph G 包含 一个Nodes V and Edges E
V-->位置估计 E-->NODE间的关系
我们需要做的是初始化一个空图并将其切分,如下图中的方式,并将G填充到地图中
这样我们进行探测的过程中,G的集合就可以生成地图集合。
核心
如何处理新生成M+1的地图和以前地图集合的问题, 1、是需要地图相似性的缓存(Slice Caching) 2、需要一个节点覆盖(Node Covering)的方式、
1,地图相似性的缓存
我们可以这样理解如果,新加入的Map(M+1)进入的时候,如果坐标匹配且无明显特征点则掠过,否则加入或进行合并,我们可避免全局的形式的位置估算,我们需要考虑的近视临近的S集合的重新计算
2.节点覆盖
节点覆盖的原因在于Sensor的信息大部分是冗余的,而环境常常是静态的。多次的对一个地方的测量反而有可能引起测量结果的模糊和重要特征的移除,也就是我们之关注我们当前区域的传感器数据即当前submap所覆盖的面积。
算法综述
代码结合比对:
a. cartographer采用了submap的概念, 依据一定数量的scan初始一个submap, 依据窗口大小, 插入newScan,更新submap. 有子图缓存,会占用内存。
b. cartogapher -> real-time correlative scan matcher ,引入了branch and bound的方式, 加快了闭环的查找。依据多分辨率多层的树型结构,单枝生长的方式(branch),及时剪枝操作(bound),深度优先搜索确定闭环。 (Intra-submap Inter-submap)添加相应的闭环约束。构建优化问题,利用ceres优化。
参见: cartographer/cartographer/mapping_2d/sparse_pose_graph.h .cc
引用
[1]. Occupancy Grid Rasterization in Large Environments for Teams of Robots