1. 源由
EKF(扩展卡尔曼滤波器,Extended Kalman Filter)是一种非线性滤波算法,是标准卡尔曼滤波器在非线性系统中的扩展。它在处理和估计非线性系统状态时广泛应用,如机器人导航、目标跟踪和自动驾驶等领域。
接下来了解更多关于 ArduPilot 高级姿态和位置估计系统(EKF)的信息。
2. 基本原理
EKF的基本思想是通过线性化非线性系统的状态转移和观测方程,然后应用标准卡尔曼滤波器。
其主要步骤如下:
- 预测步骤:根据非线性状态转移方程预测系统的下一状态。
- 线性化:在预测的状态点处,对状态转移方程和观测方程进行一阶泰勒展开,从而得到线性化的系统模型。
- 更新步骤:利用线性化的观测方程更新状态预测和协方差矩阵。
线性化步骤,使得卡尔曼滤波器可以处理非线性系统中的状态估计问题,尽管这种方法在高非线性情况下可能存在精度不足的缺点。但是目前该方法被广泛用于导航、跟踪等应用。
- 机器人导航:用于实时位置和姿态估计。
- 目标跟踪:在雷达和视觉系统中用于目标位置和速度估计。
- 自动驾驶:用于车辆状态估计和轨迹预测。
3. 数学公式
假设系统的状态方程和观测方程分别为:
x
k
+
1
=
f
(
x
k
,
u
k
)
+
w
k
x_{k+1} = f(x_k, u_k) + w_k
xk+1=f(xk,uk)+wk
z
k
=
h
(
x
k
)
+
v
k
z_k = h(x_k) + v_k
zk=h(xk)+vk
其中, x k x_k xk 是状态向量, u k u_k uk 是控制向量, z k z_k zk 是观测向量, w k w_k wk 和 v k v_k vk 分别是过程噪声和观测噪声。
- 预测步骤:
x
^
k
∣
k
−
1
=
f
(
x
^
k
−
1
∣
k
−
1
,
u
k
)
\hat{x}_{k|k-1} = f(\hat{x}_{k-1|k-1}, u_k)
x^k∣k−1=f(x^k−1∣k−1,uk)
P
k
∣
k
−
1
=
F
k
P
k
−
1
∣
k
−
1
F
k
T
+
Q
k
P_{k|k-1} = F_k P_{k-1|k-1} F_k^T + Q_k
Pk∣k−1=FkPk−1∣k−1FkT+Qk
其中, F k F_k Fk 是对 f f f 进行泰勒展开后的雅可比矩阵, Q k Q_k Qk 是过程噪声协方差矩阵。
- 更新步骤:
K
k
=
P
k
∣
k
−
1
H
k
T
(
H
k
P
k
∣
k
−
1
H
k
T
+
R
k
)
−
1
K_k = P_{k|k-1} H_k^T (H_k P_{k|k-1} H_k^T + R_k)^{-1}
Kk=Pk∣k−1HkT(HkPk∣k−1HkT+Rk)−1
x
^
k
∣
k
=
x
^
k
∣
k
−
1
+
K
k
(
z
k
−
h
(
x
^
k
∣
k
−
1
)
)
\hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - h(\hat{x}_{k|k-1}))
x^k∣k=x^k∣k−1+Kk(zk−h(x^k∣k−1))
P
k
∣
k
=
(
I
−
K
k
H
k
)
P
k
∣
k
−
1
P_{k|k} = (I - K_k H_k) P_{k|k-1}
Pk∣k=(I−KkHk)Pk∣k−1
其中, H k H_k Hkb是对 h h h 进行泰勒展开后的雅可比矩阵, R k R_k Rk 是观测噪声协方差矩阵。
4. 研读步骤
相信这部分内容不可能简单的一个章节就能完成研读,甚至N多个章节后仍然可能一知半解。但是主打的就是一个专研,学习,因此后续将分章节,逐步的学习。
注:这也是为什么我们将本篇取名为“系列研读”的主要原因。
5. 参考资料
【1】ArduPilot开源飞控系统之简单介绍
【2】ArduPilot之开源代码Task介绍
【3】ArduPilot飞控启动&运行过程简介
【4】ArduPilot之开源代码Library&Sketches设计
【5】ArduPilot之开源代码Sensor Drivers设计