Aimer 是 tracker 后面的瞄点与弹道模块。它不订阅图像和 IMU,只在收到
tracker/target 后选择要打的装甲板,预测目标运动,解算最终 yaw/pitch。
- 输入
tracker/target:ArmorTracker发布的SolveTrajectory::Target。 - 输入
referee/bullet_speed:裁判系统或上游估计的当前弹速,异常或过低时回退到默认弹速。 - 输入
gimbal/rotation:云台当前姿态,只用于自动开火判定。 - 输出
tracker/target_eulr:兼容旧下游的云台角度 topic,名称保持历史拼写。 - 输出
tracker/gimbal_plan:SP-style TinyMPC 云台计划,包含目标角、计划角、角速度和角加速度。 - 输出
tracker/fire_notify:兼容旧下游的开火通知,由tracker/send.is_fire派生。 - 输出
tracker/send:兼容旧下游的瞄点、角度和开火标志。 - 输出
aimer/metrics:调试统计,包括是否有效、迭代次数、弹速、飞行时间和本模块处理耗时。 - 输出
aimer/trajectory:调试用模型弹道,包含当前图像时间戳、命中点和固定数量的世界系弹道采样点。
- 每个
tracker/target回调都会发布一组输出;目标丢失或弹道不可解时输出默认空命令。 - 低速普通目标直接选择距离最近的装甲板,避免无意义切面。
- 高速旋转目标和前哨站先按配置延迟预测目标,再按进入角、离开角优先选择可击打装甲板;当前没有可击打窗口时继续瞄准锁定面或最近面,但不开火。
target.position表示整车中心;多装甲目标按position + radius * [cos(yaw_i), sin(yaw_i)]还原装甲板坐标,与ArmorTracker发布语义保持一致。- 弹道飞行时间最多迭代 10 次,收敛阈值为
0.001 s。 gimbal_plan使用 yaw/pitch 双积分 TinyMPC,默认HORIZON=100、dt=0.01、max_yaw_acc=50、max_pitch_acc=100。- Webots 默认
mpc_max_iter=7,用于避免同进程仿真链路被 planner 计算拖乱;需要接近 SP 默认 10 次迭代时应先把 planner 从同步关键路径解耦。 aimer/trajectory画的是当前模型下的预测弹道,不代表 Webots 或实机里已经发射出的真实弹丸轨迹。is_fire需要命令 yaw 稳定且云台 yaw 已对齐;没有gimbal/rotation时不会自动开火。
- Aimer 不负责目标跟踪,也不修改同步链路。
- Aimer 不依赖旧版跳变标志或额外序号,当前输入以
SolveTrajectory::Target字段为准。 latency_ms是本模块回调处理耗时,不是传感器采集时间。