• 卡尔曼滤波的推导


    秋招要到了,复习一下卡尔曼滤波的推导过程。

    卡尔曼滤波的推导

    (http://blog.csdn.net/heyijia0327

    《视觉SLAM14讲》

    推导卡尔曼滤波

    假设系统为线性高斯系统,即SLAM的运动方程和观测方程都可以由线性方程来表示,即:
    { x k = A k x k − 1 + u k + w k z k = C k x k + v k ,   k = 1 , . . . , N \left\{

    xk=Akxk1+uk+wkzk=Ckxk+vk" role="presentation" style="position: relative;">xk=Akxk1+uk+wkzk=Ckxk+vk
    \right.,~k = 1,...,N {xk=Akxk1+uk+wkzk=Ckxk+vk, k=1,...,N
    假设所有的状态和噪声均满足高斯分布。记这里的噪声服从零均值高斯分布: w k ∼ N ( 0 , R ) ,   v k ∼ N ( 0 , Q ) \left. \mathbf{w}_{k} \right.\sim\left. N\left( {0,\mathbf{R}} \right),~\mathbf{v}_{k} \right.\sim N\left( {0,\mathbf{Q}} \right) wkN(0,R), vkN(0,Q) 。以尖帽子 x ^ k \hat{\boldsymbol{x}}_k x^k 表示后验,以横线 x ˉ k \bar{\boldsymbol{x}}_k xˉk 表示先验分布。

    第一步:预测。根据运动方程确定 x k \boldsymbol{x}_k xk 的先验分布。
    P ( x k | x 0 , u 1 : k , z 1 : k − 1 ) = N ( A k x ^ k − 1 + u k , A k P ^ k − 1 A k T + R ) P\left( \mathbf{x}_{k} \middle| \mathbf{x}_{0},\mathbf{u}_{1:k},\mathbf{z}_{1:k - 1} \right) = N\left( {\mathbf{A}_{k}{\hat{\mathbf{x}}}_{k - 1} + \mathbf{u}_{k},\mathbf{A}_{k}{\hat{\mathbf{P}}}_{k - 1}\mathbf{A}_{k}^{T} + \mathbf{R}} \right) P(xkx0,u1:k,z1:k1)=N(Akx^k1+uk,AkP^k1AkT+R)
    即:
    x ˉ k = A k x ^ k − 1 + u k P ˉ k = A k P ^ k − 1 A k T + R \bar{\mathbf{x}}_{k} = \bold{A}_k \hat{\mathbf{x}}_{k - 1} + \mathbf{u}_{k} \\ \bar{\mathbf{P}}_{k} =\bold{A}_k \hat{\mathbf{P}}_{k - 1} \bold{A}_k^T + \mathbf{R} xˉk=Akx^k1+ukPˉk=AkP^k1AkT+R
    这一步的意思是,从上一个时刻的状态,根据输入信息(但是有噪声),推断当前时刻的状态分布。这个分布也就是先验。

    第二步,先计算卡尔曼增益 K \bold{K} K,再计算后验。由观测方程,我们可以计算在某个状态下,应该产生怎样的观测数据:
    P ( z k | x k ) = N ( C k x k , Q ) P\left( \mathbf{z}_{k} \middle| \mathbf{x}_{k} \right) = N\left( {\mathbf{C}_{k}\mathbf{x}_{k},\mathbf{Q}} \right) P(zkxk)=N(Ckxk,Q)
    为了计算 x ^ k \hat{\boldsymbol{x}}_k x^k ,根据贝叶斯公式:
    P ( x k | x 0 , u 1 : k , z 1 : k ) ∝ P ( z k | x k ) P ( x k | x 0 , u 1 : k , z 1 : k − 1 ) P\left( \mathbf{x}_{k} \middle| \mathbf{x}_{0},\mathbf{u}_{1:k},\mathbf{z}_{1:k} \right) \propto P\left( \mathbf{z}_{k} \middle| \mathbf{x}_{k} \right)P\left( \mathbf{x}_{k} \middle| \mathbf{x}_{0},\mathbf{u}_{1:k},\mathbf{z}_{1:k - 1} \right) P(xkx0,u1:k,z1:k)P(zkxk)P(xkx0,u1:k,z1:k1)
    有:
    N ( x ^ k , P ^ k ) = N ( C k x k , Q ) ⋅ N ( x ˉ k , P ˉ k ) N\left( {{\hat{\mathbf{x}}}_{k},{\hat{\mathbf{P}}}_{k}} \right) = N\left( {\mathbf{C}_{k}\mathbf{x}_{k},\mathbf{Q}} \right) \cdot N\left( \bar{\mathbf{x}}_{k},\bar{\mathbf{P}}_{k} \right) N(x^k,P^k)=N(Ckxk,Q)N(xˉk,Pˉk)
    既然我们已经知道等式两侧都是高斯分布,那就只需比较指数部分即可。指数部分很像是一个二次型的配方,我们来推导一下。首先把指数部分展开,有:
    ( x k − x ^ k ) T P ^ k − 1 ( x k − x ^ k ) = ( z k − C k x k ) T Q   − 1 ( z k − C k x k ) + ( x k − x ˉ k ) T P ˉ k − 1 ( x k − x ˉ k ) \left( {\mathbf{x}_{k} - {\hat{\mathbf{x}}}_{k}} \right)^{T}{\hat{\mathbf{P}}}_{k}^{- 1}\left( {\mathbf{x}_{k} - {\hat{\mathbf{x}}}_{k}} \right) \\= \left( {\mathbf{z}_{k} - \mathbf{C}_{k}\mathbf{x}_{k}} \right)^{T}\mathbf{Q}_{~}^{- 1}\left( {\mathbf{z}_{k} - \mathbf{C}_{k}\mathbf{x}_{k}} \right) + \left( \mathbf{x}_{k} - \bar{\mathbf{x}}_{k} \right)^{T} {\bar{\mathbf{P}}}_{k}^{- 1} \left( \mathbf{x}_{k} - \bar{\mathbf{x}}_{k} \right) (xkx^k)TP^k1(xkx^k)=(zkCkxk)TQ 1(zkCkxk)+(xkxˉk)TPˉk1(xkxˉk)
    为了求左侧的 x ^ k \hat{\boldsymbol{x}}_k x^k P ^ k \hat{\boldsymbol{P}}_k P^k ,我们把两边展开,并比较 x k {\boldsymbol{x}}_k xk 的二次和一次系数。

    左侧:

    ( x k − x ^ k ) T P ^ k − 1 ( x k − x ^ k ) = ( x k T − x ^ k T ) ( P ^ k − 1 x k − P ^ k − 1 x ^ k ) = x k T P ^ k − 1 x k − x k T P ^ k − 1 x ^ k − x ^ k T P ^ k − 1 x k + x ^ k T P ^ k − 1 x ^ k \left( {\mathbf{x}_{k} - {\hat{\mathbf{x}}}_{k}} \right)^{T}{\hat{\mathbf{P}}}_{k}^{- 1}\left( {\mathbf{x}_{k} - {\hat{\mathbf{x}}}_{k}} \right) = \left( {\mathbf{x}_{k}^{T} - {\hat{\mathbf{x}}}_{k}^{T}} \right)\left( {{\hat{\mathbf{P}}}_{k}^{- 1}\mathbf{x}_{k} - {\hat{\mathbf{P}}}_{k}^{- 1}{\hat{\mathbf{x}}}_{k}} \right) \\ = \mathbf{x}_{k}^{T}{\hat{\mathbf{P}}}_{k}^{- 1}\mathbf{x}_{k} - \mathbf{x}_{k}^{T}{\hat{\mathbf{P}}}_{k}^{- 1}{\hat{\mathbf{x}}}_{k} - {\hat{\mathbf{x}}}_{k}^{T}{\hat{\mathbf{P}}}_{k}^{- 1}\mathbf{x}_{k} + {\hat{\mathbf{x}}}_{k}^{T}{\hat{\mathbf{P}}}_{k}^{- 1}{\hat{\mathbf{x}}}_{k} (xkx^k)TP^k1(xkx^k)=(xkTx^kT)(P^k1xkP^k1x^k)=xkTP^k1xkxkTP^k1x^kx^kTP^k1xk+x^kTP^k1x^k
    右侧:

    ( z k − C k x k ) T Q   − 1 ( z k − C k x k ) + ( x k − x ˉ k ) T P ˉ k − 1 ( x k − x ˉ k ) \left( {\mathbf{z}_{k} - \mathbf{C}_{k}\mathbf{x}_{k}} \right)^{T}\mathbf{Q}_{~}^{- 1}\left( {\mathbf{z}_{k} - \mathbf{C}_{k}\mathbf{x}_{k}} \right) + \left( {\mathbf{x}_{k} - {\bar{\mathbf{x}}}_{k}} \right)^{T} {\bar{\mathbf{P}}}_{k}^{- 1} \left( {\mathbf{x}_{k} - {\bar{\mathbf{x}}}_{k} } \right) (zkCkxk)TQ 1(zkCkxk)+(xkxˉk)TPˉk1(xkxˉk)

    对于二次系数,有:

    P ^ k − 1 = C k T Q   − 1 C k + P ˉ k − 1 {\hat{\mathbf{P}}}_{k}^{- 1} = \mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1}\mathbf{C}_{k} + {\bar{\mathbf{P}}}_{k}^{- 1} P^k1=CkTQ 1Ck+Pˉk1
    该式给出了协方差的计算过程。定义卡尔曼增益:

    K = P ^ k   C k T Q   − 1 \mathbf{K} = {\hat{\mathbf{P}}}_{k}^{~}\mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1} K=P^k CkTQ 1
    P ^ k \hat{\bold{P}}_k P^k 的推导为:

    P ^ k − 1 = C k T Q   − 1 C k + P ˉ k − 1 ⇒ I = P ^ k   C k T Q   − 1 C k + P ^ k   P ˉ k − 1 ⇒ I = K C k + P ^ k   P ˉ k − 1 ⇒ P ˉ k = K C k P ˉ k + P ^ k   ⇒ P ^ k   = ( I − K C k ) P ˉ k {\hat{\mathbf{P}}}_{k}^{- 1} = \mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1}\mathbf{C}_{k} + {\bar{\mathbf{P}}}_{k}^{- 1} \\ \Rightarrow\mathbf{I} = {\hat{\mathbf{P}}}_{k}^{~}\mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1}\mathbf{C}_{k} + {\hat{\mathbf{P}}}_{k}^{~}{\bar{\mathbf{P}}}_{k}^{- 1} \\ \Rightarrow\mathbf{I} = \mathbf{K}\mathbf{C}_{k} + {\hat{\mathbf{P}}}_{k}^{~}{\bar{\mathbf{P}}}_{k}^{- 1} \\ \Rightarrow {\bar{\mathbf{P}}}_{k} = \mathbf{K}\mathbf{C}_{k}{\bar{\mathbf{P}}}_{k} + {\hat{\mathbf{P}}}_{k}^{~} \\ \Rightarrow{\hat{\mathbf{P}}}_{k}^{~} = \left( {\mathbf{I} - \mathbf{K}\mathbf{C}_{k}} \right) {\bar{\mathbf{P}}}_{k} P^k1=CkTQ 1Ck+Pˉk1I=P^k CkTQ 1Ck+P^k Pˉk1I=KCk+P^k Pˉk1Pˉk=KCkPˉk+P^k P^k =(IKCk)Pˉk
    K \bold{K} K 的推导:

    K = P ^ k   C k T Q   − 1 = ( I − K C k ) P ˉ k C k T Q   − 1 ⇒ K = P ˉ k C k T Q   − 1 − K C k P ˉ k C k T Q   − 1 ⇒ K ( I + C k P ˉ k C k T Q   − 1 ) = P ˉ k C k T Q   − 1 ⇒ K ( Q + C k P ˉ k C k T ) = P ˉ k C k T ⇒ K = P ˉ k C k T ( Q + C k P ˉ k C k T ) − 1 \mathbf{K} = {\hat{\mathbf{P}}}_{k}^{~}\mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1} = \left( {\mathbf{I} - \mathbf{K}\mathbf{C}_{k}} \right){\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1} \\ \Rightarrow\mathbf{K} = {\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1} - \mathbf{K}\mathbf{C}_{k}{\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1} \\ \Rightarrow\mathbf{K}\left( {\mathbf{I} + \mathbf{C}_{k}{\bar{\mathbf{P}}}_{k} \mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1}} \right) = {\bar{\mathbf{P}}}_{k} \mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1} \\ \Rightarrow\mathbf{K}\left( {\mathbf{Q} + \mathbf{C}_{k}{\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T}} \right) = {\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T} \\ \Rightarrow\mathbf{K} = {\bar{\mathbf{P}}}_{k} \mathbf{C}_{k}^{T}\left( {\mathbf{Q} + \mathbf{C}_{k}{\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T}} \right)^{- 1} K=P^k CkTQ 1=(IKCk)PˉkCkTQ 1K=PˉkCkTQ 1KCkPˉkCkTQ 1K(I+CkPˉkCkTQ 1)=PˉkCkTQ 1K(Q+CkPˉkCkT)=PˉkCkTK=PˉkCkT(Q+CkPˉkCkT)1
    对于一次项系数,有:
    − 2 x ^ k T P ^ k − 1 x k = − 2 z k T Q   − 1 C k x k − 2 x ˉ k T P ˉ k − 1 x k ⇒ x ^ k T P ^ k − 1 = z k T Q   − 1 C k + x ˉ k T P ˉ k − 1 ⇒ P ^ k − 1 x ^ k   = C k T Q   − 1 z k   + P ˉ k − 1 x ˉ k ⇒ x ^ k   = P ^ k   C k T Q   − 1 z k   + P ^ k   P ˉ k − 1 x ˉ k -2{\hat{\mathbf{x}}}_{k}^{T}{\hat{\mathbf{P}}}_{k}^{- 1}\mathbf{x}_{k} = - 2\mathbf{z}_{k}^{T}\mathbf{Q}_{~}^{- 1}\mathbf{C}_{k}\mathbf{x}_{k} - 2{\bar{\mathbf{x}}}_{k}^{T}{\bar{\mathbf{P}}}_{k}^{- 1}\mathbf{x}_{k} \\ \Rightarrow{\hat{\mathbf{x}}}_{k}^{T}{\hat{\mathbf{P}}}_{k}^{- 1} = \mathbf{z}_{k}^{T}\mathbf{Q}_{~}^{- 1}\mathbf{C}_{k} + {\bar{\mathbf{x}}}_{k}^{T}{\bar{\mathbf{P}}}_{k}^{- 1} \\ \Rightarrow{\hat{\mathbf{P}}}_{k}^{- 1}{\hat{\mathbf{x}}}_{k}^{~} = \mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1}\mathbf{z}_{k}^{~} + {\bar{\mathbf{P}}}_{k}^{- 1}{\bar{\mathbf{x}}}_{k} \\ \Rightarrow{\hat{\mathbf{x}}}_{k}^{~} = {\hat{\mathbf{P}}}_{k}^{~}\mathbf{C}_{k}^{T}\mathbf{Q}_{~}^{- 1}\mathbf{z}_{k}^{~} + {\hat{\mathbf{P}}}_{k}^{~}{\bar{\mathbf{P}}}_{k}^{- 1}{\bar{\mathbf{x}}}_{k} 2x^kTP^k1xk=2zkTQ 1Ckxk2xˉkTPˉk1xkx^kTP^k1=zkTQ 1Ck+xˉkTPˉk1P^k1x^k =CkTQ 1zk +Pˉk1xˉkx^k =P^k CkTQ 1zk +P^k Pˉk1xˉk
    代入卡尔曼增益:

    x ^ k   = K z k   + P ^ k   P ˉ k − 1 x ˉ k = K z k   + ( I − K C k ) x ˉ k = x ˉ k + K ( z k   − C k x ˉ k ) {\hat{\mathbf{x}}}_{k}^{~} = \mathbf{K}\mathbf{z}_{k}^{~} + {\hat{\mathbf{P}}}_{k}^{~}{\bar{\mathbf{P}}}_{k}^{- 1}{\bar{\mathbf{x}}}_{k} \\ = \mathbf{K}\mathbf{z}_{k}^{~} + \left( {\mathbf{I} - \mathbf{K}\mathbf{C}_{k}} \right){\bar{\mathbf{x}}}_{k} \\ = {\bar{\mathbf{x}}}_{k} + \mathbf{K}\left( {\mathbf{z}_{k}^{~} - \mathbf{C}_{k}{\bar{\mathbf{x}}}_{k}} \right) x^k =Kzk +P^k Pˉk1xˉk=Kzk +(IKCk)xˉk=xˉk+K(zk Ckxˉk)

    步骤总结

    1. 预测(计算先验概率)

    x ˉ k = A k x ^ k − 1 + u k P ˉ k = A k P ^ k − 1 A k T + R {\bar{\mathbf{x}}}_{k} = \mathbf{A}_{k}{\hat{\mathbf{x}}}_{k - 1} + \mathbf{u}_{k} \\ {\bar{\mathbf{P}}}_{k} = \mathbf{A}_{k}{\hat{\mathbf{P}}}_{k - 1}\mathbf{A}_{k}^{T} + \mathbf{R} xˉk=Akx^k1+ukPˉk=AkP^k1AkT+R

    1. 计算卡尔曼增益

    K = P ˉ k C k T ( C k P ˉ k C k T + Q )   − 1 \mathbf{K} = {\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T}\left( {\mathbf{C}_{k}{\bar{\mathbf{P}}}_{k}\mathbf{C}_{k}^{T} + \mathbf{Q}} \right)_{~}^{- 1} K=PˉkCkT(CkPˉkCkT+Q) 1

    1. 计算后验概率

    x ^ k = x ˉ k + K ( z k − C k x ˉ k   ) P ^ k   = ( I − K C k ) P ˉ k   {\hat{\mathbf{x}}}_{k} = {\bar{\mathbf{x}}}_{k} + \mathbf{K}\left( {\mathbf{z}_{k} - \mathbf{C}_{k}{\bar{\mathbf{x}}}_{k}^{~}} \right) \\ {\hat{\mathbf{P}}}_{k}^{~} = \left( {\mathbf{I} - \mathbf{K}\mathbf{C}_{k}} \right){\bar{\mathbf{P}}}_{k}^{~} x^k=xˉk+K(zkCkxˉk )P^k =(IKCk)Pˉk 

  • 相关阅读:
    Java项目依赖释放模式
    Array_JavaScript
    SuperMap iServer 机器学习服务配置及使用
    安卓系统分区 AB . 动态分区 .VAB到底是何物,分区不同怎么刷写第三方rec
    使用ThreadPoolTaskExecutor和countDownLatch实现异步下载功能
    3D机器视觉厂商的场景争夺战役
    threejs三维地图大屏项目分享
    JavaScript 的发展历史
    【MindSpore易点通机器人-02】设计与技术选型
    CNN特征可视化相关论文
  • 原文地址:https://blog.csdn.net/qq_37394634/article/details/125880268