4、SLAM算法选型:Gmapping、Cartographer、KartoSLAM、HectorSLAM

做导航,第一步就是建图。地图建不好,后面路径规划全是白搭。

我经常被问到:“老师,这么多SLAM算法,我到底该选哪个?”

说实话,没有银弹。每种算法都有自己的脾气。今天我就把这四种主流算法掰开揉碎了讲,把我这些年踩过的坑、攒下的经验,一股脑倒给你。

4.1 先看一张图,心里有个谱

下面这张图,是我自己总结的选型逻辑。你一看就明白,不同场景该找谁。

SLAM算法选型决策树 你的传感器是什么? ✅ 有激光雷达 ❌ 只有相机/IMU 小车/室内/低算力 → Gmapping 大场景/需要闭环 → Cartographer 结构化环境/要求稳 → KartoSLAM 无里程计/极端环境 → HectorSLAM 我的个人建议 新手入门:Gmapping(简单、快、文档多) 工业落地:Cartographer(精度高、支持闭环) 特殊场景:HectorSLAM(无里程计救星)

4.2 Gmapping:入门首选,但别太贪心

Gmapping 是我最早接触的SLAM算法。说白了,它就是基于粒子滤波的2D激光SLAM。

优点很明显:

  • 轻量级,树莓派都能跑得飞起
  • 小场景建图质量很高,误差小
  • ROS里集成度好,launch文件一拉就能跑

缺点也很致命:

  • 没有回环检测。你跑一圈回来,它不知道这是同一个地方
  • 场景一大,粒子数一多,内存就炸
  • 依赖里程计,轮子打滑它就懵了
💡 我的经验: 如果你做的是家庭扫地机器人,或者小范围巡检车,Gmapping完全够用。我曾在50平米的办公室用Gmapping建图,效果非常好。但超过500平米,我建议你换别的。

4.3 Cartographer:Google出品,必属精品

Cartographer 是Google开源的项目。它最大的亮点就是——支持回环检测。

你想想看,Gmapping建大图会飘,但Cartographer不会。它用了一种叫“子图”的机制,每建一小块图就做一次局部优化,等闭环检测到旧区域时,再全局优化一把。嗯,这招很聪明。

适用场景:

  • 大型商场、仓库、停车场
  • 需要长时间运行的机器人
  • 2D和3D都支持(3D模式用IMU+激光)
⚠️ 注意: Cartographer配置参数非常多。我曾经花了一整天调一个参数,结果发现是另一个参数没开。建议你从官方给的示例配置开始改,别自己从头写。

4.4 KartoSLAM:老牌劲旅,稳如老狗

KartoSLAM 是Slam Karto公司开源的。它用的是图优化(Graph-based SLAM),不是粒子滤波。

说白了,它把机器人的位姿和地图特征点当成一个个节点,然后用图优化来求解。这样做的好处是——精度高,且能处理大规模地图。

我个人的感受:

  • 在结构化环境(比如走廊、办公室)表现非常好
  • 比Gmapping稳定,但比Cartographer配置简单
  • ROS里叫 slam_karto,直接装包就能用
📌 一句话总结: 如果你不想折腾Cartographer那堆参数,又嫌Gmapping太弱,KartoSLAM是折中好选择。

4.5 HectorSLAM:没有里程计?找它

HectorSLAM 是个特例。它不依赖里程计,只靠激光雷达的扫描匹配来估计位姿。

为什么会这样?因为它用了高斯牛顿法,对每一帧激光数据做优化,直接算出机器人的移动。这在一些极端场景下是救命稻草。

适用场景:

  • 无人机(没有轮式里程计)
  • 履带车、四足机器人(打滑严重)
  • 手持建图设备
⚠️ 避坑指南: 我曾经在一条长走廊里用HectorSLAM,结果因为走廊太直、特征太少,算法直接飘了。HectorSLAM对激光雷达的帧率和精度要求很高,建议用30Hz以上的雷达。另外,它没有回环检测,大场景慎用。

4.6 横向对比,一目了然

算法 核心方法 回环检测 依赖里程计 适合场景 上手难度
Gmapping 粒子滤波 ❌ 无 ✅ 需要 小场景、室内 ⭐ 简单
Cartographer 子图+图优化 ✅ 有 ✅ 需要 大场景、工业 ⭐⭐⭐⭐ 复杂
KartoSLAM 图优化 ✅ 有 ✅ 需要 结构化环境 ⭐⭐ 中等
HectorSLAM 扫描匹配 ❌ 无 ❌ 不需要 无里程计场景 ⭐⭐ 中等

4.7 我的最终建议

如果你刚开始学,我建议你从 Gmapping 入手。它简单、直观,能帮你快速理解SLAM的整个流程。等你把Gmapping玩熟了,再切换到 Cartographer 做进阶。

如果你做的是商业项目,直接上 Cartographer。虽然配置麻烦点,但精度和稳定性对得起你的时间。

至于HectorSLAM,把它当成一个“备胎”。哪天你的里程计挂了,或者你换了个没轮子的平台,它就是你的救星。

💡 一个小技巧: 不管你选哪个算法,建图前一定要校准激光雷达和里程计。我见过太多人花几天调SLAM参数,结果发现是雷达装歪了。先校准,再建图,能省你80%的调试时间。

好了,这四种算法就讲到这里。每种都有它的脾气,选对了,事半功倍;选错了,天天加班。希望这张图和这些经验,能帮你少走弯路。