Introduction to Kalman Filter

卡尔曼滤波是个啥?

Reading time ~6 minutes

Table of Contents


What is Kalman Filter(KF)?

对于某一个系统,假定知道当前状态\(X_{t-1}\),存在以下两个问题:

  • 经过时间\(\Delta t\)后,下一个状态\(X_{t}\)如何求出?
  • 假定已求出\(X_{t}\),同时在\(t\)时刻接收到传感器的非直接信息\(Z_{t}\),如何利用\(Z_{t}\)来对状态\(X_{t}\)进行修正呢?

以上两个问题就是卡尔曼滤波要解决的,可以简要概括如下:

  • 预测未来
  • 修正当下

As an example

一维运动为例,假定有一个小车,开始位于\(x=\mu_1\)的位置,但是由于误差的存在,其真实分布是高斯分布1,其方差是\(\sigma_{1}^{2}\),即其原始位置分布是\(N(\mu_1,\sigma_{1}^{2})\),当该小车经过运动,到达终点位置,但是由于运动也是不准确的(受轮胎打滑等因素影响),其移动过程的分布也是高斯分布,移动分布为\(N(\mu_2,\sigma_{2}^{2})\),那么其最终的位置分布是怎样的呢?

这是一个预测过程,求预测位置符合全概率法则,即:

$ N(\mu',{\sigma'}^2)=N(\mu_1+\mu_2,\sigma_1^2+\sigma_2^2) \tag{1} \label{eq1}$

考虑另外一种情况,同样是一维运动,有一个小车开始时位于\(x=\mu_1\)的位置,但由于误差的存在,其真实分布是方差为\(\sigma_1^2\)的高斯分布,即其开始位置的分布为\(N(\mu_1,\sigma_{1}^{2})\),此时有一个传感器检测到该小车位于\(x=\mu_2\),分布的方差为\(\sigma_2^2\),那么小车的真实分布是多少呢?

这是一个感知过程,其符合贝叶斯法则,最终分布是两个分布相乘,即:

$ N(\mu',{\sigma'}^2)=N(\mu_1,\sigma_1^2) \times N(\mu_2,\sigma_2^2)=N(\frac{\mu_1\sigma_2^2+\mu_2\sigma_1^2}{\sigma_1^2+\sigma_2^2},\frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2}) \tag{2} \label{eq2}$

One step further

下面将感知过程中的利用到的贝叶斯法则扩展到多维,这也是卡尔曼滤波的核心

已知在一维模式下,两个分布融合得到的均值和方差分别为:

$ \mu'=\frac{\mu_1\sigma_2^2+\mu_2\sigma_1^2}{\sigma_1^2+\sigma_2^2}=\mu_1+\frac{\sigma_1^2(\mu_2-\mu_1)}{\sigma_1^2+\sigma_2^2} $
$ {\sigma'}^2=\frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2}=\sigma_1^2-\frac{\sigma_1^4}{\sigma_1^2+\sigma_2^2} $

我们令

$ K=\frac{\sigma_1^2}{\sigma_1^2+\sigma_2^2} $

则有:

$ \mu'=\mu_1+K(\mu_2-\mu_1) $
$ {\sigma'}^2=\sigma_1^2-K\sigma_1^2 $

将该结果扩展到多维情况下,得到:

$ \pmb{K}=\Sigma_1(\Sigma_1+\Sigma_2)^{-1} $
$ \pmb{\mu'}=\mu_1+\pmb{K}(\mu_2-\mu_1) \tag{3} \label{eq3} $
$ \Sigma'=\Sigma_1-\pmb{K}\Sigma_1 $

该公式会在卡尔曼滤波的修正更新过程中用到。


Multi-dimention

考虑一个二维状态的例子:

已知小车在\(t\)时刻的状态\(\pmb{X_{t}}\),其表示为一个拥有2个分量的向量,分量分别表示位置信息\(p\)和速度信息\(v\),即:

$ \pmb{X_{t}}=\begin{bmatrix}p\\ v \end{bmatrix} =\begin{bmatrix}x_{t}\\ \dot{x_{t}} \end{bmatrix} $

但这个状态不一定准确,其不确定性用协方差矩阵表示(为什么?):

$ \pmb{P_{t}}=\begin{bmatrix}\Sigma_{pp}&\Sigma_{pv}\\ \Sigma_{vp}&\Sigma_{vv} \end{bmatrix} $

Prediction

加速度等视作外部因素,只考虑小车本身的运动,有:

$ x_{t}=x_{t-1}+ \dot{x}_{t-1}\Delta t $
$ \dot{x}_{t}=\qquad \quad \dot{x}_{t-1} \quad $

用矩阵表示:

$ \pmb{\hat{X}_{t}}=\begin{bmatrix} 1 &\Delta t\\ 0 & 1 \end{bmatrix} \pmb{\hat{X}_{t-1}} =\pmb{F} \pmb{\hat{X}_{t-1}} $

注:考虑\(\Delta t\)为常量,此时状态转换矩阵\(F_t\)不变,故简写为\(F\),下同。

状态变化的过程中引入了新的不确定性,根据协方差的乘积公式:

$ Cov(x)=\Sigma $
$ Cov(\pmb{A}x)=\pmb{A}\Sigma\pmb{A}^T \tag{4} \label{eq4} $

可得:

$ \pmb{\hat{X}_{t}} = \pmb{F} \pmb{\hat{X}_{t-1}} $
$ \pmb{P_{t}} = \pmb{F} \pmb{P_{t-1}}\pmb{F}^T $

考虑外部因素\(\pmb{u_{t-1}}\),如引入加速度 \(a_{t-1} = \ddot{x}_{t-1}\):

$ x_{t}=x_{t-1}+ \dot{x}_{t-1}\Delta t + \frac{1}{2} \ddot{x}_{t-1} \Delta t^2 $
$ \dot{x}_{t}=\qquad \quad \dot{x}_{t-1} \quad+\quad \ddot{x}_{t-1} \Delta t $

写成矩阵形式:

$ \pmb{\hat{X}_{t}} = \pmb{F} \pmb{\hat{X}_{t-1}} + \begin{bmatrix} \frac{1}{2} \Delta t^2\\ \Delta t \end{bmatrix} \ddot{x}_{t-1} $
$ = \pmb{F} \pmb{\hat{X}_{t-1}} + \pmb{B}\pmb{u_{t-1}} \quad $

同时,还存在环境误差,以\(\pmb{Q_{t-1}}\)表示。最终预测的形式呈现为:

$ \pmb{\hat{X}_{t}} = \pmb{F} \pmb{\hat{X}_{t-1}} + \pmb{B} \pmb{u_{t-1}} $
$ \pmb{P_{t}} = \pmb{F} \pmb{P_{t-1}}\pmb{F}^T + \pmb{Q_{t-1}} $

小结:

  • 新的最优估计之前最优估计预测加上已知的外界影响的修正。
  • 新的不确定度预测的不确定度加上环境的不确定度

Correction

通过预测过程我们已经得到了\(\pmb{X_{t}}\)和\(\pmb{P_{t}}\)。下一步我们要通过观测到的测量值\(\pmb{Z_{t}}\)对\(\pmb{X_{t}}\)和\(\pmb{P_{t}}\)进行修正更新。由于这个过程不再涉及\(t-1\)时刻的状态和误差,因此将\(\pmb{X_{t}}\)、\(\pmb{P_{t}}\)和\(\pmb{Z_{t}}\)省略为\(\pmb{X}\)、\(\pmb{P}\)和\(\pmb{Z}\),以方便阅读。

由于传感器观测得到的数据信息\(\pmb{Z}\)与\(\pmb{X}\)的尺度不尽相同,因此我们需要一个转换矩阵\(\pmb{H}\)将\(\pmb{X}\)转换为\(\pmb{Z}\)的尺度,即:

$ \pmb{\hat{Z}} = \pmb{H} \pmb{\hat{X}} $

借助公式$\eqref{eq4}$,有:

$ \pmb{\Sigma} = \pmb{H} \pmb{P} \pmb{H}^T $

目前,我们得到了\(\vec{x}\)方向(1-D)上的两个分布:

  • 预测(Prediction)值\(\pmb{X}\)的分布\(N(\vec{x};\mu_1,\sigma_1^2)\)
  • 测量(Measurement)值\(\pmb{Z}\)的分布\(N(\vec{x};\mu_2,\sigma_2^2)\)

在修正过程中,这两个分布融合得到\(\pmb{X'}\),记其分布为\(N_{fused}\),由公式$\eqref{eq2}$得到:

$ N_{fused}(\vec{x};\mu_{fused},\sigma_{fused}^2) = N(\vec{x};\mu_1,\sigma_1^2) \times N(\vec{x};\mu_2,\sigma_2^2) $

扩展到二维情况,由公式$\eqref{eq4}$,我们得到:

  • 预测(Prediction)值\(\pmb{X}\)对应的均值和协方差为\((\pmb{\mu_1},\Sigma_1)=(\pmb{H \hat{X}},\pmb{HPH^T})\)
  • 测量(Measurement)值\(\pmb{Z}\)对应的均值和协方差为\((\pmb{\mu_2},\Sigma_2)=(\pmb{Z},\pmb{R})\)

借助公式$\eqref{eq3}$,有:

$ \pmb{HX'} = \pmb{HX} + \pmb{K} (\pmb{Z}-\pmb{HX}) $
$ \pmb{HP'H^T} = \pmb{HPH^T} - \pmb{K}\pmb{HPH^T} $

其中,

$ \pmb{K} = \pmb{HPH^T(HPT^T+R)^{-1}} $

将第二个式子左乘\(\pmb{H^{-1}}\);第三个式子左乘\(\pmb{H^{-1}}\),右乘\(\pmb{(H^T)^{-1}}\),得到:

$ \pmb{X'} = \pmb{X} + \pmb{K'} (\pmb{Z}-\pmb{HX}) $
$ \pmb{P'} = \pmb{P} - \pmb{K'}\pmb{HP} $

其中,

$ \pmb{K'} = \pmb{PH^T(HPT^T+R)^{-1}} $

\(\pmb{X'}\)和\(\pmb{P'}\)就是经过测量、更新之后的状态不确定性,至此,卡尔曼滤波的一步就完成了。以此为基础进行不断迭代,就可以用卡尔曼滤波实现系统的定位


To sum up

整个过程中,卡尔曼滤波共有5个公式,分别为预测过程的2个公式和测量修正过程的3个公式:

  • 预测过程:
$ \pmb{\hat{X}_{t}} = \pmb{F} \pmb{\hat{X}_{t-1}} + \pmb{B} \pmb{u_{t-1}} $
$ \pmb{P_{t}} = \pmb{F} \pmb{P_{t-1}}\pmb{F}^T + \pmb{Q_{t-1}} $
  • 更新过程:
$ \pmb{K'} = \pmb{PH^T(HPT^T+R)^{-1}} $
$ \pmb{X'} = \pmb{X} + \pmb{K'} (\pmb{Z}-\pmb{HX}) $
$ \pmb{P'} = (1 - \pmb{K'}\pmb{H})\pmb{P} $

What’s more?

如果考虑系统的运动是非线性的情况呢?这时我们不能再简单地用\(x=vt\)来描述系统的运动。自然地,引出非线性系统下的卡尔曼滤波——扩展卡尔曼滤波(EKF)

此外,还有卡尔曼滤波的诸多变体,如UKF、CKF、QKF、MSCKF等等,基于扩展卡尔曼滤波的SLAM模型EKFSLAM……


  1. Gaussian Distribution,又称正态分布 

Implementation of Hash Table

Published on June 09, 2023

ADASIS v2 review

Published on July 05, 2022