卡尔曼滤波是一个最优化的递归数据处理算法。
为什么需要滤波:不确定性无处不在
- 不存在完美的数学模型
- 系统的扰动不可控,也很难建模
- 测量传感器存在误差
从一个简单的例子说起:多次测量取平均
$$\hat{X_k} = \hat{X_{k-1}} + \cfrac{1}{k}(Z_k - \hat{X_{k-1}})$$- $\hat{X_k}$ 表示第 k 次的估计值,$Z_k$ 表示第 k 次的测量值
- 可以看到,随着 k 增加,$\cfrac{1}{k} \to 0$,$\hat{X_k} \to \hat{X_{k-1}}$,测量结果不再重要
如果把 $\cfrac{1}{k}$ 用一个系数 $K_k$ 来替代:
$$\hat{X_k} = \hat{X_{k-1}} + K_k(Z_k - \hat{X_{k-1}})$$即:
当前的估计值 = 上一次的估计值 + 系数 ×(当前测量值 − 上一次的估计值)
这个系数就是卡尔曼增益/因数。
卡尔曼滤波器的核心公式
$$K_k = \cfrac{e_{est_{k-1}}}{ e_{est_{k-1}} + e_{MEA_{k}}}$$- $e_{est}$:估计误差
- $e_{MEA}$:测量误差
直觉理解:
- 当 k−1 时刻的估计误差远大于 k 时刻的测量误差时,$K_k$ 趋近于 1,于是 $\hat{X_k} = Z_k$——当前的估计值和当前测量值一致,也就是不相信估计值,更相信观测值
- 反之,$K_k$ 趋近于 0,就是不相信测量值,更相信估计值
一次迭代的流程
- 计算 Kalman Gain
- 计算第 k 次的估计值
- 更新估计误差:$$e_{est_{k}} = (1 - K_k) e_{est_{k-1}}$$
其他要点
- 递归算法
- 数学基础(原笔记此处只有标题,未展开)
待补完:原笔记不完整,数学基础、状态方程/观测方程的完整推导等部分缺失。