1. SLAM 是什么:一个”鸡生蛋”的故事

上一篇:0. 基本数学 | 下一篇:2. 机器人眼中的世界:传感器与栅格地图


一、先讲个故事:蒙眼探索办公楼

想象你被蒙上眼睛、坐轮椅推进一栋从没来过的办公楼,手里只有两样东西:

  1. 轮椅轮子上的计步器(= 里程计):”我刚才大概往前走了 3 米,左转了 90°”;
  2. 一根能旋转 360° 的盲杖(= 激光雷达):每挥一圈,告诉你”正前方 2.1 米是墙、右边 1.3 米是桌子腿、……”

现在要求你:一边搞清楚自己在楼里的位置,一边画出整层楼的平面图。

你很快会遇到死循环:

1
2
3
4
5
flowchart LR
A["想画地图?"] -->|"得先知道自己在哪<br/>不然墙画在哪?"| B["想知道自己在哪?"]
B -->|"得有地图参照<br/>'我在走廊三分之一处'"| A
style A fill:#fce8e6,stroke:#d93025
style B fill:#fce8e6,stroke:#d93025

这就是 SLAM(Simultaneous Localization And Mapping,同时定位与建图)的本质困境

定位需要地图,建图需要定位,两者互为先决条件–一个”鸡生蛋、蛋生鸡”问题。

SLAM 算法的全部意义,就是打破这个死循环。gmapping 给出的解法,是本系列第 4 篇的主角。


二、SLAM 两个字的精确定义

任务 输入 输出
定位 Localization 传感器数据 + 已知地图 我在哪(位姿 $x, y, \theta$)
建图 Mapping 传感器数据 + 已知位姿 环境长什么样(地图 $m$)
SLAM 只有传感器数据 位姿 + 地图同时都要

机器人领域的三大件:建图、定位、路径规划。SLAM 正好卡在建图 ∩ 定位的交集上:

1
2
3
4
5
6
7
flowchart TD
M["🗺️ 建图 Mapping"] --- SLAM
L["📍 定位 Localization"] --- SLAM
SLAM["SLAM<br/>(两者交集)"]
P["🧭 路径规划 Planning<br/>(通常在SLAM之后, 依赖地图)"]
SLAM -.->|"有了地图+定位"| P
style SLAM fill:#fef7e0,stroke:#b06000

三、SLAM 门派地图:gmapping 站在哪

3.1 按传感器分

门派 传感器 特点
激光 SLAM 激光雷达(+里程计) 测距精准、不受光照影响、工业主流(扫地机器人/仓储 AGV)
视觉 SLAM 相机(单目/双目/RGBD) 便宜、信息丰富,但受光照/纹理影响大

gmapping 是激光 SLAM

3.2 按后端解法分(更关键!)

两大门派的区别在于”怎么求解那个鸡生蛋问题”:

滤波派(贝叶斯递推) 图优化派
思路 每来一帧数据,在线更新对”位姿+地图”的概率估计 把历史位姿当节点、传感器约束当,构建因子图,整体优化
代表 gmapping(粒子滤波)、Hector Cartographer、Karto
优点 实时性好、小场景精度高 支持回环检测、大场景、内存省
缺点 无回环、大场景内存爆炸(见第 9 篇) 计算量大、矩阵运算重

一个直觉对比:滤波派像”边走边记日记,写完不回头改”;图优化派像”写完整本日记后通读一遍,把前后矛盾的地方全部修正”(回环检测就是发现”这一页说的走廊和第 3 页是同一条”)。

3.3 gmapping 的江湖地位

  • 2007 年 Grisetti 等人论文《Efficient Rao-Blackwellized Particle Filters for SLAM》(TRO);
  • 基于 RBPF 粒子滤波(滤波派),是 ROS 里最老牌、最常用的 2D 激光 SLAM 之一;
  • 小场景(室内、几百平米)精度高、算得快、参数少–至今仍是扫地机器人、教学实验的主力;
  • 大场景、需要回环的场景让位给 Cartographer。

四、SLAM 系统的通用流水线(所有算法都长这样)

无论哪个门派,激光 SLAM 都可以拆成四块:

1
2
3
4
5
6
7
8
flowchart LR
S["🔊 传感器数据<br/>激光+里程计"] --> F["前端 Odometry<br/>粗略估计'我动了多少'<br/>(gmapping: 里程计+扫描匹配)"]
F --> B["后端<br/>累积误差怎么处理<br/>(gmapping: 粒子滤波)"]
B --> L["↩️ 回环检测<br/>'我是不是来过这儿?'<br/>(gmapping: ❌没有!)"]
B --> M["🗺️ 建图<br/>更新栅格地图"]
style S fill:#e8f0fe,stroke:#1a73e8
style B fill:#fef7e0,stroke:#b06000
style L fill:#f1f3f4,stroke:#5f6368

gmapping 在这张图里的填空:前端 = 里程计 + 扫描匹配;后端 = RBPF 粒子滤波;回环 = 无;地图 = 2D 栅格图。后面几篇逐个填满。


五、本篇小结

  • SLAM = 蒙眼画地图:定位和建图互为先决条件的死循环;
  • gmapping = 激光 + 滤波派(粒子滤波)+ 无回环 + 2D 栅格地图;
  • 通用流水线四件套:传感器 -> 前端 -> 后端 -> 地图(+回环)。

📚 参考:Gmapping算法原理及源代码解析(SLAM 分类与框架图)、GMapping原理分析(滤波 vs 图优化对比)