The website uses cookies. By using this site, you agree to our use of cookies as described in the Privacy Policy.
I Agree

怎样从实际场景上理解粒子滤波(Particle Filter)?

最近在做移动机器人定位(Mobile Robot Localisation),粒子滤波是其中重要的概念和方法,之前看了好多文章,一直没理解,有没有大神…
被浏览
83,582
匿名用户
匿名用户
疯言疯语
如果你对一个算法有什么用都一无所知,那么学这个算法的难度那就增加了100倍。——

首先我们看看粒子滤波怎么用的。我以粒子滤波可以用来机器人自主定位为例。现在已知机器人脑子里面有某个商场的地图,然后它想知道自己到底在哪。注意:现在机器人已知商场地图,并且能看到周围长啥样,需要求机器人位于地图哪个位置(就像我们人自己在商场都经常迷路不知道自己在哪)。那么根据粒子滤波算法机器人怎么知道自己在地图中哪个位置呢?
前面我们提到机器人是知道地图的,所以机器人先猜自己的位置,然后根据自己当前的观测来缩小猜的范围。下面这幅图就是一个商场的地图,红点是机器人猜自己可能在的位置。蓝色是建筑物。然后它根据自己的摄像头或者雷达看周围环境,比如它能够看到圆形建筑物,(由于机器人已知商场的地图)那么它根据刚刚的观测就可以确定自己在商场的中央区域。这样就可以缩小猜的范围。

然后它再走两下发现,自己右侧有三个建筑物,然后猜测的范围又缩小了。

就这样根据观测和地图来不断缩小猜测范围,最终可以确定机器人所在的位置。

如果对你有帮助,你的赞和关注是我分享的最大动力

具体的公式推导和具体编程我有时间再更!——第一次更新2019年8月28日17:11:56

本文首发于答主的CSDN博客:https://blog.csdn.net/varyshare/article/details/100113697

猜你喜欢:

继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续

更多回答

自动驾驶,工科博士。君子在上则息万物之嚣,在下则平一方之难。
几年前我也很困惑,后来看到了这篇通俗的介绍(转载自基于粒子滤波的物体跟踪),希望对你有帮助:

一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去。一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu/~hess/)实现的这个粒子滤波。从代码入手,一下子就明白了粒子滤波的原理。根据维基百科上对粒子滤波的介绍(Particle filter),粒子滤波其实有很多变种,Rob Hess实现的这种应该是最基本的一种,Sampling Importance Resampling (SIR),根据重要性重采样。下面是我对粒子滤波实现物体跟踪的算法原理的粗浅理解:

1)初始化阶段-提取跟踪目标特征
该阶段要人工指定跟踪目标,程序计算跟踪目标的特征,比如可以采用目标的颜色特征。具体到Rob Hess的代码,开始时需要人工用鼠标拖动出一个跟踪区域,然后程序自动计算该区域色调(Hue)空间的直方图,即为目标的特征。直方图可以用一个向量来表示,所以目标特征就是一个N*1的向量V。

2)搜索阶段-放狗
好,我们已经掌握了目标的特征,下面放出很多条狗,去搜索目标对象,这里的狗就是粒子particle。狗有很多种放法。比如,a)均匀的放:即在整个图像平面均匀的撒粒子(uniform distribution);b)在上一帧得到的目标附近按照高斯分布来放,可以理解成,靠近目标的地方多放,远离目标的地方少放。Rob Hess的代码用的是后一种方法。狗放出去后,每条狗怎么搜索目标呢?就是按照初始化阶段得到的目标特征(色调直方图,向量V)。每条狗计算它所处的位置处图像的颜色特征,得到一个色调直方图,向量Vi,计算该直方图与目标直方图的相似性。相似性有多种度量,最简单的一种是计算sum(abs(Vi-V)).每条狗算出相似度后再做一次归一化,使得所有的狗得到的相似度加起来等于1.

3)决策阶段
我们放出去的一条条聪明的狗向我们发回报告,“一号狗处图像与目标的相似度是0.3”,“二号狗处图像与目标的相似度是0.02”,“三号狗处图像与目标的相似度是0.0003”,“N号狗处图像与目标的相似度是0.013”...那么目标究竟最可能在哪里呢?我们做次加权平均吧。设N号狗的图像像素坐标是(Xn,Yn),它报告的相似度是Wn,于是目标最可能的像素坐标X = sum(Xn*Wn),Y = sum(Yn*Wn).

4)重采样阶段Resampling
既然我们是在做目标跟踪,一般说来,目标是跑来跑去乱动的。在新的一帧图像里,目标可能在哪里呢?还是让我们放狗搜索吧。但现在应该怎样放狗呢?让我们重温下狗狗们的报告吧。“一号狗处图像与目标的相似度是0.3”,“二号狗处图像与目标的相似度是0.02”,“三号狗处图像与目标的相似度是0.0003”,“N号狗处图像与目标的相似度是0.013”...综合所有狗的报告,一号狗处的相似度最高,三号狗处的相似度最低,于是我们要重新分布警力,正所谓好钢用在刀刃上,我们在相似度最高的狗那里放更多条狗,在相似度最低的狗那里少放狗,甚至把原来那条狗也撤回来。这就是Sampling Importance Resampling,根据重要性重采样(更具重要性重新放狗)。
(2)->(3)->(4)->(2)如是反复循环,即完成了目标的动态跟踪。
根据我的粗浅理解,粒子滤波的核心思想是随机采样+重要性重采样。既然我不知道目标在哪里,那我就随机的撒粒子吧。撒完粒子后,根据特征相似度计算每个粒子的重要性,然后在重要的地方多撒粒子,不重要的地方少撒粒子。所以说粒子滤波较之蒙特卡洛滤波,计算量较小。这个思想和RANSAC算法真是不谋而合。RANSAC的思想也是(比如用在最简单的直线拟合上),既然我不知道直线方程是什么,那我就随机的取两个点先算个直线出来,然后再看有多少点符合我的这条直线。哪条直线能获得最多的点的支持,哪条直线就是目标直线。想法非常简单,但效果很好。
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
填坑。

粒子滤波的本质是monte-carlo模拟,即它是通过对目标区域中物体可能出现的位置概率的一种估测。

我们来考虑机器人中的SLAM(Simultaneous Location And Mapping),这个比较直观。

1. 假设,我们现在有一辆小车,小车前后左右装了4个距离探测器。我们把这个小车放到一件房间里,这个房间摆放了很多障碍物,有桌子,有椅子。我们假设这个房间的摆放已经被某些方法获知了,这样我们可以拿到一张这个房间的完整地图。

2. 当小车刚刚被扔到这个房间,最初它是处于一种懵逼的状态,除了房间本身的摆设,尺寸的信息,自己究竟处于什么位置,它是完全不知道的。

3. 最开始,我们会假设这个小车初始的位置可以出现在这个房间的任何一个角落

4. 小车开始用距离探测器探测当前它前后左右的障碍物离它有多远,假设这个距离向量是Ds(前后左右一共4个距离)。

5. 在这个房间里,任何一个位置周边障碍物与这个位置的距离都是可以计算出来的。我们首先把这个房间均匀地分成M个方块,对每个方块中心位置计算出一个距离向量Dx,我们把这些Dx放在一个集合里面Dset。

6. 很自然地,我们可以比较Ds和Dset里面所有的Dx,如果Ds和Dx比较接近,那么我们可以认为小车处于x这个位置的可能性会高一点。

7. 现在,小车在房间的不同位置出现的可能性就不是相同的了,自然有地方会高一些(Ds,Dx差异小一些)有一些地方会低一些(Ds,Dx差异大一些)。我们用Px表示小车在每个位置出现的概率。

8. 接下来,小车朝着某一个方向移动了一些距离Ms。

9. 在移动前,位置x上小车出现的概率是Px,那么这个概率会因为移动而转移到位置x+Ms上,这个过程我们叫做状态转移。

10. 所有的Px都会因为小车的移动从最初的位置移动Ms落到新的位置上,这样,小车在每个位置出现的概率Px就彻底经过了一次更新。

11. 接下来,我们对Px更高的位置以及这个位置的周边划分出更多,更小的方块出来,而对Px低的区域划分面积大一些的方块,如果Px太小了,那么这个位置直接就被我们排除掉,这个过程我们叫做重采样。之所以划分尺寸不一样的方块,是为了确保在我们假设小车均匀出现在各个位置的概率时,会因为格子的密度不同而在不同区域产生不同的概率分布。

12. 然后我们重复6-11步

13. 在小车不停的移动中,我们反复计算Px和重新划分位置方块,所起到的作用就是持续地逼近小车在这个房间所处位置的概率分布,一直到它最终落到一个唯一的区域里面。

14. 这个计算过程中,有两个问题需要小心处理:第一,如果小车对周边的距离计算有误差,在第11步中我们可能会过早地排除掉一些不应该排除的位置,这是粒子滤波中的die-out问题,直观上就是粒子滤波跑着跑着就不见了,这时候只能重置滤波器或者将滤波器的状态回滚;第二,如果小车的移动距离没有超出一个方块,那么它的状态有可能没法实现转移,如果几次累计 下来,可能造成滤波器没有跟上状态的转移,直观上就是滤波的效果总是慢几拍。

15. 大部分的粒子滤波器往往都假设一些很理想的状态转移与重采样的情况。而实际上,由于计算能力和数据采集能力的限制,大部分的粒子滤波往往都是建立在一些稀疏的Dset上面,这样有可能会造成一些隐藏的状态被转移到观察点上。我的理解是,基于稀疏Dset的粒子滤波必须要确保每次的状态转移的偏置量足够大。放狗的理论在视频跟踪里是行得通的,因为它要处理的是一幅完整的图像。
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
Measure
Measure
Summary | 2 Annotations
机器人是知道地图
2021/01/14 19:41
猜自己的位置
2021/01/14 19:41