1287 字
6 分钟
EKF 算法详解系列

系列目录#

1. 为什么整理 EKF#

状态估计是机器人和控制系统里非常核心的一类问题。

很多时候,我们并不能直接得到系统的真实状态。传感器会有噪声,模型会有误差,视觉解算、IMU 数据和控制输入也不一定完全一致。滤波器要做的事情,就是在这些不完美的信息之间做融合,得到一个更稳定、更可信的估计。

EKF(Extended Kalman Filter,扩展卡尔曼滤波)是工程里很常见的一种做法。它保留了卡尔曼滤波“预测 + 更新”的主线,同时通过局部线性化处理非线性系统。对于机器人姿态估计、目标跟踪、云台控制和视觉定位这类问题,EKF 往往是理解状态估计的一个重要入口。

我整理这个系列,是想把 EKF 从“公式很多、看起来很抽象”的状态,拆成几个可以顺着读下去的层次:先知道它解决什么问题,再理解它的数学模型,最后看这些公式如何落到代码里。

2. 这个系列想解决什么问题#

这个系列的目标,是让 EKF 从概念、公式到工程实现连起来。

我会重点关注几个方向:

  1. 状态估计基础:为什么需要滤波,预测值和观测值如何融合
  2. 标准 KF 到 EKF:线性系统和非线性系统的差异,为什么需要雅可比矩阵
  3. 四元数姿态表示:为什么不用欧拉角直接做姿态更新
  4. 误差状态模型:为什么四元数状态常用三维误差角维护协方差
  5. 工程实现细节:预测、残差、卡尔曼增益和协方差更新在代码中的对应关系
  6. 近似与取舍:轻量实现里哪些地方是工程化简化,适合什么使用场景

这些内容单独看都不算短,但它们在真实项目里会一起出现。比如一个姿态估计模块跑起来不稳定,问题可能来自测量噪声设置,也可能来自残差定义、四元数归一化、雅可比近似,或者协方差更新方式。

3. 写作方式#

每篇文章会尽量保持一个清晰边界:

  1. 先说明当前问题在工程里对应什么场景
  2. 给出必要的数学公式和直观解释
  3. 说明公式里的变量在代码里对应什么对象
  4. 补充实现时容易误解的地方
  5. 最后把当前篇和下一篇的内容衔接起来

EKF 很容易被写成纯数学推导,但只看公式并不够。工程实现里还会遇到状态维度、噪声矩阵、四元数乘法顺序、单位长度约束和数值稳定性等问题。

所以这个系列不会追求把所有滤波理论一次讲完,而是围绕一个具体的姿态估计实现,把用到的部分解释清楚。

4. 已完成目录#

目前这个系列先整理三篇正文。

第一部分:基础概念#

  1. EKF 算法详解:(一) 简介与基础

第二部分:姿态估计模型#

  1. EKF 算法详解:(二) 姿态解算与数学推导

第三部分:代码实现#

  1. EKF 算法详解:(三) 源码解析实现

后续如果继续扩展,可以补充过程噪声和测量噪声调参、ESKF/MEKF 的更严格推导、IMU 预积分、视觉与惯性融合等内容。

5. 从哪里开始#

这个系列从标准卡尔曼滤波和 EKF 的基本思想开始。

如果直接进入四元数和误差状态,很容易被符号压住。先理解“预测”和“更新”这条主线,再看 EKF 如何用雅可比矩阵处理非线性,后面的姿态解算和 C++ 实现会更容易串起来。

第一篇会先从状态估计的基本问题讲起,再进入 EKF 的五步公式。