文章目录
卡尔曼滤波
背景
卡尔曼滤波作为一种状态最优估计的方法,其应用也越来越普遍,如在无人机、机器人等领域均得到了广泛应用。
 对于Kalman Filter的理解,用过的都知道“黄金五条”公式,且通过“预测”与“更新”两个过程来对系统的状态进行最优估计,被广泛应用于估计问题中。
线性系统模型建立
对于一个线性系统来说,运动、观测模型如下
 
     
      
       
        
         {
        
        
         
          
           
            
             
              X
             
             
              k
             
            
           
          
          
           
            
             
             
              =
             
             
              A
             
             
              
               
                X
               
               
                
                 k
                
                
                 −
                
                
                 1
                
               
              
              
               +
              
              
               B
              
              
               
                
                 u
                
                
                 k
                
               
               
                +
               
               
                
                 w
                
                
                 k
                
               
              
             
            
           
          
         
         
          
           
            
             
              Z
             
             
              k
             
            
           
          
          
           
            
             
             
              =
             
             
              H
             
             
              
               
                X
               
               
                k
               
              
              
               +
              
              
               
                n
               
               
                k
               
              
             
            
           
          
         
        
       
       
         \left\{ \begin{aligned} \bf{X}_{k} &= A\bf{X}_{k-1}+B\bf{u}_{k}+w_k \\ \bf{Z}_k & = H\bf{X}_k+n_k \end{aligned} \right. 
       
      
     {XkZk=AXk−1+Buk+wk=HXk+nk
 其中:
    
     
      
       
        A
       
      
      
       A
      
     
    A表示转移矩阵、
    
     
      
       
        
         X
        
        
         k
        
       
      
      
       \bf{X}_k
      
     
    Xk表示系统状态、
    
     
      
       
        B
       
      
      
       B
      
     
    B表示控制矩阵\、
    
     
      
       
        
         u
        
        
         k
        
       
      
      
       \bf{u}_k
      
     
    uk表示输入,
    
     
      
       
        
         w
        
        
         k
        
       
      
      
       w_k
      
     
    wk表示输入高斯噪声,其均值为0,协方差矩阵为
    
     
      
       
        P
       
      
      
       P
      
     
    P,
    
     
      
       
        P
       
       
        (
       
       
        w
       
       
        )
       
       
        ∈
       
       
        N
       
       
        (
       
       
        0
       
       
        ,
       
       
        P
       
       
        )
       
      
      
       P(w)\in N(0, P)
      
     
    P(w)∈N(0,P)。
    
     
      
       
        
         Z
        
        
         k
        
       
      
      
       \bf{Z}_k
      
     
    Zk表示测量值、
    
     
      
       
        H
       
      
      
       H
      
     
    H表示观测矩阵、
    
     
      
       
        
         n
        
        
         k
        
       
      
      
       n_k
      
     
    nk表示测量的噪声平均值为0,协方差为
    
     
      
       
        R
       
      
      
       R
      
     
    R,
    
     
      
       
        p
       
       
        (
       
       
        v
       
       
        )
       
       
        ∈
       
       
        N
       
       
        (
       
       
        0
       
       
        ,
       
       
        R
       
       
        )
       
      
      
       p(v)\in N(0,R)
      
     
    p(v)∈N(0,R)。
 对于大多数系统来讲,并不是严格意义上的线性时变系统,或者是系统结构参数存在不确定性,这个不确定性用过程噪声和估计噪声来表征。总之,引入
    
     
      
       
        
         w
        
        
         k
        
       
       
        、
       
       
        
         n
        
        
         k
        
       
      
      
       w_k\text{、}n_k
      
     
    wk、nk的主要目的是表征不确定性。
公式推导
对于状态估计算法来说,我们可以获得状态量的三个值:状态预测值(
    
     
      
       
        
         
          x
         
         
          ˉ
         
        
        
         k
        
       
      
      
       \bar{x}_k
      
     
    xˉk)、最佳估计值(
    
     
      
       
        
         
          x
         
         
          ~
         
        
        
         k
        
       
      
      
       \tilde{x}_k
      
     
    x~k)以及真实值(
    
     
      
       
        
         x
        
        
         k
        
       
      
      
       x_{k}
      
     
    xk)。
 预测值是系统先验估计值,真实值是系统的测量值,最佳估计值是系统后验最大估计值,它通过一个卡尔曼增益
    
     
      
       
        K
       
      
      
       K
      
     
    K来调节预测值和真实值。
 状态预测值为(黄金法则1):
 
     
      
       
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         =
        
        
         A
        
        
         
          
           x
          
          
           ~
          
         
         
          
           k
          
          
           −
          
          
           1
          
         
        
        
         +
        
        
         B
        
        
         
          u
         
         
          k
         
        
       
       
         \bar{x}_k = A\tilde{x}_{k-1} + Bu_{k} 
       
      
     xˉk=Ax~k−1+Buk
 从而得到更新方程(黄金法则2):
 
     
      
       
        
         
          
           x
          
          
           ~
          
         
         
          k
         
        
        
         =
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         +
        
        
         K
        
        
         (
        
        
         
          Z
         
         
          k
         
        
        
         −
        
        
         H
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         )
        
        
         ;
        
       
       
         \tilde{x}_{k} = \bar{x}_k + K(Z_k-H\bar{x}_k); 
       
      
     x~k=xˉk+K(Zk−Hxˉk);
 我们将联立式(1)(3)得到:
 
     
      
       
        
         
          
           x
          
          
           ~
          
         
         
          k
         
        
        
         =
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         +
        
        
         K
        
        
         (
        
        
         H
        
        
         
          x
         
         
          k
         
        
        
         +
        
        
         
          n
         
         
          k
         
        
        
         −
        
        
         H
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         )
        
        
       
       
         \tilde{x}_k = \bar{x}_k + K(Hx_k+n_k-H\bar{x}_k)\\ 
       
      
     x~k=xˉk+K(Hxk+nk−Hxˉk)
 进一步得到:
 
     
      
       
        
         
          
           x
          
          
           ~
          
         
         
          k
         
        
        
         =
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         +
        
        
         K
        
        
         (
        
        
         H
        
        
         
          x
         
         
          k
         
        
        
         −
        
        
         H
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         )
        
        
         +
        
        
         K
        
        
         
          n
         
         
          k
         
        
       
       
         \tilde{x}_k = \bar{x}_k + K(Hx_k-H\bar{x}_k)+Kn_k 
       
      
     x~k=xˉk+K(Hxk−Hxˉk)+Knk
 经过变换可得:
 
     
      
       
        
         
          x
         
         
          k
         
        
        
         −
        
        
         
          
           x
          
          
           ~
          
         
         
          k
         
        
        
         =
        
        
         
          x
         
         
          k
         
        
        
         −
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         −
        
        
         K
        
        
         (
        
        
         H
        
        
         
          x
         
         
          k
         
        
        
         −
        
        
         H
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         )
        
        
         −
        
        
         K
        
        
         
          n
         
         
          k
         
        
       
       
         x_k-\tilde{x}_k = x_k - \bar{x}_k - K(H{x}_k-H\bar{x}_k)-Kn_k 
       
      
     xk−x~k=xk−xˉk−K(Hxk−Hxˉk)−Knk
 我们定义:
 
    
     
      
       
        
         
          e
         
         
          ˉ
         
        
        
         k
        
       
       
        =
       
       
        
         x
        
        
         k
        
       
       
        −
       
       
        
         
          x
         
         
          ˉ
         
        
        
         k
        
       
      
      
       \bar{e}_k=x_k-\bar{x}_k
      
     
    eˉk=xk−xˉk表示真值与估计值之间的误差(先验)
 
    
     
      
       
        
         e
        
        
         k
        
       
       
        =
       
       
        
         x
        
        
         k
        
       
       
        −
       
       
        
         
          x
         
         
          ~
         
        
        
         k
        
       
      
      
       {e}_k=x_k-\tilde{x}_k
      
     
    ek=xk−x~k表示真值与最优估计值之间的误差(后验)
 
    
     
      
       
        
         
          P
         
         
          ˉ
         
        
        
         k
        
       
       
        =
       
       
        E
       
       
        [
       
       
        
         
          e
         
         
          ˉ
         
        
        
         k
        
       
       
        
         
          e
         
         
          ˉ
         
        
        
         k
        
        
         T
        
       
       
        ]
       
      
      
       \bar{P}_k=E[\bar{e}_k\bar{e}_k^T]
      
     
    Pˉk=E[eˉkeˉkT]表示真值与估计之间的协方差矩阵
 
    
     
      
       
        
         P
        
        
         k
        
       
       
        =
       
       
        E
       
       
        [
       
       
        
         e
        
        
         k
        
       
       
        
         e
        
        
         k
        
        
         T
        
       
       
        ]
       
      
      
       {P}_k=E[{e}_k{e}_k^T]
      
     
    Pk=E[ekekT]表示真值与估计之间的协方差矩阵
 于是,式(6)转换为:
 
     
      
       
        
         
          e
         
         
          k
         
        
        
         =
        
        
         (
        
        
         I
        
        
         −
        
        
         K
        
        
         H
        
        
         )
        
        
         
          
           e
          
          
           ˉ
          
         
         
          k
         
        
        
         −
        
        
         K
        
        
         
          n
         
         
          k
         
        
       
       
         e_k =(I-KH)\bar{e}_k-Kn_k 
       
      
     ek=(I−KH)eˉk−Knk
 于是,可以得到后验最优协方差矩阵:
 
     
      
       
        
         
          P
         
         
          k
         
        
        
         =
        
        
         E
        
        
         [
        
        
         
          e
         
         
          k
         
        
        
         
          e
         
         
          k
         
         
          T
         
        
        
         ]
        
        
         =
        
        
         (
        
        
         I
        
        
         −
        
        
         K
        
        
         H
        
        
         )
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         (
        
        
         I
        
        
         −
        
        
         K
        
        
         H
        
        
         
          )
         
         
          T
         
        
        
         +
        
        
         K
        
        
         R
        
        
         
          K
         
         
          T
         
        
       
       
         P_k=E[e_ke_k^T]=(I-KH)\bar{P}_k(I-KH)^T+KRK^T 
       
      
     Pk=E[ekekT]=(I−KH)Pˉk(I−KH)T+KRKT
 式(8)展开得到:
 KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ P_k = \bar{P}_…
 对于卡尔曼滤波来说,其目标是观测值与预测值之间的协方差最下,使得其接近真值:
 
     
      
       
        
         J
        
        
         =
        
        
         arg
        
        
         
        
        
         
          
           min
          
          
           
          
         
         
          K
         
        
        
         t
        
        
         r
        
        
         (
        
        
         P
        
        
         )
        
       
       
         J = \arg\min_K tr(P) 
       
      
     J=argKmintr(P)
 对于每一项
    
     
      
       
        
         P
        
        
         k
        
       
      
      
       P_k
      
     
    Pk来说,对
    
     
      
       
        K
       
      
      
       K
      
     
    K求导:
 
     
      
       
        
         
          
           ∂
          
          
           
            P
           
           
            k
           
          
         
         
          
           ∂
          
          
           K
          
         
        
        
         =
        
        
         −
        
        
         2
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         
          H
         
         
          T
         
        
        
         +
        
        
         2
        
        
         K
        
        
         (
        
        
         H
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         
          H
         
         
          T
         
        
        
         +
        
        
         R
        
        
         )
        
        
         =
        
        
         0
        
       
       
         \frac{\partial P_k}{\partial K}= -2\bar{P}_kH^T+2K(H\bar{P}_kH^T+R) = 0 
       
      
     ∂K∂Pk=−2PˉkHT+2K(HPˉkHT+R)=0
 得到黄金法则3更新卡尔曼滤波的增益:
 
     
      
       
        
         K
        
        
         =
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         
          H
         
         
          T
         
        
        
         (
        
        
         H
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         
          H
         
         
          T
         
        
        
         +
        
        
         R
        
        
         
          )
         
         
          
           −
          
          
           1
          
         
        
       
       
         K = \bar{P}_kH^T(H\bar{P}_kH^T+R)^{-1} 
       
      
     K=PˉkHT(HPˉkHT+R)−1
 将式(11)带入式(8)中,得到黄金法则4更新后验最佳协方差:
 
     
      
       
        
         
          P
         
         
          k
         
        
        
         =
        
        
         (
        
        
         I
        
        
         −
        
        
         K
        
        
         H
        
        
         )
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
       
       
         P_k = (I-KH)\bar{P}_k 
       
      
     Pk=(I−KH)Pˉk
 可以通过这次状态递推得到下一阶段的先验估计值及先验误差值:
 
     
      
       
        
         
          
           
            
             
              e
             
             
              ˉ
             
            
            
             
              k
             
             
              +
             
             
              1
             
            
           
          
         
         
          
           
            
            
             =
            
            
             
              x
             
             
              
               k
              
              
               +
              
              
               1
              
             
            
            
             −
            
            
             
              
               x
              
              
               ˉ
              
             
             
              
               k
              
              
               +
              
              
               1
              
             
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             A
            
            
             
              x
             
             
              k
             
            
            
             +
            
            
             
              w
             
             
              k
             
            
            
             −
            
            
             A
            
            
             
              x
             
             
              ~
             
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             A
            
            
             
              
               e
              
              
               ~
              
             
             
              k
             
            
            
             +
            
            
             
              w
             
             
              k
             
            
           
          
         
        
       
       
         \begin{aligned} \bar{e} _{k+1} &= x_{k+1} - \bar{x}_{k+1} \\ &=Ax_k+w_k-A\tilde{x}\\&=A\tilde{e}_k+w_k \end{aligned} 
       
      
     eˉk+1=xk+1−xˉk+1=Axk+wk−Ax~=Ae~k+wk
 然后可以更新下一次的先验协方差矩阵(黄金法则5):
 
     
      
       
        
         
          
           
            
             
              P
             
             
              ˉ
             
            
            
             
              k
             
             
              +
             
             
              1
             
            
           
          
         
         
          
           
            
            
             =
            
            
             E
            
            
             [
            
            
             
              
               e
              
              
               ˉ
              
             
             
              k
             
            
            
             
              
               e
              
              
               ˉ
              
             
             
              k
             
             
              T
             
            
            
             ]
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             E
            
            
             [
            
            
             (
            
            
             A
            
            
             
              
               e
              
              
               ~
              
             
             
              k
             
            
            
             +
            
            
             
              w
             
             
              k
             
            
            
             )
            
            
             (
            
            
             A
            
            
             
              
               e
              
              
               ~
              
             
             
              k
             
            
            
             +
            
            
             
              w
             
             
              k
             
            
            
             
              )
             
             
              T
             
            
            
             ]
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             E
            
            
             [
            
            
             (
            
            
             A
            
            
             
              
               e
              
              
               ~
              
             
             
              k
             
            
            
             )
            
            
             (
            
            
             A
            
            
             
              
               e
              
              
               ~
              
             
             
              k
             
            
            
             
              )
             
             
              T
             
            
            
             ]
            
            
             +
            
            
             E
            
            
             [
            
            
             
              w
             
             
              k
             
            
            
             
              w
             
             
              k
             
             
              T
             
            
            
             ]
            
           
          
         
        
        
         
          
           
          
         
         
          
           
            
            
             =
            
            
             A
            
            
             
              P
             
             
              k
             
            
            
             
              A
             
             
              T
             
            
            
             +
            
            
             Q
            
           
          
         
        
       
       
         \begin{aligned} \bar{P}_{k+1} &= E[\bar{e}_{k}\bar{e}_{k}^T]\\ &=E[(A\tilde{e}_{k}+w_{k})(A\tilde{e}_{k}+w_k)^T]\\ &=E[(A\tilde{e}_k)(A\tilde{e}_k)^T]+E[w_kw_k^T]\\ &=AP_kA^T+Q \end{aligned} 
       
      
     Pˉk+1=E[eˉkeˉkT]=E[(Ae~k+wk)(Ae~k+wk)T]=E[(Ae~k)(Ae~k)T]+E[wkwkT]=APkAT+Q
 至此我们递推出卡尔曼滤波的黄金五法则!
总结
从推导过程,我们可以看出,卡尔曼滤波分为两个部分:
预测
预测的过程就是根据上次的最优状态估计量,去估计下次的状态,这个估计往往是一个先验值:
 
     
      
       
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         =
        
        
         A
        
        
         
          
           x
          
          
           ~
          
         
         
          
           k
          
          
           −
          
          
           1
          
         
        
        
         +
        
        
         B
        
        
         
          u
         
         
          k
         
        
       
       
         \bar{x}_k = A\tilde{x}_{k-1}+Bu_k 
       
      
     xˉk=Ax~k−1+Buk
 并且,我们同样可以根据上次估计的协方差估计本次协方差:
 
     
      
       
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         =
        
        
         A
        
        
         
          P
         
         
          
           k
          
          
           −
          
          
           1
          
         
        
        
         
          A
         
         
          T
         
        
        
         +
        
        
         Q
        
       
       
         \bar{P}_k = A{P}_{k-1}A^T + Q 
       
      
     Pˉk=APk−1AT+Q
 于是,我们就得到了关于先验的信息,接下来进行与观测值的加权过程(修正)
更新
首先,我们可以得到最新卡尔曼增益值:
 
     
      
       
        
         
          K
         
         
          k
         
        
        
         =
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         
          H
         
         
          T
         
        
        
         (
        
        
         H
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
        
         
          H
         
         
          T
         
        
        
         +
        
        
         R
        
        
         
          )
         
         
          
           −
          
          
           1
          
         
        
       
       
         K_k = \bar{P}_kH^T(H\bar{P}_kH^T+R)^{-1} 
       
      
     Kk=PˉkHT(HPˉkHT+R)−1
 然后我们用卡尔曼滤波进行对估计值进行修正:
 
     
      
       
        
         
          
           x
          
          
           ~
          
         
         
          k
         
        
        
         =
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         +
        
        
         
          K
         
         
          k
         
        
        
         (
        
        
         
          z
         
         
          k
         
        
        
         −
        
        
         H
        
        
         
          
           x
          
          
           ˉ
          
         
         
          k
         
        
        
         )
        
       
       
         \tilde{x}_k = \bar{x}_k+K_k(z_k-H\bar{x}_k) 
       
      
     x~k=xˉk+Kk(zk−Hxˉk)
 最后更新最优估计的协方差矩阵:
 
     
      
       
        
         
          P
         
         
          k
         
        
        
         =
        
        
         (
        
        
         I
        
        
         −
        
        
         
          K
         
         
          k
         
        
        
         H
        
        
         )
        
        
         
          
           P
          
          
           ˉ
          
         
         
          k
         
        
       
       
         P_k = (I -K_kH)\bar{P}_k 
       
      
     Pk=(I−KkH)Pˉk










