1. 导论:1969年7月20日“静海”着陆与仅 $2\,\text{KB}$ 内存计算机的奇迹
1969年7月20日,当阿波罗11号登月舱“鹰号(Eagle)”向月球静海下降时,座舱内突然响起刺耳的1202与1201程序警报。在距月面仅数公里的生死关头,尼尔·阿姆斯特朗和巴兹·奥尔德林赖以生存的核心设备,是由麻省理工学院仪器实验室(MIT Instrumentation Laboratory)研发的阿波罗制导计算机(Apollo Guidance Computer, AGC)。
以今天的标准来看,AGC的硬件规格几乎不可思议:字长15位(加1位奇偶校验),主频仅 $2.048\,\text{MHz}$,可读写的磁芯内存(RAM)仅有 $2,048$ 字(约 $4\,\text{KB}$,实际可用工作区仅约 $2\,\text{KB}$),只读磁芯绳内存(ROM)也只有 $36,864$ 字(约 $72\,\text{KB}$)。然而,飞船上的每一个传感器单独来看都充满缺陷:
- 惯性测量单元(IMU):陀螺仪和加速度计能连续测量姿态与加速度,但通过对加速度二次积分计算位置(航位推算,Dead Reckoning)时,微小的零偏和热噪声会随时间按 $t^2$ 甚至 $t^3$ 累积漂移。
- 光学六分仪(Sextant)星光测量:宇航员手动观测恒星与地月边缘的夹角,虽无时间累积漂移,但存在人为对准误差且只能离散采样。
- 着陆雷达与地面深空网多普勒测距:受月面陨石坑起伏、扬尘与多径反射影响,含有剧烈的随机高频噪声。
如何在一台只有 $2\,\text{KB}$ RAM的计算机上,将“随时间漂移的物理模型预测”与“瞬间剧烈抖动的传感器测量”实时融合,算出比任何单一传感器都精确得多的真实位置和速度?
解答这一难题并拯救阿波罗计划的算法,正是匈牙利裔数学家、控制理论家鲁道夫·卡尔曼(Rudolf Emil Kálmán, 1930–2016)于1960年发表的卡尔曼滤波器(Kalman Filter)。
1.1 卡尔曼1960年论文与NASA艾姆斯研究中心的命运交汇
1960年3月,卡尔曼发表了划时代的论文 “A New Approach to Linear Filtering and Prediction Problems”,抛弃了维纳滤波(Wiener Filter)依赖频域平稳随机过程的限制,首次用时域状态空间模型(State-Space Model)与正交投影重构了最优滤波理论。
1960年11月,卡尔曼应斯坦利·施密特(Stanley F. Schmidt)之邀访问了位于加州山景城的NASA艾姆斯研究中心(NASA Ames Research Center)。在此之前,航天轨道确定一直沿用高斯(Carl Friedrich Gauss)在1801年为重寻谷神星(Ceres)发明的批处理最小二乘法(Batch Least Squares)。批处理最小二乘法必须存储从出发以来的所有历史观测数据 $\mathbf{Z}_{1:T} = \{\mathbf{z}_1, \dots, \mathbf{z}_T\}$,每当新观测到来时都要重新求解规模不断膨胀的正规方程,计算复杂度高达 $O(T^3)$,内存消耗为 $O(T)$,这在仅有 $2\,\text{KB}$ 内存的AGC上根本无法实现。
卡尔曼证明了:利用一阶马尔可夫性质(Markov Property),系统根本不需要保存任何历史测量数据!只需在内存中保留当前状态估计向量 $\hat{\mathbf{x}}_{k-1\mid k-1}$ 和误差协方差矩阵 $\mathbf{P}_{k-1\mid k-1}$ 这两个充分统计量(Sufficient Statistics),每步仅需 $O(1)$ 的内存和恒定计算量,就能递归地得出与全历史批处理完全等价的最优估计。施密特随即将其推广至非线性轨道力学,发明了扩展卡尔曼滤波器(EKF,历史上亦称卡尔曼-施密特滤波器),MIT的詹姆斯·波特(James E. Potter)又发明了避免16位定点运算下协方差出现负特征值的平方根卡尔曼滤波(Square-Root Filter),最终帮助人类成功登月。
2. 一维空间中的数学奇迹:为什么两个带噪高斯分布相乘,方差会比任何一个单独传感器都小?
在进入多维矩阵之前,我们先在一维空间 $x \in \mathbb{R}$ 中揭示卡尔曼滤波最核心的贝叶斯奇迹。
假设航位推算(预测)告诉我们飞船位置服从高斯先验分布 $p(x) = \mathcal{N}(\mu_p, \sigma_p^2)$,同时GPS或雷达传感器的观测似然服从另一高斯分布 $p(z \mid x) = \mathcal{N}(\mu_m, \sigma_m^2)$(记测量值 $z \equiv \mu_m$)。根据贝叶斯定理(Bayes’ Rule),后验概率密度正比于两个高斯概率密度函数的乘积:
$$p(x \mid z) \propto \exp\!\left(-\frac{(x - \mu_p)^2}{2\sigma_p^2}\right) \cdot \exp\!\left(-\frac{(x - \mu_m)^2}{2\sigma_m^2}\right) = \exp\!\left( -\frac{(x - \mu_p)^2}{2\sigma_p^2} - \frac{(x - \mu_m)^2}{2\sigma_m^2} \right) \propto \exp\!\left(-\frac{(x - \mu_{\text{new}})^2}{2\sigma_{\text{new}}^2}\right)$$我们对指数上的二次型通过配方法(Completing the Square)展开并对比 $x^2$ 与 $x$ 的系数:
$$J(x) = \frac{1}{2}\left( \frac{1}{\sigma_p^2} + \frac{1}{\sigma_m^2} \right) x^2 - \left( \frac{\mu_p}{\sigma_p^2} + \frac{\mu_m}{\sigma_m^2} \right) x + \text{const} = \frac{1}{2\sigma_{\text{new}}^2}x^2 - \frac{\mu_{\text{new}}}{\sigma_{\text{new}}^2}x + \text{const}$$由此立即得到后验方差 $\sigma_{\text{new}}^2$、后验均值 $\mu_{\text{new}}$ 以及一维卡尔曼增益 $K \in [0, 1]$ 的精确解析解:
$$K = \frac{\sigma_p^2}{\sigma_p^2 + \sigma_m^2}, \qquad \mu_{\text{new}} = \mu_p + K(z - \mu_p) = (1 - K)\mu_p + K z$$$$\frac{1}{\sigma_{\text{new}}^2} = \frac{1}{\sigma_p^2} + \frac{1}{\sigma_m^2} \implies \sigma_{\text{new}}^2 = (1 - K)\sigma_p^2 = \frac{\sigma_p^2 \sigma_m^2}{\sigma_p^2 + \sigma_m^2} < \min(\sigma_p^2, \sigma_m^2)!$$核心洞察(精度的可加性):在统计学与信息论中,方差的倒数 $\tau = 1/\sigma^2$ 被称为精度(Precision / 费雪信息量 Fisher Information)。两个独立高斯信息源融合时,它们的精度直接相加($\tau_{\text{new}} = \tau_p + \tau_m$,恰如并联电阻的电导相加)。因此,只要传感器的噪声方差不是无穷大($\sigma_m^2 < \infty$),融合后的不确定性 $\sigma_{\text{new}}^2$ 严格小于预测方差与传感器方差中的任何一个!例如当 $\sigma_p = 4\,\text{m}$ ($\sigma_p^2=16$)、$\sigma_m = 3\,\text{m}$ ($\sigma_m^2=9$) 时,$K = 16/25 = 0.64$,融合后的标准差骤降至 $\sigma_{\text{new}} = 2.4\,\text{m}$!
3. 多变量状态空间表述与卡尔曼滤波五大方程的完整推导
考虑 $n$ 维状态向量 $\mathbf{x}_k \in \mathbb{R}^n$ 和 $m$ 维观测向量 $\mathbf{z}_k \in \mathbb{R}^m$ 的离散时间线性状态空间模型:
$$\mathbf{x}_k = \mathbf{F}_k \mathbf{x}_{k-1} + \mathbf{B}_k \mathbf{u}_k + \mathbf{w}_k, \qquad \mathbf{z}_k = \mathbf{H}_k \mathbf{x}_k + \mathbf{v}_k$$其中过程噪声 $\mathbf{w}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{Q}_k)$ 与观测噪声 $\mathbf{v}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{R}_k)$ 互不相关。
第一步:预测步(Time Update / Chapman-Kolmogorov)
对状态方程取条件期望 $\hat{\mathbf{x}}_{k\mid k-1} = \mathbb{E}[\mathbf{x}_k \mid \mathbf{Z}_{1:k-1}]$,并计算先验误差 $\tilde{\mathbf{x}}_{k\mid k-1} = \mathbf{F}_k \tilde{\mathbf{x}}_{k-1\mid k-1} + \mathbf{w}_k$ 的协方差,得到前两个方程:
$$\hat{\mathbf{x}}_{k\mid k-1} = \mathbf{F}_k \hat{\mathbf{x}}_{k-1\mid k-1} + \mathbf{B}_k \mathbf{u}_k, \qquad \mathbf{P}_{k\mid k-1} = \mathbf{F}_k \mathbf{P}_{k-1\mid k-1} \mathbf{F}_k^T + \mathbf{Q}_k$$第二步:更新步(Measurement Update / Bayes)与最优卡尔曼增益推导
定义新息(Innovation / 测量残差) $\tilde{\mathbf{y}}_k = \mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}_{k\mid k-1} = \mathbf{H}_k \tilde{\mathbf{x}}_{k\mid k-1} + \mathbf{v}_k$,其新息协方差为 $\mathbf{S}_k = \mathbf{H}_k \mathbf{P}_{k\mid k-1} \mathbf{H}_k^T + \mathbf{R}_k$。线性更新式为:
$$\hat{\mathbf{x}}_{k\mid k} = \hat{\mathbf{x}}_{k\mid k-1} + \mathbf{K}_k \tilde{\mathbf{y}}_k$$后验估计误差为 $\tilde{\mathbf{x}}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\tilde{\mathbf{x}}_{k\mid k-1} - \mathbf{K}_k \mathbf{v}_k$。取外积期望即得对任意增益 $\mathbf{K}_k$ 恒成立的约瑟夫稳定协方差形式(Joseph Stabilized Covariance Form):
$$\mathbf{P}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\mathbf{P}_{k\mid k-1}(\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)^T + \mathbf{K}_k \mathbf{R}_k \mathbf{K}_k^T = \mathbf{P}_{k\mid k-1} - \mathbf{K}_k \mathbf{H}_k \mathbf{P}_{k\mid k-1} - \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{K}_k^T + \mathbf{K}_k \mathbf{S}_k \mathbf{K}_k^T$$为了最小化均方误差期望 $J(\mathbf{K}_k) = \mathbb{E}[\|\mathbf{x}_k - \hat{\mathbf{x}}_{k\mid k}\|_2^2] = \operatorname{Tr}(\mathbf{P}_{k\mid k})$,利用矩阵微积分求迹对矩阵 $\mathbf{K}_k$ 的导数并令其为零:
$$\frac{\partial \operatorname{Tr}(\mathbf{P}_{k\mid k})}{\partial \mathbf{K}_k} = -2\mathbf{P}_{k\mid k-1}\mathbf{H}_k^T + 2\mathbf{K}_k \mathbf{S}_k = \mathbf{0} \implies \mathbf{K}_k = \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{S}_k^{-1}$$将最优增益 $\mathbf{K}_k$ 代回展开式,后两项相互抵消,得到简化的后验协方差更新方程:
$$\mathbf{P}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\mathbf{P}_{k\mid k-1}$$
flowchart TD
Init["初始状态与协方差<br/>x̂₀|₀, P₀|₀"] --> Predict["【预测步 Time Update】<br/>x̂ₖ|ₖ₋₁ = Fₖ x̂ₖ₋₁|ₖ₋₁ + Bₖ uₖ<br/>Pₖ|ₖ₋₁ = Fₖ Pₖ₋₁|ₖ₋₁ Fₖᵀ + Qₖ"]
Predict --> Innov["【计算新息与新息协方差】<br/>ỹₖ = zₖ - Hₖ x̂ₖ|ₖ₋₁<br/>Sₖ = Hₖ Pₖ|ₖ₋₁ Hₖᵀ + Rₖ"]
Innov --> Gain["【计算最优卡尔曼增益】<br/>Kₖ = Pₖ|ₖ₋₁ Hₖᵀ Sₖ⁻¹"]
Gain --> Update["【更新步 Measurement Update】<br/>x̂ₖ|ₖ = x̂ₖ|ₖ₋₁ + Kₖ ỹₖ<br/>Pₖ|ₖ = (I - Kₖ Hₖ) Pₖ|ₖ₋₁"]
Update --> Predict
4. 最优性理论保证(BLUE / MMSE)、对偶性与LQG分离定理
- 高斯-马尔可夫定理与BLUE/MMSE最优性:当噪声严格服从高斯分布时,卡尔曼滤波器在所有线性和非线性估计器中达到全局最小均方误差(MMSE);即使噪声非高斯,只要均值为零且协方差已知,它依然是所有线性无偏估计器中的最佳线性无偏估计器(BLUE)。
- 卡尔曼对偶性与LQG分离定理(Separation Principle):状态估计的黎卡提方程(Riccati Equation)与最优控制LQR的黎卡提方程具有严格的数学对偶性(可观测性 $\leftrightarrow$ 可控性)。在线性二次高斯(LQG)最优控制中,工程师可以完全独立地设计卡尔曼滤波器(估计 $\hat{\mathbf{x}}_{k\mid k}$)与确定性LQR控制器(反馈矩阵 $\mathbf{L}_k$),再令 $\mathbf{u}_k^* = -\mathbf{L}_k \hat{\mathbf{x}}_{k\mid k}$,即可直接实现全局随机最优控制!
5. 超越线性系统:EKF、UKF、粒子滤波与自动驾驶SLAM
现实世界中的极坐标雷达与车辆运动学 $\mathbf{x}_k = f(\mathbf{x}_{k-1}, \mathbf{u}_k) + \mathbf{w}_k, \mathbf{z}_k = h(\mathbf{x}_k) + \mathbf{v}_k$ 均为非线性:
- 扩展卡尔曼滤波(EKF):利用一阶泰勒展开,围绕当前估计点计算雅可比矩阵(Jacobians)$\mathbf{F}_k = \left.\frac{\partial f}{\partial \mathbf{x}}\right|_{\hat{\mathbf{x}}_{k-1\mid k-1}}$ 和 $\mathbf{H}_k = \left.\frac{\partial h}{\partial \mathbf{x}}\right|_{\hat{\mathbf{x}}_{k\mid k-1}}$。
- 无迹卡尔曼滤波(UKF,Julier & Uhlmann 1997):无需计算雅可比矩阵,通过确定性选取的 $2n+1$ 个Sigma点(Sigma Points)直接经非线性函数传播,达到三阶泰勒展开精度。
- 粒子滤波(Particle Filter / SMC)与自动驾驶SLAM:用随机粒子群处理多峰分布;在SLAM与视觉惯性里程计(VIO)中,利用李群流形 $SO(3)/SE(3)$ 上的误差状态卡尔曼滤波(ESKF)及协方差非对角块实现回环检测(Loop Closure)。
flowchart TD
A["状态估计模型选择"] --> B{"系统与观测是否线性?"}
B -- "是" --> C["标准卡尔曼滤波 (Linear KF)<br/>严格MMSE/BLUE最优"]
B -- "否 (非线性)" --> D{"后验分布是否为单峰近似高斯?"}
D -- "否 (多峰分布)" --> E["粒子滤波 (Particle Filter / SMC)<br/>蒙特卡洛非参数粒子群"]
D -- "是" --> F{"非线性程度与雅可比可微性?"}
F -- "中等非线性 / 易求导" --> G["扩展/误差状态卡尔曼滤波 (EKF / ESKF)<br/>一阶雅可比线性化"]
F -- "强非线性 / 免求导" --> H["无迹卡尔曼滤波 (UKF)<br/>2n+1个Sigma点三阶精度"]
| 滤波算法 | 线性假设 | 分布表示方式 | 单步计算复杂度 | 理论精度 | 典型工程应用 |
|---|---|---|---|---|---|
| 标准卡尔曼滤波 (KF) | 严格线性 | 精确高斯分布 $\mathcal{N}(\hat{\mathbf{x}}, \mathbf{P})$ | $O(n^3)$ | 全局精确最优 (MMSE/BLUE) | 雷达目标跟踪、LQG飞行控制 |
| 扩展卡尔曼滤波 (EKF) | 非线性(雅可比线性化) | 局部高斯近似 | $O(n^3)$ | 一阶泰勒精度 | 阿波罗制导、GPS/IMU组合导航、VIO |
| 无迹卡尔曼滤波 (UKF) | 非线性(免求导) | $2n+1$ 个确定性Sigma点 | $O(n^3)$ | 三阶泰勒精度 | 卫星姿态确定、动力电池SOC估计 |
| 粒子滤波 (PF / SMC) | 任意非线性/非高斯 | $N_p$ 个加权蒙特卡洛粒子 | $O(N_p \cdot n)$ | $N_p \to \infty$ 收敛至真后验 | 激光雷达全局定位 (MCL)、地形匹配 |
6. Python二维车辆跟踪完整仿真(同时恢复未测量的速度向量)
下面的Python代码模拟了4维状态 $\mathbf{x}_k = [p_x, p_y, v_x, v_y]^T$ 的二维车辆跟踪。尽管传感器 $\mathbf{H}$ 仅测量位置 $(p_x, p_y)$ 而不测量速度,卡尔曼滤波器仍能通过协方差矩阵的非对角耦合项精确重构出隐藏的速度向量!
| |
仿真表明:原始GPS位置均方根误差(RMSE)为 $4.12\,\text{m}$,经卡尔曼滤波融合后稳态误差降至 $1.18\,\text{m}$(误差削减逾71%),且未被直接测量的速度向量也被精确恢复至 $0.85\,\text{m/s}$ 以内。从阿波罗登月到自动驾驶,卡尔曼滤波正是人类通过严格量化“自身不确定性之几何结构($\mathbf{P}_{k\mid k}$)”来逼近物理真相的最高数学典范。
