Files
code-test-drone/utils/task_runner/pod_control.py
T
keita ded17d7995 实现预定流程全链路: 任务状态机 + 编排器 + 地面站 + 真机/SITL入口
- utils/task_runner: 6态状态机(WAIT→ARM_TAKEOFF→GOTO(L2)→TRACK(L1)→APPROACH→RTL)
  + 编排器(快照采集/状态动作) + 双层日志(事件JSONL/遥测CSV) + 吊舱控制指令(0x07/0x0F/0x0E/0x08)
- pod_bridge: ground_link 地面坐标UDP注入(超龄判无效,无激光替代表4);
  set_heading_servo_enabled() 运行时L1/L2切换(切换即reset清积分防输出跳变);
  pod_locked 提为公共门控; config 新增 ground_inject 段
- virtual_pod 模拟吊舱(无电机语义) + verify_px4 增量④仅飞控验证 +
  pod_sitl_test L1 SITL全流程(飞行编排不塞进 run_bridge, 保持纯offboard闭环入口)
- 入口: task_runner_sitl(VirtualPod+虚拟目标, SITL端到端跑通约1m24s) /
  task_runner_real(真串口+UDP注入+吊舱控制)
- 地面站 ground_station: 坐标注入 + 状态可视化(Flask)
- S1标定回填(2026-10-09): beta_sign=+1 / alpha_sign=-1, 加标定回归测试守护
- 新增测试: task_runner x4 + ground_link/virtual_pod*/bridge/px4_gateway 增量; 全量 483 passed
- 文档: 预定流程(需求) + 预定流程-操作指南(操作/待办) + L1方案补S1结论与实现状态
2026-10-13 15:50:32 +08:00

40 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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))