卡尔曼滤波小结(下)

Posted by Groxyu on May 12, 2020

“最近写论文用到了EKF,以前都只是对滤波问题了解工程上的大概,这次对相关知识做一个系统性的总结。

参考资料:

EKF理解1 EKF理解2

一、扩展卡尔曼滤波(EKF)基本介绍

前文已经对Kalman Filter做了一个简单明了但粗浅的描述。前文的末尾也提到,卡尔曼滤波器的局限就在于系统过程必须是线性过程,如果是非线性过程则不可用。那么有没有办法将非线性过程转化为线性过程呢?答案是肯定的,这也是EKF的基本思路,即将非线性函数通过泰勒级数展开(通常一阶展开即可)的方式,将非线性函数在mean处的斜率做线性近似。但EKF依然建立在输入噪声和测量噪声均为高斯的前提下。

EKF系统描述方程如下:

\[X_k = g(x_{k-1},u_{k-1}) +w_k\] \[Z_k = h(x_k) + v_k\]

可以看出,系统的传递方程和观测方程用$g$,$h$两个非线性函数表示了。那么很明显,EKF就是通过将$g$,$h$两个函数线性化,实现复用基本卡尔曼滤波器的思想。当x_k只有一维的时候,很好理解。而当其为多维的时候,需要用到雅克比矩阵完成该变换(雅克比矩阵可以简单理解为多维情况下的导数)。如下图所示:

经过变换后,EKF的算法过程如下图所示(将Wiki上的算法过程做了个简单截图):

值得注意的是,在算法中,并不是所有的都会用到线性近似,比如在下一步状态估计过程(方程1)和计算残差(方程3)中,还是用的原函数而非近似后的函数。

但是,扩展卡尔曼滤波器还是有以下缺点:

  • 由于复杂的导数,可能难以解析计算雅可比矩阵。
  • 以数值方式计算雅可比矩阵,可能需要很高的计算成本。
  • 扩展卡尔曼滤波器不适用于不连续的系统,因为系统不可微分时,雅可比矩阵不存在。
  • 对于高度非线性化的系统,效果并不好。

因此后续提出的无迹卡尔曼滤波(UKF)用以解决EKF的这些问题。

二、无迹卡尔曼滤波(UKF)基本介绍

参考文章

无迹卡尔曼滤波的基本思路是,它不像EKF那样去近似非线性函数,而是直接去近似概率分布。即它经过非线性变换后,用一个高斯分布去近似下一步的概率分布。

它通过含有均值和协方差的确定的点集(称作sigma points),生成一个近似的高斯分布(经验高斯分布),并获得其均值和方差。这种方法把系统当作“黑盒”来处理,因而不依赖于非线性的具体形式。

因此,UKF的好处是:

  • 不必线性化,也不必求导,对$g$没有光滑性要求。
  • 计算量随维数增长是线性的。

三、粒子滤波器(PF)基本介绍

上述讲述的UKF的问题是,仍然假设并将下一步输出模拟成高斯分布。而PF直接干掉了高斯假设,它采用大量的采样点,去描述这个分布的方法。是一个不断采样,算权重,重采样的过程。

PF从理论上可以描述任意的分布,但是其计算量(粒子的数量),随分布是指数增长的。

在相关文章中还提到了,在当前的Slam技术中,PF已经过时了,原因是无法很好地支持动态性(传感器由于不可控的因素导致读数大幅度变化,读取值已不可信)。当前采用非线性优化(图优化),可以比较好地解决这个问题。这涉及到另外一个领域,如果后续有时间,在深入研究这方面的内容吧。

四、写在最后

待看

实际上我个人是相信理论结合实践的,虽然写了上下两篇,也只是让自己对这几种方法有了更进一步的了解,但仍然理解泛泛。而且由于时间原因,没有实际进行操作(跑个代码试试),最初的目的也仅仅是进一步了解EKF一点而已。如果后续还有时间,再结合上述视频进行一个更为详细的更新,这回的日志就先在此close吧。,继续搬砖了。