DroneMind/docs/FLIGHT_INTENT_IMPLEMENTATION_PLAN.md
2026-04-14 09:54:26 +08:00

114 lines
5.9 KiB
Markdown
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.

# Flight Intent v1 + 伴飞桥 — 实施计划
本文档与 [`FLIGHT_INTENT_SCHEMA_v1.md`](FLIGHT_INTENT_SCHEMA_v1.md) 配套,描述从协议闭环到 ROS/PX4 可控的**分阶段交付**。顺序建议按阶段 0→4各阶段内任务可并行处已标注。
---
## 目标与验收标准
| 维度 | 验收标准 |
|------|-----------|
| **协议** | 云端下发的 `flight_intent` 满足 v1`wait``takeoff` 可选高度、`trace_id`L1L3 校验可自动化 |
| **语音客户端** | 能解析并记录完整 `actions`;在 `ROCKET_CLOUD_EXECUTE_FLIGHT=1` 时通过 Socket/桥 执行或与桥约定本地执行 `wait` |
| **桥** | 顺序执行 `actions`,每步有超时/失败策略;可对接 MAVROS或既定 ROS 2 栈)驱动 PX4 |
| **安全** | 执行前 L4 门禁、执行中可中断、急停路径明确 |
| **回归** | SITL 或台架可重复跑通「起飞 → 悬停 → wait → 降落」等示例 |
---
## 阶段 0对齐与基线约 0.51 天)
- [ ] 全员精读 `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 并行,约 24 天)
- [ ] **Schema 校验**:服务端对 `flight_intent` 做 L1L3必要时 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`)(约 35 天)
可与阶段 1、3 部分并行。
- [x] **Pydantic**`voice_drone/core/flight_intent.py`v2按 v1 文档收紧动作与 `args`
- [x] **`parse_flight_intent_dict`**:等价 L1L3 + 首步禁止 `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约 510 天,视现网复用程度)
- [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联调、硬化与发布约 37 天)
- [ ] **端到端**:真机或 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** | 阶段 01 完成:云校验 + 提示词 + 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 修订同步更新本计划中的阶段勾选与工期估算。