每日浅读SLAM论文——简析Gmapping


Gmapping是基于粒子滤波的二维激光SLAM算法,虽然自从cartographer出现后已经不太使用了(因为他没有回环,且随着地图大小提升需要更多粒子,算法复杂度过高),但是它任然是一个非常优秀的算法,因此花一点点时间稍微讲述一下。

粒子滤波算法

我们直接从粒子滤波框架开始讲起(我会讲的很浅显,即便你不会粒子滤波,但是要真正掌握还是要认真看推导,比如去看概率机器人)。

首先 χ t − 1 \chi_{t-1} χt1是上一帧的粒子(每个粒子都携带着一张地图及机器人的之前的位姿), u t u_t ut代表这一次的运动, z t z_t zt代表观察到的激光。

从第3行开始看,循环1-M就是对每个粒子(即地图)进行操作;第4行是根据运动模型采样一个当前位姿,即在之前的地图上再运动 u t u_t ut,当然这个运动是个分布,采样结果在 u t u_t ut附近;第5行,根据目前移动到的位置,以及在这个位置下激光打到的结果,打个分数(比如激光打到地方在地图上也是障碍物+1分这种),这样可以给每个粒子计算一个权重,乘上之前的权重,权重最高的那个粒子就会被认为是目前的结果。

8-11行是在进行重采样,因为随着算法进行,有些粒子权重会非常低,几乎不能表示真是情况,且消耗计算资源,因此我们会将权重高的粒子多复制几份,权重低的可能就丢弃了。
在这里插入图片描述

Gmapping改进

直接看这篇文章吧,写的很好
Gmapping主要改进了两点

  • 改进提议分布,第4行使用运动模型对粒子进行的采样,但运动模型方差很大,采样的结果很分散,需要更多粒子才有机会抽到真实情况。因此Gmapping在这一步中就考虑了观测,利用观测数据进行了采样,使得采样更加集中。
  • 减少重采样次数,频繁重采样会导致粒子多样性丢失,有些更好的粒子可能在过程中丢失,经常十分钟后的例子已经完全不记得之前扫描的结果了,所有的地图之前部分都一样。作者使用了一个很巧妙的方法,用下面这个公式进行判断,当某个粒子特别重要,考虑极端情况某个粒子重要性为1,其他都为0,那么 N e f f N_{eff} Neff非常小,需要进行重采样。重采样后,粒子的权重都变得差不多(小权重被丢弃), N e f f N_{eff} Neff变得很大。
    N e f f = 1 Σ i = 1 N ( ω i 2 ) N_{eff}=\frac{1}{\Sigma_{i=1}^N(\omega_i^2)} Neff=Σi=1N(ωi2)1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值