Gmapping 激光雷达建图原理、流程、优缺点、工程坑点(通俗易懂)

Gmapping 是 ROS 生态里面最经典的2D 激光 SLAM 算法

输入:2D 激光雷达数据 + 机器人里程计;

输出:二维栅格地图

适用:室内小 / 中等场景,比如办公室、机房、仓库;不适合大场景、室外

一、核心工作原理

Gmapping 基于粒子滤波(Rao‑Blackwellized 粒子滤波)。 通俗比喻:

机器人不知道自己精确位置,同时撒出来很多 “假想机器人(粒子)”,每一个粒子代表机器人的一个可能位置

  1. 底盘里程计给出轮子转动数据,所有粒子按照里程计一起往前走
  2. 激光雷达扫出来周围墙壁障碍物轮廓,把每个粒子假设位置下 “理论应该看到的环境”,和真实雷达点云做比对;
  3. 和雷达匹配得越准的粒子,权重变高;匹配很差的粒子直接丢弃;
  4. 不断保留靠谱粒子,淘汰错误粒子;用最优粒子不断拼接生成栅格地图;
  5. 栅格地图:每个小格子标记「占用(障碍物)、空闲(可以走)、未知」。

⚠️ Gmapping 非常依赖里程计! 如果轮子编码器噪声大、打滑严重,粒子很快全部跑偏,地图直接糊掉。 它不单独靠激光做定位,里程计是重要输入。

需要的传感器输入

  1. 2D 激光雷达(/scan话题)
  2. 机器人里程计(/odom,轮子编码器输出)

不需要 IMU 也可以跑,但 IMU 可以改善旋转打滑场景。

输出:

  • /map 栅格地图话题
  • map.pgm + map.yaml 保存地图文件

二、完整实操工作流程(ROS1)

  1. 启动机器人底盘,发布里程计/odom
  2. 启动激光雷达驱动,发布/scan激光数据
  3. 启动 gmapping算法节点

bash

运行

rosrun gmapping slam_gmapping
  1. 遥控器操控小车缓慢匀速遍历整个环境
    • 速度不能太快,尤其转弯要慢;
    • 把所有房间、过道全部走一遍,不要漏区域;
  2. rviz 中订阅/map查看实时建图效果
  3. 环境全部走完,执行保存地图

bash

运行

rosrun map_server map_saver -f mymap

生成 mymap.pgm(图片地图) + mymap.yaml(地图配置),后续导航直接加载这张地图。

三、关键参数通俗解释(工程最常用)

表格

参数 通俗含义 经验取值
particles 粒子数量,粒子越多,容错越强,但 CPU 占用越高 30‑80;小场景 30,大室内 80
delta 地图分辨率,每个栅格多大 0.05(5cm 一格,最常用)
linearUpdate 小车平移多少米,做一次地图更新 0.5
angularUpdate 小车旋转多少弧度,触发一次更新 0.3
xmin xmax ymin ymax 地图最大边界,提前框定建图范围 根据场地设置

粒子太少:容易建图漂移、重影;粒子太多:嵌入式板(RDK X5)CPU 占用飙升卡顿。

四、优点

  1. 算法成熟,ROS 开箱即用,资料极多;
  2. 小室内环境,里程计正常时,建图效果很好;
  3. 对激光雷达帧率要求不算苛刻;
  4. 输出标准栅格地图,可以直接供给 move_base 导航、巡逻任务使用。

五、缺点(工程坑点非常重要)

  1. 极度吃里程计 轮子打滑、地面光滑、麦克纳姆轮漂移严重 → 地图重影、错位。麦克纳姆轮小车直接跑 gmapping 效果通常很差,需要先优化里程计。
  2. 不适合大场景 面积超过 1000㎡以上,粒子会发散,地图越来越歪。大场景优先用 Cartographer。
  3. 闭环能力弱 当机器人绕一大圈回到起点,Gmapping 很难识别闭环,不能自动修正累计误差;看到回环错位,只能重新建图。

Cartographer 有闭环检测,这点远强于 Gmapping。

  1. 动态物体干扰 人来回走动,会在地图上留下伪障碍物噪点。
  2. 仅支持 2D,不能处理高度信息。

六、Gmapping vs Cartographer 简单对比

表格

项目 Gmapping Cartographer
算法 粒子滤波 图优化,支持闭环检测
里程计依赖 强依赖 可以容忍较差里程计
适用规模 中小室内 中小室内、大场景都可以
CPU 消耗 中等 较高
闭环修正 几乎没有 有闭环,回环后修正整张地图
麦克纳姆轮小车 容易漂移 表现更好

选型建议:

  • 小房间、阿克曼 / 普通差分轮、里程计质量好 → Gmapping 够用。
  • 麦克纳姆轮、大仓库、希望回环校正误差 → 直接上 Cartographer。

七、现场建图实操避坑要点

  1. 移动速度一定要慢,转弯减速,不要猛冲猛转;
  2. 建图环境尽量减少来回走动的人群;
  3. 玻璃镜面环境激光容易失效,地图会出现空洞;
  4. 建图过程一旦发现地图明显重影错位,不要继续跑,直接重启重新建图
  5. 麦克纳姆轮底盘:轮子滑移大,odom 本身误差大,gmapping 效果一般,优先 Cartographer。

八、后续使用

建好的 map 地图,供给导航模块:实现雷达巡逻、自主导航避障。

Gmapping 只负责建图,不负责导航巡逻;巡逻是 move_base 导航栈完成。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐