# Flight Intent v1 + 伴飞桥 — 实施计划 本文档与 [`FLIGHT_INTENT_SCHEMA_v1.md`](FLIGHT_INTENT_SCHEMA_v1.md) 配套,描述从协议闭环到 ROS/PX4 可控的**分阶段交付**。顺序建议按阶段 0→4;各阶段内任务可并行处已标注。 --- ## 目标与验收标准 | 维度 | 验收标准 | |------|-----------| | **协议** | 云端下发的 `flight_intent` 满足 v1:含 `wait`、`takeoff` 可选高度、`trace_id`;L1–L3 校验可自动化 | | **语音客户端** | 能解析并记录完整 `actions`;在 `ROCKET_CLOUD_EXECUTE_FLIGHT=1` 时通过 Socket/桥 执行或与桥约定本地执行 `wait` | | **桥** | 顺序执行 `actions`,每步有超时/失败策略;可对接 MAVROS(或既定 ROS 2 栈)驱动 PX4 | | **安全** | 执行前 L4 门禁、执行中可中断、急停路径明确 | | **回归** | SITL 或台架可重复跑通「起飞 → 悬停 → wait → 降落」等示例 | --- ## 阶段 0:对齐与基线(约 0.5~1 天) - [ ] 全员精读 `FLIGHT_INTENT_SCHEMA_v1.md`,冻结 **v1 白名单**(`type` / `args` 键)。 - [ ] 确认伴飞侧技术选型:**ROS 2 + MAVROS**(或 `px4_ros_com`)与默认 **AUTO vs Offboard** 策略(写入桥 YAML,不写进 JSON)。 - [ ] 盘点现有 **Socket 服务**:是否即「桥」或仅转发;是否需新进程 `flight_intent_bridge`。 - [ ] 建立 **trace_id** 在日志中的格式(云端 / 语音 / 桥统一)。 **产出**:架构一页纸(谁消费 WebSocket、谁连 PX4)、桥配置模板路径约定。 --- ## 阶段 1:协议与云端(可与阶段 2 并行,约 2~4 天) - [ ] **Schema 校验**:服务端对 `flight_intent` 做 L1–L3(必要时 L4 占位);非法则 `routing=error` 或产品协议兜底。 - [ ] **LLM 提示词**:只允许 §3.7 中 `type` 与允许键;强调 **时长必须用 `wait`**,禁止用 `summary` 控机。 - [ ] **示例与回归用例**:固定 JSON golden(§7.1~§7.3 + 边界:首步 `wait`、`seconds` 超界、多余 `args` 键)。 - [ ] **可选 `trace_id`**:服务端生成或在 bundle 层透传。 **产出**:校验测试集、提示词 MR、发布说明(对客户端可见的字段变更)。 --- ## 阶段 2:语音客户端(`voice_drone_assistant`)(约 3~5 天) 可与阶段 1、3 部分并行。 - [x] **Pydantic**:`voice_drone/core/flight_intent.py`(v2)按 v1 文档收紧动作与 `args`。 - [x] **`parse_flight_intent_dict`**:等价 L1–L3 + 首步禁止 `wait`;白名单、`goto.frame`、`wait.seconds`、`takeoff.relative_altitude_m`。 - [x] **`main_app`**:`ROCKET_CLOUD_EXECUTE_FLIGHT=1` 时在后台线程 **`_run_cloud_flight_intent_sequence`** 顺序执行;`wait` 用 `time.sleep`;`goto` **单轴** 映射 Socket `Command`;`return_home` 已入 `Command`;**含 `takeoff` 的序列**在 offboard 完成后继续后续步(不再丢失)。 - [x] **日志**:序列开始时打印 `trace_id`;`takeoff` 打相对高度提示(offboard 是否消费须自行接参数)。 - [x] **单测**:`tests/test_flight_intent.py`(无完整依赖时 goto 用例自动 skip)。 **产出**:MR 合并后,本地无 PX4 也能跑通解析与 mock 执行。 --- ## 阶段 3:伴飞桥 + ROS/PX4(约 5~10 天,视现网复用程度) - [x] **进程边界(首版)**:独立 ROS1 节点,订阅 `std_msgs/String` JSON;见 **`docs/FLIGHT_BRIDGE_ROS1.md`**、`scripts/run_flight_intent_bridge_ros1.sh`。 - [x] **执行器(首版)**:`voice_drone/flight_bridge/ros1_mavros_executor.py` 单线程顺序执行;`takeoff/goto` 带超时;`land/rtl` 等待 disarm 超时。 - [x] **翻译实现(首版 / MAVROS)**: - `takeoff` / `hover` / `wait` / `goto`:`/mavros/setpoint_raw/local`(Offboard)+ `set_mode` / `arming`。 - `land` / `return_home`:`AUTO.LAND` / `AUTO.RTL`。 - [ ] **安全**:L4(电量、围栏、急停 topic);`wait` 中异常策略。 - [ ] **回执**:result topic / 与 `main.py` 的 topic 串联。 - [ ] **ROS2 / 仅 TCP 无 ROS**:按需另起接口。 **产出(当前)**:ROS1 桥可 `rostopic pub` 联调;**待** launch、与语音侧发布 JSON、SITL CI。 --- ## 阶段 4:联调、硬化与发布(约 3~7 天) - [ ] **端到端**:真机或 SITL:语音 → 云 → 客户端 → 桥 → PX4,带 `trace_id` 串 log。 - [ ] **压测与失败注入**:断 WebSocket、桥崩溃重启、Offboard 丢失等(预期行为写进运维文档)。 - [ ] **配置与门禁**:默认关闭实飞执行;仅生产镜像打开;参数与围栏双人复核。 - [ ] **文档**:更新 `PROJECT_GUIDE.md` 中「飞控路径」链接到本文与 SCHEMA。 **产出**:发布 checklist、已知限制列表(如某机型仅支持 AUTO 等)。 --- ## 依赖与风险 | 风险 | 缓解 | |------|------| | Socket 协议与 `Command` 无法表达多步 | **推荐**由桥消费**完整** `flight_intent` JSON,客户端只负责下发一份;少步经 Socket 逐条 | | Offboard 与 AUTO 混用冲突 | 桥配置单一「主策略」;`goto` 仅在 Offboard 就绪时接受 | | LLM 仍产出非法 JSON | L2 硬拒绝 + 提示词回归 + golden 测试 | | 排期膨胀 | 先交付 **AUTO 模式族 + wait + land**,再迭代复杂 `goto` | --- ## 建议里程碑(日历为估算) | 里程碑 | 内容 | |--------|------| | **M1** | 阶段 0–1 完成:云校验 + 提示词 + golden | | **M2** | 阶段 2 完成:客户端 strict 模型 + `wait` + 执行路径单一数据源 | | **M3** | 阶段 3 完成:桥 + SITL 跑通 §7.2 | | **M4** | 阶段 4:联调签字 + 生产策略 | --- ## 文档索引 | 文档 | 用途 | |------|------| | [`FLIGHT_INTENT_SCHEMA_v1.md`](FLIGHT_INTENT_SCHEMA_v1.md) | 字段、校验、桥分层、ROS 参考 | | [`PROJECT_GUIDE.md`](PROJECT_GUIDE.md) | 仓库总览与运行方式 | | 本文 | 任务拆解、顺序、验收 | --- **版本**:2026-04-07;随 SCHEMA v1 修订同步更新本计划中的阶段勾选与工期估算。