从连续观测到未来装甲板
明确跟踪预测的输入、输出、时间语义,以及误差如何传到火控。
PnP 交来的只是一帧观测
每次相机曝光后,上游会交来一条带时间戳的观测:
曝光时间 tₖ
装甲板位置 pₖ = (xₖ, yₖ, zₖ)
装甲板朝向 yawₖ
类别、置信度、角点、重投影误差等质量信息这里的 pₖ 和 yawₖ 不是目标的绝对真相。它们由四个角点经过 PnP 得到,会继承角点扰动、标定误差、距离敏感性和候选解切换。检测还可能漏帧,同一帧里也可能同时看到多块装甲板。
火控希望得到的是另一种信息:在未来 tₖ + τ 时刻,当前目标的哪块装甲板最适合射击,它在三维空间中的位置与速度是多少。τ 至少包含系统处理延迟、通信与执行延迟以及弹丸飞行时间,因此它不是一个永远固定的常数。
中间需要恢复什么状态
单帧 PnP 只描述一块可见装甲板。连续运动却属于整台机器人。把状态建立在整车上,可以让前装甲板转出视野后,利用同一个车体中心和旋转状态生成侧装甲板,而不必把它误认为一个突然出现的新目标。
一个常见状态包含:
- 车体中心
(cₓ,cᵧ,c_z)与平移速度(vₓ,vᵧ,v_z); - 车体或参考装甲板的连续 yaw
θ与角速度ω; - 装甲板到中心的半径
r; - 英雄等结构中交替出现的半径差、高度差。
跟踪器每到一帧先根据经过的时间预测这些状态,再用 PnP 观测修正。需要未来状态时,只运行预测,不再等待一张尚未拍到的图像。最后按照车辆几何,把未来中心与 yaw 解码成四块未来装甲板。
连续 PnP → 数据关联 → 目标状态 → 推进 τ 秒 → 未来各装甲板 → 火控选板为什么精度会直接影响火控
设目标相对枪口的距离为 d,横向位置误差为 e⊥。小角度下,它带来的瞄准角误差近似为:
角度误差 ≈ e⊥ / d若目标横向速度为 v⊥,总延迟估计错了 Δτ,还会再产生约 v⊥ · Δτ 的横向误差。例如目标横移 2 m/s,时间少算 50 ms,仅这一项就会产生约 10 cm 的偏差,已经超过小装甲板的一半宽度。
深度误差的作用不同:它可能让三维欧氏误差看起来很大,却只产生很小的瞄准角变化;但深度又决定弹道飞行时间,飞行时间改变会继续影响运动预测。因此不能只用一个“三维位置误差”判断火控是否会命中,也不能因为某次横纵角误差很小就忽略深度。
时间戳不是附属字段
一条观测必须标记它对应的曝光时刻,而不是“程序处理到这里”的时刻。若用接收时刻代替曝光时刻,计算量波动会被误认为目标运动;滤波器随后可能用速度去解释这段伪运动。
一条清晰的时间链应当能够回答:
图像何时曝光?
观测何时送入滤波器?
云台状态是否与同一次曝光对齐?
当前控制命令何时生效?
子弹预计何时到达目标?预测时域 τ 应从曝光时刻算到预计命中时刻,而不是只填一个经验常数。后续火控计算更新了弹道时间后,还可以再次更新 τ 并重新生成未来装甲板。
本章的输入与输出约定
后面的 EKF 使用统一跟踪坐标系:x 向前、y 向左、z 向上。PnP 观测在进入滤波器前已经按照曝光时刻的云台姿态完成坐标变换。这样,静止目标不会因为云台转动而在状态空间中“移动”。
本模块最终应输出:
目标标识与跟踪状态
状态估计 x̂(t) 与不确定度 P(t)
未来时刻 t + τ 的装甲板候选
每块装甲板的位置、速度、朝向与可用性
最近一次有效更新、拒绝与丢失信息其中 P 不是可有可无的附加值。它告诉下游当前状态有多不确定,也让跟踪器可以用统计量判断新观测究竟是合理波动,还是一次需要拒绝的离群点。
下一步进入实现整车 EKF,把这里的输入、状态和时间关系写成可运行的预测与更新过程。