系列目录
1. 为什么整理 EKF
状态估计是机器人和控制系统里非常核心的一类问题。
很多时候,我们并不能直接得到系统的真实状态。传感器会有噪声,模型会有误差,视觉解算、IMU 数据和控制输入也不一定完全一致。滤波器要做的事情,就是在这些不完美的信息之间做融合,得到一个更稳定、更可信的估计。
EKF(Extended Kalman Filter,扩展卡尔曼滤波)是工程里很常见的一种做法。它保留了卡尔曼滤波“预测 + 更新”的主线,同时通过局部线性化处理非线性系统。对于机器人姿态估计、目标跟踪、云台控制和视觉定位这类问题,EKF 往往是理解状态估计的一个重要入口。
我整理这个系列,是想把 EKF 从“公式很多、看起来很抽象”的状态,拆成几个可以顺着读下去的层次:先知道它解决什么问题,再理解它的数学模型,最后看这些公式如何落到代码里。
2. 这个系列想解决什么问题
这个系列的目标,是让 EKF 从概念、公式到工程实现连起来。
我会重点关注几个方向:
- 状态估计基础:为什么需要滤波,预测值和观测值如何融合
- 标准 KF 到 EKF:线性系统和非线性系统的差异,为什么需要雅可比矩阵
- 四元数姿态表示:为什么不用欧拉角直接做姿态更新
- 误差状态模型:为什么四元数状态常用三维误差角维护协方差
- 工程实现细节:预测、残差、卡尔曼增益和协方差更新在代码中的对应关系
- 近似与取舍:轻量实现里哪些地方是工程化简化,适合什么使用场景
这些内容单独看都不算短,但它们在真实项目里会一起出现。比如一个姿态估计模块跑起来不稳定,问题可能来自测量噪声设置,也可能来自残差定义、四元数归一化、雅可比近似,或者协方差更新方式。
3. 写作方式
每篇文章会尽量保持一个清晰边界:
- 先说明当前问题在工程里对应什么场景
- 给出必要的数学公式和直观解释
- 说明公式里的变量在代码里对应什么对象
- 补充实现时容易误解的地方
- 最后把当前篇和下一篇的内容衔接起来
EKF 很容易被写成纯数学推导,但只看公式并不够。工程实现里还会遇到状态维度、噪声矩阵、四元数乘法顺序、单位长度约束和数值稳定性等问题。
所以这个系列不会追求把所有滤波理论一次讲完,而是围绕一个具体的姿态估计实现,把用到的部分解释清楚。
4. 已完成目录
目前这个系列先整理三篇正文。
第一部分:基础概念
- EKF 算法详解:(一) 简介与基础
第二部分:姿态估计模型
- EKF 算法详解:(二) 姿态解算与数学推导
第三部分:代码实现
- EKF 算法详解:(三) 源码解析实现
后续如果继续扩展,可以补充过程噪声和测量噪声调参、ESKF/MEKF 的更严格推导、IMU 预积分、视觉与惯性融合等内容。
5. 从哪里开始
这个系列从标准卡尔曼滤波和 EKF 的基本思想开始。
如果直接进入四元数和误差状态,很容易被符号压住。先理解“预测”和“更新”这条主线,再看 EKF 如何用雅可比矩阵处理非线性,后面的姿态解算和 C++ 实现会更容易串起来。
第一篇会先从状态估计的基本问题讲起,再进入 EKF 的五步公式。