6月9日 基于激光雷达的SLAM算法对比分析

基于激光雷达的SLAM算法对比分析

下面将Karto,Hector,Gmapping,Cartographer等几种开源算法通过列表的形式进行了对比:

Hector Gmapping Karto cartographer
scan-matching(Gaussian-Newton equation) +传感器的要求高 mapping采用的是RBPF的方法 KartoSLAM是基于图优化的方法,用高度优化和非迭代 cholesky矩阵进行稀疏系统解耦作为解. artographer是Google的实时室内建图项目,传感器安装在背包上面,可以生成分辨率为5cm的2D格网地图
要求: 高更新频率小测量噪声的激光扫描仪.不需要里程计,使空中无人机与地面小车在不平坦区域运行存在运用的可能性 粒子滤波的方法一般需要大量的粒子来获取好的结果,但这必会引入计算的复杂度;粒子是一个依据过程的观测逐渐更新权重与收敛的过程,这种重采样的过程必然会代入粒子耗散问题(depletion problem), 大权重粒子显著,小权重粒子会消失(有可能正确的粒子模拟可能在中间的阶段表现权重小而消失). 图优化方法利用图的均值表示地图,每个节点表示机器人轨迹的一个位置点和传感器测量数据集,箭头的指向的连接表示连续机器人位置点的运动,每个新节点加入,地图就会依据空间中的节点箭头的约束进行计算更新. 获得的每一帧laser scan数据,利用scan match在最佳估计位置处插入子图(submap)中,且scan matching只跟当前submap有关。在生成一个submap后,会进行一次局部的回环(loop close),利用分支定位和预先计算的网格,所有submap完成后,会进行全局的回环。
利用已经获得的地图对激光束点阵进行优化, 估计激光点在地图的表示,和占据网格的概率.
为避免局部最小而非全局最优的出现,地图采用多分辨率的形式.
自适应重采样技术引入减少了粒子耗散问题 , 计算粒子分布的时候不单单仅依靠机器人的运动(里程计),同时将当前观测考虑进去, 减少了机器人位置在粒子滤波步骤中的不确定性 KartoSLAM的ROS版本,其中采用的稀疏点调整(the Spare Pose Adjustment(SPA))与扫描匹配和闭环检测相关.landmark越多,内存需求越大,然而图优化方式相比其他方法在大环境下制图优势更大.在某些情况下KartoSLAM更有效,因为他仅包含点的图(robot pose),求得位置后再求map. submap的构造是一个重复迭代配准scan和submap的过程。利用配准估算出pose对scan进行刚体变换,插入到submap中。
连续的scan用来构造submap,这里submap以概率格网的形式表现。每一个scan,在插入格网(submap)时,每一个grid有hits和miss两种情况。离scan终点最近的grid为hits,在scan原点和终点之间相交的grid为miss。之前未观察的grid分配一个概率,已观察的grid进行概率更新。
论文 Efficient Sparse Pose Adjustment for 2D mapping

citations

cartographer与karto的都是2D激光SLAM算法,而且不是基于概率估计的SLAM框架

  1. 两者采取的都是图优化框架

采取的优化库不一致, karto采取的是spa(karto_slam)或g2o(nav2d), cartographer采取的是google的ceres构建problem优化。 karto的前端与后端采取的是单线程进行,cartographer按paper说明,采取的是4线程后端优化,还在进一步确定。

  1. 运动预测部分:tracker

karto利用的是odom进行初始位置的预测, cartographer部分利用imu构建预测模型,scanmatcher与odom(可选)构建观测模型,采取UKF进行运动预测, cartographer带有tracker的说法。

  1. scanMatcher 部分

3.1 karto 采取的的是real-time correlative scan matcher(三维窗口遍历寻优)的方式进行的。 采取的是双分辨率的低分辨率和高分辨率的两次搜索。

3.2 cartoGrapher也是采取的双搜索的方式进行的, 先用一次real-time correlative scan matcher(三维窗口遍历寻优),再构建优化等式,利用ceres优化求解。(栅格概率, T的偏差,R的偏差)

  1. submap的说明

4.1 karto没有submap的概念,全部以keyScan的形式存储在sensorManager。 无地图缓存,但每次计算地图有计算消耗。采取的是scan-map的匹配方式,每次keyScan进入主动的依据pose的距离窗口生成localMap进行匹配。 local 与 gloal的loop closure依据graph的结构和sensorManage顺序存储分配的ID信息,选择候选scans,生成localMap,进行匹配,依据score进一步确定闭环。

4.2 . cartographer采用了submap的概念, 依据一定数量的scan初始一个submap, 依据窗口大小, 插入newScan,更新submap. 有子图缓存,会占用内存。

  1. Loop-Closure

5.1 karto 主要依据pose 和 distance信息创建localMap,scanMatcher(real-time correlative scan matcher)确定。

  1. 依据当前的Vertex, 从Graph中找到与之相邻的所有vertex(一定距离范围内).
  2. 采取广度优先搜索的方式,将相邻(next)与相连(adjacentVertices)添加进nearLinkedScans.
  3. 从sensorManager中取从前到后,依据id序号挑选与当前在一定距离范围内,且不在nearLinkedScans中的candidateScans, 当数量达到一定size,返回。
    4)loopScanMatcher进行scanTomap的匹配,当匹配response 和covariance达到一定要求认为闭环检测到。得到调整的correct pose.
    5)Add link to loop : 调整边(全局闭环)
  4. 触发correctPose: spa优化

5.2 cartogapher 类似((real-time correlative scan matcher)),引入了branch and bound的方式, 加快了闭环的查找。

依据多分辨率多层的树型结构,单枝生长的方式(branch),及时剪枝操作(bound),深度优先搜索(DFS)确定闭环。 (Intra-submap Inter-submap )

扫描二维码关注公众号,回复: 9143189 查看本文章

添加相应的闭环约束。构建优化问题,利用ceres优化。

参考

发布了30 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/djfjkj52/article/details/91357106