06-定位与SLAM-激光SLAM
作者:姚博文 · 2026-09-15
激光 SLAM — 从扫描匹配到建图:GMapping / Cartographer / SLAM Toolbox / LIO 全解
定位:讲清"一帧激光怎么对齐地图"(相关法/ICP/NDT)与"整张地图怎么闭合"(GMapping/Cartographer/SLAM Toolbox/LIO-SAR/fast-lio),附全部常用参数与小车选型结论 | 适用:智能小车/移动机器人开发
1\. 概述
1.1 这篇解决什么问题
SLAM(Simultaneous Localization and Mapping,同步定位与建图)要解决一个"鸡生蛋"问题:
· **建图**需要先知道"我在哪",才能把每一帧激光放到地图的正确位置;
· **定位**又需要先有地图,才能判断"我在地图的哪里"。
SLAM 的解法是**同时估计两样东西**:
| 估计对象 | 记号 | 内容 | 输出 |
| --- | --- | --- | --- |
| 轨迹(位姿序列) | $\mathbf{x}_{1:t}$ | 每一时刻机器人在地图系下的位姿 | 路径、最终地图的"骨架" |
| 地图 | $\mathbf{M}$ | 环境的几何表示(2D 栅格或 3D 点云) | map.pgm / 点云地图 |
并且靠\*\*回环检测(Loop Closure)\*\*修正累积漂移:当小车绕一圈回到起点,算法识别出"我回到来时的路了",把整条轨迹的漂移一次性摊平——这就是"地图闭合、没有重复走廊"的原理。
与"定位"的关系:
| 阶段 | 地图 | 位置 | 做什么 |
| --- | --- | --- | --- |
| 建图(Mapping,SLAM) | 未知,边建边用 | 未知,边建边估 | 一次性(或长时间在线)产出地图 |
| 定位(Localization) | 已知 | 未知 | 长期在线,用激光+地图算"我在地图哪里"(AMCL,见 定位与状态估计.md) |
💡 一句话分工:**SLAM 是"画地图的同时知道自己画到了哪";定位是"拿着地图找自己"。** 小车流程是:先 SLAM 建图(M3 前半)→ 冻结地图 → 之后每天用 AMCL 定位导航(M3 后半 + M4)。
1.2 在自主导航链路中的位置
对应 `00-路线图/学习路线图.md` 的全链路与里程碑 M3("跑一圈房间,地图闭合"):
关键点:
1. SLAM 输出的地图是**静态地图**——它只描述墙、柱子、长期障碍,不包含人、车等动态物体(Nav2 的动态障碍由 costmap 实时处理,见 `07-路径规划与导航/`);
2. SLAM 的输入至少是**一帧激光**;3D LIO(fast-lio/LIO-SAR)输入是**激光+IMU**;
3. 2D 建图算法(GMapping 等)依赖**轮式里程计**提供运动预测;LIO 不依赖轮子,靠 IMU。
1.3 本文覆盖
1. **扫描匹配(Scan Matching)三大方法**:相关法/似然场(Correlation / Likelihood Field)、ICP(含纯标准库可运行的 2D ICP 代码)、NDT——所有 SLAM 的"基本动作";
2. **GMapping**:Rao-Blackwell 粒子滤波 + 似然场,无回环,简单够用;
3. **Cartographer**:子图(Submap)+ 位姿图(Pose