论文下载:百度网盘:https://pan.baidu.com/s/1fQIcUYFRNXdheZYzg9mFow?pwd=zhan
Gmapping算法是机器人领域一个非常经典和实用的2D-SLAM解决方案,Gmapping作为基于滤波SLAM的经典代表,其通过RBPF分解问题,提出改进提议分布和选择性重采样等核心思想,使其在中小型室内环境中表现出色,且在ROS中集成度高,易于上手。
虽然在大场景和回环处理方面存在局限,并依赖里程计,但理解其原理和实现,不仅能便于掌握一种实用的SLAM工具,更为后续学习更复杂的基于图优化的SLAM算法(如Cartographer)打下基础,本文从基本原理、核心改进、优缺点等方面展开解析。
1. GMapping算法概述
Gmapping是基于滤波SLAM框架的开源算法,跟FastSLAM一样采用了RB粒子滤波器(RBPF),将复杂的SLAM问题(同时定位与建图)分解为定位和建图两个相对独立的过程,先进行定位(估计机器人轨迹),在已知轨迹的基础上再进行建图,即以概率基础:
P(位姿, 地图 | 观测, 控制) = P(位姿 | 观测, 控制) * P(地图 | 位姿, 观测)。
简单来说,Gmapping通过粒子滤波来估计机器人的运动轨迹(定位),而每个粒子都独立维护一张地图(建图),最终的全局地图由权重最高的那个粒子(最优粒子)所维护的地图产生。
2. 核心原理:RBPF粒子滤波
Gmapping的基石是RBPF粒子滤波,每个粒子都是一个对机器人整个运动路径(位姿历史)和环境的完整假设。
每个粒子包含的信息:
-
一条机器人路径的历史假设: s [ k ] = s 1 , s 2 , . . . , s t s^{[k]} = s_1, s_2, ..., s_t s[k]=s1,s2,...,st ([k]是粒子索引)。
-
一张基于该路径假设的地图:通常为栅格地图(每个栅格有占用、空闲、未知三种状态)。
一个权重: w [ k ] w^{[k]} w[k],代表该粒子(即该路径和地图假设)正确的可能性。
算法循环(处理一帧激光数据):
-
采样(运动更新): 对于每个粒子,根据运动模型(通常基于里程计信息 u t u_t ut)和上一时刻的位姿,预测当前时刻的位姿,并加上一定的随机噪声(采样), s t [ k ] = p ( s t ∣ s t − 1 [ k ] , u t ) s_t^{[k]} = p(s_t | s_{t-1}^{[k]}, u_t) st[k]=p(st∣st−1[k],ut)。这一步之后,粒子会散开,因为噪声使得大家对当前位置的猜测变得不同。
-
观测更新(扫描匹配): 这是Gmapping的第一个关键改进,它不仅依赖运动模型,还利用了当前的激光观测数据 z t z_t zt。通过扫描匹配技术,在当前粒子预测位姿的一个小邻域内,寻找一个使得当前激光数据与粒子自身地图匹配得最好的位姿,并用这个更优的位姿更新该粒子的当前位姿假设,这极大地提高了提议分布的准确性,减少了对粒子数量的需求。
-
计算重要性权重: 更新每个粒子的权重 w t [ k ] ∝ p ( z t ∣ s t [ k ] , m [ k ] ) w_t^{[k]} ∝ p(z_t | s_t^{[k]}, m^{[k]}) wt[k]∝p(zt∣st[k],m[k]),权重反映了在当前粒子的位姿假设下,观察到实际激光数据 z t z_t zt 的似然概率,简单说,就是当前激光数据与粒子地图的匹配程度越高,权重越大。
-
选择性重采样: 这是Gmapping的第二个关键改进,重采样会淘汰权重低的粒子,复制权重高的粒子,但频繁重采样会导致粒子退化,通过引入有效粒子数(Neff) 作为触发条件: N e f f = 1 Σ ( w i 2 ) Neff = \frac1{ Σ(w_i^2)} Neff=Σ(wi2)1。只有当 Neff 小于设定阈值(表明粒子权重差异很大,分布集中)时,才进行重采样,这有效减少了不必要的重采样次数,保持了粒子多样性。
以下是Gmapping算法核心流程的步骤概览:
3. 优势与局限
特性维度 | 优点 | 缺点 |
---|---|---|
精度与计算效率 | 在中小型室内场景中,构建地图精度较高,且计算量相对较小 | 不适合构建大场景地图。场景增大时,所需粒子数和内存急剧增长(每个粒子都携带一张地图),计算量也大幅增加。 |
传感器依赖 | 有效利用里程计信息,对激光雷达的频率要求相对较低 | 严重依赖里程计精度。在里程计误差大或地面不平整(打滑)的场景中,效果会变差。 |
回环检测 | - | 没有显式的回环检测模块,依赖粒子多样性来闭合回环,回环过大时可能地图错位,通常需要增加大量粒子才能缓解。 |
实时性与资源 | 在适用场景下可以实时建图 | 构建大地图时内存消耗巨大。 |
适用性 | 非常适合地面移动机器人(如扫地机、仓储AGV)在结构化室内环境中使用。 | 无法适应无人机或地面严重不平坦的场景。 |
与其他经典激光SLAM算法的简单对比如下:
算法 | 核心原理 | 里程计依赖 | 回环检测 | 特点 |
---|---|---|---|---|
Gmapping | 粒子滤波 | 严重依赖 | 无 | 中小场景精度高,计算量相对小,但大地图时资源消耗大。 |
Hector SLAM | 优化(高斯牛顿) | 不依赖 | 无 | 对激光雷达频率要求高(需40Hz),在机器人快速转向时易错位,可适应不平坦地面或无人机。 |
Cartographer | 图优化 | 可融合 | 有 | 能处理大场景和回环,精度高,但计算复杂,计算量大,通常需要更强的处理器。 |