1 滤波方法对比
方法 | 优点 | 缺点 |
---|---|---|
Discrete Bayes filter | 多模,非线性 | 离散,单变量 |
Kalman filter | 单模线性最优估计 | 线性,单变量 |
Unscented Kalman filter | 非线性,连续,多变量 | 非多模,难以处理非高斯/非线性 |
Extended Kalman filter | 非线性,连续,多变量 | 比UKF更难以处理非高斯/非线性 |
2 粒子滤波原理
粒子代表了状态方程中的状态变量,拥有位置和朝向,以及其他需要预测的量。每个粒子拥有一个权重,表明这个粒子与系统真实状态的契合度。采用有限数量的随机采样点(粒子)近似计算样本分布。当粒子的数量足够多,估计的分布就能够代表样本的真实分布。
3 粒子滤波一般步骤
a. 初始化
在不输入先验信息的情况下,粒子在初始化空间中的概率均相同,因此对所有粒子随机撒点,并分配相同权重
b. 预测
按照控制模型,更新粒子分布,类似卡尔曼滤波中的移动均值。
注意控制量存在随机噪声,因此粒子分布也应添加随机噪声,类似卡尔曼滤波中的增大方差。
c. 更新
按照观测模型,更新粒子权重,类似卡尔曼滤波中的似然与先验相乘得到后验。
d. 估计系统状态
最重要的一步,由粒子得到状态估计量。
对于单模系统,一般估计均值,即:
$$\mu=\frac{1}{N}\sum_{i=1}^{N}{\omega^ix^i}$$
e. 重采样
最简单的粒子滤波算法面临退化问题。随着时间推移,可用粒子越来越少(权重非常低)。因此需要重采样,将低权重粒子更换成权重高的粒子的拷贝。一种简单的重采样方法称为multinomial resampling。通过在现有粒子群中采样N次,得到新的粒子群。
我们并不会每次循环都重采样。只有当有效性N降到阈值以下,才需要重采样。
$$\hat{N}_{eff}=\frac{1}{\sum{\omega^2}}$$
4. 代码实例
将粒子滤波用于定位,这里以Atsushi Sakai的Python Robotics中的粒子滤波定位代码为例:
1 | import numpy as np |
结果如下: