9. 局限与进阶:gmapping之外的世界
9. gmapping 的局限与激光 SLAM 进阶路线
上一篇:8. 从理解到实现:迷你gmapping | 系列完结篇
一、gmapping 的三条硬伤(原理决定的,非调参能救)
1.1 内存:每个粒子都是”地图收藏家”
算一笔账(沿用 原理分析 的例子):
1 | 场地 200m × 200m,分辨率 5cm,每格 1 字节 |
即便有第 6 篇的地图树共享,地图差异随轨迹分歧增大,共享收益逐渐消失。
1.2 无回环检测:走过回头路就”翻旧账”
flowchart LR
A["走过一大圈<br/>回到起点"] --> B["里程计漂移累积<br/>(误差可能好几米)"]
B --> C["gmapping: 没有回环检测<br/>不知道'这是同一个地方'"]
C --> D["❌ 地图错位/重影<br/>(加粒子只能缓解)"]
style D fill:#fce8e6,stroke:#d93025
滤波框架”边走边写不回头”的设计使它天然无法回填修正历史–这是与图优化框架的代差。
1.3 粒子数两难
粒子少 -> 大场景/强噪声下丢解;粒子多 -> 内存/算力线性涨。改进提议分布(第 5 篇)缓解但没根治。
二、横向对比:三大 2D 激光 SLAM
| gmapping (2007) | Hector (2011) | Cartographer (2016, Google) | |
|---|---|---|---|
| 框架 | 粒子滤波(RBPF) | 扫描匹配(高斯牛顿) | 图优化(submap + 回环) |
| 里程计 | 必须有(提供先验) | 不需要(为救灾不平地面设计) | 不需要(手持也能用) |
| 雷达频率要求 | 低(5Hz 可用) | 高(40Hz+) | 中 |
| 回环检测 | ❌ | ❌ | ✅(分支定界搜索) |
| 大场景 | ❌ 内存爆 | 中 | ✅ |
| 计算特征 | 快、省(小场景) | 极快但快速转向易崩 | 重(矩阵优化,Ceres) |
| 适用 | 室内机器人/扫地机 | 高频雷达/无轮平台 | 大场景/手持/商用主力 |
选型口诀:室内小场景有里程计 -> gmapping;没有里程计但雷达好 -> Hector;要回环、要大图、机器管够 -> Cartographer。
三、滤波 vs 图优化:一张图看懂代差
flowchart TD
subgraph F["滤波派 (gmapping): 在线递推"]
A1["t=1 更新"] --> A2["t=2 更新"] --> A3["t=3 更新..."]
A3 -.->|"❌ 历史已定, 不能回头改"| A1
end
subgraph G["图优化派 (Cartographer): 全局优化"]
B1["位姿=节点<br/>约束=边"] --> B2["发现回环: '节点A=节点Z'<br/>加一条边"] --> B3["整体重优化<br/>✅ 全图误差摊平"]
end
style F fill:#fef7e0,stroke:#b06000
style G fill:#e6f4ea,stroke:#188038
类比(第 1 篇的延续):滤波派 = 边走边记日记不修改;图优化派 = 写完通读全书、修正所有矛盾。
四、进阶学习路线(从这里出发)
flowchart LR
NOW["📍 你在这里<br/>gmapping 入门完成"] --> A["同代吃透<br/>Hector(高斯牛顿扫描匹配)<br/>Karto(图优化入门)"]
A --> B["现代主流<br/>Cartographer(submap/回环/分支定界)"]
B --> C["3D 时代<br/>LOAM系/LeGO-LOAM/LIO-SAM<br/>(激光里程计+IMU紧耦合)"]
B --> D["多传感器融合<br/>EKF/ESIKF 融合轮速+IMU+激光"]
style NOW fill:#e8f0fe,stroke:#1a73e8
| 里程碑 | 学什么 | 承接本系列哪块 |
|---|---|---|
| Hector | 纯扫描匹配的极限 | 5 §扫描匹配 |
| Karto | 图优化最小入门 | 9 §三 的对照面 |
| Cartographer | 回环检测/子图/工程化 | 全部 |
| LIO 系 | 3D + IMU 紧耦合 | 2 传感器融合的延伸 |
五、系列总结:九篇一张图
flowchart TD
N0["0️⃣ 概率/贝叶斯/链式法则"] --> N1["1️⃣ SLAM=鸡生蛋, 门派地图"]
N1 --> N2["2️⃣ 激光/里程计/栅格地图/TF"]
N2 --> N3["3️⃣ 粒子滤波: 撒-打分-淘汰, Neff"]
N3 --> N4["4️⃣ RBPF: 拆成 定位(采样)+建图(解析)"]
N4 --> N5["5️⃣ 两大改进: 提议分布+自适应重采样"]
N5 --> N6["6️⃣ 源码: processScan 逐行对号"]
N5 --> N7["7️⃣ 实战调参"]
N6 --> N8["8️⃣ 迷你实现 200 行"]
N7 & N8 --> N9["9️⃣ 局限与进阶路线"]
style N5 fill:#fef7e0,stroke:#b06000
style N9 fill:#e6f4ea,stroke:#188038
最终一句话:gmapping = 链式法则拆解(RBPF)+ 扫描匹配增强的提议分布 + Neff 自适应重采样 + 地图树省内存。理解了它,你就理解了整个粒子滤波 SLAM 时代的思想与黄昏。
📚 参考:原理分析(优缺点/内存账/与 Cartographer 对比,本文主要依据)、源代码解析(滤波 vs 图优化分类)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 TeachCraft Blog!
评论