• 扩展卡尔曼滤波器


    概述

    本文对上文的卡尔曼滤波知识进行些许补充,并简单说明扩展卡尔曼的知识及用法。

    正文

    对卡尔曼滤波的补充

    卡尔曼是一种多数据递归融合算法,同时也可以理解为一个权重在变化的低通滤波器

    其思想公式为:

    当前的估计值 = 上一次估计值 + 权重 ∗ (当前测量值 − 上一次估计值) 当前的估计值=上一次估计值+权重*(当前测量值-上一次估计值) 当前的估计值=上一次估计值+权重(当前测量值上一次估计值)

    所以,递归次数越多,测量值的作用越小,其估计值越接近真实值。如下例子:

    假设A的真实值为50,经过上述公式计算后,结果波形如下:
    在这里插入图片描述
    所谓的数据融合,其实就是通过计算增益值K使得测量值的方差 Σ \Sigma Σ最小,使得数据为最优解。

    使用卡尔曼滤波器的步骤:
    (1)建立系统的状态空间方程和测量方程

    例如:二维的位置P、速度V恒定速度系统,测量值为P,无控制量

    P k = P k − 1 + V k ∗ Δ t + W p , k P_k = P_{k-1}+V_k*\Delta{t}+W_{p,k} Pk=Pk1+VkΔt+Wp,k

    V k = V k − 1 + W v , k V_k=V_{k-1}+W_{v,k} Vk=Vk1+Wv,k

    Z p , k = X p , k + V p , k Z_{p,k}=X_{p,k}+V_{p,k} Zp,k=Xp,k+Vp,k

    Z v , k = 0 Z_{v,k}=0 Zv,k=0

    W W W V V V为过程噪声和测量噪声。

    设状态向量 X k ^ = ∣ P k V k ∣ T \hat{X_k} = |PkVk|

    ^T Xk^= PkVk T

    所以用矩阵表示为:

    ∣ P k V k ∣ = ∣ 1 Δ t 0 1 ∣ ∣ P k − 1 V k − 1 ∣ + ∣ Q p 0 0 Q v ∣ ∣ W p , k W v , k ∣ |PkVk|

    =|1Δt01|
    |Pk1Vk1|
    +|Qp00Qv|
    |Wp,kWv,k|
    PkVk = 10Δt1 Pk1Vk1 + Qp00Qv Wp,kWv,k

    Z k = ∣ 1 0 ∣ ∣ X p , k − 1 X v , k − 1 ∣ + ∣ R p 0 ∣ ∣ V p , k − 1 V v , k − 1 ∣ Z_k=|10|

    |Xp,k1Xv,k1|
    +|Rp0|
    |Vp,k1Vv,k1|
    Zk= 10 Xp,k1Xv,k1 + Rp0 Vp,k1Vv,k1

    (2)将矩阵代入公式计算

    这里状态转移矩阵 F = ∣ 1 Δ t 0 1 ∣ F=|1Δt01|

    F= 10Δt1

    由于没有控制量,所以 B = 0 B=0 B=0

    过程噪声协方差矩阵 Q Q Q其实就是前面的 ∣ Q p 0 0 Q v ∣ |Qp00Qv|

    Qp00Qv

    测量噪声协方差矩阵 R R R其实就是前面的 ∣ R p 0 ∣ |Rp0|

    Rp0

    由于状态协方差矩阵只在初始阶段产生影响,且位置速度噪声相互独立,所以一般可以给定矩阵初始值 P 0 = ∣ σ p 2 σ p σ v σ v σ p σ v 2 ∣ = ∣ 1 0 0 1 ∣ P_0=|σp2σpσvσvσpσv2|

    =|1001|
    P0= σp2σvσpσpσvσv2 = 1001

    系统转换矩阵 H = ∣ 1 0 ∣ H=|10|

    H= 10

    扩展卡尔曼滤波器

    扩展卡尔曼应用于非线性程度不高的系统。扩展卡尔曼其实与卡尔曼很类似,只是扩展卡尔曼是利用泰勒级数展开对 k − 1 k-1 k1时刻求 f ( x ) f(x) f(x) x x x的偏导。所以两者最大的区别是状态转移矩阵 F F F和系统转换矩阵 H H H用雅各比矩阵表示。

    即扩展卡尔曼先验估算公式为:

    X ^ k = f ( x ^ k − 1 , u ^ k − 1 , 0 ) \hat X_{k}=f(\hat{x}_{k-1},\hat{u}_{k-1},0) X^k=f(x^k1,u^k1,0)

    后验估算公式为:

    X ^ k ′ = X ^ k + K ( Z k − h ( X ^ k ) ) \hat{X}'_{k}=\hat{X}_k+K(Z_k-h(\hat{X}_k)) X^k=X^k+K(Zkh(X^k))

    例如:

    某系统的状态空间方程为:

    X 1 = X 1 + S I N ( X 2 ) = f 1 ( x ) X_1=X_1+SIN(X_2)=f_1(x) X1=X1+SIN(X2)=f1(x)

    X 2 = X 1 2 = f 2 ( x ) X_2=X^2_1=f_2(x) X2=X12=f2(x)

    Z 1 = 1 2 C O S ( X 1 ) = h 1 ( x ) Z_1=\frac{1}{2}COS(X_1)=h_1(x) Z1=21COS(X1)=h1(x)

    Z 2 = 0 = h 2 ( x ) Z_2=0=h_2(x) Z2=0=h2(x)

    所以:

    F = ∣ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ∣ x 1 k − 1 , x 2 k − 1 = ∣ 1 c o s ( x 2 k − 1 ) 2 x 1 k − 1 0 ∣ F=|f1x1f1x2f2x1f2x2|

    _{x_{1k-1},x_{2k-1}}=|1cos(x2k1)2x1k10|
    F= x1f1x1f2x2f1x2f2 x1k1,x2k1= 12x1k1cos(x2k1)0

    H = ∣ ∂ h 1 ∂ x 1 ∂ h 1 ∂ x 2 ∂ h 2 ∂ x 1 ∂ h 2 ∂ x 2 ∣ x 1 k − 1 , x 2 k − 1 = ∣ − 1 2 s i n ( x 1 k − 1 ) 0 ∣ H=|h1x1h1x2h2x1h2x2|

    _{x_{1k-1},x_{2k-1}}=|12sin(x1k1)0|
    H= x1h1x1h2x2h1x2h2 x1k1,x2k1= 21sin(x1k1)0

    由此可以看出 F F F H H H随着 k k k的变化而变化。

    其余公式与卡尔曼滤波公式一致,将这两个雅各比矩阵代入重新计算即可。

    总结

    如上所说,即可完成将卡尔曼滤波器改写成扩展卡尔曼滤波器。

  • 相关阅读:
    前后端分离--前置路由守卫(登录过滤)和整合shiro安全框架
    bclinux aarch64 ceph 14.2.10 云主机 4节点 fio
    关于安卓SVGA浅尝(二)加载数据
    批量规范化+代码+Q&A
    SkyWalking 本地启动以及闪退问题
    配置docker镜像加速
    (附源码)springboot大学生就业质量调查分析系统 毕业设计 161457
    《Python基础教程》专栏总结篇
    C++(string类)
    c语言——扫雷游戏(简易版)
  • 原文地址:https://blog.csdn.net/SammySum/article/details/127092058