feat: add SO101 recording and ACT workflow with progress tracking
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# ACT:积木放入白色盒子
|
||||
|
||||
任务:`Pick up the block and place it in the white box.`
|
||||
|
||||
固定盒子和两台摄像头;起初只在小区域改变积木位置。腕部 `wrist` 使用 Integrated Webcam(30 FPS),外部 `front` 使用 CAM1(25 FPS)。数据与控制按 25 FPS 记录。脚本自动激活本机环境、加载 zihao 主从臂配置,使用固定 USB 路径,不自动上传数据或模型。
|
||||
|
||||
## 先录 5 条
|
||||
|
||||
在本机交互终端运行(先退出其他遥操作进程):
|
||||
|
||||
```bash
|
||||
bash robots/record_block_white_box.sh
|
||||
```
|
||||
|
||||
脚本先等待按 Enter,随后连接设备并自动开始。绿色中文横幅表示录制,黄色表示复位或重录;请在运行脚本的终端操作方向键。每条最多 30 秒,复位阶段默认 30 秒;复位期间仍会跟随主臂。操作键:
|
||||
|
||||
- 右方向键:结束当前阶段。录制时按表示结束本条;复位时按表示准备好进入下一阶段。
|
||||
- 左方向键:标记当前条重录;按屏幕提示完成复位后重新录制。
|
||||
- Esc:结束采集并走保存流程,当前未标记重录的片段也可能保存;检查是否混入不完整示范。
|
||||
|
||||
执行完整的靠近、抓取、抬起、放入盒子、松开、退开,再结束本条。复位时把积木取出,主从臂回到相近起始姿态。录完等待程序编码、保存完再关闭终端。
|
||||
|
||||
数据保存在 `data/block_white_box_v1`。先检查 5 条的画面清晰度、动作完整性、时间戳和帧率,再追加示范:
|
||||
|
||||
```bash
|
||||
# 追加 45 条,num_episodes 表示本次新增数量
|
||||
RESUME=true NUM_EPISODES=45 bash robots/record_block_white_box.sh
|
||||
```
|
||||
|
||||
50 条仅作为初始目标,不保证成功率。原数据存在时脚本默认拒绝覆盖。新建数据集须同时指定 `DATASET_ROOT` 和 `DATASET_ID`;训练时保持一致。
|
||||
|
||||
## ACT 训练(本机 3080)
|
||||
|
||||
数据检查通过后,先做短训练验证:
|
||||
|
||||
```bash
|
||||
STEPS=200 BATCH_SIZE=4 bash robots/train_act_block_white_box.sh
|
||||
```
|
||||
|
||||
短训练仅验证链路,不用于自主抓取。正式训练起步:
|
||||
|
||||
```bash
|
||||
bash robots/train_act_block_white_box.sh
|
||||
```
|
||||
|
||||
默认 batch_size=8、20000 步,每 2000 步保存;显存不足可改 `BATCH_SIZE=4`。每次使用独立的 `outputs/train/act_block_white_box_<时间>` 目录。首次加载视觉骨干可能需要下载权重。本次训练的实测速度、显存和输出路径见进度追踪。
|
||||
|
||||
## 真机评测
|
||||
|
||||
完成正式训练并确认检查点后,在相同相机布局与校准下执行:
|
||||
|
||||
```bash
|
||||
MODEL_DIR=/绝对路径/checkpoints/last/pretrained_model \
|
||||
bash robots/rollout_act_block_white_box.sh
|
||||
```
|
||||
|
||||
默认自主运行 30 秒、25 FPS,按 Ctrl+C 停止。这个阶段会由模型控制从臂,不需要操纵主臂。先单次观察,再按 `docs/evaluation.md` 记录多次成功率。初次试跑应留出活动空间,并能及时断电。
|
||||
|
||||
所有启动器支持 `DRY_RUN=1` 打印命令,不连接硬件;可追加 LeRobot 参数。2026-09-10 已录制并检查 5 条示范,短训练及模型重载通过,正式训练进行中。当前运行目录、服务及下一步见 [进度追踪](progress.md)。
|
||||
+13
-2
@@ -1,7 +1,7 @@
|
||||
# SO-101 CLI 参考(LeRobot 0.6.1)
|
||||
|
||||
> 按 v0.6.1 官方文档核对;尚未在目标 GPU/真机上执行。安装报告包含 CLI 帮助,实际差异必须回填。
|
||||
> 遥操、采集和 rollout 在 3080;训练在 3090。电机设置/校准会写硬件或校准数据,先按装配文档确认接线。
|
||||
> 通用命令模板;本机实际已验证的任务流程见 [ACT 抓放指南](act_block_white_box.md),执行状态见 [进度追踪](progress.md)。
|
||||
> 当前遥操、采集和 ACT 基线训练在 3080;3090 是后续训练机。电机设置/校准会写硬件或校准数据,先按装配文档确认接线。
|
||||
|
||||
## 0. 环境与变量
|
||||
|
||||
@@ -44,6 +44,17 @@ lerobot-teleoperate \
|
||||
|
||||
先清空工作区,低速验证限位与停止手段,再采数。数据采集中的控制键以当前 CLI 提示为准,不沿用旧版“空格开始、回车保存”的说法。
|
||||
|
||||
### 首次小幅运动
|
||||
|
||||
从臂完成校准后,可先让腕部旋转关节移动 3 度并回到起点:
|
||||
|
||||
```bash
|
||||
source env/activate_lerobot.sh
|
||||
python robots/test_follower_motion.py --robot-id=zihao_follower_arm
|
||||
```
|
||||
|
||||
脚本要求本地校准文件存在且串口可读写;测试幅度最大允许 5 度。默认测试 `wrist_roll`,运行前需要输入 `MOVE`。脚本直接使用电机总线,只使能所选关节,并在使能前将目标寄存器设为当前位置;其余关节保持无扭矩。机械臂应放在有支撑的姿态,退出时会释放所选关节的扭矩。
|
||||
|
||||
## 3. 采集(3080)
|
||||
|
||||
```bash
|
||||
|
||||
@@ -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 短训练及正式训练启动。
|
||||
Reference in New Issue
Block a user