卡尔曼滤波三

扩展卡尔曼滤波(EKF)

我们之前的系统考虑的都线性的系统,在线性系统中,我们证明了卡尔曼滤波是最优的!
如果是非线性呢?我们又该如何处理的呢?
如果我们直接就是将非线性的系统利用泰勒展开将其线性化,这就引出了另一类卡尔曼滤波器了,扩展卡尔曼滤波器(EKF)
下面,我们进行详细的说明:
首先,我们简单的回顾一下我们泰勒展开的基本概念:

  • 对于一维的泰勒展开:
    f ( x ) ≈ f ( x 0 ) + k ( x − x 0 ) f(x)\approx f(x_0) + k(x-x_0) f(x)f(x0)+k(xx0)
    其中, k k k为函数 f ( x ) f(x) f(x)操作点 x 0 x_0 x0处的斜率,即: k = f ′ ( x 0 ) k=f'(x_0) k=f(x0)

  • 而对于高维的泰勒展开:
    f ( x , y ) ≈ f ( x 0 , y 0 ) + A ( x − x 0 ) + B ( y − y 0 ) \pmb{f}(\pmb{x},\pmb{y})\approx \pmb{f}(\pmb{x}_0,\pmb{y}_0)+\pmb{A}(\pmb{x}-\pmb{x}_0)+\pmb{B}(\pmb{y}-\pmb{y}_0) fff(xxx,yyy)fff(xxx0,yyy0)+AAA(xxxxxx0)+BBB(yyyyyy0)
    其中, A \pmb{A} AAA B \pmb{B} BBB为对应的雅可比矩阵
    A = [ ∂ f 1 ∂ x ∂ f 2 ∂ x ⋮ ∂ f n ∂ x ] B = [ ∂ f 1 ∂ y ∂ f 2 ∂ y ⋮ ∂ f n ∂ y ] \begin{aligned} \pmb{A} &= \begin{bmatrix} {\frac{\partial f_1}{\partial \pmb{x}}} \\ {\frac{\partial f_2}{\partial \pmb{x}}} \\ {\vdots} \\ {\frac{\partial f_n}{\partial \pmb{x}}} \end{bmatrix} \\ \pmb{B} &= \begin{bmatrix} {\frac{\partial f_1}{\partial \pmb{y}}} \\ {\frac{\partial f_2}{\partial \pmb{y}}} \\ {\vdots} \\ {\frac{\partial f_n}{\partial \pmb{y}}} \end{bmatrix} \end{aligned} AAABBB=xxxf1xxxf2xxxfn=yyyf1yyyf2yyyfn

对于我们的非线性系统来说有,有状态方程:
x k = f ( x x − 1 , u k − 1 , w k − 1 ) z k = h ( x k , ν k ) \begin{aligned} \pmb{x}_k &= \pmb{f}(\pmb{x}_{x-1},\pmb{u}_{k-1},\pmb{w}_{k-1}) \\ \pmb{z}_k &= \pmb{h}(\pmb{x}_k,\pmb{\nu}_{k}) \end{aligned} xxxkzzzk=fff(xxxx1,uuuk1,wwwk1)=hhh(xxxk,νννk)
当然,我们这里的噪声仍然假设服从正态分布的,而且相互独立的。即:
P ( w k − 1 ) ∼ N ( 0 , Q ) P ( ν k ) ∼ N ( 0 , R ) P(\pmb{w}_{k-1})\sim N(0,\pmb{Q}) \\ P(\pmb{\nu}_{k})\sim N(0,\pmb{R}) P(wwwk1)N(0,QQQ)P(νννk)N(0,RRR)
然而我们在展开上述非线性的方程的时候,将会发现我们的操作点是不能准确的得到的(最主要的原因就是我们的误差是不确定的),因此我们将在一个次一点的操作点(即上一次的估计值中取得) ( x ^ k − 1 , u k − 1 , 0 ) (\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0) (xxx^k1,uuuk1,0)处展开(由于噪声的不确定性,为了简化问题,我们假设此时的噪声为0),因此得到:
x k = f ( x k − 1 , u k − 1 , w k − 1 ) ≈ f ( x ^ k − 1 , u k − 1 , 0 ) + A ( x k − 1 − x ^ k − 1 ) + B ( u k − 1 − u k − 1 ) + W ( w k − 1 − 0 ) = f ( x ^ k − 1 , u k − 1 , 0 ) + A ( x k − 1 − x ^ k − 1 ) + W w k − 1 \begin{aligned} \pmb{x}_k &= \pmb{f}(\pmb{x}_{k-1},\pmb{u}_{k-1},\pmb{w}_{k-1}) \\ &\approx \pmb{f}(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0) + \pmb{A}(\pmb{x}_{k-1} - \hat{\pmb{x}}_{k-1}) + \pmb{B}(\pmb{u}_{k-1} - \pmb{u}_{k-1}) + \pmb{W}(\pmb{w}_{k-1} - 0) \\ &= \pmb{f}(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0) + \pmb{A}(\pmb{x}_{k-1} - \hat{\pmb{x}}_{k-1}) + \pmb{W}\pmb{w}_{k-1} \\ \end{aligned} xxxk=fff(xxxk1,uuuk1,wwwk1)fff(xxx^k1,uuuk1,0)+AAA(xxxk1xxx^k1)+BBB(uuuk1uuuk1)+WWW(wwwk10)=fff(xxx^k1,uuuk1,0)+AAA(xxxk1xxx^k1)+WWWwwwk1
其中, A , B , W \pmb{A},\pmb{B},\pmb{W} AAA,BBB,WWW分别为对应的雅可比矩阵,即:
A = ∂ f ∂ x ∣ ( x ^ k − 1 , u k − 1 , 0 ) B = ∂ f ∂ u ∣ ( x ^ k − 1 , u k − 1 , 0 ) W = ∂ f ∂ w ∣ ( x ^ k − 1 , u k − 1 , 0 ) \begin{aligned} \pmb{A} &= \frac{\partial\pmb{f}}{\partial\pmb{x}}|_{(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0)} \\ \pmb{B} &= \frac{\partial\pmb{f}}{\partial\pmb{u}}|_{(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0)} \\ \pmb{W} &= \frac{\partial\pmb{f}}{\partial\pmb{w}}|_{(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0)} \end{aligned} AAABBBWWW=xxxfff(xxx^k1,uuuk1,0)=uuufff(xxx^k1,uuuk1,0)=wwwfff(xxx^k1,uuuk1,0)
在这里,我们记 x ~ k = f ( x ^ k − 1 , u k − 1 , 0 ) \tilde{\pmb{x}}_k = \pmb{f}(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0) xxx~k=fff(xxx^k1,uuuk1,0),也就是我们简化问题,将其作为当前的估计值,此时我们对 z k \pmb{z}_k zzzk进行线性化,在操作点 ( x ~ k , 0 ) (\tilde{\pmb{x}}_k,0) (xxx~k,0)处进行泰勒展开(同样我们将误差取为0,因为我们不知道它到底是多少!!):
z k = h ( x k , ν k ) ≈ h ( x ~ k , 0 ) + H ( x k − x ~ k ) + V ν k = z ~ k + H ( x k − x ~ k ) + V ν k \begin{aligned} \pmb{z}_k &= \pmb{h}(\pmb{x}_k,\pmb{\nu}_{k}) \\ &\approx \pmb{h}(\tilde{\pmb{x}}_k,0) + \pmb{H}(\pmb{x}_k-\tilde{\pmb{x}}_k) + \pmb{V}\pmb{\nu}_k \\ &= \tilde{\pmb{z}}_k + \pmb{H}(\pmb{x}_k-\tilde{\pmb{x}}_k) + \pmb{V}\pmb{\nu}_k \end{aligned} zzzk=hhh(xxxk,νννk)hhh(xxx~k,0)+HHH(xxxkxxx~k)+VVVνννk=zzz~k+HHH(xxxkxxx~k)+VVVνννk
其中, h ( x ~ k , 0 ) \pmb{h}(\tilde{\pmb{x}}_k,0) hhh(xxx~k,0)为简化后的估计值,记为: z ~ k \tilde{\pmb{z}}_k zzz~k
z ~ k = h ( x ~ k , 0 ) \tilde{\pmb{z}}_k = \pmb{h}(\tilde{\pmb{x}}_k,0) zzz~k=hhh(xxx~k,0)
雅可比矩阵 H , V \pmb{H},\pmb{V} HHH,VVV分别为:
H = ∂ h ∂ x ∣ ( x ~ k , 0 ) V = ∂ h ∂ ν ∣ ( x ~ k , 0 ) \begin{aligned} \pmb{H} &= \frac{\partial\pmb{h}}{\partial\pmb{x}}|_{(\tilde{\pmb{x}}_k,0)} \\ \pmb{V} &= \frac{\partial\pmb{h}}{\partial\pmb{\nu}}|_{(\tilde{\pmb{x}}_k,0)} \end{aligned} HHHVVV=xxxhhh(xxx~k,0)=νννhhh(xxx~k,0)
至此,我们完成了我们的线性化的工作:
x k = x ~ k + A ( x k − 1 − x ^ k − 1 ) + W w k − 1 z k = z ~ k + H ( x k − x ~ k ) + V ν k \begin{aligned} \pmb{x}_k &= \tilde{\pmb{x}}_k + \pmb{A}(\pmb{x}_{k-1} - \hat{\pmb{x}}_{k-1}) + \pmb{W}\pmb{w}_{k-1} \\ \pmb{z}_k &= \tilde{\pmb{z}}_k + \pmb{H}(\pmb{x}_k-\tilde{\pmb{x}}_k) + \pmb{V}\pmb{\nu}_k \end{aligned} xxxkzzzk=xxx~k+AAA(xxxk1xxx^k1)+WWWwwwk1=zzz~k+HHH(xxxkxxx~k)+VVVνννk
最后还需要说明的是, W w k − 1 \pmb{W}\pmb{w}_{k-1} WWWwwwk1 V ν k \pmb{V}\pmb{\nu}_k VVVνννk仍然服从正态分布(毕竟这是一个线性变换啊!!),即有:
P ( W w k ) ∼ N ( 0 , W Q W T ) P ( V ν k ) ∼ N ( 0 , V R V T ) \begin{aligned} P(\pmb{W}\pmb{w}_k) &\sim N(0,\pmb{W}\pmb{Q}\pmb{W}^T)\\ P(\pmb{V}\pmb{\nu}_k) &\sim N(0,\pmb{V}\pmb{R}\pmb{V}^T) \end{aligned} P(WWWwwwk)P(VVVνννk)N(0,WWWQQQWWWT)N(0,VVVRRRVVVT)
这里我们再次强调一下,为什么我们要费这么大的劲把这个系统进行线性化的处理呢?如果我们把线性化又会怎样呢?

  • 我们答案现在是非常的明显了,因为我们不进行线性化我们的噪声将不在服从正态分布了的,之前我们的卡尔曼滤波就不能被得到了。
  • 当然我们还有非常重要的一点就是,不线性化后,系统根本就不可能被化简成之前的卡尔曼滤波器的好吗!!
  • 最终的式子我们要理解为误差的线性状态方程,由此来类比之前的线性的卡尔曼滤波。最终我们再将误差代回就可以得到最终的EKF公式了(可以参考附件的教材)

现在我们直接就给出我们的EKF(扩展卡尔曼滤波)

  • 先验估计

x ^ k − = x ~ k = f ( x ^ k − 1 , u k − 1 , 0 ) \hat{\pmb{x}}_{k}^{-} = \tilde{\pmb{x}}_k = \pmb{f}(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0) xxx^k=xxx~k=fff(xxx^k1,uuuk1,0)
P k − = A P k − 1 A T + W Q W T \pmb{P}_k^{-} = \pmb{A}\pmb{P}_{k-1}A^T + \pmb{W}Q\pmb{W}^T PPPk=AAAPPPk1AT+WWWQWWWT

  • 后验估计

K k = P k − H T ( H P k − H T + V R V T ) − 1 \pmb{K}_k = \pmb{P}_k^{-}\pmb{H}^T(\pmb{H}\pmb{P}_k^{-}\pmb{H}^T + \pmb{V}\pmb{R}\pmb{V}^T)^{-1} KKKk=PPPkHHHT(HHHPPPkHHHT+VVVRRRVVVT)1
x ^ k = x ^ k − + K k ( Z k − h ( x ~ k , 0 ) ) \hat{\pmb{x}}_k = \hat{\pmb{x}}^{-}_k + \pmb{K}_k(\pmb{Z}_k - \pmb{h}(\tilde{\pmb{x}}_k,0)) xxx^k=xxx^k+KKKk(ZZZkhhh(xxx~k,0))
P k = ( I − K k H ) P k − \pmb{P}_k = (\pmb{I} - \pmb{K}_kH)\pmb{P}_k^{-} PPPk=(IIIKKKkH)PPPk

卡尔曼滤波和扩展卡尔曼滤波的对比

linear kalman filter EKF
X ^ k − = A X ^ k − 1 + B u k − 1 \hat{\pmb{X}}_{k}^{-} = A\hat{\pmb{X}}_{k-1} + B\pmb{u}_{k-1} XXX^k=AXXX^k1+Buuuk1 x ^ k − = x ~ k = f ( x ^ k − 1 , u k − 1 , 0 ) \hat{\pmb{x}}_{k}^{-} = \tilde{\pmb{x}}_k = \pmb{f}(\hat{\pmb{x}}_{k-1},\pmb{u}_{k-1},0) xxx^k=xxx~k=fff(xxx^k1,uuuk1,0)
P k − = A P k − 1 A T + Q \pmb{P}_k^{-} = A\pmb{P}_{k-1}A^T + Q PPPk=APPPk1AT+Q P k − = A P k − 1 A T + W Q W T \begin{aligned}\pmb{P}_k^{-} = \pmb{A}\pmb{P}_{k-1}A^T + \pmb{W}Q\pmb{W}^T \end{aligned} PPPk=AAAPPPk1AT+WWWQWWWT
K k = P k − H T ( H P k − H T + R ) − 1 \pmb{K}_k = \pmb{P}_k^{-}H^T(H\pmb{P}_k^{-}H^T + \pmb{R})^{-1} KKKk=PPPkHT(HPPPkHT+RRR)1 K k = P k − H T ( H P k − H T + V R V T ) − 1 \pmb{K}_k = \pmb{P}_k^{-}\pmb{H}^T(\pmb{H}\pmb{P}_k^{-}\pmb{H}^T + \pmb{V}\pmb{R}\pmb{V}^T)^{-1} KKKk=PPPkHHHT(HHHPPPkHHHT+VVVRRRVVVT)1
X ^ k = X ^ k − + K k ( Z k − H X ^ k − ) \hat{\pmb{X}}_k = \hat{\pmb{X}}^{-}_k + \pmb{K}_k(\pmb{Z}_k - H\hat{\pmb{X}}^{-}_k) XXX^k=XXX^k+KKKk(ZZZkHXXX^k) x ^ k = x ^ k − + K k ( Z k − h ( x ~ k , 0 ) ) \hat{\pmb{x}}_k = \hat{\pmb{x}}^{-}_k + \pmb{K}_k(\pmb{Z}_k - \pmb{h}(\tilde{\pmb{x}}_k,0)) xxx^k=xxx^k+KKKk(ZZZkhhh(xxx~k,0))
P k = ( I − K k H ) P k − \pmb{P}_k = (\pmb{I} - \pmb{K}_kH)\pmb{P}_k^{-} PPPk=(IIIKKKkH)PPPk P k = ( I − K k H ) P k − \pmb{P}_k = (\pmb{I} - \pmb{K}_kH)\pmb{P}_k^{-} PPPk=(IIIKKKkH)PPPk

参考资料

卡尔曼滤波算法

补充资料

卡尔曼滤波算法与最小二乘

你可能感兴趣的:(Kalman滤波,算法,人工智能)