同步定位与建图(Simultaneous Localization and Mapping, SLAM)是移动机器人和自动驾驶中的核心技术。本文以思维导图的形式,系统性地梳理了 SLAM 的完整知识体系,涵盖前端、后端、回环检测等核心模块。
知识图谱
下图展示了 SLAM 的完整技术栈,包括传感器类型、前端里程计、后端优化、地图表示等核心知识点及其相互关系。
1. SLAM 到底在解什么问题
SLAM 的全称是 Simultaneous Localization and Mapping,也就是“同步定位与建图”。这个名字容易让人误以为它是两个独立任务的简单相加:一边定位,一边建图。实际上,SLAM 的难点恰恰在于二者互相依赖:
没有地图,就很难知道自己在哪; |
所以 SLAM 的核心不是“画地图”,而是在不完全知道自身位姿的情况下,持续估计:
$$ p(x_{1:t}, m \mid z_{1:t}, u_{1:t}) $$其中 $x_{1:t}$ 是机器人从过去到现在的轨迹,$m$ 是地图,$z_{1:t}$ 是传感器观测,$u_{1:t}$ 是运动控制或里程计输入。
这篇知识图谱可以按一句话理解:SLAM 是一个把传感器观测、运动模型、几何约束和概率优化放在一起的状态估计系统。
2. 一条主线:从观测到地图
SLAM 最容易让人迷路,是因为名词太多:VO、VIO、LiDAR SLAM、BA、Pose Graph、Loop Closure、ICP、Bundle Adjustment、Factor Graph。把它们放到系统流水线里,会清楚很多:
传感器输入 |
每一层解决的问题不同:
| 模块 | 主要问题 | 常见方法 |
|---|---|---|
| 传感器 | 世界怎么被观测 | Camera、IMU、LiDAR、Wheel Odometry |
| 前端里程计 | 相邻帧之间怎么对齐 | Feature matching、Optical Flow、ICP、Scan Matching |
| 后端优化 | 多个观测约束如何一致 | Bundle Adjustment、Pose Graph、Factor Graph |
| 回环检测 | 如何发现累计漂移 | Bag-of-Words、Place Recognition、Scan Context |
| 地图表示 | 建出的地图服务什么任务 | Sparse Map、Point Cloud、Occupancy Grid、Semantic Map |
这条线索比背术语更重要:每个 SLAM 方法都可以问,它主要改的是前端、后端、回环,还是地图表示。
3. 前端:把观测变成约束
前端的任务是从原始传感器数据里提取“可用于估计位姿的约束”。不同传感器决定了不同前端风格:
| 前端类型 | 输入 | 输出约束 | 典型难点 |
|---|---|---|---|
| Visual Odometry | 图像 | 特征匹配、重投影误差 | 光照变化、低纹理、动态物体 |
| Visual-Inertial Odometry | 图像 + IMU | 视觉重投影 + 惯性预积分 | 时间同步、尺度、IMU bias |
| LiDAR Odometry | 点云 | 点到点 / 点到面约束 | 稀疏、运动畸变、退化场景 |
| RGB-D SLAM | RGB + 深度 | 像素/点云几何约束 | 深度噪声、范围限制 |
前端不是最终答案,它只是产生约束。真正决定系统全局一致性的,是后端如何把这些约束组织起来。
4. 后端:把局部约束变成全局一致
SLAM 后端通常被写成一个优化问题。最常见的形式是最小化所有观测误差:
$$ \min_{\mathbf{x}, \mathbf{m}} \sum_i \left\| r_i(\mathbf{x}, \mathbf{m}, \mathbf{z}_i) \right\|_{\Sigma_i}^{2} $$其中 $r_i$ 是第 $i$ 个残差项,$\Sigma_i$ 表示该观测的不确定性。不同 SLAM 系统的差别,往往体现在残差怎么设计、变量怎么选、优化图怎么维护。
| 后端形式 | 优化变量 | 更适合 |
|---|---|---|
| Bundle Adjustment | 相机位姿 + 3D 点 | 视觉 SLAM / SfM |
| Pose Graph Optimization | 位姿节点 + 相对位姿边 | 大规模轨迹与回环修正 |
| Factor Graph | 多类变量 + 多类因子 | VIO、多传感器融合 |
| Sliding Window Optimization | 最近一段窗口内变量 | 实时 VIO / 在线系统 |
直观地说,前端回答“这两帧怎么对上”,后端回答“所有帧一起看,怎样最一致”。
5. 回环:为什么系统需要记得来过哪里
只靠相邻帧估计位姿,误差会持续累积。机器人走一圈回到原地时,如果系统没有意识到“这里来过”,地图就会出现错位或扭曲。回环检测的作用就是发现这种闭环约束:
当前观测 ≈ 历史某一地点 |
回环的难点有两个:
- 感知别名:不同地方看起来很像,容易误回环;
- 外观变化:同一地方在光照、季节、动态物体变化后不再相似。
因此,回环检测既是视觉识别问题,也是几何验证问题。只靠图像相似度不够,通常还需要位姿一致性或几何约束确认。
6. 地图表示:地图不是越密越好
SLAM 输出的地图服务不同任务,因此表示形式也不同:
| 地图类型 | 表达内容 | 适合任务 |
|---|---|---|
| Sparse Landmark Map | 少量稳定特征点 | 定位、BA、轻量地图 |
| Dense Point Cloud | 稠密几何结构 | 重建、测绘、可视化 |
| Occupancy Grid | 空间是否可通行 | 导航、避障、规划 |
| TSDF / SDF | 表面距离场 | 稠密重建、机器人操作 |
| Semantic Map | 几何 + 类别语义 | 自动驾驶、场景理解 |
地图不是越密越好,而是要服务下游任务。自动驾驶更关心可通行空间、道路结构和动态目标;AR/重建更关心表面细节;机器人导航更关心障碍物和拓扑连通性。
7. SLAM 与自动驾驶感知的关系
SLAM 和现代自动驾驶感知看似分属不同路线,但底层问题是相通的:
| SLAM 问题 | 自动驾驶对应问题 |
|---|---|
| 位姿估计 | ego pose / ego motion |
| 地图构建 | 在线 HD map、BEV map、occupancy |
| 回环一致性 | 长时序记忆、跨帧对齐 |
| 多传感器融合 | Camera-LiDAR BEV fusion |
| 动态物体处理 | tracking、motion prediction、world model |
区别在于,传统 SLAM 更强调几何一致性和定位精度;自动驾驶感知更强调语义、动态交互和规划可用性。近年来的 BEV 感知 和 4D Geometry / World Model 其实是在把 SLAM 的几何思想和深度学习的表示能力重新连接起来。
8. SLAM 的知识依赖链
- 几何基础:先理解相机模型、对极几何、PnP、三角化,可参考 《多视图几何中的矩阵估计与位姿求解》。
- 视觉里程计:理解两帧/多帧之间如何通过特征或直接法估计运动。
- 后端优化:理解 BA、Pose Graph、Factor Graph 和滑窗优化。
- 回环检测:理解 place recognition 如何把局部轨迹拉回全局一致。
- 地图表示:比较稀疏地图、稠密点云、occupancy 和语义地图。
- 多传感器融合:再看 VIO、LiDAR-Inertial、Camera-LiDAR fusion。
- 与自动驾驶连接:最后回到 BEV、occupancy、world model,看深度学习如何重新组织空间表示。
这张 SLAM 知识图谱目前承担主题入口的角色。后续如果继续扩展,ORB-SLAM、VINS、LOAM、LIO-SAM、Cartographer 等代表系统可以各自形成论文笔记,再接入前端、后端、回环和多传感器融合这几条分支。