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