扩展卡尔曼滤波,也就是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=Axk−1+Buk+wk
- x k x_k xk:系统在时刻 k k k 的状态(我们希望估计的变量)。
- A A A:状态转移矩阵,用于描述系统从上一时刻 k − 1 k-1 k−1 到当前时刻 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) vk∼N(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(xk−1,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^k−1 和控制输入 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−=