粒子滤波天然就可以处理非线性情况,还可以处理多峰分布(全局定位)。
它是一个非参滤波器,没有像高斯分布一样有μ和Σ这类参数。
其中每一个x代表一个状态的假设,而w为对应的权重(一般是跟地图的匹配程度)
流程
首先当前时刻的粒子从上一帧传播过来
然后评估每个粒子的权重
根据权重进行重采样
以权重的概率接收粒子,权重低的粒子就大概率被抛弃了。
状态传播
从之前的贝叶斯滤波公式我们知道,
提议分布
在粒子滤波中,我们t-1时刻的后验概率分布
(结合底下的权重评估部分。我猜上式子是想说
所以当前时刻的提议分布最终是这样)
(视频里面这里没讲清楚数学公式,只会意会)
(我的理解)那粒子滤波中t时刻的状态传播其实就不是对概率分布进行更新,而是对每个粒子单独预测传播,(所以抛弃了积分公式?)更新过程就是
而每个粒子的传播是根据运动学模型来的
权重评估
我们无法得到实际分布,我们的粒子可以体现实际分布,
但是粒子只能从预测分布里面采样,我们要从预测分布的粒子生成实际分布的粒子,通过权重。
权重定义
,即后验概率分布和提议分布的比值。
对于某个粒子(所以积分符号没了)
后验概率分布模型
提议分布模型
因此权重
也就是观测模型
(其实视频里面这里说的拗口,可否直接说因为所以
)
权重更新
可以看到,我们实际上没有得到真实后验概率分布。
我们通过上一个时刻的后验概率分布,提议了本时刻后验概率分布(以粒子的形式构成分布)。
而这些粒子通过加权去靠近真实的后验概率分布。
而权重实际计算是通过观测模型获得。
绕回来之后还是:t时刻后验概率分布=观测模型*提议分布。(提议分布=运动模型*t-1时刻后验概率分布)
重采样
虽然我们通过在观测,让符合观测的粒子获得更高的权重,让不符合观测的粒子获得更小的权重。
我们的权重看起来像分布的形状了
但是我们粒子的分布并没有改变,我们希望让大权重的地方有更多的粒子,就能更好的近似真实后验概率分布。
实际就是把现在所有的粒子权重排到一起,生成随机数,落到哪个权重范围内,就对那个粒子进行采样(复制)
直到有n个粒子。
重采样的目的是用提议分布的粒子和观测模型的权重来生成符合后延概率分布的粒子群。
算法流程
粒子滤波的问题
粒子耗散
就是重采样带来的问题,多次重采样之后,粒子就都是从同一个粒子或者少数几个粒子而来。
对于建图来说是很大的问题,gmapping就表现不好。(我印象中是说粒子丢失之后,丢失了很多历史信息?)
维数灾难
三维空间6个自由度,覆盖整个6自由度要巨量采样
当提议分布很差,也就是里程计很差,我们得到的概率分布很扁平(没有峰值,不敢确认哪里才是正确分布)
最后得到分布就需要很多例子去表示,而如果有峰值的采样,我们就在峰值那里丢几个粒子来表示就好了。