更新工作进度: 预定流程全链路已SITL跑通 + pod_bridge/L1落地与S1标定
- 进度表刷新至 2026-10-13: 新增 1.3 吊舱桥接与L1航向伺服、1.4 预定流程全链路、 1.5 测试更新为 483 passed(实测)、1.7 文档与索引 - 未完成/下一步按 预定流程-操作指南 重整: P0 真机增量验证②~⑤、占位参数标定, P1 视频流/配置外置/地面站实时, P2 .gitignore/pytest回填/C++ ctest - 新增 3.4 真机安全红线; 3.1 影响栏改为 S5~S8 版状态机对齐
This commit is contained in:
@@ -1,6 +1,221 @@
|
||||
## 1.已完成工作:
|
||||
- 两C++模块移植到python
|
||||
- mock测试通过
|
||||
- 仿真测试一切正常
|
||||
## 2.未完成工作
|
||||
状态机代码尚未完成
|
||||
# 工作进度
|
||||
|
||||
> 更新日期:2026-10-13
|
||||
> 项目:无人机视觉目标追踪与控制系统
|
||||
> (`reference-c++/` C++ 参考实现 + `utils/` Python 移植与新实现)
|
||||
>
|
||||
> 本文只记「做完了什么 / 卡在哪 / 下一步怎么走」。
|
||||
> 架构全貌与必须遵守的铁律见 `.workbuddy/memory/ARCHITECTURE.md`;
|
||||
> 「预定流程」全链路的操作指南与待办清单见 `预定流程-操作指南.md`;
|
||||
> 权威规格见 `docs/` 下各技术路线 md(代码注释用 `§章节号` 反向引用)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 已完成工作
|
||||
|
||||
### 1.1 C++ → Python 移植(2 个模块)
|
||||
|
||||
| C++ 源工程 | Python 目标包 | 状态 |
|
||||
|-----------|--------------|------|
|
||||
| `reference-c++/target_tracker` | `utils/target_tracker` | ✅ 完成(28 条用例) |
|
||||
| `reference-c++/visual_track_control` | `utils/visual_track_control` | ✅ 完成(81 条 + L1 增量 5 条 = 86) |
|
||||
|
||||
- 逐构件对照移植:测试断言逐条搬运(`EXPECT_DOUBLE_EQ` → 精确 `==`,
|
||||
`EXPECT_NEAR` → `pytest.approx`)。
|
||||
- 两包**互不依赖**,唯一转换点在胶水层 `utils/demo_track_control.py`。
|
||||
- MAVLink 部分改为 **MAVSDK 语义映射**(offboard API,非字节透传),
|
||||
三分支映射保留 C++ A2 回归语义。
|
||||
- 行为修复项(C1/C2/C4、A1/A2/A4、S6)已在测试文件头注明对应章节。
|
||||
|
||||
### 1.2 双目链路新实现(非移植,按规格新写)
|
||||
|
||||
| Python 包 | 规格来源 | 状态 |
|
||||
|----------|---------|------|
|
||||
| `utils/stereo_ranger`(稀疏目标测距) | `docs/双目测距技术路线.md` | ✅ 完成(111 条) |
|
||||
| `utils/stereo_yolo`(双目 YOLO 检测前端) | `docs/双目YOLO目标识别需求说明.md` | ✅ 完成(36 条) |
|
||||
|
||||
- `stereo_ranger` 按规格五步流程实现,**纯标准库**,无第三方依赖;
|
||||
越界即有效性门、视差域权威,偏差项已在其包 README 记录。
|
||||
- `stereo_yolo` 推理口径为 ultralytics 直跑 `.pt`,letterbox/解码/NMS/坐标回映均在库内完成;
|
||||
输出直接作为 `stereo_ranger` 的输入(仅复用其 `types.py` 纯值类型)。
|
||||
|
||||
### 1.3 吊舱 ↔ PX4 桥接与 L1 航向伺服(`utils/pod_bridge`)
|
||||
|
||||
- 协议桥接(09-22 起):`protocol`(表2/表3 解析)、`px4_gateway`(offboard 速度闭环)、
|
||||
`pod_serial`、`guidance`(L2 地理引导)、`run_bridge.py --dry-run` 干跑入口。
|
||||
- **L1 航向伺服(10-09 落地,路线 A1)**:吊舱角度直入——β/α 直接吃吊舱角度
|
||||
(配置双路 `beta_from_frame` / `beta_from_off_target`;本版未装电机,恒用脱靶量路径),
|
||||
复用 `TrackingControlLaw` 的无距离降级路径;`bridge.set_heading_servo_enabled()`
|
||||
支持运行时 L1/L2 切换(切换即 reset 清积分,防输出跳变)。
|
||||
- **硬件结论(厂商答复 + 实测)**:本吊舱**不允许二次开发**;无激光 → **表4 永不出**,
|
||||
目标坐标改走地面注入;`0x0F` 自动锁定是常驻模式(`0x0E` 只停当次,`0x08` 才退出识别);
|
||||
bit2 锁定位目标丢失后不复位,必须加第二判据(我方视觉)。
|
||||
- **S1 台架标定已完成(10-09)**:`beta_sign=+1`、`alpha_sign=-1` 已回填
|
||||
`pod_bridge.json`,并有标定回归测试守护(`test_deployed_config_has_calibrated_signs`)。
|
||||
- 配套工具:`virtual_pod`(模拟吊舱,无电机语义)、`verify_px4`(仅飞控验证,增量④)、
|
||||
`pod_sitl_test.py`(L1 SITL 全流程)。
|
||||
|
||||
### 1.4 预定流程全链路(`utils/task_runner`,10-12 落地)
|
||||
|
||||
「地面给坐标 → 天空解锁/接受坐标引导/追踪打击」全链路,**已在 PX4 SITL 端到端跑通(约 1m24s)**:
|
||||
|
||||
| 模块 | 文件 | 作用 |
|
||||
|------|------|------|
|
||||
| 任务状态机 | `utils/task_runner/state_machine.py` | 6 状态纯逻辑转移:WAIT→ARM_TAKEOFF→GOTO(L2)→TRACK(L1)→APPROACH→RTL |
|
||||
| 编排器 | `utils/task_runner/runner.py` | 状态机驱动 + 快照采集 + 状态动作(起飞/切律/返航) |
|
||||
| 日志模块 | `utils/task_runner/log.py` | 事件 JSONL + 遥测 CSV 双层结构化日志 |
|
||||
| 吊舱控制 | `utils/task_runner/pod_control.py` | 真机吊舱识别/锁定指令(0x07/0x0F/0x0E/0x08) |
|
||||
| 地面注入 | `utils/pod_bridge/ground_link.py` | UDP 接收地面站坐标(超龄判无效,替代表4) |
|
||||
| SITL 入口 | `task_runner_sitl.py` | 仿真全流程(VirtualPod + 虚拟目标) |
|
||||
| 真机入口 | `task_runner_real.py` | 真串口吊舱 + UDP 注入 + 吊舱控制 |
|
||||
| 地面站 | `ground_station/` | 坐标注入 + 状态可视化(Flask) |
|
||||
|
||||
### 1.5 测试
|
||||
|
||||
**483 条用例全部通过(实测,2026-10-13)**:
|
||||
|
||||
| 测试组 | 用例数 | 覆盖内容 |
|
||||
|--------|-------|---------|
|
||||
| `tests/stereo_ranger` | 111 | 规格 §11.4 构件级 + 全流程 |
|
||||
| `tests/visual_track_control` | 86 | 对应 C++ gtest + L1 角度直入增量 |
|
||||
| `tests/pod_bridge` | 173 | 协议/网关/桥接/L1 + virtual_pod/ground_link |
|
||||
| `tests/task_runner` | 49 | 状态机/编排器/日志/吊舱控制 |
|
||||
| `tests/stereo_yolo` | 36 | 假检测器驱动 |
|
||||
| `tests/target_tracker` | 28 | 对应 C++ gtest 用例 |
|
||||
| **合计** | **483** | 较 09-15(256)新增 227 |
|
||||
|
||||
- stereo_ranger / stereo_yolo 测试**不需要**真实图像、模型权重或硬件。
|
||||
- ⚠ codegraph 报告 `AssociateDetections` / `SelectPrimary` 等“无测试”属调用图误报,勿据此判断。
|
||||
|
||||
### 1.6 仿真 / 演示
|
||||
|
||||
| 脚本 | 内容 | 结果 |
|
||||
|------|------|------|
|
||||
| `utils/demo_track_control.py --speedup 10` | 模拟检测 → 追踪 → 控制律 → 发送,20 Hz 时间线 | ✅ |
|
||||
| `utils/demo_stereo_ranger.py` | 合成框对,六场景 | ✅ |
|
||||
| `utils/demo_stereo_yolo.py` | 真模型推理 + 合成素材五场景 | ✅ |
|
||||
| `task_runner_sitl.py`(PX4 SITL) | 预定流程全链路 6 状态 + 地面站联动 | ✅ 端到端跑通(10-12,约 1m24s) |
|
||||
|
||||
- SITL 集成脚本:`test.py`(视觉闭环早前版本)/ `pod_sitl_test.py`(L1 吊舱版)已就位;
|
||||
当前全流程实跑走 `task_runner_sitl.py`。
|
||||
|
||||
### 1.7 文档与索引
|
||||
|
||||
- `docs/` 现有 10 份:双目测距技术路线、双目 YOLO 需求说明、视觉跟踪控制律技术路线、
|
||||
视觉追踪技术路线、物理追踪思路、吊舱解算验证方案(模拟飞控喂表3)、树莓派 4B 部署注意事项、
|
||||
双目相机模组到位作业指导、**L1 航向伺服实现方案**、光电吊舱控制协议 G 版-PB(docx)。
|
||||
- 根目录:`预定流程.md`(需求)+ `预定流程-操作指南.md`(操作指南与待办,链路权威)。
|
||||
- `.workbuddy/memory/ARCHITECTURE.md` + `MEMORY.md`:完整架构参考与精简铁律。
|
||||
- `.codegraph/` 索引 140 文件 / 2337 节点,可直接 codegraph 查询。
|
||||
- 相机标定已起步:根目录 `camera.py`(棋盘格采集脚本)+ `stereo_calib_params.npz`(未入库)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 未完成工作
|
||||
|
||||
### 2.1 真机增量验证(P0,实飞前必须)
|
||||
|
||||
按 `预定流程-操作指南.md` §2.4 逐级进行,每级过了再进下一级:
|
||||
② 串口回环 → ③ 仅吊舱干跑(验 β→yaw_rate 符号/量级)→ ④ 仅飞控(`verify_px4`)→
|
||||
⑤ 地面联调(`task_runner_real.py`)。
|
||||
|
||||
### 2.2 数值参数未标定(阻塞飞行决策)
|
||||
|
||||
- 预定流程链路:`switch_radius_m` / `center_threshold_deg` / `center_hold_s` /
|
||||
`takeoff_altitude_m` 与 `heading.gain`、`guidance.speed_kp/yaw_kp` 均为占位
|
||||
(`beta_sign`/`alpha_sign` 已按 S1 标定回填);**标定回填前不得实飞**。
|
||||
- `utils/config/stereo_ranger.json` 几何参数为占位;解禁路径见
|
||||
`docs/双目相机模组到位作业指导.md` P0→P6(已起步标定采图,未走完)。
|
||||
|
||||
### 2.3 任务级状态机规格对齐
|
||||
|
||||
- 「预定流程」版状态机(6 态)已实现并 SITL 跑通;
|
||||
- 但 `docs/物理追踪思路.md` 引用的 S5~S8 版规格(`docs/状态机设计.md` 等)仍缺失,
|
||||
两套状态集是否对齐/合并需总项目侧确认(见 §3.1)。
|
||||
|
||||
## 3. 阻塞项与风险
|
||||
|
||||
### 3.1 本仓库缺失 4 份被引用的上游规格
|
||||
|
||||
`docs/物理追踪思路.md` 引用了下列文档,但它们在**本仓库不存在**(应在总项目或飞控工程侧):
|
||||
|
||||
| 被引文档 | 被引内容 | 影响 |
|
||||
|---------|---------|------|
|
||||
| `docs/状态机设计.md` | S6/S7/S8 切换守卫、§4.2 目标丢失转移、§7 策略接口 | S5~S8 版状态机与「预定流程」版对齐 |
|
||||
| `docs/感知与避障设计.md` | 标定流程、稳定锁定、雷达关联、降级原则 | 阻塞 S8 障碍接管与雷达联动 |
|
||||
| `docs/系统架构设计.md` | 数据流、控制单出口、时间与控制周期 | 影响状态机与控制律的接线方式 |
|
||||
| `docs/需求分析.md` | FR-034/FR-044/FR-051、NFR-007 | 需求追溯无法本地闭环 |
|
||||
|
||||
另 `docs/开发进度.md`(总项目开发进度)亦被引用,本仓库没有。
|
||||
|
||||
### 3.2 C++ 侧未复跑
|
||||
|
||||
`reference-c++/target_tracker` 与 `visual_track_control` 下均**无 `build/` 目录**,
|
||||
未构建、未执行 ctest。C++ 测试用例文件齐全(11 个),
|
||||
需先 `cmake .. && make && ctest`。若以 Python 侧为验证基准,此点可暂不处理。
|
||||
|
||||
### 3.3 环境不一致(可立即修)
|
||||
|
||||
`utils/README.md` 声明 conda env `pytorch`(`D:\program file\conda\envs\pytorch`),
|
||||
但实测该环境 **pytest 缺失**;全部测试通过隔离 venv
|
||||
(`C:\Users\yimiao\.workbuddy\binaries\python\envs\drone-test`,基于该 conda 解释器
|
||||
`--system-site-packages` 仅加装 pytest)完成,**未改动 conda 环境**。
|
||||
建议择机 `pip install pytest` 回填,使 README 与实际一致。
|
||||
|
||||
### 3.4 真机安全红线
|
||||
|
||||
标定回填前**不得实飞**;S3 起必须:不装桨 / 空旷场地 / RC 随时可切手动 / 有人值守。
|
||||
|
||||
### 3.5 帧周期算力不可外推
|
||||
|
||||
`stereo_yolo` 实测帧周期 25~35 ms 为台架开发机数据,与 30 fps 预算同量级,
|
||||
结论不可外推到机载平台。
|
||||
|
||||
---
|
||||
|
||||
## 4. 下一步(建议顺序)
|
||||
|
||||
1. **真机增量验证 ②~⑤**——对齐 `预定流程-操作指南.md` §2.4,③ 干跑优先,
|
||||
先把 β→yaw_rate 符号/量级钉死。
|
||||
2. **占位参数标定回填**——状态机 4 项 + L1/L2 增益。
|
||||
3. P1:摄像头接真视频流;`TaskStateConfig` 外置 JSON;地面站与 runner 实时打通。
|
||||
4. P2:`.gitignore` 补齐(`logs/`、`__pycache__/`、`.codegraph/` 等);conda 回填 pytest;
|
||||
C++ `cmake && ctest`。
|
||||
5. 相机模组到位后按作业指导走 P0→P6;确认 §3.1 四份上游规格可获取位置。
|
||||
|
||||
---
|
||||
|
||||
## 5. 验证命令(实测所用)
|
||||
|
||||
```bash
|
||||
# Python 全部测试(483 条)
|
||||
cd "D:/ProgramData/code_drone-test/utils"
|
||||
"C:/Users/yimiao/.workbuddy/binaries/python/envs/drone-test/Scripts/python.exe" -m pytest -q
|
||||
|
||||
# 三个演示
|
||||
"C:/Users/yimiao/.workbuddy/binaries/python/envs/drone-test/Scripts/python.exe" demo_track_control.py --speedup 10
|
||||
"C:/Users/yimiao/.workbuddy/binaries/python/envs/drone-test/Scripts/python.exe" demo_stereo_ranger.py
|
||||
"C:/Users/yimiao/.workbuddy/binaries/python/envs/drone-test/Scripts/python.exe" demo_stereo_yolo.py
|
||||
|
||||
# SITL 全流程 / 地面站联动 / 真机:见 预定流程-操作指南.md §五「一键命令汇总」
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 一页状态汇总
|
||||
|
||||
| 工作项 | 状态 | 备注 |
|
||||
|--------|------|------|
|
||||
| C++ `target_tracker` → Python | ✅ 完成 | 28 条用例 |
|
||||
| C++ `visual_track_control` → Python | ✅ 完成 | 86 条(含 L1 增量) |
|
||||
| `stereo_ranger` 双目测距 | ✅ 完成 | 111 条;几何参数待标定 |
|
||||
| `stereo_yolo` 检测前端 | ✅ 完成 | 36 条;真实素材待联调 |
|
||||
| 三路 demo 仿真验证 | ✅ 完成 | — |
|
||||
| `pod_bridge` 桥接 + L1 航向伺服 | ✅ 完成(10-09) | S1 符号已标定;增益待标 |
|
||||
| **预定流程全链路(task_runner)** | ✅ **SITL 跑通(10-12)** | 已提交 `ded17d7` |
|
||||
| 真机增量验证 ②~⑤ | ❌ 未开始 | P0;实飞前必须 |
|
||||
| 状态机/L1/L2 占位参数标定 | ❌ 未开始 | 回填前不得实飞 |
|
||||
| S5~S8 版状态机(物理追踪思路) | ⚠ 规格缺失 | 待对齐(§3.1) |
|
||||
| 相机模组标定 P0~P6 | ⏳ 起步 | `camera.py` 采集中 |
|
||||
| C++ 侧构建与 ctest | ⚠ 未执行 | 无 build 目录 |
|
||||
| conda 环境回填 pytest | ⚠ 待办 | 测试现走隔离 venv |
|
||||
|
||||
Reference in New Issue
Block a user