自瞄教程
04 跟踪与预测

验证与调试跟踪器

从当前状态、创新和未来装甲板误差判断跟踪器是否真的有效。

“看起来很稳”不是评价标准

把 R 调大,输出通常会更平滑;把 Q 调大,输出通常会更灵敏。只看可视化曲线,很容易把滞后当成稳定,把过度自信当成精确。一个好的自瞄滤波器至少要同时回答四层问题:

层次要回答的问题典型指标
观测PnP 的误差从哪里来,条件变化后是否变坏分轴偏差、标准差、p50/p95、长尾、相关系数
估计当前状态是否准确,不确定度是否诚实状态误差、创新均值、NIS、NEES、拒绝率
预测推进到不同未来时域后误差怎样增长分时域位置/速度/yaw 误差、CDF、p95、失锁恢复
火控这些误差是否还能让装甲板进入射击窗口装甲板平面 miss、角度误差、窗口覆盖、实弹命中与击杀时间

只有四层一起改善,才能说滤波器更适合自瞄。

先把误差按方向拆开

三维欧氏误差适合概览,却会把不同物理作用混在一起。至少同时记录:

  • 跟踪坐标系中的前向、横向、竖直误差;
  • 以枪口视线为基准的深度误差与横/纵垂直 miss;
  • 预测装甲板平面中的水平、竖直 miss;
  • yaw、pitch 瞄准角误差;
  • 中心、速度、旋转角速度和半径等状态误差。

例如,原始 PnP 的三维误差可能主要来自深度;滤波后欧氏距离变小,也可能同时引入横向滞后。如果只看一个三维距离,就无法判断火控是否真正受益。

典型帧和坏帧要分开看

均值会被少量极端值拉动,单看中位数又会隐藏比赛中真正导致脱靶的长尾。建议至少同时报告:

p50:典型表现
p90/p95:经常遇到的坏帧
p99/max:极端失败,用于定位异常而非代表日常水平
完整 CDF:比较两种方法在所有分位点上的取舍

同一个总体数字还应按距离、装甲板观测角度、目标速度、旋转速度、置信度、重投影误差和遮挡程度分组。若总体 p95 改善只是因为测试集里近距离样本更多,这种提升不会迁移到比赛射程。

用创新检查“模型怎样错了”

创新 y = z - h(x̂⁻) 是预测观测与真实观测之差。一个匹配良好的滤波器应具有:

  • 创新均值接近零;
  • 各维协方差与 S = HPHᵀ + R 接近;
  • 自相关在非零滞后处接近零;
  • 按工作条件分组后仍保持类似性质。

如果创新有持续均值,先查系统偏差;如果创新周期性摆动,检查装甲板切换、旋转相位和模型结构;如果创新在几帧内同向连续,说明误差有时间记忆;如果只有远距离创新爆炸,说明 R 缺少距离条件。

NIS 与 NEES 分别检查什么

NIS 只需要观测:

NIS = yᵀS⁻¹y

它检查“观测创新与滤波器声明的创新协方差是否一致”。本章四维观测在理想条件下对应 χ²(4),但应比较长期分布和不同距离覆盖率,不能只数一次是否超过 9.49。

若模拟器或标定实验提供完整状态真值,还可以计算 NEES:

NEES = (x̂ - x_true)ᵀ P⁻¹ (x̂ - x_true)

NEES 检查的是状态误差与状态协方差是否一致。NEES 长期过大表示滤波器过度自信;长期过小表示协方差过于保守。真实比赛通常没有完整状态真值,因此可以在模拟器用 NEES 做模型开发,在实车用创新、NIS 和可测的射击误差持续检查。

评价未来,而不是只评价当前

本教程将未来装甲板位置评价固定为 AUTOAIM_FUTURE_ARMOR_PREDICTION_V1。在曝光时刻 t 完成当前帧更新后,保存滤波器状态和当前物理装甲板身份;只用这份状态外推到 t + τ,再与该未来时刻的同一块装甲板真值比较。后续真值只进入离线评价器。

固定报告四个预测时域,并将 0 ms 作为当前后验诊断点:

必报:τ = 100 / 200 / 300 / 500 ms
诊断:τ = 0 ms

每个预测都必须与 t + τ 的真值比较,不能拿未来预测与当前真值比较。画出误差随 τ 的曲线后,可以区分:

  • τ = 0 已经很差:观测、数据关联或当前状态估计有问题;
  • 当前准确、随 τ 快速恶化:速度/角速度或运动模型有问题;
  • 所有时域都有近似固定偏差:标定、坐标或观测偏差未解决;
  • 只在机动时恶化:Q、模型阶次或多模型切换不够。

还应使用系统真实的 τ 分布做加权评价。若端到端延迟会在 60–140 ms 波动,只在固定 100 ms 上最好不一定能带来最好的比赛表现。

把预测误差变成火控能理解的量

对每个未来预测,建立真值装甲板局部坐标系,把位置误差分解到装甲板三条局部轴:

horizontal_miss = 误差在装甲板水平轴上的分量
vertical_miss   = 误差在装甲板竖直轴上的分量
depth_miss      = 误差在装甲板法向上的分量

小装甲板尺寸为 135 × 55 mm,以中心为瞄准点时,预测点落入理想板面窗口需要同时满足:

|horizontal_miss| ≤ 67.5 mm
|vertical_miss|   ≤ 27.5 mm

大装甲板尺寸为 225 × 55 mm,水平边界改为 112.5 mm,竖直边界仍为 27.5 mm。法向/深度误差另行进入距离和弹道评价。

再把云台跟随误差、弹道解误差、发射时序误差和弹丸散布逐项叠加,计算最终窗口覆盖率。上游预测误差占用的窗口越少,下游环节可用的余量越大。

最终实车评价还应记录:

  • 从发现到稳定跟踪需要多少帧;
  • 漏检后能保持多久、重捕获需要多久;
  • 目标切换时错误关联与误开火次数;
  • 不同距离、速度和旋转状态下的命中率;
  • 首发命中时间、连续命中率和平均击杀时间。

一套可复用的实验协议

每次修改状态、Q/R 或门控后,按同一顺序跑:

  1. 无噪声合成回归:验证坐标、几何、角度环绕与时间推进;
  2. 固定条件噪声实验:单独改变距离、角度或角点扰动,建立误差规律;
  3. 连续运动回放:使用相同录制数据比较新旧算法,避免场景变化干扰;
  4. 失效场景:加入漏帧、离群点、目标切换、急停和变向;
  5. 端到端仿真:使用真实处理延迟和弹道时间计算未来射击误差;
  6. 实车验证:先检查日志与落点分布,再统计命中和击杀时间。

实验报告必须保存配置、随机种子、代码提交、样本数量、排除规则和原始派生数据。只展示一段最好看的曲线,无法支持滤波器优劣判断。

练习:建立自己的滤波器成绩单

使用本教程的 tracking-observations.csv,为自己的实现输出一张表:

方法 × 距离 × 预测时域
→ position p50/p95
→ horizontal / vertical miss p95
→ NIS 95% 覆盖率
→ 创新 lag-1 / lag-2 自相关
→ 更新接受率与失锁次数

然后回答三件事:你的提升主要来自去掉深度长尾,还是未来横向预测?协方差在各距离是否同样诚实?若把门控阈值放宽,精度、拒绝率和失锁恢复之间发生了什么变化?能回答这些问题,才算真正理解了滤波器,而不是只找到一组参数。

至此,跟踪预测主线已经完成,可以继续进入火控与弹道。研究选读:从预测误差看 11 维 EKF展示在 100 / 200 / 300 / 500 ms 四个固定时域上,未来装甲板位置误差和板面窗口覆盖率如何变化。

On this page