EKF学习笔记

扩展卡尔曼滤波,也就是EKF,常用于在动态系统中对状态的估计。比如,在机器人领域,EKF则常常用于对状态(位置,方向)的估计,也就是我们常说的数据融合,结合运动模型和观测数据,得到一个比较靠谱的状态估计。
在这里插入图片描述

目录

    • 系统模型
      • 状态方程(描述系统的演变过程)
      • 观测方程(描述如何从系统中获取观测数据)
    • EKF工作步骤
      • 预测步骤
        • 状态预测
        • 协方差预测
      • 更新步骤(Update Step)
        • 计算观测残差
        • 计算卡尔曼增益
        • 3.3 更新状态估计
        • 更新协方差
    • Appendix: 利用雅可比矩阵线性化非线性方程
      • 1. 雅可比矩阵的定义
      • 2. 泰勒展开的一阶近似
      • 3. 线性化状态方程和观测方程
      • 4. 状态方程的线性化
      • 5. 观测方程的线性化
    • Appendix: 卡尔曼增益 K k K_k Kk​ 的推导过程
      • 1. 观测残差(创新项)
      • 2. 状态更新公式
      • 3. 目标:最小化均方误差
      • 4. 计算协方差矩阵
      • 5. 最小化均方误差
      • 6. 总结

系统模型

在EKF中,运动模型观测模型是非常重要的。我们对运动模型都不陌生,其实就是根据运动学定律对机器人的运动规律进行建模,给定输入,输出会是什么。但是什么是观测模型呢?别着急,下面我们一个个的来解释。

状态方程(描述系统的演变过程)

x k = A x k − 1 + B u k + w k x_k = A x_{k-1} + B u_k + w_k xk=Axk1+Buk+wk

  • x k x_k xk:系统在时刻 k k k 的状态(我们希望估计的变量)。
  • A A A:状态转移矩阵,用于描述系统从上一时刻 k − 1 k-1 k1 到当前时刻 k k k 的状态演变。
  • B B B:控制输入矩阵,用于描述控制输入对系统状态的影响。
  • u k u_k uk:控制输入。
  • w k w_k wk:过程噪声,通常假设为均值为 0 的高斯噪声,表示系统中的不确定性或噪声。

所以,状态方程是利用上一时刻的状态和当前时刻的输入 u u u推导下一时刻的状态。

观测方程(描述如何从系统中获取观测数据)

z k = H x k + v k z_k = H x_k + v_k zk=Hxk+vk

其中:

  • z k z_k zk:时刻 k k k 的观测值(由传感器测量得到的数据)。
  • x k x_k xk:系统在时刻 k k k 的状态(我们希望估计的变量)。
  • H H H:观测矩阵,描述状态 x k x_k xk 和观测值 z k z_k zk 之间的关系。
  • v k v_k vk:观测噪声,通常假设为均值为 0 的高斯噪声,表示观测过程中的不确定性, v k ∼ N ( 0 , R ) v_k \sim N(0,R) vkN(0,R)

所以,观测方程到底是什么?
观测方程通过连接状态变量 x k x_k xk 和观测值 z k z_k zk,使卡尔曼滤波器可以利用传感器的测量数据修正对状态的估计。通过观测方程,系统能够利用测量值来更新状态估计,从而减小预测误差。说的更直白一点,我有一些传感器可以告诉我机器人现在的状态 x k x_k xk,我要搞一个方程,能够让我从观测值 z k z_k zk得到状态 x k x_k xk

举个例子,假设我们正在追踪一辆车的位置和速度,系统的状态向量为:

x k = [ x position x velocity ] x_k = \begin{bmatrix} x_{\text{position}} \\ x_{\text{velocity}} \end{bmatrix} xk=[xpositionxvelocity]

假设我们的传感器只能测量车辆的位置,那么观测方程为:

z k = H x k + v k z_k = H x_k + v_k zk=Hxk+vk

其中,观测矩阵 ( H ) 为:

H = [ 1 0 ] H = \begin{bmatrix} 1 & 0 \end{bmatrix} H=[10]

因此,观测方程变为:

z k = [ 1 0 ] [ x position x velocity ] + v k = x position + v k z_k = \begin{bmatrix} 1 & 0 \end{bmatrix} \begin{bmatrix} x_{\text{position}} \\ x_{\text{velocity}} \end{bmatrix} + v_k = x_{\text{position}} + v_k zk=[10][xpositionxvelocity]+vk=xposition+vk

这意味着观测值 z k z_k zk 是车辆的位置加上观测噪声 v k v_k vk

EKF工作步骤

为什么称之为EKF(extended KF)? 就是因为我们在使用的时候,状态方程和观测方程是非线性的,而不是像上面写的那样的线性方程。

  • 状态方程(非线性):
    x k = f ( x k − 1 , u k ) + w k \mathbf{x}_k = f(\mathbf{x}_{k-1}, \mathbf{u}_k) + \mathbf{w}_k xk=f(xk1,uk)+wk

  • 观测方程(非线性):
    z k = h ( x k ) + v k \mathbf{z}_k = h(\mathbf{x}_k) + \mathbf{v}_k zk=h(xk)+vk

基于上面的两个非线性方程,EKF的工作步骤如下:

预测步骤

状态预测

根据系统的非线性状态方程,利用当前状态 x ^ k − 1 \hat{\mathbf{x}}_{k-1} x^k1 和控制输入 u k \mathbf{u}_k uk 预测下一时刻的状态:

x ^ k − = f ( x ^ k − 1 , u k ) \hat{\mathbf{x}}_k^- = f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_k) x^k=

上一篇:ArcGIS共享数据的最佳方法(不丢可视化、标注等各类显示信息一样带)


下一篇:排序(插入,希尔,堆排,冒泡)