一致性
精度告诉你一个估计器错得有多离谱;**一致性(consistency)**告诉你这个估计器是否知道自己错得有多离谱。一个 SLAM 估计器同时输出状态估计 (位姿、地图点)以及表达其置信程度的协方差 。当实际的估计误差在统计上与所报告的协方差相符时,该估计器就是一致的 —— 也就是说,该估计器既不过度自信(协方差过小),也不过于保守(协方差过大)。
NEES:标准的一致性检验
检验一致性的标准工具是 NEES(归一化估计误差平方,Normalized Estimation Error Squared):
其中 是时刻 的真实(ground-truth)状态。如果估计器是一致的,且误差是高斯分布的,那么 NEES 服从自由度为 的卡方分布,因此其期望值等于状态维度:
单次运行的 NEES 是一个带噪声的随机变量,因此该检验通常以蒙特卡洛实验的方式进行:用独立的噪声实现将同一场景重复运行 次并取平均,
然后检查 是否落在由 分位数(除以 )导出的置信区间内。解读方式如下:
- 平均 NEES ≈ 状态维度 —— 一致。
- 平均 NEES 明显偏大 —— 过度自信:滤波器过于相信自身,最终会导致发散(测量值被降权或被拒绝)。
- 平均 NEES 明显偏小 —— 保守:并不危险,但估计器浪费了信息。
通常会分别评估状态中的位置块和姿态块,这样一个诚实的块就不会掩盖另一个过度自信的块。
NIS:无需真值的检验
NEES 需要真值(ground truth),而真实机器人上很少能获得真值。可以在线运行的配套检验是 NIS(归一化新息平方,Normalized Innovation Squared):对于新息为 、新息协方差为 的滤波器,
在一致性成立的条件下服从上述分布。你其实一直在不知不觉中运用这一思想:卡方门限(chi-square gating)(拒绝 NIS 超过某分位数阈值的观测)就是一种逐测量的一致性检验 —— 而它只有在馈入其中的协方差是诚实可靠的情况下才有效。
SLAM 估计器为何会变得不一致
一致性在 SLAM 中是一个真实存在、具有实践意义的问题,而不仅仅是理论上的细枝末节:
- 在不断变化的估计点上线性化。 基于滤波器和滑动窗口的估计器需要对非线性模型进行线性化,而在不同时刻针对同一变量在不同的估计点上进行线性化,会沿着本应不可观测的方向(例如视觉惯性里程计中的全局位置和航向角)注入虚假的信息。协方差随后会沿着实际上不存在真实信息的方向收缩 —— 这就是过度自信。
- 被冻结的边缘化先验。 在边缘化掉旧状态之后,剩余的先验是在旧的估计点上线性化的,且无法重新线性化;将其与在更新的估计点上求得的新雅可比矩阵混合,正是经典的”FEJ 问题”(参见Marginalization)。
- 规范自由度(Gauge freedom)。 在完整的 SLAM 中,解只能确定到一个全局坐标系(对单目而言还包括尺度)为止。协方差沿规范方向是奇异的,因此对完整状态直接做 NEES 是不合理的 —— 应固定规范(例如锚定第一个位姿),或以规范不变的方式评估误差。
应对方法
你在后续层级中会遇到的应对方法:
- 首次估计雅可比(First-Estimate Jacobians,FEJ) —— 在每个变量的首次估计点上计算其雅可比矩阵,从而使所有信息都沿一致的方向进入系统。
- 可观测性约束设计 —— 显式地将虚假信息从不可观测子空间中投影剔除(如 OpenVINS 风格的滤波器所做的)。
- 避免对冻结先验重新线性化的边缘化方案,或恢复非线性因子而不是保留一个冻结的线性先验。
- 平方根/信息形式的实现,以保证数值健壮性,使协方差不会失去正定性。
实践方案
- 针对你的传感器配置搭建一个具有已知真值和真实噪声参数的仿真环境。
- 运行数十次仅在噪声种子上有差异的蒙特卡洛实验。
- 分别对位置块和姿态块,绘制平均 NEES 随时间变化的曲线,并与卡方边界进行对比。
- 在真实数据上,监测 NIS 以及被卡方门限拒绝的测量比例 —— 拒绝率持续上升,是过度自信估计器在实际场景中的典型症状。
对SLAM的意义
ATE/RPE 等轨迹指标只能衡量平均误差,因此两个 ATE 相同的系统在下游可能表现出截然不同的行为:一个不一致的系统会向回环检测门限、传感器融合或规划器提供过度自信的协方差,进而导致错误的决策。每当你评估或设计一个概率性的 SLAM 后端 —— 尤其是 EKF 或带边缘化的固定滞后平滑器 —— 在仿真数据上检验 NEES 都是验证该估计器对自身不确定性是否诚实的标准做法。