概念介绍:Cartographer 是什么,和别的 SLAM 差在哪
一、概念介绍:Cartographer 是什么,和别的 SLAM 差在哪
Cartographer 是 Google 开源的一套跨平台 SLAM 系统,最初面向室内 2D 激光雷达建图,后来扩展到 3D 激光雷达。它的输入是激光雷达扫描(LaserScan 或 PointCloud2)以及一个粗略的里程计(轮式编码器或 IMU),输出是一张一致的地图和一个机器人轨迹。它在扫地机器人、仓储 AGV、商场导览机器人里被大量使用,是 2D 激光 SLAM 中工程成熟度最高的方案之一。
Cartographer 的核心设计思想是"局部子图 + 全局位姿图"。系统把连续若干帧激光数据累积成一个 Submap(子图),子图内部用概率栅格表示占据情况。每来一帧新的扫描,先用扫描匹配把这一帧对齐到当前正在构建的子图上;当一个子图攒够数据就"封口",系统在后台做一次全局的回环检测——用一种基于分支定界的快速相关扫描匹配,在已有子图集合里找当前扫描最可能匹配的位置,找到就加一条约束边,最后用 Ceres 做位姿图优化,把所有子图的位姿和轨迹一起拉平。
这个架构带来三个直接好处。第一是计算量可控:前端只在小窗口内做扫描匹配,重活交给后台,实时性有保障。第二是回环约束是"稀疏"的,只在检测到回环时才加边,所以长时间运行不会因为约束数量爆炸而卡死。第三是它的地图是概率栅格,天然可以直接拿去做路径规划和代价地图,不需要额外转换。
和相邻方案的差别:Gmapping 是 ROS 里最老的 2D SLAM 之一,基于粒子滤波,粒子数随地图增大而爆炸,且没有回环能力,跑大场景会漂。它适合小房间快速建图,是 Cartographer 的前一代方案。Hector SLAM 不需要里程计,纯用激光做高斯牛顿扫描匹配,速度快但对激光帧率和角速度敏感,快速旋转时容易跟丢。SLAM Toolbox 是 ROS 2 时代的 2D SLAM 方案,支持终身建图和序列化地图,社区活跃度高,在 ROS 2 项目里常常是比 Cartographer 更省心的选择。LIO-SAM、FAST-LIO2 面向 3D 激光雷达加 IMU 的紧耦合方案,精度更高但计算量大,适合室外或需要三维结构的场景。
术语表如下,理解这些词才能看懂 Lua 配置文件里那些参数名。
| 术语 | 含义 | 实际影响 |
|---|---|---|
| Submap(子图) | 若干帧扫描累积成的局部栅格地图 | 子图太小则回环多但位姿图大,太大则局部精度差 |
| Trajectory(轨迹) | 一条独立的建图过程,可同时跑多条 | 多机器人或分段建图时使用 |
| Node(节点) | 加入位姿图的采样点,带时间戳与位姿 | 由运动滤波决定疏密 |
| Scan Matcher | 把当前扫描对齐到子图的优化器 | 分为实时相关匹配与 Ceres 精配准两级 |
| Branch and Bound | 加速全局回环搜索的搜索树剪枝 | 决定回环检测的耗时与召回率 |
| Trajectory Builder | 前端,区分 2D 与 3D 两套 | 配置文件里 TRAJECTORY_BUILDER_2D 与 _3D 互斥 |
| Pose Graph | 全局后端,Ceres 求解的位姿图 | POSE_GRAPH.* 参数控制优化频率与门限 |
| pbstream | Cartographer 的地图序列化格式 | 保存与加载地图、纯定位模式的基础 |

