2D激光slam四种算法建图效果对比

article/2025/8/28 2:49:44

slam算法对照

通过麦克纳姆轮机器人小车构建地图对比Gmapping、Hector、Karto、Cartographer四种算法的优缺点
真实场景图如下图所示:
在这里插入图片描述
具体步骤为:
1、打开地图构建命令

roslaunch turn_on_wheeltec_robot mapping.launch

2、打开rviz

rviz

3、打开控制小车命令(手柄、键盘)

roslaunch   wheeltec_robot_rc   keyboard_teleop.launch

4、进行地图构建然后自定义保存

rosrun map_server map_saver -f 地图名

一、Gmapping算法

Gmapping算法框架是基于RBPF粒子滤波算法,先进行定位再进行建图,Gmapping在RBPF算法上做了两个主要的改进:改进提议分布和选择性重采样。
RBPF是用来解决SLAM问题,就是先进行定位再进行建图。RBPF的主要问题在于其复杂度高,因为需要较多的粒子来构建地图并频繁执行重采样。我们已知粒子数和计算量内存消耗息息相关,粒子数目较大会造成算法复杂度增高。因此减少粒子数是RBPF算法改进的方向之一;同时由于RBPF频繁执行重采样会造成粒子退化。因此减少重采样次数是RBPF算法的另一个改进方向。
RBPF是一种有效解决同时定位和建图的算法,它将定位和建图分离;并且每一个粒子都携带一幅地图(这也是粒子滤波不适合构建大地图的原因之一)。但PBPF也存在缺点:所用粒子数多和频繁执行重采样。粒子数多会造成计算量和内存消耗变大;频繁执行重采样会造成粒子退化。因此Gmapping在RBPF的基础上改进提议分布和选择性重采样,从而减少粒子个数和防止粒子退化。改进的提议分布不但考虑运动(里程计)信息还考虑最近的一次观测(激光)信息这样就可以使提议分布的更加精确从而更加接近目标分布。选择性重采样通过设定阈值,只有在粒子权重变化超过阈值时才执行重采样从而大大减少重采样的次数。

优点:

Gmapping可以实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高。相比Hector SLAM对激光雷达频率要求低、鲁棒性高;而相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多。Gmapping有效利用了车轮里程计信息,这也是Gmapping对激光雷达频率要求低的原因:里程计可以提供机器人的位姿先验。而Hector和Cartographer的设计初衷不是为了解决平面移动机器人定位和建图,Hector主要用于救灾等地面不平坦的情况,因此无法使用里程计。而Cartographer是用于手持激光雷达完成SLAM过程,也就没有里程计可以用。

缺点:

随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建大场景地图。并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价。所以不能像Cartographer那样构建大的地图。Gmapping和Cartographer一个是基于滤波框架SLAM另一个是基于优化框架的SLAM,两种算法都涉及到时间复杂度和空间复杂度的权衡。Gmapping牺牲空间复杂度保证时间复杂度,这就造成Gmapping不适合构建大场景地图。翻看Cartographer算法,优化相当于地图中只用一个粒子,因此存储空间比较Gmapping会小很多倍,但计算量大。优化图需要复杂的矩阵运算。

构建地图如下图所示
在这里插入图片描述

二、Hector算法

Hector算法框架是基于高斯牛顿
(Hector 在机器人快速转向时很容易发生错误匹配,建出的地图发生错位,原因主要是优化算法容易陷入局部最小值)

优点:不需要里程计,适应于空中或者路面不平坦的环境
缺点:旋转过快易发生漂移,无回环检测

构建地图如下图所示
在这里插入图片描述

三、Karto算法

Karto算法框架是基于图优化

优点:这是首个基于图优化的开源算法,利用高度优化和非迭代平方根法分解从而进行稀疏化解耦求解
缺点:无法实时构建子图,耗费时间

构建地图如下图所示
在这里插入图片描述

四、 Cartographer算法

Cartographer算法框架是基于图优化cartographer在不同环境下,调整参数和传感器配置,就能工作
大部分数据集,cartographer表现更优。ActiveSubmaps2D类中的submaps_列表实际最多只两个submap,一个认为是old_map,另一个认为是new_map,类似于滑窗操作。当new_map插入激光scan的个数达到阈值时,则会将old_map进行结束,并且不再增加新的scan。同时将old_map进行删除,将new_map作为oldmap,然后重新初始化一个新的submap作为newmap。其具体实现可看代码注解,较为简单。首先回环优化,我们需要检测到回环,再进行优化。如何检测回环呢,前文也提到过,如果当前的scan和所有已创建完成的submap中的某个laser scan的位姿在距离上足够近,那么通过某种 scan match策略就会找到该闭环。这里为了减少计算量,提高实时回环检测的效率,Cartographer应用了branch and bound(分支定界)优化方法进行优化搜索,如果得到一个足够好的匹配,到此处,回环检测部分已经结束了,已经检测到了回环得存在。接下来要根据当前scan的位姿和匹配到得最接近的submap中的某一个位姿来对所有的submap中的位姿进行优化,即使残差E最小。

优点:适应于低成本激光雷达,加速回环检测,实时性强
缺点:在几何对称环境中,易回环出错

构建地图如下图所示
在这里插入图片描述
部分参考于: https://visionary.blog.csdn.net/article/details/111143722?spm=1001.2014.3001.5506
在这里插入图片描述
Cartographer以激光雷达的扫描数据、里程计位姿、IMU测量数据、固定坐标系位姿作为输入的传感器数据。
其中,激光雷达的扫描数据是Cartographer的主要处理对象。整个定位建图过程就是根据扫描数据,来优化机器人的位姿估计和地图占用栅格概率。它通过两个体素滤波器输入到Local SLAM中完成局部地图的构建,生成一个个子图(Submaps)。
剩下的三个传感器数据主要是为了给寻优求解过程提供一个较好的初值,IMU数据是它们的主力。通过IMU跟踪器(IMU Tracker)和位姿推理器(PoseExtrapolator),为Local SLAM提供初始的位姿估计。它们的原始数据也会作用于Global SLAM中的稀疏位姿调节器(Sparse Pose Adjustment)。
里程计位姿一般是指根据移动机器人纶组上的编码器估计的机器人位姿,它是一种积分性质的位姿估计,如果机器人在运动过程中出现了打滑、碰撞等无法或者很难建模的情况时,会出现很大的误差,而且随着时间的流逝不断累积。IMU的测量数据主要是指加表和陀螺测量的线加速度和角速度。根据惯导的理论知识,我们知道IMU是可以比较准确的估计出机器人位姿的。但是同样会存在累积误差,系统长时间运行时如果不能及时修正就会爆炸。固定坐标系位姿(Fixed Frame Pose),应该是指类似GPS这样具有全局定位能力的传感器数据。这类传感器虽然能够提供全局的定位信息,但是精度和动态特性往往比较差。
Cartographer的主体则是由Local SLAM和Global SLAM两部分构成。一些资料和博客中称Local SLAM为前端,Global SLAM为后端。一般SLAM系统中的前端都只使用最近一段时间内的数据,对算力的需求较小,可以实时计算,但存在累积误差。而后端则主要是为了解决累积误差的问题而存在的,引入了闭环检测等机制,往往是对整个地图和历史轨迹的优化,数据量和计算量上都要大很多,但好在实时性上没有前端那么高的要求,可以在后台慢慢计算。但也不能慢的太过分,所以Cartogapher针对Global SLAM使用了分支定界的方式进行了优化一定程度上减少了算力的需求。
部分参考于: 无处不在的小土-Cartographer的总体框架与安装试用 (gaoyichao.com)


http://chatgpt.dhexx.cn/article/6wXd70SL.shtml

相关文章

SLAM——hector-slam算法原理解析

1、hector-slam代码框架概述 下载源码:git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git 原理解读参照:https://blog.csdn.net/weixin_40047925/article/details/80679496 其中包含了许多用于仿真的文件,hector slam算法主…

激光SLAM算法学习(三)——3D激光SLAM

3D激光SLAM 1、3D激光SLAM的介绍 3D激光SLAM的输入: IMU数据 3D激光雷达数据 里程计数据 3D激光SLAM的输出: 3D点云地图 机器人的轨迹 or PoseGraph 2、3D激光SLAM的发展 3D激光SLAM的帧间匹配方法——点云配准算法 Point-to-Plane ICP Feature-based Method 3D激光SLAM的回…

SLAM 算法的一些简单的介绍和理解,有的是从别的地方找到的资料,感觉很有道理。

SLAM(Simultaneous localization and mapping),我们要达到的目的就是估计机器人(传感器-比如相机)的位置轨迹,然后创建地图。locating和map两者互相依赖,密不可分。然而我们 已知的信息一个是 observation&…

2021年开源SLAM算法

1.TANDEM:Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo 慕尼黑工业大学Daniel Cremers团队,实时单目跟踪稠密建图纯视觉SLAM,采用Realsense D455(深度传感器IMU,但只用RGB) 项目地址:https…

激光SLAM技术总结(3)3D激光SLAM算法原理

目录 1. 3D激光SLAM简介 2. 3D激光雷达SLAM 3. 高精度V-LOAM方案 4 发展趋势 1. 3D激光SLAM简介 在 3D 激光 SLAM 领域中, 由 Zhang J 等人提出的LOAM 方案,利用 3D 激光雷达采集数据, 进行基于特征点的扫描匹配, 利用非线性…

实习:slam算法的学习整理

1.odom 2.updata_odom 3.updata_laser updata_landmark 4.resample pf.c 相机的位姿转换是基于世界坐标系的,观察到的路标也会在世界坐标系中不断收敛,若不是计算错误,基本上不会产生漂移。而IMU是自身坐标系标定的,在转换到…

关于slam

什么是SLAM?机器人在未知环境中,要实现智能化需要完成三个任务,第一个是定位(Localization),第二个是建图(Mapping),第三个则是随后的路径规划(Navigation)。 之前地平线的高翔博士用这样一句话概括SLAM的释义。不过实际生活中的…

SLAM介绍

https://blog.csdn.net/tiandijun/article/details/55212968 SLAM 1.  前言 读者朋友们大家好!(很久很久)之前,我们为大家介绍了SLAM的基本概念和方法。相信大家对SLAM,应该有了基本的认识。在忙完一堆写论文、博…

【动态SLAM】快速入门(原理介绍及经典算法)

【动态SLAM】快速入门(原理介绍及经典算法) 0 简介1. 传统视觉SLAM技术的局限2. 常用算法:2.1 基于深度学习的分割方法2.1.1 目标检测(Object Detection)2.1.2 语义分割(INstance Segmentation)…

Visual SLAM算法笔记

MulinB按:最近在学习SLAM算法,这里作为阅读笔记记录和总结一下。这里关注的主要是基于视觉的Visual SLAM或Visual Odometry,也包括一部分图像和IMU融合的Visual-Inertial Odometry相关算法。 注:下文中部分链接指向Google Schola…

一起自学SLAM算法:8.2 Cartographer算法

连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLAM中的数学基础 第8章-激光SLAM系统 8.1 Gmapping算法 8.2 Cartographe…

开源3D激光(视觉)SLAM算法汇总(持续更新)

目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 一、Car…

SLAM | 激光SLAM中开源算法对比

点击上方“AI算法修炼营”,选择加星标或“置顶” 标题以下,全是干货 前面的话 好久没有更新SLAM系列的文章了,前面我们讲到了激光SLAM技术。基于激光雷达的同时定位与地图构建技术(simultaneous localization and mapping&#xf…

激光SLAM算法学习(一)——激光SLAM简介

激光SLAM算法学习(一) 激光SLAM简介 1、SLAM是什么 SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写,最早由Hugh Durrant-Whyte 和 John J.Leonard提出。SLAM主要用于解决移动机器人在未知环境中运行时定位导航与地…

SLAM算法

一、概述 Simultaneous Localization and Mapping (SLAM)原本是Robotics领域用来做机器人定位的,最早的SLAM算法其实是没有用视觉camera的(Robotics领域一般用Laser Range Finder来做SLAM)。本文主要关注基于camera图像做SLAM的算法&#xf…

SLAM算法(一)即同步定位与地图构建了解

文章目录 一、SLAM 简介二、SLAM 技术简介三、slam算法实现的几个要点有趣的事,Python永远不会缺席培训说明 一、SLAM 简介 SLAM(Simultaneous Localization and Mapping同步定位与地图构建) 是业界公认视觉领域空间定位技术的前沿方向,它主要的作用是让…

盘点机器人常用的几大主流SLAM算法

SLAM可以说是近几年最火的机器人技术之一,也是机器人领域的关键技术。不少同学表示,学了几年还在「爬坑」,甚至感觉「越学越难」。本文通过整理机器人领域常用的SLAM算法架构及特点,希望为大家的方向选择提供一些参考。 01 SLAM是…

一起自学SLAM算法:7.7 典型SLAM算法

连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLAM中的数学基础 7.1 SLAM发展简史 7.2 SLAM中的概率理论 7.3 估计理论 …

slam原理介绍和经典算法

1.传统slam局限性 slam算法假设的环境中的物体都是处于静态或者低运动状态的,然而,现实世界是复杂多变的,因此这种假设对于应用 环境有着严格的限制,同时影响视觉slam系统在实际场景中的应用性。当环境中存在动态物体时&#xff0…

【漫画】程序员系列苏大强版表情包

点击上方“ 程序IT圈 ”,选择“置顶公众号” 关键时刻,第一时间送达! 整理来源于菜鸟要飞 今天抽空给大家收集了一份苏大强版程序员系列表情包,分享给大家,希望你能够喜欢 。下面做个投票,看看你最喜欢哪个…