视觉SLAM十四讲 第9讲后端 卡尔曼滤波器推导

卡尔曼滤波器

看十四讲以及课件没看懂,好多推导都是基于贝叶斯公式的那就更难以理解了。突然想到以前学控制的时候在B站看到过Up主DR_CAN的卡尔曼滤波器的推导,感觉比较清晰,于是听完之后记录一下推导过程。

状态空间方程:
{ x k = A x k − 1 + B u k − 1 + w k − 1 z k = C x k + v k \begin{cases} x_k = Ax_{k-1} + Bu_{k-1} +w_{k-1}\\ z_k=Cx_k+v_k\\ \end{cases} {xk=Axk1+Buk1+wk1zk=Cxk+vk
其中:过程噪声 w ∼ N ( 0 , R ) w \sim N(0,R) wN(0,R),测量噪声 v ∼ N ( 0 , Q ) v \sim N(0,Q) vN(0,Q),R,Q为协方差矩阵

先验估计值 x ^ k − \hat{x}_k^{-} x^k:
x ^ k − = A x ^ k − 1 + B u k − 1 \hat{x}_k^{-} = A\hat{x}_{k-1}+Bu_{k-1} x^k=Ax^k1+Buk1
测量结果 x k x_k xk


z k = C x k z_k = Cx_k zk=Cxk
得:
x ^ k    m e a = C − 1 z k \hat{x}_{k\;mea}=C^{-1}z_k x^kmea=C1zk
设后验结果 x ^ k \hat{x}_k x^k
x ^ k = x ^ k − + G ( C − 1 z k − x ^ k − ) \hat{x}_k=\hat{x}_k^{-}+G(C^{-1}z_k-\hat{x}_k^{-}) x^k=x^k+G(C1zkx^k)
分析上式:当G=0时, x ^ k = x ^ k − \hat{x}_k=\hat{x}_k^{-} x^k=x^k;当G=1时, x ^ k = C − 1 z k \hat{x}_k=C^{-1}z_k x^k=C1zk

若 G=KC,K为卡尔曼增益,得
x ^ k = x ^ k − + K ( z k − C x ^ k − ) \hat{x}_k=\hat{x}_k^{-}+K(z_k-C\hat{x}_k^{-}) x^k=x^k+K(zkCx^k)
现在的目标为寻找K,使得$\hat{x}_k 趋 近 于 趋近于 x_k$(即估计值趋近于真实值)

令误差 e k = x k − x ^ k e_k=x_k-\hat{x}_k ek=xkx^k e k ∼ N ( 0 , P ) e_k \sim N(0,P) ekN(0,P) P = E [ e e T ] P=E[ee^T] P=E[eeT]

若估计值与实际值差距越小,则误差的方差越小,因此目标转化为寻找K,使得P矩阵的迹最小。
P = E [ e e T ] = E [ ( x k − x ^ k ) ( x k − x ^ k ) T ] P=E[ee^T]=E[(x_k-\hat{x}_k)(x_k-\hat{x}_k)^T] P=E[eeT]=E[(xkx^k)(xkx^k)T]

x k − x ^ k = x k − ( x ^ k − + K ( z k − C x ^ k − ) ) = . . . = ( I − K C ) e k − − K v k x_k-\hat{x}_k=x_k-(\hat{x}_k^{-}+K(z_k-C\hat{x}_k^{-}))=...=(I-KC)e_k^--Kv_k xkx^k=xk(x^k+K(zkCx^k))=...=(IKC)ekKvk

所以
P k = E [ ( ( I − K C ) e k − − K v k ) ( ( I − K C ) e k − − K v k ) T ] = . . . = P k − − K C P k − − P k − C T K T + K C P k − C T K T + K Q K T P_k=E[((I-KC)e_k^--Kv_k)((I-KC)e_k^--Kv_k)^T]=...=P_k^- -KCP_k^--P_k^-C^TK^T+KCP_k^-C^TK^T+KQK^T Pk=E[((IKC)ekKvk)((IKC)ekKvk)T]=...=PkKCPkPkCTKT+KCPkCTKT+KQKT
现在求迹:
t r ( P k ) = t r ( P k − ) − 2 t r ( K C P k − ) + t r ( K C P k − C T K T ) + t r ( K Q K T ) tr(P_k)=tr(P_k^-) -2tr(KCP_k^-)+tr(KCP_k^-C^TK^T)+tr(KQK^T) tr(Pk)=tr(Pk)2tr(KCPk)+tr(KCPkCTKT)+tr(KQKT)
对迹求导:
d    t r ( P k ) d K = 0 \frac{d\;tr(P_k)}{dK}=0 dKdtr(Pk)=0
得到:
− P k − C T + K ( C P k − C T + Q ) = 0 -P_k^-C^T+K(CP_k^-C^T+Q)=0 PkCT+K(CPkCT+Q)=0
化简得:
K = P k − C T ( C P k − C T + Q ) − 1 K=P_k^-C^T(CP_k^-C^T+Q)^{-1} K=PkCT(CPkCT+Q)1
现在求 P k − P_k^- Pk
P k − = E ( e k − e k −    T ) P_k^-=E(e_k^-e_k^{-\;T}) Pk=E(ekekT)
其中:
e k − = x k − x ^ k − = A x k − 1 + B u k − 1 + w k − 1 − A x ^ k − 1 − B u k − 1 = A ( x k − 1 − x ^ k − 1 ) + w k − 1 = A e k − 1 + w k − 1 e_k^-=x_k-\hat{x}_k^-=Ax_{k-1} + Bu_{k-1} +w_{k-1}-A\hat{x}_{k-1}-Bu_{k-1}=A(x_{k-1}-\hat{x}_{k-1})+w_{k-1}=Ae_{k-1}+w_{k-1} ek=xkx^k=Axk1+Buk1+wk1Ax^k1Buk1=A(xk1x^k1)+wk1=Aek1+wk1
所以:
P k − = E ( e k − e k −    T ) = . . . = A P ^ k − 1 A T + R P_k^-=E(e_k^-e_k^{-\;T})=...=A\hat{P}_{k-1}A^T +R Pk=E(ekekT)=...=AP^k1AT+R
总结卡尔曼滤波五大公式:

1.预测

先验:
x ^ k − = A x ^ k − 1 + B u k − 1 \hat{x}_k^{-} = A\hat{x}_{k-1}+Bu_{k-1} x^k=Ax^k1+Buk1
先验误差协方差:
P k − = A P ^ k − 1 A T + R P_k^-=A\hat{P}_{k-1}A^T +R Pk=AP^k1AT+R
2.校正

卡尔曼增益:
K = P k − C T ( C P k − C T + Q ) − 1 K=P_k^-C^T(CP_k^-C^T+Q)^{-1} K=PkCT(CPkCT+Q)1
后验估计:
x ^ k = x ^ k − + K ( z k − C x ^ k − ) \hat{x}_k=\hat{x}_k^{-}+K(z_k-C\hat{x}_k^{-}) x^k=x^k+K(zkCx^k)
更新误差协方差:
P ^ k = ( I − K C ) P k − \hat{P}_k=(I-KC)P_k^- P^k=(IKC)Pk

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值