feat: add SO101 recording and ACT workflow with progress tracking

This commit is contained in:
ylhan
2026-09-10 16:46:58 +08:00
parent 2e33355a9c
commit cbf51facff
16 changed files with 604 additions and 7 deletions
+84
View File
@@ -0,0 +1,84 @@
# 项目进度追踪
更新于 2026-09-10 16:46:43(Asia/Shanghai)。本文件记录执行状态与证据;架构和验收标准见 [PLAN](../PLAN.md),操作步骤见 [ACT 抓放指南](act_block_white_box.md)。状态是更新时快照,不会随后台训练自动刷新。
## 当前状态
已进入 P1:一套 SO101 主从臂完成遥操、双摄像头采集;正在 RTX 3080 上用 5 条真实示范训练 ACT。训练尚未完成,尚未执行自主抓放或测量任务成功率。3090 未验收,桌面双从臂及移动底盘仍在后续阶段。
| 项目 | 状态 | 证据 / 说明 |
|---|---|---|
| 3080 软件基础环境 | 已验证 | LeRobot 0.6.1;早期合成数据检查见 P0 报告 |
| 主从臂装配、编号、校准 | 已完成基础调试 | zihao 主从 ID;当前采集链路可用 |
| wrist_roll 主从零点 | 已对齐 | 两边各 5 次回读均为 2047,约 −0.044° |
| 无 / 单 / 双摄像头遥操 | 启动脚本已提供 | 自动激活环境,固定 USB 路径 |
| 双摄像头采集 | 已验证 | 两路同时各读 80 帧无失败;真实数据全量解码通过 |
| 5 条积木放入白盒示范 | 已保存并检查结构 | 3379 帧,25 FPS,135.16 秒 |
| NVIDIA 驱动修复 | 已验证 | 580.173.02;重启后 CUDA 训练可用 |
| ACT 20 步短训练 | 已通过 | 检查点保存及重新加载通过 |
| ACT 20000 步训练 | 进行中 | 用户级 systemd 服务;见下方快照 |
| 真机自主执行 / 成功率 | 未开始 | 正式模型完成后验证 |
## 当前训练
- 数据:`local/block_white_box_v1`,本机 `data/block_white_box_v1`,未上传 Hub。
- 任务:`Pick up the block and place it in the white box.`
- 输入:`wrist`、`front` 两路 RGB + 6 维关节状态;输出 6 维动作。
- ACT:实际配置 51,597,190 参数;batch=8,steps=20000,lr=1e-5,seed=42,chunk_size=100,FP32。
- 每 2000 步保存检查点;没有保留验证集,这 5 条全部参与训练。
- 输出:`outputs/train/act_block_white_box_20260910_1642/`。
- 日志:`outputs/train/act_block_white_box_20260910_1642.log`。
- 服务:`act-block-white-box.service`,用户级临时服务;不会在重启后自动恢复。
- 最近指标:`step:2K smpl:18K ep:26 epch:5.21 loss:1.063 grdn:49.164 lr:1.0e-05 updt_s:0.156 data_s:0.002 smp/s:51 mem_gb:3.71 l1_loss:0.209 kld_loss:0.085`。
- 初始速度约 6~7 步/秒;PyTorch 报告训练显存约 3.73 GB,nvidia-smi 整卡占用约 4.9 GB。预计约 50 分钟,实际以日志为准。
- 短训练输出:`outputs/train/act_block_white_box_smoke_20260910_1640/`;20 步检查点已重载。
- `act_block_white_box_20260910_1641` 是未持续运行的启动尝试,不是当前有效训练目录。
```bash
systemctl --user status act-block-white-box --no-pager
tail -f outputs/train/act_block_white_box_20260910_1642.log
```
训练损失不代表真机成功率。完成后需要验证最终检查点和处理器加载,再单次真机执行、逐次记录结果。模型和数据在 git 忽略目录中,不随代码提交。
## 数据检查与已知限制
| 示范(从 1 开始) | 帧数 | 时长(秒) |
|---|---:|---:|
| 1 | 653 | 26.12 |
| 2 | 714 | 28.56 |
| 3 | 669 | 26.76 |
| 4 | 618 | 24.72 |
| 5 | 725 | 29.00 |
两路视频各解码 3379 帧,与动作表一致;所有状态、动作均为有限值,frame_index 连续,记录时间戳步长约 0.04 秒。时间戳规则不能单独证明真实采集无延迟或两路曝光严格同步。
已查看样帧:腕部夹爪和积木清楚;外部视角被机械臂遮挡较多,盒子部分出框。尚未逐帧确认每条任务成功。用户决定保留当前视角并直接使用这组数据训练,先取得基线。不要把这 5 条当作泛化能力证据。
## 硬件与校准记录
- 从臂 ID:`zihao_follower_arm`;固定串口末尾 `5B91044223-if00`。
- 主臂 ID:`zihao_leader_arm`;固定串口末尾 `5B8E115693-if00`。
- 校准文件:`~/.cache/huggingface/lerobot/calibration/robots/so_follower/zihao_follower_arm.json` 和 `~/.cache/huggingface/lerobot/calibration/teleoperators/so_leader/zihao_leader_arm.json`。
- 2026-09-09 wrist_roll 在相同物理姿态重新定零:从臂偏移 1687 → 737;主臂 1630 → 1749。旧文件备份后缀 `.bak_wrist_zero_20260909_183517_030072`。这些数值仅适用于本机,不应复制到其他机械臂。
- 腕部相机 Integrated Webcam:640×480 MJPG、30 FPS;外部 USB2.0 CAM1:640×480 MJPG、25 FPS。脚本固定 by-id 路径,数据按 25 FPS 记录。
- 历史故障:从臂 2 号电机启用扭矩曾收到 `Incorrect status packet!`;之后完成采集,但根因未最终确认,不标记为彻底修复。
## 驱动故障与恢复
2026-09-10 发现运行内核为 `7.0.0-31-generic`,原 NVIDIA 550 模块仅存在于旧内核 `6.14.0-27-generic`。Secure Boot 关闭。安装当前内核对应的 580 驱动后重启,nvidia-smi 显示 580.173.02,真实 ACT CUDA 训练通过。
后续内核升级后先检查 `nvidia-smi` 及环境中的 `torch.cuda.is_available()`。训练脚本已加入 CUDA 检查,避免无声回退到 CPU。
## 下一步
- [ ] 确认 20000 步训练正常结束、最终检查点可加载。
- [ ] 使用当前相机布局进行单次自主抓放,记录结果与异常。
- [ ] 统计多次成功率,区分抓取失败、放置失败和通信失败。
- [ ] 根据基线结果决定改善外部视角、补充示范及保留验证任务。
## 更新记录
- 2026-09-08:3080 基础环境、视频与合成 ACT 流程验收。
- 2026-09-09:主从臂调试、wrist_roll 对齐、双摄像头连通与三个遥操作脚本。
- 2026-09-10:中文录制阶段横幅、5 条示范检查、驱动恢复、真实数据 ACT 短训练及正式训练启动。