符号意义

  • x^\hat{x}:状态x的估计状态,后验
  • xˉ\bar{x}:估计状态x^k\hat{x}_k的预估值,先验
  • PP:协方差

一、卡尔曼滤波(KF)

1.1 状态观测器(State Observers)

SLAM学习——卡尔曼滤波(KF/EKF)

  • 实际系统

x˙=Ax+Buy=Cx \dot{x} = Ax+Bu\\ y = Cx

  • 数学模型

x^˙=Ax^+Bu+K(yy^)y^=Cx^ \dot{\hat{x}} = A\hat{x}+Bu + K(y- \hat{y})\\ \hat{y} = C \hat{x}

  • 误差

eobs=xx^ e_{obs}= x -\hat{x}

使数学模型和实际系统相减
SLAM学习——卡尔曼滤波(KF/EKF)
根据e˙obs=(AKC)eobs\dot{e}_{obs} = (A-KC)e_{obs}eobse_{obs}积分为
eobs(t)=e(AKC)teobs(0) e_{obs}(t) = e^{(A-KC)t}e_{obs}(0)

SLAM学习——卡尔曼滤波(KF/EKF)

在上式中,若AKC<0A-KC<0eobse_{obs}会随着tt的增加而减少,最终趋向于0,即x^\hat{x}接近xx

在这个过程中,KCKC非必需,AA也可以使eobse_{obs}随时间衰减,但因模型中不确定性的存在,AA无法确定,因此只能通过KK控制衰减速度,使x^\hat{x}更快地收敛到xx,确定KK的最佳方法就是使用卡尔曼滤波器。

1.2 公式推导

{xk=Akxk1+uk+wk ()zk=Ckxk+vk () \left\{\begin{matrix} x_k = A_k x_{k-1}+u_k+w_ k\ (运动方程)\\ z_k = C_kx_k+v_k \ (状态方程) \end{matrix}\right.

wkw_kvkv_k为噪声,此处假设符合零均值的高斯分布
wkN(0,R),vkN(0,Q) w_k \sim N(0,R),v_k \sim N(0,Q)

P(x)P(x)为事件x发生的概率,P(yP(y)为事件y发生的概率,P(x)P(x)P(y)P(y)称为先验概率(prior probability),P(xy)P(x|y)为事件y发生的条件下,事件x发生的概率,称为x的后验概率(posterior probability)

贝叶斯定理是关于随机事件A和B的条件概率的一则定理。
P(AB)=P(A)P(BA)P(B) P(A|B) = P(A) \frac{P(B|A)}{P(B)}
贝叶斯定理简单描述为:
A=A× 新信息出现后的A概率 = A概率 \times 新信息带来的调整

通过运动方程确定xkx_k的先验概率
P(xkx0,u1:k,z1:k1)=N(Akx^k1+uk,AkP^k1AkT+R) P(x_k|x_0,u_{1:k},z{1:k-1}) = N(A_k \hat{x}_{k-1}+u_k,A_k \hat{P}_{k-1}A^T_k+R)
这一步称为预测,即根据输入,从上一个时刻状态推断当前状态
xˉk=Akx^k1+uk,Pˉk=AkP^k1AkT+R \bar{x}_k = A_k \hat{x}_{k-1}+u_k, \bar{P}_k=A_k \hat{P}_{k-1}A^T_k+R
xˉk\bar{x}_kPˉk\bar{P}_k为状态和协方差的先验分布,是根据公式直接通过上一个状态计算获得,用于卡尔曼增益和后验x^k\hat{x}_kP^k\hat{P}_k的计算。
P(zkxk)=N(Ckxk,Q) P(z_k|x_k) = N(C_kx_k,Q)
P(zkxk)P(z_k|x_k)为观测数据zkz_k的后验概率,描述某个状态下xkx_k会产生怎样的观测数据。

设状态分布为xkN(x^k,P^k)x_k \sim N(\hat{x}_k,\hat{P}_k),通过两组概率的乘法获得
N(x^k,P^k)=N(Ckxk,Q)N(xˉk,Pˉk) N(\hat{x}_k,\hat{P}_k) = N(C_k x_k,Q) N(\bar{x}_k,\bar{P}_k)
求解上式可以获得
x^k=xˉk+K(zkCkxˉk)P^k=(IKCk)Pˉk \hat{x}_k = \bar{x}_k + K(z_k-C_k\bar{x}_k)\\ \hat{P}_k = (I-KC_k)\bar{P}_k
其中
K=P^kCkTQ1I=KCk+P^kPˉk1 K = \hat{P}_k C_k^TQ^{-1}\\ I = KC_k+ \hat{P}_k \bar{P}_k^{-1}
此处KK实际上可以不通过P^k\hat{P}_k计算获得。

总结

SLAM学习——卡尔曼滤波(KF/EKF)

二、扩展卡尔曼滤波(EKF)

卡尔曼滤波针对的是线性系统,当需要拓展到非线性系统时,通常使用扩展卡尔曼滤波器(Extended Kalman Filter,EKF),通过对运动方程以及观测方程在某个点附近进行一阶泰勒展开并保留一阶项,进行线性化操作,然后按照线性系统进行推导。

SLAM学习——卡尔曼滤波(KF/EKF)

{xk=f(xk1,uk)+wk ()zk=h(xk)+vk () \left\{\begin{matrix} x_k = f(x_{k-1},u_k)+w_ k\ (运动方程)\\ z_k = h(x_k)+v_k \ (状态方程) \end{matrix}\right.

雅可比矩阵为

SLAM学习——卡尔曼滤波(KF/EKF)
SLAM学习——卡尔曼滤波(KF/EKF)

线性化系统
xkFxk1+wkzkHxk+vk \triangle x_k \approx F \triangle x_{k-1} +w_k\\ \triangle z_k \approx H \triangle x_{k} +v_k
总结

  1. 预测

xˉk=f(x^k1,uk),Pˉk=FP^kFT+Rk \bar{x}_k = f(\hat{x}_{k-1},u_k),\bar{P}_k = F \hat{P}_kF^T+R_k

  1. 更新

    卡尔曼增益KkK_k
    Kk=PˉkHT(HPˉkHT+Qk)1 K_k =\bar{P}_k H^T(H \bar{P}_k H^T+Q_k)^{-1}
    后验概率
    x^k=xˉk+Kk(zkh(xˉk)),P^k=(IKkH)Pˉk \hat{x}_k = \bar{x}_k + K_k(z_k-h(\bar{x}_k)),\hat{P}_k = (I-K_kH)\bar{P}_k

三、卡尔曼滤波讨论

不同卡尔曼滤波算法对比

SLAM学习——卡尔曼滤波(KF/EKF)
EKF的局限性

  1. 由于复杂的导数,可能导致难以计算雅可比矩阵
  2. 通过数值法计算,会导致计算成本的大量增加
  3. EKF不适用于具有不连续模型的系统,因为系统不可微分时,雅可比矩阵不存在
  4. 高度非线性系统的线性化效果不好

参考

[Matlab官方教程]卡尔曼滤波器(Kalman Filters)(很好的****)

怎样用非数学语言讲解贝叶斯定理(Bayes theorem)?

初学者的卡尔曼滤波——扩展卡尔曼滤波(一)

图说卡尔曼滤波,一份通俗易懂的教程

卡尔曼滤波器(Kalman Filters)

Understanding Kalman Filters

《视觉SLAM十四讲》

相关文章:

  • 2021-12-08
  • 2021-12-25
  • 2021-05-26
  • 2021-10-07
  • 2021-04-09
  • 2021-08-01
  • 2021-04-22
  • 2021-04-17
猜你喜欢
  • 2021-10-29
  • 2021-07-29
  • 2021-10-29
  • 2022-12-23
  • 2021-09-13
  • 2021-10-29
  • 2021-11-16
相关资源
相似解决方案