ROS1 机器人 SLAM:Gmapping 算法详解与实战
本文将深入讲解 Gmapping 算法的原理,并通过实战演示如何使用 Gmapping 进行 2D 激光 SLAM 建图。
1. Gmapping 算法简介
1.1 什么是 Gmapping?
Gmapping 是一种基于**粒子滤波(Rao-Blackwellized Particle Filter, RBPF)**的 2D 激光 SLAM 算法。它由 Giorgio Grisetti 等人于 2007 年提出,是 ROS 中最经典、应用最广泛的 SLAM 算法之一。
主要特点:
- 基于粒子滤波的概率框架
- 适用于 2D 激光雷达
- 需要里程计信息
- 实现成熟,稳定可靠
- 适合中小规模室内环境
1.2 算法流程概述
Gmapping 算法流程:
- 里程计数据 -> 运动预测 (Motion Model)
- 粒子集合更新
- 激光雷达数据 -> 扫描匹配 (Scan Matching) -> 观测更新 (Sensor Model)
- 粒子权重计算 -> 重采样 (Resample)
- 地图更新
2. 核心算法原理
2.1 粒子滤波基础
粒子滤波是一种序贯蒙特卡洛方法,通过一组带权重的粒子来近似表示后验概率分布。
基本思想:
- 每个粒子代表机器人可能的位姿
- 粒子带有权重,表示该位姿的可信度
- 通过迭代更新粒子来跟踪机器人位姿
数学表示:
P(x_t | z_{1:t}, u_{1:t}) ≈ Σ w_t^{[i]} δ(x_t - x_t^{[i]})
其中:
x_t^{[i]}是第 i 个粒子的位姿w_t^{[i]}是第 i 个粒子的权重- δ 是狄拉克函数
2.2 Rao-Blackwellized 粒子滤波
Gmapping 采用 RBPF,将 SLAM 问题分解为:
- 位姿估计:使用粒子滤波
- 地图构建:在已知位姿的条件下,使用分析方法更新地图
这种分解大大降低了计算复杂度:
P(x_{1:t}, m | z_{1:t}, u_{1:t}) = P(m | x_{1:t}, z_{1:t}) × P(x_{1:t} | z_{1:t}, u_{:t})

