7. 实战:把 gmapping 跑起来,参数怎么调

上一篇:6. 源码走读:一帧激光的旅程 | 下一篇:8. 从理解到实现:迷你gmapping


一、快速上手(ROS1)

1
2
3
4
5
6
7
8
9
10
11
12
# 终端1: 仿真环境(乌龟或自定义 world)
roslaunch turtlebot3_gazebo turtlebot3_world.launch

# 终端2: gmapping 建图
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

# 终端3: 键盘遥控走一圈
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

# RViz 中添加 Map/TF 显示, 看着地图慢慢长出来
# 保存地图
rosrun map_server map_saver -f my_map

gmapping 的接口(对着 第 2 篇 的输入输出看):

方向 内容
订阅 /scan(sensor_msgs/LaserScan)、/tf(需有 odom->base_link)
发布 /map(OccupancyGrid, latched)、/map_metadata/entropy(定位不确定度)、TF map->odom
服务 dynamic_map(请求当前地图)

二、参数速查表(按作用分组)

2.1 粒子滤波参数(对应第 3/5 篇)

参数 默认 含义(原理对应) 调法
particles 30 粒子数 3. 粒子滤波:一千个分身猜位置 大场景/快速旋转/长走廊 -> 加大(100~200);日常 30 够
resampleThreshold 0.5 Neff/N 低于它才重采样 5. gmapping的两大改进 一般不动;调低=更少重采样保多样性,调高=更激进
minimumScore 50 扫描匹配最低得分,低于则放弃匹配退回纯里程计 地图糊/错位时先调它:环境特征多可加到 80+

2.2 扫描匹配参数(对应第 5 篇改进一)

参数 默认 含义
sigma 0.05 撒 K 个候选时的高斯扰动 σ(平移)
sstep/dstep 0.05 优化步长
lstep/astep 0.05 爬山搜索步长
iterations 5 扫描匹配优化迭代次数
lsigma 0.075 似然场平滑 σ
ogain 3.0 得分增益
kernelSize 1 每个粒子的候选采样数 K

2.3 更新阈值(对应第 6 篇 processScan 触发条件)

参数 默认 含义 调法
linearUpdate 0.2 m 平移超过它才处理新帧 雷达频率低/电脑慢 -> 调大,减少计算
angularUpdate 0.2 rad 旋转超过它才处理 快速转向的机器人适当调小防丢
temporalUpdate -1 s 时间间隔阈值(-1 关闭) 想固定频率处理时启用

2.4 地图与里程计

参数 默认 含义 调法
delta 0.05 m 栅格分辨率 精度要求高 -> 0.03/0.02,但内存×2~6
maxUrange 80 激光用于建图的最大距离 设为雷达量程的 80%(去掉远端噪声)
xmin/ymin/xmax/ymax -100~100 地图边界 按实际场地设小,省内存
srr/str/srt/stt 0.01~0.02 里程计误差模型(平移/旋转引起平移/旋转) 打滑多 -> 调大,粒子撒得更开

三、对症下药:常见症状与处方

症状 病因猜测 处方
地图”重影”/墙面有多个影子 扫描匹配失败,位姿修正不动 minimumScore ↑;检查雷达是否水平;maxUrange
快速转弯时地图撕裂 旋转太快,两帧间运动先验太差 angularUpdate ↓(更勤处理);particles ↑;里程计误差参数 ↑
走回原地但地图对不上(回环错位) gmapping 没有回环检测(先天) 增大 particles 硬扛 / 换 Cartographer(见 9. 局限与进阶:gmapping之外的世界)
内存占用暴涨 粒子多 × 地图大 particles ↓、delta ↑、xmin... 范围 ↓
长走廊里定位漂移 走廊特征少,扫描匹配无约束 里程计误差参数微调;现实中贴几块纸箱”造特征” 😄
CPU 打满 处理频率过高 linearUpdate/angularUpdate ↑,throttle_scans

调参心法:先保证里程计靠谱(TF 树完整、轮距轮径标定),再动 minimumScore,最后才是粒子数。80% 的”gmapping 不准”其实是里程计/TF 的问题。


四、判断建图质量的三个抓手

  1. /entropy 话题:粒子滤波的不确定度(越低越好,回环错位时会飙升);
  2. RViz 看粒子云(debug 模式):粒子是否聚成一团(健康)还是散开(快丢了);
  3. 地图边缘锐利度:墙是一条细线 = 匹配准;墙有毛边/重影 = 匹配漂了。

五、本篇小结

  • 上手三件套:仿真 + teleop + RViz,map_saver 存图;
  • 参数四组:粒子滤波 / 扫描匹配 / 更新阈值 / 地图与里程计;
  • 调参顺序心法:里程计 -> minimumScore -> 粒子数
  • 回环错位是 gmapping 的先天缺陷,无参可调。

📚 参考:ROS1系列(参数详解章节,本文主要依据)、不可错过的使用与解释、SLAM_Gmapping建图、Gmapping建图