"""pod_control.py —— 吊舱目标识别/锁定控制(真机,任务编排的一部分)。 真机吊舱不会自动输出"锁定"——需要先发控制指令让它进入目标识别 + 自动锁定模式: * 0x07 目标识别开(param_x = 目标类型:0=人/车,1=无人机) * 0x0F 发现目标自动锁定(常驻模式:目标进画面自动锁定,非一次性动作) 结束(任务完成/返航)时: * 0x0E 停止跟踪(只停当前这一次跟踪) * 0x08 目标识别关(真正退出识别) 本模块把这些指令序列封装成 PodController,供 TaskRunner 在 GOTO / RTL 阶段调用。 SITL 用 VirtualPod(直接合成锁定态),不注入 PodController。 """ from pod_bridge.protocol import ControlCode, ControlCommand class PodController: """吊舱目标识别/锁定控制器。 arm_detection / stop_tracking 为同步方法,经 bridge.send_control 下发 表2-1 控制帧(编码由 PodBridge 完成,本类只关心"发什么指令序列")。 """ def __init__(self, bridge, target_type: int = 0) -> None: """bridge:PodBridge(需有 send_control);target_type:0=人/车,1=无人机。""" self._bridge = bridge self._target_type = int(target_type) def arm_detection(self) -> None: """开启目标识别 + 发现自动锁定(GOTO 阶段进入时调用)。""" self._bridge.send_control(ControlCommand( code=ControlCode.TARGET_DETECT_ON, param_x=self._target_type)) self._bridge.send_control(ControlCommand( code=ControlCode.AUTO_LOCK_ON_FOUND)) def stop_tracking(self) -> None: """停止跟踪 + 关闭目标识别(RTL 前调用)。""" self._bridge.send_control(ControlCommand(code=ControlCode.STOP_TRACK)) self._bridge.send_control(ControlCommand(code=ControlCode.TARGET_DETECT_OFF))