从零理解Gmapping的SLAM算法

论文下载:百度网盘: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(stst1[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(ztst[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算法核心流程的步骤概览:

Neff小于阈值
Neff足够大
地图更新与输出
用最优粒子路径
更新栅格地图
发布地图与变换
粒子处理循环
采样与运动更新
基于运动模型预测位姿
扫描匹配优化
利用观测优化位姿
更新粒子权重
计算观测与地图匹配度
新激光数据到达
计算有效粒子数Neff
判断是否需要重采样
重采样
淘汰低权重粒子并复制高权重粒子
跳过本次
等待下一帧数据

3. 优势与局限

特性维度优点缺点
精度与计算效率在中小型室内场景中,构建地图精度较高,且计算量相对较小不适合构建大场景地图。场景增大时,所需粒子数和内存急剧增长(每个粒子都携带一张地图),计算量也大幅增加。
传感器依赖有效利用里程计信息,对激光雷达的频率要求相对较低严重依赖里程计精度。在里程计误差大或地面不平整(打滑)的场景中,效果会变差。
回环检测-没有显式的回环检测模块,依赖粒子多样性来闭合回环,回环过大时可能地图错位,通常需要增加大量粒子才能缓解。
实时性与资源在适用场景下可以实时建图构建大地图时内存消耗巨大。
适用性非常适合地面移动机器人(如扫地机、仓储AGV)在结构化室内环境中使用。无法适应无人机或地面严重不平坦的场景。

与其他经典激光SLAM算法的简单对比如下:

算法核心原理里程计依赖回环检测特点
Gmapping粒子滤波严重依赖中小场景精度高,计算量相对小,但大地图时资源消耗大。
Hector SLAM优化(高斯牛顿)不依赖对激光雷达频率要求高(需40Hz),在机器人快速转向时易错位,可适应不平坦地面或无人机。
Cartographer图优化可融合能处理大场景和回环,精度高,但计算复杂,计算量大,通常需要更强的处理器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

具身小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值