一、EKF概述:为什么需要EKF?线性KF与EKF的核心区别
大家好,我是你们的讲师。今天咱们聊聊扩展卡尔曼滤波,也就是EKF。
说实话,我刚入行那会儿,觉得卡尔曼滤波就是个黑盒子。输入输出,挺简单的。直到第一次在真实机器人上跑,才发现——嗯,现实世界哪有那么多线性系统?
1.1 为什么需要EKF?
标准卡尔曼滤波(KF)有个硬前提:系统必须是线性的。什么意思?就是状态变化能用矩阵乘法搞定,观测也是线性的。
但现实世界呢?
- 机器人运动:你让机器人转个弯,角度变化是三角函数,不是线性
- GPS定位:经纬度到笛卡尔坐标的转换,非线性
- 视觉SLAM:相机投影模型,更是非线性
我做过一个项目,用标准KF做无人机姿态估计。飞直线还行,一做大机动转弯,滤波器直接发散。当时我盯着数据看了半天,心想:这不对啊,明明理论没问题。后来才意识到——线性近似失效了。
核心结论:当系统是非线性时,标准KF的“线性最优”假设就崩塌了。EKF就是来解决这个问题的。
1.2 线性KF与EKF的核心区别
说白了,EKF就是把非线性系统“掰直”了再滤波。怎么掰?用泰勒展开做一阶线性化。
我画个图帮你理解:
看到了吗?EKF的核心变化就两点:
- 状态预测用非线性函数 f(·),而不是矩阵乘法
- 协方差传播用雅可比矩阵 Fₖ、Hₖ,代替原来的 A、H
我的经验:雅可比矩阵是EKF的“灵魂”。算对了,滤波器稳如老狗;算错了,发散得你怀疑人生。我建议你手推一遍雅可比,别偷懒用自动微分——至少第一次要手推。
1.3 什么时候用EKF?
你可能会问:那是不是所有非线性问题都用EKF?
也不一定。我列个表给你参考:
| 场景 | 非线性程度 | 推荐方法 | 原因 |
|---|---|---|---|
| GPS+IMU融合 | 中等 | EKF | 雅可比容易计算,效果稳定 |
| 机器人里程计 | 弱非线性 | EKF 或 标准KF | 小角度近似后线性度好 |
| 视觉SLAM | 强非线性 | UKF 或 粒子滤波 | EKF线性化误差累积严重 |
| 无人机姿态估计 | 中等 | EKF | 四元数+角速度模型,EKF经典应用 |
避坑指南:我曾经在一个强非线性系统上硬用EKF,结果滤波器频繁发散。后来换成UKF,问题迎刃而解。记住:EKF不是万能的,它只适合“弱到中等非线性”的系统。如果非线性太强,考虑UKF或粒子滤波。
1.4 EKF的数学本质
说白了,EKF就干了一件事:用一阶泰勒展开近似非线性函数。
假设你的状态方程是:
xₖ = f(xₖ₋₁, uₖ) + wₖ
我们在估计点 x̂ₖ₋₁ 附近展开:
f(xₖ₋₁, uₖ) ≈ f(x̂ₖ₋₁, uₖ) + Fₖ · (xₖ₋₁ - x̂ₖ₋₁)
其中 Fₖ 就是雅可比矩阵:
Fₖ = ∂f/∂x | x = x̂ₖ₋₁
观测方程同理:
h(xₖ) ≈ h(x̂ₖ|ₖ₋₁) + Hₖ · (xₖ - x̂ₖ|ₖ₋₁)
然后,把这两个线性化后的方程代入标准KF框架。嗯,就这么简单。
关键点:线性化只在当前估计点附近有效。如果真实状态离估计点太远,线性化误差就会很大。这就是为什么EKF对初始值敏感——初始值错了,后面全错。
1.5 一个简单的例子
假设你有个机器人,运动模型是:
xₖ = xₖ₋₁ + v·cos(θₖ₋₁)·dt
yₖ = yₖ₋₁ + v·sin(θₖ₋₁)·dt
θₖ = θₖ₋₁ + ω·dt
你看,这里有 cos 和 sin,明显是非线性。标准KF没法直接用。
但EKF可以。我们只需要计算雅可比矩阵:
Fₖ = [1, 0, -v·sin(θ)·dt]
[0, 1, v·cos(θ)·dt]
[0, 0, 1 ]
然后代入EKF的预测公式。就这么简单。
我的习惯:每次写EKF代码前,我都会先在纸上把雅可比矩阵推导一遍。别嫌麻烦,这一步能帮你避免80%的bug。
1.6 本章小结
- 为什么需要EKF:现实系统几乎都是非线性的,标准KF搞不定
- 核心区别:EKF用雅可比矩阵做线性化,标准KF直接用常数矩阵
- 适用场景:弱到中等非线性系统,如GPS/IMU融合、无人机姿态估计
- 注意事项:雅可比要算对,初始值要准,强非线性慎用
下一章,我会带你手撕EKF的数学公式,从预测到更新,每一步都讲清楚。到时候咱们再聊。