一致性

精度告诉你一个估计器错得有多离谱;**一致性(consistency)**告诉你这个估计器是否知道自己错得有多离谱。一个 SLAM 估计器同时输出状态估计 x^\hat{\mathbf{x}}(位姿、地图点)以及表达其置信程度的协方差 PP。当实际的估计误差在统计上与所报告的协方差相符时,该估计器就是一致的 —— 也就是说,该估计器既不过度自信(协方差过小),也不过于保守(协方差过大)。

NEES:标准的一致性检验

检验一致性的标准工具是 NEES(归一化估计误差平方,Normalized Estimation Error Squared)

ϵk=(xkx^k)TPk1(xkx^k)\epsilon_k = (\mathbf{x}_k - \hat{\mathbf{x}}_k)^T P_k^{-1} (\mathbf{x}_k - \hat{\mathbf{x}}_k)

其中 xk\mathbf{x}_k 是时刻 kk 的真实(ground-truth)状态。如果估计器是一致的,且误差是高斯分布的,那么 NEES 服从自由度为 n=dim(x)n = \dim(\mathbf{x}) 的卡方分布,因此其期望值等于状态维度:

E[ϵk]=n\mathbb{E}[\epsilon_k] = n

单次运行的 NEES 是一个带噪声的随机变量,因此该检验通常以蒙特卡洛实验的方式进行:用独立的噪声实现将同一场景重复运行 MM 次并取平均,

ϵˉk=1Mi=1Mϵk(i),MϵˉkχMn2,\bar{\epsilon}_k = \frac{1}{M} \sum_{i=1}^{M} \epsilon_k^{(i)}, \qquad M\,\bar{\epsilon}_k \sim \chi^2_{Mn},

然后检查 ϵˉk\bar{\epsilon}_k 是否落在由 χMn2\chi^2_{Mn} 分位数(除以 MM)导出的置信区间内。解读方式如下:

通常会分别评估状态中的位置块和姿态块,这样一个诚实的块就不会掩盖另一个过度自信的块。

NIS:无需真值的检验

NEES 需要真值(ground truth),而真实机器人上很少能获得真值。可以在线运行的配套检验是 NIS(归一化新息平方,Normalized Innovation Squared):对于新息为 ν=zh(x^)\boldsymbol{\nu} = \mathbf{z} - h(\hat{\mathbf{x}})、新息协方差为 SS 的滤波器,

NIS=νTS1νχdim(z)2\text{NIS} = \boldsymbol{\nu}^T S^{-1} \boldsymbol{\nu} \sim \chi^2_{\dim(\mathbf{z})}

在一致性成立的条件下服从上述分布。你其实一直在不知不觉中运用这一思想:卡方门限(chi-square gating)(拒绝 NIS 超过某分位数阈值的观测)就是一种逐测量的一致性检验 —— 而它只有在馈入其中的协方差是诚实可靠的情况下才有效。

SLAM 估计器为何会变得不一致

一致性在 SLAM 中是一个真实存在、具有实践意义的问题,而不仅仅是理论上的细枝末节:

应对方法

你在后续层级中会遇到的应对方法:

实践方案

  1. 针对你的传感器配置搭建一个具有已知真值和真实噪声参数的仿真环境。
  2. 运行数十次仅在噪声种子上有差异的蒙特卡洛实验。
  3. 分别对位置块和姿态块,绘制平均 NEES 随时间变化的曲线,并与卡方边界进行对比。
  4. 在真实数据上,监测 NIS 以及被卡方门限拒绝的测量比例 —— 拒绝率持续上升,是过度自信估计器在实际场景中的典型症状。

对SLAM的意义

ATE/RPE 等轨迹指标只能衡量平均误差,因此两个 ATE 相同的系统在下游可能表现出截然不同的行为:一个不一致的系统会向回环检测门限、传感器融合或规划器提供过度自信的协方差,进而导致错误的决策。每当你评估或设计一个概率性的 SLAM 后端 —— 尤其是 EKF 或带边缘化的固定滞后平滑器 —— 在仿真数据上检验 NEES 都是验证该估计器对自身不确定性是否诚实的标准做法。

相关条目