[置顶] 2D-slam 激光slam: 开源代码的比较HectorSLAM Gmapping KartoSLAM CoreSLAM LagoSLAM

最近找到一篇论文比较了一下 目前ros下2D激光slam的开源代码效果比较:

详细参见论文:   An evaluation of 2D SLAM techniques available in robot operating system

1. 算法介绍

A . HectorSLAM

    scan-matching(Gaussian-Newton equation)  +  传感器的要求高

  要求: 高更新频率小测量噪声的激光扫描仪.  不需要里程计,使空中无人机与地面小车在不平坦区域运行存在运用的可能性.

      利用已经获得的地图对激光束点阵进行优化, 估计激光点在地图的表示,和占据网格的概率.

      其中扫描匹配利用的是高斯牛顿的方法进行求解. 找到激光点集映射到已有地图的刚体转换(x,y,theta).

     ( 接触的匹配的方法还有最近邻匹配的方法(ICP) ,gmapping代码中的scanmatcher部分有两种方法选择.   )

  为避免局部最小而非全局最优的(类似于多峰值模型的,局部梯度最小了,但非全局最优)出现,地图采用多分辨率的形式.

  导航中的状态估计可以加入惯性测量,进行EKF滤波.


B.   Gmapping

    proposed by Grisetti et al. and is a Rao-Blackwellized PF SLAM approach.
    adaptive resampling technique

    目前激光2Dslam用得最广的方法,gmapping采用的是RBPF的方法. 必须得了解粒子滤波(利用统计特性描述物理表达式下的结果)的方法.

     粒子滤波的方法一般需要大量的粒子来获取好的结果,但这必会引入计算的复杂度;粒子是一个依据过程的观测逐渐更新权重与收敛的过程,这种重采样的过程必然会代入粒子耗散问题(depletion problem), 大权重粒子显著,小权重粒子会消失(有可能正确的粒子模拟可能在中间的阶段表现权重小而消失). 

     自适应重采样技术引入减少了粒子耗散问题 , 计算粒子分布的时候不单单仅依靠机器人的运动(里程计),同时将当前观测考虑进去, 减少了机器人位置在粒子滤波步骤中的不确定性. (FAST-SLAM 2.0 的思想,可以适当减少粒子数)


C. KartoSLAM

     graph-based SLAM approach developed  bySRI International’s Karto Robotics
     highly-optimized and non iterative Cholesky matrix decomposition for sparse linear systems as its solver
     the Sparse Pose Adjustment (SPA) is responsible for both scan matching and loop-closure procedures

      Karto Open Libraries 2.0  SDK(Karto Open Libraries 2.0 is available under the LGPL open source license. You can try the full Karto SDK 2.1 for 30 days.)    后面在详细研究下(比较下MRPT )

        图优化的核心思想我认为主要就是 矩阵的稀疏化与最小二乘..参见graphslam学习

  KartoSLAM是基于图优化的方法,用高度优化和非迭代 cholesky矩阵进行稀疏系统解耦作为解. 图优化方法利用图的均值表示地图,每个节点表示机器人轨迹的一个位置点和传感器测量数据集,箭头的指向的连接表示连续机器人位置点的运动,每个新节点加入,地图就会依据空间中的节点箭头的约束进行计算更新.

  KartoSLAMROS版本,其中采用的稀疏点调整(the Spare Pose Adjustment(SPA))与扫描匹配和闭环检测相关.landmark越多,内存需求越大,然而图优化方式相比其他方法在大环境下制图优势更大.在某些情况下KartoSLAM更有效,因为他仅包含点的图(robot pose),求得位置后再求map.


D. CoreSLAM

      tinySLAM algorithm: two different steps(distance calculation and update of the map
      simple and easy

     为了简单和容易理解最小化性能损失的一种slam算法.将算法简化为距离计算与地图更新的两个过程,  第一步,每次扫描输入,基于简单的粒子滤波算法计算距离,粒子滤波的匹配器用于激光与地图的匹配,每个滤波器粒子代表机器人可能的位置和相应的概率权重,这些都依赖于之前的迭代计算. 选择好最好的假设分布,即低权重粒子消失,新粒子生成..在更新步骤,扫描得到的线加入地图中,当障碍出现时,围绕障碍点绘制调整点集,而非仅一个孤立点.



E. LagoSLAM

      Linear Approximation for Graph Optimization
      the optimization process requires no initial guess

         基本的图优化slam的方法就是利用最小化非线性非凸代价函数.每次迭代, 解决局部凸近似的初始问题来更新图配置,过程迭代一定次数直到局部最小代价函数达到. (假设起始点经过多次迭代使得局部代价函数最小).  LagoSLAM 是线性近似图优化,不需要初始假设.  优化器的方法可以有三种选择 Tree-based netORK Optimizer(TORO), g2o,LAGO



2. 实验结果比较

分别从大小仿真环境和实际环境以及cpu消耗的情况下对算法进行了比较. CartoSLAM 与gampping占很大优势

[置顶] 2D-slam 激光slam: 开源代码的比较HectorSLAM Gmapping KartoSLAM CoreSLAM LagoSLAM_第1张图片[置顶] 2D-slam 激光slam: 开源代码的比较HectorSLAM Gmapping KartoSLAM CoreSLAM LagoSLAM_第2张图片[置顶] 2D-slam 激光slam: 开源代码的比较HectorSLAM Gmapping KartoSLAM CoreSLAM LagoSLAM_第3张图片

说明:能力有限,讲得有问题欢迎指正,暂且粗解到这,后面再具体看看对应算法的详细论文介绍,有问题再改...


slam算法的论文几篇

下载:http://download.csdn.net/detail/zyh821351004/8986339


你可能感兴趣的:([置顶] 2D-slam 激光slam: 开源代码的比较HectorSLAM Gmapping KartoSLAM CoreSLAM LagoSLAM)