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

符号意义

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

一、卡尔曼滤波(KF)

1.1 状态观测器(State Observers)

在这里插入图片描述
通过反馈,计算实际观测值 y y 与估计观测值 y ^ \hat{y} 的误差,调整增益K使误差减少,让数学模型更加接近实际系统。

当数学模型与实际系统接近时,通过数学模型计算获得估计状态值 x ^ \hat{x} 将会与实际状态值接近 x x

  • 实际系统

x ˙ = A x + B u y = C x \dot{x} = Ax+Bu\\ y = Cx

  • 数学模型

x ^ ˙ = A x ^ + B u + K ( y y ^ ) y ^ = C x ^ \dot{\hat{x}} = A\hat{x}+Bu + K(y- \hat{y})\\ \hat{y} = C \hat{x}

  • 误差

e o b s = x x ^ e_{obs}= x -\hat{x}

使数学模型和实际系统相减
在这里插入图片描述
根据 e ˙ o b s = ( A K C ) e o b s \dot{e}_{obs} = (A-KC)e_{obs} e o b s e_{obs} 积分为
e o b s ( t ) = e ( A K C ) t e o b s ( 0 ) e_{obs}(t) = e^{(A-KC)t}e_{obs}(0)

在这里插入图片描述

在上式中,若 A K C < 0 A-KC<0 e o b s e_{obs} 会随着 t t 的增加而减少,最终趋向于0,即 x ^ \hat{x} 接近 x x

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

1.2 公式推导

{ x k = A k x k 1 + u k + w k   ( ) z k = C k x k + v k   ( ) \left\{\begin{matrix} x_k = A_k x_{k-1}+u_k+w_ k\ (运动方程)\\ z_k = C_kx_k+v_k \ (状态方程) \end{matrix}\right.

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

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

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

通过运动方程确定 x k x_k 的先验概率
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(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 = A k x ^ k 1 + u k , P ˉ k = A k P ^ k 1 A k T + 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}_k P ˉ k \bar{P}_k 为状态和协方差的先验分布,是根据公式直接通过上一个状态计算获得,用于卡尔曼增益和后验 x ^ k \hat{x}_k P ^ k \hat{P}_k 的计算。
P ( z k x k ) = N ( C k x k , Q ) P(z_k|x_k) = N(C_kx_k,Q)
P ( z k x k ) P(z_k|x_k) 为观测数据 z k z_k 的后验概率,描述某个状态下 x k x_k 会产生怎样的观测数据。

设状态分布为 x k N ( x ^ k , P ^ k ) x_k \sim N(\hat{x}_k,\hat{P}_k) ,通过两组概率的乘法获得
N ( x ^ k , P ^ k ) = N ( C k x k , 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 ( z k C k x ˉ k ) P ^ k = ( I K C k ) 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 ^ k C k T Q 1 I = K C k + P ^ k P ˉ k 1 K = \hat{P}_k C_k^TQ^{-1}\\ I = KC_k+ \hat{P}_k \bar{P}_k^{-1}
此处 K K 实际上可以不通过 P ^ k \hat{P}_k 计算获得。

总结

在这里插入图片描述

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

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

在这里插入图片描述

{ x k = f ( x k 1 , u k ) + w k   ( ) z k = h ( x k ) + v k   ( ) \left\{\begin{matrix} x_k = f(x_{k-1},u_k)+w_ k\ (运动方程)\\ z_k = h(x_k)+v_k \ (状态方程) \end{matrix}\right.

雅可比矩阵为

在这里插入图片描述
1571299150328

线性化系统
x k F x k 1 + w k z k H x k + v k \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 ^ k 1 , u k ) , P ˉ k = F P ^ k F T + R k \bar{x}_k = f(\hat{x}_{k-1},u_k),\bar{P}_k = F \hat{P}_kF^T+R_k

  1. 更新

    卡尔曼增益 K k K_k
    K k = P ˉ k H T ( H P ˉ k H T + Q k ) 1 K_k =\bar{P}_k H^T(H \bar{P}_k H^T+Q_k)^{-1}
    后验概率
    x ^ k = x ˉ k + K k ( z k h ( x ˉ k ) ) , P ^ k = ( I K k H ) 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

三、卡尔曼滤波讨论

不同卡尔曼滤波算法对比

在这里插入图片描述
EKF的局限性

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

参考

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

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

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

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

卡尔曼滤波器(Kalman Filters)

Understanding Kalman Filters

《视觉SLAM十四讲》

发布了53 篇原创文章 · 获赞 186 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/Kalenee/article/details/103834552