第 3 周(2026-07-27 ~ 2026-08-01)
蒋玉月 · StarryOS SG2002 TPU/NPU 推理加速 阶段声明:控制层落地 + 真机联调,管线突破 5fps,电机遭遇环境差异卡点
一、本周目标
- 跟进李明涛 DQBUF 驱动优化,端到端闭环上线,目标 5fps
- 接入 ESP32 电机 + 舵机真实硬件,验证状态机 + PID 控制
- 板上实测全链路:Camera → TPU 检测 → 运动控制 → 夹取
二、关键成果
2.1 管线性能:v7 → v8,突破 5fps
| 指标 | v7(上周) | v8(本周) | 变化 |
|---|---|---|---|
| TPU Forward | 40ms | 52ms | 慢 12ms |
| 整管线延迟 | 233ms | ~183ms | 快 21% |
| 稳态帧率 | 4.3 fps | 5.2-5.5 fps | +22% |
| 检测置信度 | — | 0.50-0.79 | — |
达成上周 5fps 目标。Camera 从之前的 isochronous 传输秒挂到稳定 100ms 出帧,Preprocess 和 NMS 沿用 C 后端零拷贝路径。
2.2 李明涛:CrabUsb 架构升级
本周李明涛完成了 StarryOS USB 栈的重大架构变更:
旧: StarryOS usbfs(中断已占用) ✗ sg200x-bsp → 中断冲突 → 轮询超时 255ms
新: StarryOS usbfs(事件循环) ✓ CrabUsb → 合法注册中断 → 100ms 稳定
效果:CrabUsb 与内核 USB 栈共享同一中断体系,不再是“绕过“而是“融入“。Camera 取帧从之前偶尔 255ms 空转变为稳定均匀的 100ms。下一步优化方向:usbfs 事件循环中给 UVC 开低延迟通道(中断直通 + buffer 预分配),目标从 100ms → 接近 Linux 10ms。
内核版本演进:
| 版本 | 日期 | 大小 | 说明 |
|---|---|---|---|
| boot.sd.old_20260721 | 7/21 | 12.5 MiB | 原始版本 |
| boot.sd.old_20260727 | 7/22 | 12.85 MiB | 第一次更新 |
| boot.sd (当前) | 7/25 | 12.78 MiB | 李明涛最新 |
v4l2-test 工具链就绪:1.tpg_check / 2.camera / 2.parser / 3.speed / capture,均 ~30KB 静态编译。
2.3 AKA-00 控制接口挖掘与真机驱动
从 chenlongos/AKA-00 仓库挖出完整硬件控制链:
SG2002
├── /dev/ttyS1 (UART1, 115200) → ESP32-C3 → DRV8833 → N20 TT马达×2
│ 协议: 0xAA 0x55 <cmd> <len> <payload> <chk>
│
└── /dev/ttyS2 (UART2, 115200) → 微雪控制板 → ZP10S舵机×3
协议: #<id>P<pulse>T<time>!
确认 StarryOS 板端 /dev/ttyS0/1/2/3 全部存在,驱动可用。
2.4 全自动追球管线 (real_pipeline.py)
实现完整状态机:
Camera(100ms) → Preprocess(C) → TPU(52ms) → NMS(C)
→ 无目标: 原地右转搜索
→ 球远(far): 快速前进 + 方向修正
→ 球中(mid): 慢速接近 + 方向修正
→ 球近(near): 停车 → 舵机夹取
2.5 板上实测
| 模块 | 状态 | 说明 |
|---|---|---|
| 环境 | ✅ | 内核/串口/Python/C 库/模型全部就位 |
| Camera | ✅ | 首日 isochronous 秒挂,CrabUsb 新内核后稳定 100ms 出帧 |
| TPU | ✅ | ~52ms Forward,检出置信度 0.50-0.79 |
| 控制逻辑 | ✅ | GRAB/SEARCH 状态机自动切换正常 |
| Servo 舵机 | ⏳ | 设备在位,未实测夹取 |
| Motor 电机 | 🔴 | handshake 通过但轮子不转(见 2.6) |
| WiFi | ❌ | N24250 模块未接线 |
2.6 Motor — 本周最大卡点(环境差异)
TtPidDriver协议握手返回 OK,但电机不转- 定位到软件 bug:raw I/O fallback 路径
_send_cmd调用reset_input_buffer(),此方法在 file object 上不存在,AttributeError被except: pass静默吞掉 → 数据从未发出 - 串口波特率默认 38400,需
stty -F /dev/ttyS1 115200修正 - 关键发现:同一份
motor_driver.py代码在李明涛的板子上电机正常转动,用户板子只 handshake 通过但轮子不动 → 驱动逻辑本身正确,问题在板端环境差异 - 待排查:两边内核版本、串口驱动行为、电平/接线、ESP32-C3 固件版本差异
三、产出
| 类型 | 内容 |
|---|---|
| 代码 | real_pipeline.py — 真机主程序:Camera→TPU→追球→夹取 全自动 |
| 代码 | motor_driver.py — ESP32-C3 电机 UART 驱动(Mock + Real 双模式) |
| 代码 | servo_driver.py — ZP10S/STS3215 舵机 UART 驱动(Mock + Real 双模式) |
| 文档 | REAL_MACHINE_GUIDE.md — 完整操作指南(接线/测试/故障排查) |
| GitHub | jiangyuyue111/sg2002_yolo_inference — 初始提交(86 文件 + 贡献者说明) |
| ACT-Runtime | chenlongos/ACT-Runtime — CrabUsb + Isoch 架构升级 + 性能数据更新 |
| SD 卡 | 全部 pipeline 文件 + 指南已部署到 ext4 分区 |
四、下周计划
- 🔴 电机环境差异排查(最高优先):逐项对比两边内核版本、串口驱动、ESP32-C3 固件,必要时直接裸协议
echo到/dev/ttyS1排除 Python 层干扰 - 🟡 舵机夹取实测:验证 ZP10S 夹爪完整抓球动作闭环
- 🟡 pyserial 迁移:替换 raw file I/O fallback,消除
PYTHONPATH手动设置 - 🟡 WiFi 模块接入:焊接 N24250 模块,实现无线调试/控制
- Camera 性能优化:配合李明涛 usbfs 低延迟通道方案,目标 100ms → 接近 Linux 10ms