当前位置: 首页 > news >正文

【扩展卡尔曼滤波理论推导与实践】【理论】【2/3 公式推导】

目录

    • 非线性系统
    • 泰勒展开
    • 卡尔曼滤波
        • 卡尔曼增益
        • 模型误差协方差矩阵
    • 公式总结

本节默认你能够完整推导标准卡尔曼滤波,将会简化一些推导的描述。如果你还不会完整推导标准卡尔曼滤波,请先从 【卡尔曼滤波理论推导与实践】系列开始看起。


非线性系统

扩展卡尔曼滤波解决的是非线性系统,其非线性状态空间方程为:
{ z k 模 ⃗ = f ( z k − 1 模 ⃗ , F k − 1 ) y k 测 ⃗ = h ( z k 测 ⃗ ) \begin{cases}\vec{z_{k模}}=\mathrm{f}(\vec{z_{k-1模}},F_{k-1})\\\vec{y_{k测}}=\mathrm{h}(\vec{z_{k测}})\end{cases} {zk =f(zk1 ,Fk1)yk =h(zk )
f , h \mathrm{f},\mathrm{h} f,h函数是向量函数,有多个输出 [ f 1 . . . f n ] \left[\begin{matrix}f_1\\...\\f_n\\\end{matrix}\right] f1...fn n n n z ⃗ \vec{z} z 的维数,比如追踪平面图像物体坐标和速度, z ⃗ = [ x y v x v y ] \vec{z}=\left[\begin{matrix}x\\y\\v_x\\v_y\end{matrix}\right] z = xyvxvy
其非线性真实系统模型为:
{ z k 真 ⃗ = f ( z k − 1 真 ⃗ , F k − 1 , w k − 1 ⃗ ) y k 测 ⃗ = h ( z k 真 ⃗ , v k ⃗ ) \begin{cases}\vec{z_{k真}}=\mathrm{f}(\vec{z_{k-1真}},F_{k-1},\vec{w_{k-1}})\\\vec{y_{k测}}=\mathrm{h}(\vec{z_{k真}},\vec{v_k})\end{cases} {zk =f(zk1 ,Fk1,wk1 )yk =h(zk ,vk )

因为非线性函数的期望不能用协方差矩阵描述,无法用卡尔曼滤波的套路进行推导,所以要进行线性化近似,这就是扩展卡尔曼滤波与标准卡尔曼滤波的唯一区别。

泰勒展开

扩展卡尔曼滤波使用泰勒展开进行线性化近似,扩展卡尔曼滤波是一个二元向量输入多输出系统,比如输入为 [ z k − 1 模 ⃗ , w k − 1 ⃗ ] [\vec{z_{k-1模}},\vec{w_{k-1}}] [zk1 ,wk1 ],这有两列向量;输出为 z k 真 ⃗ \vec{z_{k真}} zk 这个向量。
这里有两个公式要提前知道:

  • 单输出的二元函数在 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)点的泰勒展开公式:
    f ( x , y ) = f ( x 0 , x 0 ) + d f d x ∣ x 0 , y 0 ∗ ( x − x 0 ) + + d f d y ∣ x 0 , y 0 ∗ ( y − y 0 ) f(x,y)=f(x_0,x_0)+\frac{df}{dx}|_{x_0,y_0}*(x-x_0)++\frac{df}{dy}|_{x_0,y_0}*(y-y_0) f(x,y)=f(x0,x0)+dxdfx0,y0(xx0)++dydfx0,y0(yy0)
  • 多输出函数对输入向量求导公式:
    d f ⃗ ( x ⃗ ) d x ⃗ = [ d f 1 d x 1 d f 1 d x 2 ⋯ d f 1 d x m d f 2 d x 1 d f 2 d x 2 ⋯ d f 2 d x m ⋮ ⋮ ⋱ ⋮ d f n d x 1 d f n d x 2 ⋯ d f n d x m ] = 雅可比矩阵 \frac{d\vec{f}(\vec{x})}{d\vec{x}}=\left[\begin{matrix}\frac{d f_1}{d x_1} & \frac{d f_1}{dx_2} & \cdots & \frac{df_1}{dx_m} \\ \frac{df_2}{dx_1} & \frac{df_2}{dx_2} & \cdots & \frac{df_2}{dx_m} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{df_n}{dx_1} & \frac{df_n}{dx_2} & \cdots & \frac{df_n}{dx_m}\end{matrix}\right]=雅可比矩阵 dx df (x )= dx1df1dx1df2dx1dfndx2df1dx2df2dx2dfndxmdf1dxmdf2dxmdfn =雅可比矩阵

接下来进行泰勒展开:
f \mathrm{f} f z ⃗ \vec{z} z 求导的雅可比矩阵为 A \mathrm{A} A f \mathrm{f} f w ⃗ \vec{w} w 求导的雅可比矩阵为 W \mathrm{W} W h \mathrm{h} h z ⃗ \vec{z} z 求导的雅可比矩阵为 H \mathrm{H} H h \mathrm{h} h v ⃗ \vec{v} v 求导的雅可比矩阵为 V \mathrm{V} V
注意:

  • F k − 1 F_{k-1} Fk1是给定值而不是变量,不参与泰勒展开
  • 噪声的期望(平均值)是零,所以泰勒展开点的噪声值为零

可以在任意已知点(比如模型值和上轮估计值都是已知的)展开,在哪个点展开都是为了方便推导。
状态转移方程分别在 z k − 1 估 ⃗ , z k 模 ⃗ \vec{z_{k-1估}},\vec{z_{k模}} zk1 ,zk 处泰勒展开:
{ z k 模 ⃗ = f ( z k − 1 估 ⃗ , F k − 1 ) + A ∗ ( z k − 1 模 ⃗ − z k − 1 估 ⃗ ) y k 测 ⃗ = h ( z k 模 ⃗ ) + H ∗ ( z k 测 ⃗ − z k 模 ⃗ ) \begin{cases}\vec{z_{k模}}=f(\vec{z_{k-1估}},F_{k-1})+\mathrm{A}*(\vec{z_{k-1模}}-\vec{z_{k-1估}})\\\vec{y_{k测}}=h(\vec{z_{k模}})+\mathrm{H}*(\vec{z_{k测}}-\vec{z_{k模}})\end{cases} {zk =f(zk1 ,Fk1)+A(zk1 zk1 )yk =h(zk )+H(zk zk )
真实系统模型分别在 ( z k − 1 估 ⃗ , 0 ⃗ ) , ( z k 模 ⃗ , 0 ⃗ ) (\vec{z_{k-1估}},\vec{0}),(\vec{z_{k模}},\vec{0}) (zk1 ,0 ),(zk ,0 )泰勒展开:
{ z k 真 ⃗ = f ( z k − 1 估 ⃗ , F k − 1 , 0 ⃗ ) + A ∗ ( z k − 1 真 ⃗ − z k − 1 估 ⃗ ) + W ∗ ( w k − 1 ⃗ − 0 ⃗ ) y k 测 ⃗ = h ( z k 模 ⃗ , 0 ⃗ ) + H ∗ ( z k 真 ⃗ − z k 模 ⃗ ) + V ∗ ( v k ⃗ − 0 ⃗ ) \begin{cases}\vec{z_{k真}}=f(\vec{z_{k-1估}},F_{k-1},\vec{0})+\mathrm{A}*(\vec{z_{k-1真}}-\vec{z_{k-1估}})+\mathrm{W}*(\vec{w_{k-1}}-\vec{0})\\\vec{y_{k测}}=h(\vec{z_{k模}},\vec{0})+\mathrm{H}*(\vec{z_{k真}}-\vec{z_{k模}})+\mathrm{V}*(\vec{v_k}-\vec{0})\end{cases} {zk =f(zk1 ,Fk1,0 )+A(zk1 zk1 )+W(wk1 0 )yk =h(zk ,0 )+H(zk zk )+V(vk 0 )

卡尔曼滤波

线性化后,接下来的推导过程和标准卡尔曼滤波不能说一摸一样,只能说九分甚至十分地相似。
这里再放一遍卡尔曼滤波核心思想:

用测量值修正系统模型值,得到当前轮次的最优估计值。再将该最优估计值当作下一轮的系统模型输入,继续进行下一轮的最优估计,如此迭代进行。

要最优化估计值,首先把估计值表达式写出来:
z k 估 ⃗ = z k 模 ⃗ + G k ∗ ( z k 测 ⃗ − z k 模 ⃗ ) \begin{aligned}\vec{z_{k估}}&=\vec{z_{k模}}+\mathrm{G_k}*(\vec{z_{k测}}-\vec{z_{k模}})&\end{aligned} zk =zk +Gk(zk zk )
G \mathrm{G} G矩阵进行一个变换,变出一个 y k 测 ⃗ \vec{y_{k测}} yk 出来,方便推导,令 G = K ∗ H \mathrm{G}=\mathrm{K}*\mathrm{H} G=KH,于是估计值表达式变为:
z k 估 ⃗ = z k 模 ⃗ + K k ∗ H ∗ ( z k 测 ⃗ − z k 模 ⃗ ) = z k 模 ⃗ + K k ∗ ( y k 测 ⃗ − H ∗ z k 模 ⃗ ) \begin{aligned}\vec{z_{k估}}&=\vec{z_{k模}}+\mathrm{K_k}*\mathrm{H}*(\vec{z_{k测}}-\vec{z_{k模}})\\&=\vec{z_{k模}}+\mathrm{K_k}*(\vec{y_{k测}}-\mathrm{H}*\vec{z_{k模}})\end{aligned} zk =zk +KkH(zk zk )=zk +Kk(yk Hzk )

卡尔曼增益

z k 估 ⃗ \vec{z_{k估}} zk 表达式右侧除了 K k \mathrm{K_k} Kk不知道,其他都是已知数,继续推导 K k \mathrm{K_k} Kk吧。那么就是推导最优估计下的 K k \mathrm{K_k} Kk,就是使得估计误差协方差矩阵的迹最小,先把估计误差协方差矩阵写出来:
P k 估 = E [ e k 估 ⃗ e k 估 ⃗ T ] = E [ ( z k 真 ⃗ − z k 估 ⃗ ) ∗ ( z k 真 ⃗ − z k 估 ⃗ ) T ] \begin{aligned}\mathrm{P_{k估}}&=E[\vec{e_{k估}}\vec{e_{k估}}^T]\\&=E[(\vec{z_{k真}}-\vec{z_{k估}})*(\vec{z_{k真}}-\vec{z_{k估}})^T]\end{aligned} Pk=E[ek ek T]=E[(zk zk )(zk zk )T]

展开一下 z k 真 ⃗ − z k 估 ⃗ \vec{z_{k真}}-\vec{z_{k估}} zk zk :
z k 真 ⃗ − z k 估 ⃗ = z k 真 ⃗ − z k 模 ⃗ − K k ∗ ( y k 测 ⃗ − h ( z k 模 ⃗ ) ) = e k 模 ⃗ − K k ∗ ( h ( z k 模 ⃗ , 0 ) + H ∗ ( z k 真 ⃗ − z k 模 ⃗ ) + V ∗ v k ⃗ − h ( z k 模 ⃗ ) ) = e k 模 ⃗ − K k ∗ ( H ∗ e k 模 ⃗ + V ∗ v k ⃗ ) = ( I − K k H ) e k 模 ⃗ − K k V ∗ v k ⃗ \begin{aligned}\vec{z_{k真}}-\vec{z_{k估}}&=\vec{z_{k真}}-\vec{z_{k模}}-\mathrm{K_k}*(\vec{y_{k测}}-\mathrm{h}(\vec{z_{k模}}))\\&=\vec{e_{k模}}-\mathrm{K_k}*(h(\vec{z_{k模}},0)+\mathrm{H}*(\vec{z_{k真}}-\vec{z_{k模}})+\mathrm{V}*\vec{v_k}-h(\vec{z_{k模}}))\\&=\vec{e_{k模}}-\mathrm{K_k}*(\mathrm{H}*\vec{e_{k模}}+\mathrm{V}*\vec{v_k})\\&=(\mathrm{I}-\mathrm{K_k}\mathrm{H})\vec{e_{k模}}-\mathrm{K_k}\mathrm{V}*\vec{v_k}\end{aligned} zk zk =zk zk Kk(yk h(zk ))=ek Kk(h(zk ,0)+H(zk zk )+Vvk h(zk ))=ek Kk(Hek +Vvk )=(IKkH)ek KkVvk

P k 估 \mathrm{P_{k估}} Pk可以继续展开了:
P k 估 = E [ ( ( I − K k H ) e k 模 ⃗ − K k V ∗ v k ⃗ ) ∗ ( ( I − K k H ) e k 模 ⃗ − K k V ∗ v k ⃗ ) T ] = E [ ( ( I − K k H ) e k 模 ⃗ − K k V ∗ v k ⃗ ) ∗ ( e k 模 ⃗ T ( I − K k H ) T − v k ⃗ T V T K k T ) ] \begin{aligned}\mathrm{P_{k估}}&=E[((\mathrm{I}-\mathrm{K_k}\mathrm{H})\vec{e_{k模}}-\mathrm{K_k}\mathrm{V}*\vec{v_k})*((\mathrm{I}-\mathrm{K_k}\mathrm{H})\vec{e_{k模}}-\mathrm{K_k}\mathrm{V}*\vec{v_k})^T]\\&=E[((\mathrm{I}-\mathrm{K_k}\mathrm{H})\vec{e_{k模}}-\mathrm{K_k}\mathrm{V}*\vec{v_k})*(\vec{e_{k模}}^T(\mathrm{I}-\mathrm{K_k}\mathrm{H})^T-\vec{v_k}^T\mathrm{V}^T\mathrm{K_k}^T)]\end{aligned} Pk=E[((IKkH)ek KkVvk )((IKkH)ek KkVvk )T]=E[((IKkH)ek KkVvk )(ek T(IKkH)Tvk TVTKkT)]
接下来将括号乘开。这里有两点有助于化简:噪声 v k ⃗ \vec{v_k} vk 的期望是零,又与 e k 模 ⃗ \vec{e_{k模}} ek 相互独立,所以 v k ⃗ \vec{v_k} vk e k 模 ⃗ \vec{e_{k模}} ek 搭边的项都是零。
P k 估 = E [ ( I − K k H ) e k 模 ⃗ e k 模 ⃗ T ( I − K k H ) T + K k V ∗ v k ⃗ v k ⃗ T V T K k T ] = ( I − K k H ) P k 模 ( I − K k H ) T + K k V R V T K k T \begin{aligned}\mathrm{P_{k估}}&=E[(\mathrm{I}-\mathrm{K_k}\mathrm{H})\vec{e_{k模}}\vec{e_{k模}}^T(\mathrm{I}-\mathrm{K_k}\mathrm{H})^T+\mathrm{K_k}\mathrm{V}*\vec{v_k}\vec{v_k}^T\mathrm{V}^T\mathrm{K_k}^T]\\&=(\mathrm{I}-\mathrm{K_k}\mathrm{H})\mathrm{P_{k模}}(\mathrm{I}-\mathrm{K_k}\mathrm{H})^T+\mathrm{K_k}\mathrm{V}\mathrm{R}\mathrm{V}^T\mathrm{K_k}^T\end{aligned} Pk=E[(IKkH)ek ek T(IKkH)T+KkVvk vk TVTKkT]=(IKkH)Pk(IKkH)T+KkVRVTKkT
P k 估 \mathrm{P_{k估}} Pk的表达式也出来了, K k \mathrm{K_k} Kk是自变量,想让 t r ( P k 估 ) tr(\mathrm{P_{k估}}) tr(Pk)最小,即最优估计。由于 t r ( P k 估 ) tr(\mathrm{P_{k估}}) tr(Pk)是二次函数,开口向上,极值点必定是极小值点,于是接下来准备 t r ( P k 估 ) d K k = 0 \frac{tr(\mathrm{P_{k估}})}{d\mathrm{K_k}}=0 dKktr(Pk)=0。在算极值点前,有个矩阵求导公式需要提前知道:
d t r ( A B A T ) d A = 2 A B \frac{dtr(ABA^T)}{d\mathrm{A}}=2AB dAdtr(ABAT)=2AB
这个求导公式结合链式求导法则,就可以进行求极值点了,注意 V R V T \mathrm{V}\mathrm{R}\mathrm{V}^T VRVT看作一个整体:
d P k 估 d K k = 2 ( I − K k H ) P k 模 ( − H T ) + 2 K k V R V T = 0 \begin{aligned}\frac{d\mathrm{P_{k估}}}{d\mathrm{K_k}}&=2(\mathrm{I}-\mathrm{K_k}\mathrm{H})\mathrm{P_{k模}}(-\mathrm{H}^T)+2\mathrm{K_k}\mathrm{V}\mathrm{R}\mathrm{V}^T\\&=0\end{aligned} dKkdPk=2(IKkH)Pk(HT)+2KkVRVT=0

K k \mathrm{K_k} Kk这不就出来了,和标准卡尔曼滤波里的 K k \mathrm{K_k} Kk挺像的:
K k = P k 模 H T H P k 模 H T + V R V T \mathrm{K_k}=\frac{\mathrm{P_{k模}}\mathrm{H}^T}{\mathrm{H}\mathrm{P_{k模}}\mathrm{H}^T+\mathrm{V}\mathrm{R}\mathrm{V}^T} Kk=HPkHT+VRVTPkHT

模型误差协方差矩阵

和标准卡尔曼滤波的推导套路一样,继续推导 P k 模 \mathrm{P_{k模}} Pk
先把表达式搞出来:
P k 模 = E [ e k 模 ⃗ e k 模 ⃗ T ] = E [ ( z k 真 ⃗ − z k 模 ⃗ ) ∗ ( z k 真 ⃗ − z k 模 ⃗ ) T ] \begin{aligned}\mathrm{P_{k模}}&=E[\vec{e_{k模}}\vec{e_{k模}}^T]\\&=E[(\vec{z_{k真}}-\vec{z_{k模}})*(\vec{z_{k真}}-\vec{z_{k模}})^T]\end{aligned} Pk=E[ek ek T]=E[(zk zk )(zk zk )T]

展开一下 z k 真 ⃗ − z k 模 ⃗ \vec{z_{k真}}-\vec{z_{k模}} zk zk
z k 真 ⃗ − z k 模 ⃗ = f ( z k − 1 估 ⃗ , F k − 1 , 0 ) + A ∗ ( z k − 1 真 ⃗ − z k − 1 估 ⃗ ) + W ∗ w k − 1 ⃗ − ( f ( z k − 1 估 ⃗ , F k − 1 ) + A ∗ ( z k − 1 模 ⃗ − z k − 1 估 ⃗ ) ) = A ( z k − 1 真 ⃗ − z k − 1 估 ⃗ ) + W ∗ w k − 1 ⃗ = A e k 估 ⃗ + W w k − 1 ⃗ \begin{aligned}\vec{z_{k真}}-\vec{z_{k模}}&=f(\vec{z_{k-1估}},F_{k-1},0)+\mathrm{A}*(\vec{z_{k-1真}}-\vec{z_{k-1估}})+\mathrm{W}*\vec{w_{k-1}}-(f(\vec{z_{k-1估}},F_{k-1})+\mathrm{A}*(\vec{z_{k-1模}}-\vec{z_{k-1估}}))\\&=\mathrm{A}(\vec{z_{k-1真}}-\vec{z_{k-1估}})+\mathrm{W}*\vec{w_{k-1}}\\&=\mathrm{A}\vec{e_{k估}}+\mathrm{W}\vec{w_{k-1}}\end{aligned} zk zk =f(zk1 ,Fk1,0)+A(zk1 zk1 )+Wwk1 (f(zk1 ,Fk1)+A(zk1 zk1 ))=A(zk1 zk1 )+Wwk1 =Aek +Wwk1

P k 模 \mathrm{P_{k模}} Pk继续展开,展开后的表达式和标准卡尔曼滤波里的 P k 模 \mathrm{P_{k模}} Pk也挺像的:
P k 模 = E [ ( A e k − 1 估 ⃗ + W w k − 1 ⃗ ) ∗ ( A e k − 1 估 ⃗ + W w k − 1 ⃗ ) T ] = E [ ( A e k − 1 估 ⃗ + W w k − 1 ⃗ ) ∗ ( e k − 1 估 ⃗ T A T + w k − 1 ⃗ T W T ) ] = E [ A e k − 1 估 ⃗ e k − 1 估 ⃗ T A T + W w k − 1 ⃗ w k − 1 ⃗ T W T ] = A E [ e k − 1 估 ⃗ e k − 1 估 ⃗ T ] A T + W E [ w k − 1 ⃗ w k − 1 ⃗ T ] W T = A P k − 1 估 A T + W Q W T \begin{aligned}\mathrm{P_{k模}}&=E[(\mathrm{A}\vec{e_{k-1估}}+\mathrm{W}\vec{w_{k-1}})*(\mathrm{A}\vec{e_{k-1估}}+\mathrm{W}\vec{w_{k-1}})^T]\\&=E[(\mathrm{A}\vec{e_{k-1估}}+\mathrm{W}\vec{w_{k-1}})*(\vec{e_{k-1估}}^T\mathrm{A}^T+\vec{w_{k-1}}^T\mathrm{W}^T)]\\&=E[\mathrm{A}\vec{e_{k-1估}}\vec{e_{k-1估}}^T\mathrm{A}^T+\mathrm{W}\vec{w_{k-1}}\vec{w_{k-1}}^T\mathrm{W}^T]\\&=\mathrm{A}E[\vec{e_{k-1估}}\vec{e_{k-1估}}^T]\mathrm{A}^T+\mathrm{W}E[\vec{w_{k-1}}\vec{w_{k-1}}^T]\mathrm{W}^T\\&=\mathrm{A}\mathrm{P_{k-1估}}\mathrm{A}^T+\mathrm{W}\mathrm{Q}\mathrm{W}^T\end{aligned} Pk=E[(Aek1 +Wwk1 )(Aek1 +Wwk1 )T]=E[(Aek1 +Wwk1 )(ek1 TAT+wk1 TWT)]=E[Aek1 ek1 TAT+Wwk1 wk1 TWT]=AE[ek1 ek1 T]AT+WE[wk1 wk1 T]WT=APk1AT+WQWT

P k − 1 估 \mathrm{P_{k-1估}} Pk1表达式在上面推导过了,只不过 k k k换成 k − 1 k-1 k1
表达式: P k − 1 估 = ( I − K k − 1 H ) P k − 1 模 ( I − H T K k − 1 T ) + K k − 1 V R V T K k − 1 T , K k − 1 = P k − 1 模 H T H P k − 1 模 H T + V R V T 表达式:\mathrm{P_{k-1估}}=(\mathrm{I}-\mathrm{K_{k-1}}\mathrm{H})\mathrm{P_{k-1模}}(\mathrm{I}-\mathrm{H}^T\mathrm{K_{k-1}}^T)+\mathrm{K_{k-1}}\mathrm{V}\mathrm{R}\mathrm{V}^T\mathrm{K_{k-1}}^T,\mathrm{K_{k-1}}=\frac{\mathrm{P_{k-1模}}\mathrm{H}^T}{\mathrm{H}\mathrm{P_{k-1模}}\mathrm{H}^T+\mathrm{V}\mathrm{R}\mathrm{V}^T} 表达式:Pk1=(IKk1H)Pk1(IHTKk1T)+Kk1VRVTKk1TKk1=HPk1HT+VRVTPk1HT
K k − 1 \mathrm{K_{k-1}} Kk1代到 P k − 1 估 \mathrm{P_{k-1估}} Pk1表达式里就得到 P k − 1 估 \mathrm{P_{k-1估}} Pk1的具体值,你完全可以将 K k − 1 \mathrm{K_{k-1}} Kk1直接无脑代入 P k − 1 估 \mathrm{P_{k-1估}} Pk1的表达式,毕竟 P k − 1 估 \mathrm{P_{k-1估}} Pk1等式右边全是上轮迭代得到的已知数,但是 P k − 1 估 \mathrm{P_{k-1估}} Pk1可以进行化简减少计算量:
P k − 1 估 = ( P k − 1 模 − K k − 1 H P k − 1 模 − P k − 1 模 H T K k − 1 T + K k − 1 H P k − 1 模 H T K k − 1 T ) + K k − 1 V R V T K k − 1 T = ( P k − 1 模 − K k − 1 H P k − 1 模 − P k − 1 模 H T K k − 1 T ) + K k − 1 ( H P k − 1 模 H T + V R V T ) K k − 1 T = ( P k − 1 模 − K k − 1 H P k − 1 模 − P k − 1 模 H T K k − 1 T ) + P k − 1 模 H T K k − 1 T = P k − 1 模 − K k − 1 H P k − 1 模 = ( I − K k − 1 H ) P k − 1 模 \begin{aligned}\mathrm{P_{k-1估}}&=(\mathrm{P_{k-1模}}-\mathrm{K_{k-1}}\mathrm{H}\mathrm{P_{k-1模}}-\mathrm{P_{k-1模}}\mathrm{H}^T\mathrm{K_{k-1}}^T+\mathrm{K_{k-1}}\mathrm{H}\mathrm{P_{k-1模}}\mathrm{H}^T\mathrm{K_{k-1}}^T)+\mathrm{K_{k-1}}\mathrm{V}\mathrm{R}\mathrm{V}^T\mathrm{K_{k-1}}^T\\&=(\mathrm{P_{k-1模}}-\mathrm{K_{k-1}}\mathrm{H}\mathrm{P_{k-1模}}-\mathrm{P_{k-1模}}\mathrm{H}^T\mathrm{K_{k-1}}^T)+\mathrm{K_{k-1}}(\mathrm{H}\mathrm{P_{k-1模}}\mathrm{H}^T+\mathrm{V}\mathrm{R}\mathrm{V}^T)\mathrm{K_{k-1}}^T\\&=(\mathrm{P_{k-1模}}-\mathrm{K_{k-1}}\mathrm{H}\mathrm{P_{k-1模}}-\mathrm{P_{k-1模}}\mathrm{H}^T\mathrm{K_{k-1}}^T)+\mathrm{P_{k-1模}}\mathrm{H}^T\mathrm{K_{k-1}}^T\\&=\mathrm{P_{k-1模}}-\mathrm{K_{k-1}}\mathrm{H}\mathrm{P_{k-1模}}\\&=(\mathrm{I}-\mathrm{K_{k-1}}\mathrm{H})\mathrm{P_{k-1模}}\end{aligned} Pk1=(Pk1Kk1HPk1Pk1HTKk1T+Kk1HPk1HTKk1T)+Kk1VRVTKk1T=(Pk1Kk1HPk1Pk1HTKk1T)+Kk1(HPk1HT+VRVT)Kk1T=(Pk1Kk1HPk1Pk1HTKk1T)+Pk1HTKk1T=Pk1Kk1HPk1=(IKk1H)Pk1
又是和标准卡尔曼滤波里的 P k − 1 估 \mathrm{P_{k-1估}} Pk1长得挺像的。
这样扩展卡尔曼滤波的公式全推导完了。

公式总结

  1. z k 模 ⃗ = f ( z k − 1 模 ⃗ , F k − 1 ) \vec{z_{k模}}=\mathrm{f}(\vec{z_{k-1模}},F_{k-1}) zk =f(zk1 ,Fk1)
  2. P k 模 = A P k − 1 估 A T + W Q W T \mathrm{P_{k模}}=\mathrm{A}\mathrm{P_{k-1估}}\mathrm{A}^T+\mathrm{W}\mathrm{Q}\mathrm{W}^T Pk=APk1AT+WQWT
  3. K k = P k 模 H T H P k 模 H T + V R V T \mathrm{K_k}=\frac{\mathrm{P_{k模}}\mathrm{H}^T}{\mathrm{H}\mathrm{P_{k模}}\mathrm{H}^T+\mathrm{V}\mathrm{R}\mathrm{V}^T} Kk=HPkHT+VRVTPkHT
  4. z k 估 ⃗ = z k 模 ⃗ + K k ∗ ( y k 测 ⃗ − h ( z k 模 ⃗ ) ) \vec{z_{k估}}=\vec{z_{k模}}+\mathrm{K_k}*(\vec{y_{k测}}-\mathrm{h}(\vec{z_{k模}})) zk =zk +Kk(yk h(zk ))
  5. P k 估 = ( I − K k H ) P k 模 \mathrm{P_{k估}}=(\mathrm{I}-\mathrm{K_k}\mathrm{H})\mathrm{P_{k模}} Pk=(IKkH)Pk

大致迭代过程和标准卡尔曼滤波一样,这五个公式按照顺序遍历计算。要注意的是标准卡尔曼滤波的 A , V , W \mathrm{A},\mathrm{V},\mathrm{W} A,V,W都是固定的矩阵,而扩展卡尔曼滤波中的 A , V , W \mathrm{A},\mathrm{V},\mathrm{W} A,V,W是雅可比矩阵,每次迭代过程中都需要更新计算一次。

http://www.lryc.cn/news/510324.html

相关文章:

  • springboot494基于java的综合小区管理系统(论文+源码)_kaic
  • 深度学习blog-Transformer-注意力机制和编码器解码器
  • 敏感词 v0.24.0 新特性支持标签分类,内置实现多种策略
  • 随身 WiFi 连接 X-Wrt 共享网络与 IPv6 中继配置
  • Keil-编译按钮Translate,Build,Rebuild
  • No.1免费开源ERP:Odoo自定义字段添加到配置页中的技术分享
  • Linux 更改Jenkins使用其他账户启动
  • wordpres当前分类调用父分类的名称和链接
  • TCP客户端模拟链接websocket服务端发送消息(二)
  • 操作系统之同步与互斥的基本概念
  • 详细讲解axios封装与api接口封装管理
  • API 接口如何确保数据的安全?
  • HAL库STM32硬件IIC驱动数字电位器MCP4017
  • 「地平线」副总裁余轶南与「理想汽车」智驾产品总监赵哲伦联手创业,入局具身智能赛道!
  • 弹性盒子(display: flex)布局超全讲解|Flex 布局教程
  • 无问社区-无问AI模型
  • 如何记录日常笔记
  • 【魅力golang】之-反射
  • git--批量修改本地用户名和邮箱
  • Rofin罗芬激光PowerLine L300 PL400 Manual 软件
  • 【 thefuck 安装与使用】Linux 终端自动纠错工具:一头GitHub上的“草泥马“ - thefuck,妈妈再也不用担心我打错命令行了!
  • 牛客网刷题 ——C语言初阶——BC112小乐乐求和
  • 【PyTorch】(基础七)---- 完整训练流程
  • 01- 三自由度串联机械臂位置分析
  • Flutter实现可拖拽操作Draggable
  • Vue BPMN Modeler流程图
  • 写在公司40周年前夕
  • Python调用Elasticsearch更新数据库
  • 测试基础之测试分类
  • 太阳能LED路灯智能控制系统(论文+源码)