一、卡尔曼滤波

本文详细介绍了卡尔曼滤波的基本思想、作用和推导过程,通过分析状态方程和测量方程,阐述了卡尔曼滤波如何结合先验估计和测量信息来实现最优状态估计,并推导出卡尔曼增益矩阵的计算公式。文章还探讨了状态预测和测量更新两个步骤,为理解和应用卡尔曼滤波提供了基础。
摘要由CSDN通过智能技术生成


前言

最近看到MPU6050模块有dmp处理功能,并且相关资料上表示接入第三方磁力计,可以使用dmp的九轴融合,但是发现只有dmp六轴融合的固件,没有九轴融合的固件,也就是说InvenSense的手册上声称“我们的dmp支持九轴融合”,但实际上InvenSense又不给出用于MPU6050九轴融合的固件,因此实际上说了等于没有说,这个问题刚开始一直在心中疑惑不解,但最后想来应该就是这样把。
反正6050也没有办法用dmp来做九轴融合,只能在单片机上融合了,实际上这反而给我们学习AHRS的动力,这次希望通过学习总结有所进步。
通过网上查看资料,AHRS又有很多算法,这里准备选择学习扩展卡尔曼,很多博主的AHRS讲解直接默认我们会各种前置知识,但实际上我并不会,所以这个系列作为学习笔记,我会把要用到的内容逐一记录下来。


一、卡尔曼滤波的作用

首先,我认为卡尔曼滤波其实并不是滤波器,其实它是一个估计器,什么意思呢?按我的理解就是我们已知一个系统的状态方程,以及一些测量结果,由于干扰和误差的存在,系统不可能完全按照状态方程运行,我们需要结合测量结果的信息来给出更好的结果。但是通常测量结果也有误差,那么如何利用状态方程和测量结果来做出最优估计呢?这就是卡尔曼滤波要做的事情。

二、卡尔曼滤波的思路

首先系统状态方程为:
x k = Φ k − 1 x k − 1 + w k − 1 \bm x_k=\bm\Phi_{k-1}\bm x_{k-1}+\bm w_{k-1} xk=Φk1xk1+wk1

然后测量方程为:
z k = H k x k + v k \bm z_k=\bm H_k\bm x_k+\bm v_k zk=Hkxk+vk
其中: w k − 1 \bm w_{k-1} wk1是状态方程中的噪声,而 v k \bm v_k vk是测量方程中的噪声。
由于噪声的存在,不管是状态方程还是测量方程,我们都没有办法得到精确的状态,怎么办啊?我们退而求其次,我们来设定一个目标每次都去获得一个最佳估计。

假设第 k − 1 k-1 k1次的最佳估计状态记为 x ^ k − 1 \bm {\hat x}_{k-1} x^k1,现在一个的核心问题是怎么得到 x ^ k \bm {\hat x}_k x^k呢?

首先我们想到状态方程好像可以递推出 x ^ k \bm {\hat x}_k x^k,但是直接用好像又没有使用测量结果的信息,先不管了,我们先令:
x ^ k − = Φ k − 1 x ^ k − 1 \bm {\hat x}^-_k=\bm\Phi_{k-1}\bm {\hat x}_{k-1} x^k=Φk1x^k1
噪声嘛就直接丢掉好了,然后嘛,由于没有加入测量信息,所以等号左边那个带负号的递推值通常叫做先验估计值了,意思就是事先估计值了,响应的 x ^ k \bm {\hat x}_k x^k可以叫做后验估计,有点事后诸葛亮的意思在里面。

然后我们加入测量的结果企图得到最优的 x ^ k \bm {\hat x}_k x^k,这里我们不如这样考虑, x ^ k \bm {\hat x}_k x^k有两部分组成,一部分是事先估计值 x ^ k − \bm {\hat x}^-_k x^k,第二部分和测量相关,准确的说是这样的当测量值与事先估计值的差别越大,那么第二部分的比重就越大。因此我们用 K k ( z k − H k x ^ k − ) \bm K_k(\bm z_k-\bm H_k\bm {\hat x}^-_k) Kk(zkHkx^k),来表示第二部分。因此 x ^ k − → x ^ k \bm {\hat x}^-_k \rightarrow \bm {\hat x}_k x^kx^k的问题就变成了这样子:
x ^ k = x ^ k − + K k ( z k − H k x ^ k − ) \bm {\hat x}_k=\bm {\hat x}^-_k+\bm K_k(\bm z_k-\bm H_k\bm {\hat x}^-_k) x^k=x^k+Kk(zkHkx^k)

卡尔曼估计的核心问题就是如何找到 K k \bm K_k Kk是的我们的后验估计最优。

三、卡尔曼滤波的推导

卡尔曼滤波器的推导过程中会用到一些假设,不过不用担心这些假设都很自然。
为了使得我们的最优估计(也就是那个后验估计) x ^ k \bm {\hat x}_k x^k与真实状态变量 x k \bm x_k xk尽量接近:
第一,我们可以设计我们的估计方法使得对每一个 k k k都有期望: E [ x ^ k − x k ] = 0 E[\bm{\hat x}_k-\bm x_k]=\bm0 E[x^kxk]=0,一般的说法是要求最优估计是无偏。
类似的,我们来看先验估计 E [ x ^ k − − x k ] E[\bm{\hat x}^-_k-\bm x_k] E[x^kxk],期望是否也为 0 \bm0 0呢?我们来看一下:
E [ x ^ k − − x k ] = E [ Φ k − 1 x ^ k − 1 − x k ] = E [ Φ k − 1 x ^ k − 1 − Φ k − 1 x k − 1 − w k − 1 ] = Φ k − 1 E [ x ^ k − 1 − x k − 1 ] − E [ w k − 1 ] = 0 \begin{aligned} E[\bm{\hat x}^-_k-\bm x_k]&=E[\bm\Phi_{k-1}\bm {\hat x}_{k-1}-\bm x_k]=E[\bm\Phi_{k-1}\bm {\hat x}_{k-1}-\bm\Phi_{k-1}\bm x_{k-1}-\bm w_{k-1}]\\ &=\bm\Phi_{k-1}E[\bm {\hat x}_{k-1}-\bm x_{k-1}]-E[\bm w_{k-1}]=\bm0 \end{aligned} E[x^kxk]=E[Φk1x^k1xk]=E[Φk1x^k1Φk1xk1wk1]=Φk1E[x^k1xk1]E[wk1]=0
所以先验估计自动满足了无偏的要求,非常nice!!!这样的话我们就非常有信心继续下去了。

然后我们要考虑些什么呢?考虑最优估计值和真实的状态之间的偏离越小越好,仿照最小二乘法的思想,那当然就是要求估计误差的方差最小了。
J = E [ ( x ^ k − x k ) T ( x ^ k − x k ) ] = E [ ( x ^ k − + K k z k − K k H k x ^ k − − x k ) T ( x ^ k − + K k z k − K k H k x ^ k − − x k ) ] = E [ ( x ^ k − + K k H k x k + K k v k − K k H k x ^ k − − x k ) T ( x ^ k − + K k H k x k + K k v k − K k H k x ^ k − − x k ) ] = E { [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] T [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] } \begin{aligned} J&=E[(\bm{\hat x}_k-\bm x_k)^T(\bm{\hat x}_k-\bm x_k)]=E[(\bm {\hat x}^-_k+\bm K_k\bm z_k-\bm K_k\bm H_k\bm {\hat x}^-_k-\bm x_k)^T(\bm {\hat x}^-_k+\bm K_k\bm z_k-\bm K_k\bm H_k\bm {\hat x}^-_k-\bm x_k)]\\ &=E[(\bm {\hat x}^-_k+\bm K_k\bm H_k\bm x_k+\bm K_k\bm v_k-\bm K_k\bm H_k\bm {\hat x}^-_k-\bm x_k)^T(\bm {\hat x}^-_k+\bm K_k\bm H_k\bm x_k+\bm K_k\bm v_k-\bm K_k\bm H_k\bm {\hat x}^-_k-\bm x_k)]\\ &=E\{[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]^T[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]\} \end{aligned} J=E[(x^kxk)T(x^kxk)]=E[(x^k+KkzkKkHkx^kxk)T(x^k+KkzkKkHkx^kxk)]=E[(x^k+KkHkxk+KkvkKkHkx^kxk)T(x^k+KkHkxk+KkvkKkHkx^kxk)]=E{[(IKkHk)(x^kxk)+Kkvk]T[(IKkHk)(x^kxk)+Kkvk]}
问题变成如何选择 K k \bm K_k Kk使得 J J J最小呢?
借鉴最小二乘法的经验,我们需要一个关于 K k \bm K_k Kk的二次型,但是上面的 J J J中期望括号中直接乘开的话,得到的形式不好用啊!!!原因在于直接乘开的话有关 K k \bm K_k Kk的部分不是在二次型的外侧。如果相乘的顺序可以交换的话就好了:
[ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] T [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] → [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] T [(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]^T[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]\\ \rightarrow[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k][(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]^T [(IKkHk)(x^kxk)+Kkvk]T[(IKkHk)(x^kxk)+Kkvk][(IKkHk)(x^kxk)+Kkvk][(IKkHk)(x^kxk)+Kkvk]T
???这样做我们确实可以得到关于 K k \bm K_k Kk的二次型,但是两者并不相等,唉……
但是注意到一个特殊情况的事实,任意一个列向量 A \bm A A,一定有 A T A = t r [ A A T ] \bm A^T\bm A=tr[\bm A\bm A^T] ATA=tr[AAT],所以:
J = E { [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] T [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] } = E { t r { [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] [ ( I − K k H k ) ( x ^ k − − x k ) + K k v k ] T } } = E { t r [ ( I − K k H k ) ( x ^ k − − x k ) ( x ^ k − − x k ) T ( I − K k H k ) T + ( I − K k H k ) ( x ^ k − − x k ) v k T K k T + K k v k ( x ^ k − − x k ) T ( I − K k H k ) T + K k v k v k T K k T ] } \begin{aligned} J=&E\{[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]^T[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]\}\\ =&E\{tr\{[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k][(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)+\bm K_k\bm v_k]^T\}\}\\ =&E\{tr[(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)(\bm {\hat x}^-_k-\bm x_k)^T(\bm I-\bm K_k\bm H_k)^T+(\bm I-\bm K_k\bm H_k)(\bm {\hat x}^-_k-\bm x_k)\bm v_k^T\bm K_k^T\\ &+\bm K_k\bm v_k(\bm {\hat x}^-_k-\bm x_k)^T(\bm I-\bm K_k\bm H_k)^T+\bm K_k\bm v_k\bm v_k^T\bm K_k^T]\} \end{aligned} J===E{[(IKkHk)(x^kxk)+Kkvk]T[(IKkHk)(x^kxk)+Kkvk]}E{tr{[(IKkHk)(x^kxk)+Kkvk][(IKkHk)(x^kxk)+Kkvk]T}}E{tr[(IKkHk)(x^kxk)(x^kxk)T(IKkHk)T+(IKkHk)(x^kxk)vkTKkT+Kkvk(x^kxk)T(IKkHk)T+KkvkvkTKkT]}
一个很自然的假设就是状态和噪声无关,于是我们合理地假设 x ^ k − − x k \bm {\hat x}^-_k-\bm x_k x^kxk v k \bm v_k vk是两个不相关的随机变量。又由于这两个随机变量的期望也是 0 \bm0 0,所以把期望交换到内部一定会导致交叉项出现两个 0 \bm0 0相乘的结果,因此我们得到目标函数的新形式:
J = t r { ( I − K k H k ) E [ ( x ^ k − − x k ) ( x ^ k − − x k ) T ] ( I − K k H k ) T + K k E [ v k v k T ] K k T } \begin{aligned} J=&tr\{(\bm I-\bm K_k\bm H_k)E[(\bm {\hat x}^-_k-\bm x_k)(\bm {\hat x}^-_k-\bm x_k)^T](\bm I-\bm K_k\bm H_k)^T+\bm K_kE[\bm v_k\bm v_k^T]\bm K_k^T\} \end{aligned} J=tr{(IKkHk)E[(x^kxk)(x^kxk)T](IKkHk)T+KkE[vkvkT]KkT}
我们记 R k = E [ v k v k T ] \bm R_k=E[\bm v_k\bm v_k^T] Rk=E[vkvkT]为测量噪声的协方差矩阵,记 P k − = E [ ( x ^ k − − x k ) ( x ^ k − − x k ) T ] \bm P^-_k=E[(\bm {\hat x}^-_k-\bm x_k)(\bm {\hat x}^-_k-\bm x_k)^T] Pk=E[(x^kxk)(x^kxk)T]为先验估计的偏差的协方差矩阵。
则最终我们把目标函数写成如下形式:
J = t r [ ( I − K k H k ) P k − ( I − K k H k ) T + K k R k K k T ] J=tr[(\bm I-\bm K_k\bm H_k)\bm P^-_k(\bm I-\bm K_k\bm H_k)^T+\bm K_k\bm R_k\bm K_k^T] J=tr[(IKkHk)Pk(IKkHk)T+KkRkKkT]
这里再次注意一下,我们的目标函数是一个标量的形式,我们需要确定 K k \bm K_k Kk为何值的时候目标函数最小。因此可以对 K k \bm K_k Kk求导(实际上就是对 K k \bm K_k Kk的每一个元素求偏导),然后让导数为 0 0 0。就可以得到我们需要的 K k \bm K_k Kk了。
即要求对 K \bm K K的任意元素 K i j K_{ij} Kij,有:
∂ J ∂ K i j = 0 \frac{\partial J}{\partial K_{ij}}=0 KijJ=0
为了得到结果我们把 J J J写成分量求和的形式,并且为了书写方便省略掉求和号(即使用求和约定)和下标 k k k,如果不熟悉的话可自行写出求和符号:
∂ J ∂ K i j = ∂ { t r [ ( I − K H ) P − ( I − K H ) T + K R K T ] } ∂ K i j = ∂ [ ( δ r s − K r t H t s ) P s l − ( δ r l − K r n H n l ) + K r s R s l K r l ] ∂ K i j = − H j s P s l − ( δ i l − K i n H n l ) − ( δ i s − K i t H t s ) P s l − H j l + R j l K i l + K i s R s j \begin{aligned} \frac{\partial J}{\partial K_{ij}}=&\frac{\partial\{ tr[(\bm I-\bm K\bm H)\bm P^-(\bm I-\bm K\bm H)^T+\bm K\bm R\bm K^T]\}}{\partial K_{ij}}\\ =&\frac{\partial[(\delta_{rs}-K_{rt}H_{ts})P^-_{sl}(\delta_{rl}-K_{rn} H_{nl})+ K_{rs}R_{sl}K_{rl}]}{\partial K_{ij}}\\ =&-H_{js}P^-_{sl}(\delta_{il}-K_{in} H_{nl}) - (\delta_{is}-K_{it}H_{ts})P^-_{sl}H_{jl}+R_{jl}K_{il}+K_{is}R_{sj} \end{aligned} KijJ===Kij{tr[(IKH)P(IKH)T+KRKT]}Kij[(δrsKrtHts)Psl(δrlKrnHnl)+KrsRslKrl]HjsPsl(δilKinHnl)(δisKitHts)PslHjl+RjlKil+KisRsj
由于协方差矩阵 P − \bm P^- P R \bm R R一定是对称的,所以上面的式子可以写成更加简洁的样子:
∂ J ∂ K i j = − H j s P s l − ( δ i l − K i n H n l ) − ( δ i s − K i t H t s ) P s l − H j l + R j l K i l + K i s R s j = − 2 ( δ i s − K i t H t s ) P s l − H j l + 2 K i l R l j \begin{aligned} \frac{\partial J}{\partial K_{ij}} =&-H_{js}P^-_{sl}(\delta_{il}-K_{in} H_{nl}) - (\delta_{is}-K_{it}H_{ts})P^-_{sl}H_{jl}+R_{jl}K_{il}+K_{is}R_{sj}\\ =& - 2(\delta_{is}-K_{it}H_{ts})P^-_{sl}H_{jl}+2K_{il}R_{lj} \end{aligned} KijJ==HjsPsl(δilKinHnl)(δisKitHts)PslHjl+RjlKil+KisRsj2(δisKitHts)PslHjl+2KilRlj
回忆一下最优化条件:
∂ J ∂ K i j = 0 \frac{\partial J}{\partial K_{ij}}=0 KijJ=0
写成矩阵形式,并且恢复下标 k k k
∂ J ∂ K k = − 2 ( I − K k H k ) P k − H k T + 2 K k R k = 0 \begin{aligned} \frac{\partial J}{\partial \bm K_k}=& - 2(\bm I-\bm K_k\bm H_k)\bm P^-_k\bm H_k^T+2\bm K_k\bm R_k=\bm0 \end{aligned} KkJ=2(IKkHk)PkHkT+2KkRk=0
因此我们得到最优估计需要使用的 K k \bm K_k Kk,如下:
K k = P k − H k T [ H k P k − H k T + R k ] − 1 \begin{aligned} \bm K_k=\bm P^-_k\bm H_k^T[\bm H_k\bm P^-_k\bm H_k^T+\bm R_k]^{-1} \end{aligned} Kk=PkHkT[HkPkHkT+Rk]1

到这里,我们的问题基本上得到了问题的解决方案,但是还有一个问题:我们使用了 P k − \bm P^-_k Pk,但是我们没有它的递推公式!!!
因此需要详细研究一下 P k − \bm P^-_k Pk,其中各种不相关性以及无偏性的使用就直接用了哈:
P k − = E [ ( x ^ k − − x k ) ( x ^ k − − x k ) T ] = E [ ( Φ k − 1 x ^ k − 1 − Φ k − 1 x k − 1 − w k − 1 ) ( Φ k − 1 x ^ k − 1 − Φ k − 1 x k − 1 − w k − 1 ) T ] = Φ k − 1 E [ ( x ^ k − 1 − x k − 1 ) ( x ^ k − 1 − x k − 1 ) T ] Φ k − 1 T + E [ w k − 1 w k − 1 T ] \begin{aligned} \bm P^-_k=&E[(\bm {\hat x}^-_k-\bm x_k)(\bm {\hat x}^-_k-\bm x_k)^T]\\ =&E[(\bm\Phi_{k-1}\bm {\hat x}_{k-1}-\bm\Phi_{k-1}\bm x_{k-1}-\bm w_{k-1})(\bm\Phi_{k-1}\bm {\hat x}_{k-1}-\bm\Phi_{k-1}\bm x_{k-1}-\bm w_{k-1})^T]\\ =&\bm\Phi_{k-1}E[(\bm {\hat x}_{k-1}-\bm x_{k-1})(\bm {\hat x}_{k-1}-\bm x_{k-1})^T]\bm\Phi_{k-1}^T+E[\bm w_{k-1}\bm w_{k-1}^T] \end{aligned} Pk===E[(x^kxk)(x^kxk)T]E[(Φk1x^k1Φk1xk1wk1)(Φk1x^k1Φk1xk1wk1)T]Φk1E[(x^k1xk1)(x^k1xk1)T]Φk1T+E[wk1wk1T]
如果记: P k − 1 = E [ ( x ^ k − 1 − x k − 1 ) ( x ^ k − 1 − x k − 1 ) T ] \bm P_{k-1}=E[(\bm {\hat x}_{k-1}-\bm x_{k-1})(\bm {\hat x}_{k-1}-\bm x_{k-1})^T] Pk1=E[(x^k1xk1)(x^k1xk1)T]以及 Q k − 1 = E [ w k − 1 w k − 1 T ] \bm Q_{k-1}=E[\bm w_{k-1}\bm w_{k-1}^T] Qk1=E[wk1wk1T],则上式化为:
P k − = Φ k − 1 P k − 1 Φ k − 1 T + Q k − 1 \begin{aligned} \bm P^-_k=\bm\Phi_{k-1}\bm P_{k-1}\bm\Phi_{k-1}^T+\bm Q_{k-1} \end{aligned} Pk=Φk1Pk1Φk1T+Qk1

现在,我们搞清楚了递推关系: P → P − \bm P\rightarrow\bm P^- PP,但是 P \bm P P由怎么得到呢?
我们来试一下:
P k = E [ ( x ^ k − x k ) ( x ^ k − x k ) T ] = E { [ x ^ k − + K k ( z k − H k x ^ k − ) − x k ] [ x ^ k − + K k ( z k − H k x ^ k − ) − x k ] T } \begin{aligned} \bm P_k=&E[(\bm {\hat x}_k-\bm x_k)(\bm {\hat x}_k-\bm x_k)^T]\\ =&E\{[\bm {\hat x}^-_k+\bm K_k(\bm z_k-\bm H_k\bm {\hat x}^-_k)-\bm x_k][\bm {\hat x}^-_k+\bm K_k(\bm z_k-\bm H_k\bm {\hat x}^-_k)-\bm x_k]^T\}\\ \end{aligned} Pk==E[(x^kxk)(x^kxk)T]E{[x^k+Kk(zkHkx^k)xk][x^k+Kk(zkHkx^k)xk]T}
这样又有一大堆推导了,蛋疼得很,但是仔细观察我们之前 J = E [ ( x ^ k − x k ) T ( x ^ k − x k ) ] J=E[(\bm{\hat x}_k-\bm x_k)^T(\bm{\hat x}_k-\bm x_k)] J=E[(x^kxk)T(x^kxk)],仔细对比一下 J J J的推导过程,我们发现原来 P k \bm P_k Pk根本就不用重新推导,直接可以看出:
P k = ( I − K k H k ) P k − ( I − K k H k ) T + K k R k K k T \begin{aligned} \bm P_k=(\bm I-\bm K_k\bm H_k)\bm P^-_k(\bm I-\bm K_k\bm H_k)^T+\bm K_k\bm R_k\bm K_k^T \end{aligned} Pk=(IKkHk)Pk(IKkHk)T+KkRkKkT
这个公式还可以化简:
P k = ( I − K k H k ) P k − ( I − K k H k ) T + K k R k K k T = ( I − K k H k ) P k − + ( I − K k H k ) P k − H k T K k T + K k R k K k T = ( I − K k H k ) P k − + P k − H k T K k T − K k ( H k P k − H k T + R k ) K k T \begin{aligned} \bm P_k=&(\bm I-\bm K_k\bm H_k)\bm P^-_k(\bm I-\bm K_k\bm H_k)^T+\bm K_k\bm R_k\bm K_k^T\\ =&(\bm I-\bm K_k\bm H_k)\bm P^-_k+(\bm I-\bm K_k\bm H_k)\bm P^-_k\bm H_k^T\bm K_k^T+\bm K_k\bm R_k\bm K_k^T\\ =&(\bm I-\bm K_k\bm H_k)\bm P^-_k+\bm P^-_k\bm H_k^T\bm K_k^T-\bm K_k(\bm H_k\bm P^-_k\bm H_k^T+\bm R_k)\bm K_k^T \end{aligned} Pk===(IKkHk)Pk(IKkHk)T+KkRkKkT(IKkHk)Pk+(IKkHk)PkHkTKkT+KkRkKkT(IKkHk)Pk+PkHkTKkTKk(HkPkHkT+Rk)KkT
注意到:
K k = P k − H k T [ H k P k − H k T + R k ] − 1 \begin{aligned} \bm K_k=\bm P^-_k\bm H_k^T[\bm H_k\bm P^-_k\bm H_k^T+\bm R_k]^{-1} \end{aligned} Kk=PkHkT[HkPkHkT+Rk]1
上面公式的最后一项减号后面恰好是: P k − H k T K k T \bm P^-_k\bm H_k^T\bm K_k^T PkHkTKkT,因此公式得到化简:
P k = ( I − K k H k ) P k − \begin{aligned} \bm P_k=(\bm I-\bm K_k\bm H_k)\bm P^-_k \end{aligned} Pk=(IKkHk)Pk

到现在为止 P − → P \bm P^-\rightarrow\bm P PP也解决了,这样我们随着 k k k的增加,我们发现可以使用套娃递推来解决 P \bm P P的问题了:
P k − 1 − → P k − 1 → P k − → P k → P k + 1 − ⋯ \bm P^-_{k-1}\rightarrow\bm P_{k-1}\rightarrow\bm P^-_k\rightarrow\bm P_k\rightarrow\bm P^-_{k+1}\cdots Pk1Pk1PkPkPk+1

四、卡尔曼滤波公式

我们把卡尔曼递推公式和使用步骤总结一下:

(1)系统建模:
x k = Φ k − 1 x k − 1 + w k − 1 z k = H k x k + v k \begin{aligned} \bm x_k=&\bm\Phi_{k-1}\bm x_{k-1}+\bm w_{k-1}\\ \bm z_k=&\bm H_k\bm x_k+\bm v_k \end{aligned} xk=zk=Φk1xk1+wk1Hkxk+vk
其中,各种噪声的期望都为 0 \bm0 0,并且两个时刻之间的噪声不相关,因此描述噪声相关性的协方差矩阵只有:
Q k = E [ w k w k T ] R k = E [ v k v k T ] \begin{aligned} \bm Q_k=&E[\bm w_k\bm w_k^T]\\ \bm R_k=&E[\bm v_k\bm v_k^T] \end{aligned} Qk=Rk=E[wkwkT]E[vkvkT]

(2)初始条件
x ^ 0 − = E [ x 0 ] P k − = E [ ( x ^ 0 − − x 0 ) ( x ^ 0 − − x 0 ) T ] \begin{aligned} \bm {\hat x}^-_0=&E[\bm x_0]\\ \bm P^-_k=&E[(\bm {\hat x}^-_0-\bm x_0)(\bm {\hat x}^-_0-\bm x_0)^T] \end{aligned} x^0=Pk=E[x0]E[(x^0x0)(x^0x0)T]

(3)卡尔曼滤波
第一步:状态预测(先验)
x ^ k − = Φ k − 1 x ^ k − 1 P k − = Φ k − 1 P k − 1 Φ k − 1 T + Q k − 1 \begin{aligned} \bm {\hat x}^-_k=&\bm\Phi_{k-1}\bm {\hat x}_{k-1}\\ \bm P^-_k=&\bm\Phi_{k-1}\bm P_{k-1}\bm\Phi_{k-1}^T+\bm Q_{k-1} \end{aligned} x^k=Pk=Φk1x^k1Φk1Pk1Φk1T+Qk1
第二步:测量更新(后验)
K k = P k − H k T [ H k P k − H k T + R k ] − 1 x ^ k = x ^ k − + K k ( z k − H k x ^ k − ) P k = ( I − K k H k ) P k − \begin{aligned} \bm K_k=&\bm P^-_k\bm H_k^T[\bm H_k\bm P^-_k\bm H_k^T+\bm R_k]^{-1}\\ \bm {\hat x}_k=&\bm {\hat x}^-_k+\bm K_k(\bm z_k-\bm H_k\bm {\hat x}^-_k)\\ \bm P_k=&(\bm I-\bm K_k\bm H_k)\bm P^-_k \end{aligned} Kk=x^k=Pk=PkHkT[HkPkHkT+Rk]1x^k+Kk(zkHkx^k)(IKkHk)Pk


总结

本文的目的是梳理一下卡尔曼滤波的设计思路,并从头推导了一遍滤波公式,对于一些假设不追求过分严谨,只要是直觉上合理就行,最后我们得到了卡尔曼滤波公式,这里得到了一组递推滤波公式,当然也有其他的一些等价形式,这里就不讨论了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值