1. 项目概述
Gmapping作为ROS1环境下最经典的激光SLAM算法之一,至今仍在服务机器人、仓储AGV等领域广泛应用。这个开源算法包实现了基于粒子滤波的2D栅格地图构建,其核心价值在于:仅需单线激光雷达+里程计的基础传感器配置,就能实现实时建图与定位。我在工业巡检机器人项目中多次使用Gmapping,实测在20m×20m场景下,建图精度能达到±5cm级别。
相比HectorSLAM等无里程计方案,Gmapping对运动畸变的补偿更稳定;而与Cartographer等现代算法相比,它的计算资源占用更低(单核CPU即可流畅运行)。本文将拆解其粒子滤波框架、似然场计算等核心原理,并通过Turtlebot3实战演示完整的建图流程。特别会分享激光雷达安装高度、粒子数设置等工程经验参数。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心原理拆解
2.1 粒子滤波框架
Gmapping的核心是改进的Rao-Blackwellized粒子滤波(RBPF),每个粒子都携带一张独立的地图。其迭代过程分为三步:
-
运动更新:根据里程计数据扩散粒子
python复制# 伪代码示例:里程计运动模型 def motion_model(u, x): delta_rot1 = atan2(u[1], u[0]) - x[2] delta_trans = sqrt(u[0]**2 + u[1]**2) delta_rot2 = u[2] - delta_rot1 return x + [delta_trans*cos(x[2]+delta_rot1), delta_trans*sin(x[2]+delta_rot1), delta_rot1 + delta_rot2] -
观测更新:通过激光扫描匹配计算粒子权重
- 采用似然场(Likelihood Field)模型替代beam-endpoint模型
- 计算激光点与地图的匹配度时,会考虑传感器噪声(σ通常设0.05m)
-
重采样:保留高权重粒子,淘汰低权重粒子
- 使用低方差采样(low variance resampling)避
