“最近写论文用到了EKF,以前都只是对滤波问题了解工程上的大概,这次对相关知识做一个系统性的总结。
参考资料:
一、扩展卡尔曼滤波(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吧。,继续搬砖了。