7. 实战:把 gmapping 跑起来,参数怎么调
上一篇:6. 源码走读:一帧激光的旅程 | 下一篇:8. 从理解到实现:迷你gmapping
一、快速上手(ROS1)
1 2 3 4 5 6 7 8 9 10 11 12
| roslaunch turtlebot3_gazebo turtlebot3_world.launch
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
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 的问题。
四、判断建图质量的三个抓手
/entropy 话题:粒子滤波的不确定度(越低越好,回环错位时会飙升);
- RViz 看粒子云(debug 模式):粒子是否聚成一团(健康)还是散开(快丢了);
- 地图边缘锐利度:墙是一条细线 = 匹配准;墙有毛边/重影 = 匹配漂了。
五、本篇小结
- 上手三件套:仿真 + teleop + RViz,
map_saver 存图;
- 参数四组:粒子滤波 / 扫描匹配 / 更新阈值 / 地图与里程计;
- 调参顺序心法:里程计 -> minimumScore -> 粒子数;
- 回环错位是 gmapping 的先天缺陷,无参可调。
📚 参考:ROS1系列(参数详解章节,本文主要依据)、不可错过的使用与解释、SLAM_Gmapping建图、Gmapping建图