对无迹卡尔曼滤波(UKF)和粒子滤波(PF)的理解

对无迹卡尔曼滤波(UKF)的总结:
EKF通过在工作点附近进行一阶泰勒展开来线性化非线性的运动方程和观测方程。这样的线性近似在高度非线性的情况下存在较大误差。而UKF换了一个线性化的思路。1)选取2n+1个点(sigma点),n为状态向量的维度。为每个sigma点分配权重。2)用采样的点计算出下一状态的均值和方差。公式如下所示:
μ y = ∑ i W i g ( X i ) Σ y = ∑ i W i ( g ( X i ) − μ y ) ( g ( X i ) − μ y ) T \begin{array}{l}{\boldsymbol{\mu}_{y}=\sum_{i} W_{i} \mathbf{g}\left(\mathbf{X}_{i}\right)} \\ {\Sigma_{y}=\sum_{i} W_{i}\left(\mathbf{g}\left(\mathbf{X}_{i}\right)-\boldsymbol{\mu}_{y}\right)\left(\mathbf{g}\left(\mathbf{X}_{i}\right)-\boldsymbol{\mu}_{y}\right)^{T}}\end{array} μy=iWig(Xi)Σy=iWi(g(Xi)μy)(g(Xi)μy)T
X i \mathbf{X}_{i} Xi为采样点, W i W_{i} Wi为权重值, μ y \mu_{y} μy为计算出的状态量均值, Σ y \Sigma_{y} Σy为对应的方差。
3)后续的操作就与KF是一致的了。

UKF用选取的有限个采样点去近似预测和测量状态量的高斯分布。这样的近似方法使UKF无需计算雅克比矩阵。相对于EKF的单点线性化,UKF的近似误差会更小一点。

主要的操作是
1)如何选取采样点?
2)如何给采样点分配权重?

示例代码:
UKF-C++

参考网址:
概率机器人——扩展卡尔曼滤波、无迹卡尔曼滤波
无迹卡尔曼滤波-1 这篇文章讲述了EKF误差产生的原因。
无迹卡尔曼滤波-2
再谈EKF与UKF——先验线性化与后验线性化

对粒子滤波(PF)的总结:
UKF用少数点来近似状态分布。但它依然在卡尔曼滤波对系统的线性、高斯假设下。当系统的线性程度很差的时候,卡尔曼滤波的效果也不会太好。而且卡尔曼滤波很难实现全局定位。所以它主要用于位置追踪。粒子滤波属于无参数滤波,它没有具体的得到后验结果的函数,其思路是用粒子集近似系统状态的分布。所以它可以近似任何系统状态分布。这样的特性也为它处理全局定位和机器人绑架问题奠定了基础。

粒子滤波的主要步骤如下:
1.用运动模型更新粒子集的预测状态。
2.用观测模型计算每个粒子的权重。
3.重采样粒子,使粒子集向权重大的粒子靠拢。
4.用粒子集的均值状态量来表征机器人的状态。

其中决定粒子滤波性能的关键步骤就是重采样。所以重采样的策略需要慎重考究。

参考网址:
概率机器人——粒子滤波

你可能感兴趣的:(SLAM)