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  by SRI 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库)

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

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

  KartoSLAM的ROS版本,其中采用的稀疏点调整(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占很大优势

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 09:30:37

2D-slam 激光slam: 开源代码的比较HectorSLAM Gmapping KartoSLAM CoreSLAM LagoSLAM的相关文章

iOS流行的开源代码库

本文介绍一些流行的iOS的开源代码库 1.AFNetworking 更新频率高的轻量级的第三方网络库,基于NSURL和NSOperation,支持iOS和OSX.https://github.com/AFNetworking/AFNetworking 2.GPUImage 图像处理库,基于OpenGL ES,图像处理效率高.https://github.com/BradLarson/GPUImage 3.Masonry 自动布局库.https://github.com/SnapKit/Mason

C++开源代码项目汇总

Google的C++开源代码项目 v8  -  V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎.V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用.V8 根据 ECMA-262 第三版中的说明使用 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista.Mac OS X 10.5 (Leopard) 以及 Linux 系统中运行.V8 可以独立运行,也可以嵌入任何

【141030】金山卫士开源代码,VC++完整源码

VC++金山卫士开源代码,包含所有模块的源码,促进互联网行业的开源计划 :也是你学习VC++的绝佳范例,可以接触到中国最专业的安全类软件源代码,你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品.VC++金山卫士开源代码下载. 游戏源码下载地址:点击下载

GitHub + VSTS 开源代码双向同步

GitHub已经是全球开源代码的大本营了,通过以下统计你可以看到仅仅javascript在github就有超过32万个活动的repo.很多开发人员都会把自己的一部分代码分享到github上进行开源,一方面可以提高自己在编程领域的知名度,也可以吸引其他的开发人员帮助你一起改进,当然还可以认识更多的朋友,要不怎么说github其实是个交友网站呢. 但是github上免费的repo只能是公开的,对于一些我们不希望完全开源的项目,就没有办法免费分享了,当然你可以付费升级到专业版,这样就可以托管私有rep

PHP爬虫(3)PHP DOM开源代码里的大坑和字符编码

一.开源代码的问题 在PHP爬虫(2)中介绍了开源工程Sunra.PhpSimple.HtmlDomParser.在实际工作中发现一个问题,例如http://www.163.com的网页数据怎么也抓取不下来. $url = "http://www.163.com"; $content = Http::request($url); $dom = str_get_html($content);//dom返回值为false 检查simple_html_dom.php代码发现, if (emp

常见的Android开源代码以及框架

Android SDK源代码 http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 开源代码 http://www.open-open.com/lib/view/open1404286864296.htmlhttp://www.apkbus.com/android-170798-1-1.html Gif 图片显示框架https://github.com/koral--/an

Material Design设计的开源代码

https://github.com/telly/FloatingAction http://www.csdn.net/article/2014-11-21/2822753-material-design-libs/1 android 属性动画的开源代码: http://www.jcodecraeer.com/a/opensource/2014/1012/1746.html

如何学习开源代码(摘自互联网)

如何阅读和学习开源代码 通过阅读开源代码,可以学习其中的框架和模式.代码技巧.算法等.但是经常有些人拿到开源代码以后不知道如何下手,这里分享一下我的一些经验. 1.拿到代码以后编译运行它,了解它干什么的,实现了功能. 2.从入口点开始阅读,按照流程,了解这个软件是怎么运行起来的. 3.从整体上观察这个软件是有哪些模块组成的,最好能画一画图. 4.修改软件的功能,并且能够调试它.不能仅仅停留在阅读代码上,一定要改代码,这样才能增加对开源代码的理解. 5.做笔记,把这个开源代码实现的功能,实现方式.

22个值得收藏的Android开源代码-UI篇

  FileBrowserView 一个强大的文件选择控件.界面比较漂亮,使用也很简单.特点:可以自定义UI:支持复制.剪切.删除.移动文件:可以用在Fragment.ativity.DialogFragment中:支持快速切换目录. 项目地址: https://github.com/psaravan/FileBrowserView MultiItemRowListAdapter 多列效果的ListView,采用重新包装adapter的方式,使你的ListView可以显示成多列,跟普通的List