Files
lerobot_learn/PLAN.md
T

223 lines
15 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.
# 方案:LeRobot 双臂移动 VLA 机器人(可自行训练)
> 本文件是项目的「单一事实来源」(single source of truth)。所有决策、预算、阶段、命令、待办都以此为准,随进展更新。
> 最后更新:_P0 定稿(双 GPU 机版:3080 主家 + 3090 训练)_
---
## 0. 目标(一句话)
复刻 LeRobot 工作流,造一台**会走(LeKiwi 底盘)+ 双手协作(2×SO-101)+ 语言/视觉驱动(VLA)+ 能自己采集数据并训练**的移动操作机器人。
**核心思路**:不重写 LeRobot,而是**站在 LeRobot 框架上组装这台特定机器人**;架构上采用「**瘦边 + 厚芯**」——机器人只带一块便宜的驱动板(RPi 5)做实时控制,**推理放 3080 主家(挨着机器人)、训练放 3090(24GB)**,走局域网。
**协作模型**(详见 [env/machines.md](env/machines.md)):
- **3080 机(10GB · 本地 Ubuntu · 机器人旁)= 主家**:开发 + 臂(USB) + 遥操/采数 + **推理部署** + P4 policy server。
- **3090 机(24GB · 远程 SSH · 同局域网)= 训练专用**:只跑训练;数据集/模型经 HF Hub(或 rsync)流转。
- **本 Windows 机 = 写字台**:我(agent)写代码/配置/文档 → **你 push 到 git 库** → 两台 GPU 机 clone/pull。
- 我无外网 → **我产出,你在两台机器上跑并粘回输出,我迭代**。
---
## 1. 决策总表(已拍板)
| 项 | 决策 | 备注 |
|---|---|---|
| 框架 | **LeRobot**(HF 官方,Py3.12, Transformers v5;最新 0.6.0) | 官方旗舰生态;装时取最新 stable |
| 机械臂 | **4× SO-101**(2 leader + 2 follower) | 双臂遥操 = 2 主 + 2 从;6DOF + 夹爪;自印有 3D 打印机 |
| 底盘 | **LeKiwi**(三轮全向,Feetech STS3215,Seeed 12V 版) | SO-101 专用移动底盘,LeRobot 原生 `.[lekiwi]` |
| 上机驱动板 | **RPi 5 (8GB)** + 有源 USB Hub | 只管实时控制/采图/执行/fail-safe,不做 ML |
| 主家(开发+推理) | **3080 机(本地 Ubuntu · 10GB · 机器人旁)** | 臂 USB 直插;遥操/采数/推理部署;P4 policy server 在它上面 |
| 训练专用 | **3090 机(远程 SSH · 24GB)** | 只跑 lerobot-train;与 3080 同局域网(rsync 直传 / π0 代推) |
| 富余算力 | **AWU408 双 DRIVE Orin**(空闲,非关键路径) | 3090 忙训练时可顶推理 / 或做固定台 |
| 相机 | **3× USB 相机**(1 前置全局 + 2 腕部) | USB 最通用,适配 RPi5/3080 |
| VLA 主力 | **SmolVLA (4.5亿)** | 单卡可全量训、10GB 卡可推理、异步分块天生适合分布式 |
| VLA 验证/起步 | **ACT**(小、快) | P1 先证明"能学会" |
| VLA 上限 | **π0-FAST**(自回归,~3B,LoRA 微调) | 算力宽裕后的 SOTA |
| 架构演进 | P1/P2 **单机**(3080 直连臂) → P4 **拆分**(RPi5↔局域网↔3080) | 先最快出结果,再长成分布式 |
| 预算 | **~¥6500-8000**(自印可更低) | 落在 ¥5000–10000 内(详见 [hw/bom.md](hw/bom.md)) |
---
## 2. 硬件 BOM(采购清单)
> 完整链接/店铺/状态见 **[hw/bom.md](hw/bom.md)**。这里给概览。
| # | 部件 | 数量 | 参考价 (¥) | 小计 | 说明 |
|---|---|---|---|---|---|
| 1 | SO-ARM101(含 3D 打印件+舵机+驱动板+电源) | 4 | ~879 | **~3500** | 2L+2F;淘宝现货树脂版最省;自印可降 |
| 2 | LeKiwi 底盘(12V,Seeed 含打印件+电池) | 1 | ~1800 | **~1800** | 或 base-only 12V ~¥1501 自印结构件 |
| 3 | RPi 5 (8GB) + 27W 电源 + 有源 USB Hub + 存储 | 1 套 | ~800 | **~800** | 上机驱动板 |
| 4 | USB 相机(1 前置 + 2 腕部) | 3 | ~130 | **~400** | 1080P 免驱;或 ¥138 双相机套件 |
| 5 | 线束/夹具/耗材/电源/网线 等杂项 | — | — | **~600** | |
| | **合计** | | | **~¥7100-8000** | P1 起步(2臂)~¥3300 |
**已拥有(0 成本)**:3080 机(10GB·主家)、3090 机(24GB·训练)、AWU408 双 Orin、3D 打印机、本 Windows 开发机。
**关键提醒**:
- SO-101 **打印件**:官方 STL 可 FDM(PLA) 或光固化;Leader 臂用**轻负载齿轮**才捏得动;**电机 ID 按顺序烧录**。
- 4 条臂 = **2 leader(遥操主手)+ 2 follower(执行从手)**。P1 先买/用 2 条(1L+1F),P2 再补 2 条。
- LeKiwi 顶板 **M3 螺孔**直接固定 SO-101 底座;12V 底盘自带 12V→5V 降压给 5V 臂。
---
## 3. 系统架构
### 3.1 目标态(P4 整机自主)——瘦边 + 厚芯
```
算力层(拆两台,同一局域网)
┌─────────────────────────────────────────────┐
│ 3080(10GB)=推理芯 · 挨着机器人: │
│ · 遥操(P1/P2:接 leader 臂)/ 采数 │
│ · policy server(obs→action chunk) │
│ · 数据集管理 / HF Hub 上传下载 │
│ 3090(24GB)=训练芯: │
│ · SmolVLA 全量 / π0-FAST LoRA │
│ (数据集·模型经 HF Hub / rsync 两机流转) │
└────────────────────────┬────────────────────┘
│ 局域网 (1Gbps 有线最稳)
上行: 3相机 + 本体状态(低频~10Hz)
下行: 动作chunk(每 200~500ms 一批 K 步)
│
┌────────────────────────┴────────────────────┐
│ 移动机器人 = LeKiwi 底盘 + 2×SO-101(follower) │
│ RPi 5 驱动板: │
│ · USB: 左/右臂舵机 + 3 底盘轮 (实时 20~30Hz) │
│ · USB: 3 相机 (采集 → 推给算力层) │
│ · 执行: 收 chunk → 实时插值下发 │
│ · 安全: 断链 watchdog → 底盘停 / 臂缓回中位 │
└─────────────────────────────────────────────┘
```
**为什么这样**:VLA 每 200~500ms 只算"一小批"未来动作(异步分块),网络只传"几张图 + 一小批动作",带宽占用极小;实时伺服与安全 100% 留在机器人本地(RPi 5),断网即停。训练/推理拆两台:训练吃显存只有 3090 干得动,推理不吃显存 3080 足够,还挨着机器人。
### 3.2 起步态(P1/P2)——单机,最快闭环
P1/P2 底盘还没上、臂在固定夹/桌上时,**3080 主家直接用 USB 接臂**(1L+1F / 4 条),单机跑 遥操→采集→推理;**训练丢给同局域网的 3090**(数据集经 HF Hub / rsync 过去,模型拉回来),最快打通闭环。等 P3/P4 上 LeKiwi 移动,才切到 3.1 的分布式。
---
## 4. VLA 模型路线(训练:3090 24GB · 推理:3080 10GB)
| 阶段 | 模型 | 训练(3090 · 24GB) | 推理显存(3080 · 10GB) | 作用 |
|---|---|---|---|---|
| P1 起步 | **ACT** | 全量,几分钟~数十分钟 | **<1GB ✅** | 最快证明"采集→训练→会动"闭环 |
| P1→P4 主力 | **SmolVLA** | 全量微调(24GB 舒适) | **fp16 ~2GB ✅** | 语言+视觉驱动,异步推理,部署主力 |
| 上限/进阶 | **π0-FAST** | LoRA 微调(24GB 为此而生) | **~7GB ⚠️ 紧张** | SOTA 泛化,算力富余后上 |
- 数据统一走 **HF Hub**(`lerobot-record` 直接 push);两台 GPU 机同局域网,大数据集/模型也可 rsync 直传。
- SmolVLA 的 **Real-Time Chunking / 异步推理** 正是为"算力层算、机器人执行"这种拆分设计的,天然契合 3.1。
- π0-FAST 推理在 10GB 上紧张的 3 条后路:**4-bit 量化** / batch=1+bf16 硬试 / **3090 同局域网代推**。
---
## 5. 分阶段实施计划
> 假设业余时间(每周若干小时)。**采购前置**:3D 打印件/套件到货周期可能 1~6 周,P0 期间就下单。
> 每阶段有明确「验收标准」,达到再进下一阶段。
### P0 · 环境 & 工具链(~1~2 周,含下单等货)
**目标**:软件环境全通 + git 库建好 + 硬件下单。
- [x] **建 git 库** ✅ `git.hyonglin.top/ylhan/lerobot_learn`(已 init+commit 待 push;匿名可读=GPU 机 clone 免密)
- [ ] **两台 GPU 机装环境**(同一脚本 [env/setup_lerobot.sh](env/setup_lerobot.sh):自动探测→国内镜像自适应→Py3.12 venv→clone LeRobot→装 `feetech,lekiwi,dataset,smolvla,pi0`→验证 GPU/CLI):**先 3080 主家**(P1 在它上面跑),**再 3090**(训练用);各把 [1]~[7] 输出粘回
- [ ] **HF 登录**:两台机器都 `huggingface-cli login`(HF_ENDPOINT=hf-mirror)
- [ ] **固定官方 CLI 命令**(find-port / find-cameras / calibrate / teleoperate / record / train / eval|rollout 的确切 flag,以装好后的 `--help` 实测为准)
- [ ] **下单硬件**([hw/bom.md](hw/bom.md),**先 2 条 SO-ARM101 起步**)
- [ ] (可选)验证 AWU408 能否跑 Ubuntu+CUDA+PyTorch(只影响"富余算力",不阻塞主线)
**验收**:两台 GPU 机 `torch.cuda.is_available()==True`;LeRobot CLI 全 OK;git 库建好且两机已 clone;硬件已下单。
### P1 · 单臂 SO-101 闭环(~2~4 周)⭐核心
**目标**:1 leader + 1 follower,把 **采集→训练→部署** 整条闭环跑通。
- [ ] 组装+校准 1 follower + 1 leader(`lerobot-calibrate`),USB 直连 3080 主家
- [ ] 接 1 相机;遥操作(`lerobot-teleoperate`)验证跟手
- [ ] 采集第一个数据集(简单任务:抓方块 / 放杯子 / 按按钮),`lerobot-record` → push HF Hub
- [ ] 3090 上先训 **ACT** 快速验证能学 → 再训 **SmolVLA**
- [ ] 推理部署(3080 单机直连 follower),手臂独立完成任务
**验收**:**follower 独立完成一个抓取/放置任务**(无人工逐帧干预);能稳定记录新 episode 并增量再训。
### P2 · 双臂 BiSO-101(~2~4 周)
**目标**:双手协作。
- [ ] 加装 2 条 leader + 1 条 follower(凑 2L+2F),接 3 相机(1 前 + 2 腕)
- [ ] 上 **bimanual 驱动**(`left_*`/`right_*` 前缀;参考 Maker-Mods / Xbotics 的 BiSO-101,移植进 LeRobot)
- [ ] 采集双臂数据(双手递物 / 协同开盒 / 双手抓取)
- [ ] 3090 训双臂 SmolVLA,3080 测双手协作任务
**验收**:双臂协同完成一个需要两手配合的任务。
### P3 · 底盘 LeKiwi(~2~3 周)
**目标**:会走 + 底盘与臂联动。
- [ ] 组装 LeKiwi + 校准(3 轮 STS3215)
- [ ] 上 **LeKiwi 底盘驱动**(LeRobot 原生 `.[lekiwi]` / 或 lerobot-ros 桥),`cmd_vel`/`odom` 跑通
- [ ] 底盘 + **单臂** 联动:边走边摆臂(先不拆网,3080 直连)
- [ ] (可选)雷达 + SLAM / nav2
**验收**:机器人能"边走边完成一个臂任务"。
### P4 · 整机整合(分布式落地)(~3~6 周)
**目标**:把 3.1 的「瘦边+厚芯」跑通,整机自主。
- [ ] 双臂固定到 LeKiwi 顶板,统一 **state/action 空间**(左/右臂关节 + 夹爪 + 底盘速度)
- [ ] 写 **policy server**(**3080 主家**上,FastAPI/GRPC:obs→action chunk;训练仍归 3090)+ **thin client**(RPi 5:推图+收 chunk+实时执行+**fail-safe watchdog**)
- [ ] RPi 5 上机(USB 接 2 臂+3 轮+3 相机),以太网接 3080
- [ ] 采集"整机"遥操数据(人在 leader 处,臂+底盘在 RPi5 处,走网),训一个**同时控制双臂+底盘**的 VLA
- [ ] 端到端任务:**走到桌边 → 双手抓取 → 移动到目标点放下**
**验收**:**无人干预**下,移动机器人完成"走+双手抓取+移动放置"的端到端任务;断网能安全停机。
### P5 · 打磨 / 规模化(持续)
- [ ] 多任务、多数据集、课程式学习
- [ ] 异步推理提速、动作 chunk 调参、fail-safe 加固
- [ ] (可选)sim2real(IsaacLab-Arena / EnvHub)、力控/触觉扩展、π0-FAST 上限冲刺
---
## 6. 目录结构约定
```
(本 Windows 写字台 & 两台 GPU 机共用同一仓库,GPU 机上放 ~/robot/)
robot/
├─ PLAN.md # 本方案(单一事实来源)
├─ README.md # 仓库导览
├─ hw/
│ └─ bom.md # 采购清单/链接/到货状态
├─ env/
│ ├─ machines.md # 机器拓扑 + 协作模型
│ └─ setup_lerobot.sh # GPU 机一键装环境(3080/3090 都跑)
├─ lerobot/ # LeRobot 仓库 clone(各 GPU 机自己 clone,不入库)
├─ robots/
│ └─ bi_so101_lekiwi/ # 本机器人的 LeRobot robot 定义(双臂+底盘驱动,P2/P3)
├─ configs/
│ ├─ teleop/ record/ train/ eval/ # 各场景的 .toml/.yaml 配置
├─ server/ # policy server(3080 主家上,P4)
├─ client/ # thin client + 执行 + fail-safe(RPi 5 上,P4)
└─ docs/ # 组装/校准/CLI参考/踩坑笔记
```
> 说明:**3080 主家与 3090 训练机都 clone 本仓库 + LeRobot**(目录统一 `~/robot/`);本 Windows `D:\robot\lerobot` 是源头,你 push 到 git 库后两机 pull。**数据集/模型不入 git**(走 HF Hub / rsync)。
---
## 7. 风险 & 待验证项
| # | 风险/未知 | 影响 | 对策 |
|---|---|---|---|
| 1 | **两台 GPU 机都不在我沙箱里(无外网)** | 我无法直接跑命令 | **协作**:我写 → 你 push git → 3080/3090 跑 → 粘回输出(见 machines.md) |
| 2 | **CLI flag 随版本变**(0.5→0.6 有差异) | 照旧文档会报错 | 装好后以 `--help` 实测为准(记到 docs/cli_reference.md) |
| 3 | **双臂驱动非官方内置**(靠社区 BiSO-101 移植) | P2 要多写/改驱动 | 参考 Maker-Mods/Xbotics,必要时自写 `bi_so101_follower` |
| 4 | **LeKiwi 驱动**:LeRobot 原生 `.[lekiwi]` vs lerobot-ros 桥 | P3 集成方式 | 优先 LeRobot 原生 lekiwi;不行再上 ROS2 桥 |
| 5 | **局域网可靠性**(WiFi 抖动 → 臂卡顿) | P4 体验/安全 | 优先**有线 1G**;client 带 watchdog 断链即停 |
| 6 | **AWU408 能否跑 Ubuntu+PyTorch**(常出厂 QNX/DRIVE OS) | 只影响"富余算力" | 非阻塞;跑不了就不管它 |
| 7 | **硬件到货周期**(3D 打印件 1~6 周) | 拖慢 P1 起步 | P0 立即下单,等货期间把软件全搭好 |
| 8 | **RPi 5 USB 口不够**(2臂+3轮+3相机≈6-8 设备) | 上机接线 | 用**有源 USB 3.0 Hub**;相机降到 2 个 USB3 口 |
| 9 | **GPU 机网络可达性**(能否直连 pip/HF/github) | 装环境速度/成败 | `setup_lerobot.sh` 自动探测并切国内镜像 |
| 10 | **π0-FAST 推理 ~7GB,3080 10GB 紧张** | P5 上限模型部署 | 4-bit 量化 / batch=1+bf16 / 3090 同局域网代推 |
---
## 8. 下一步(P0 第一步 · 现在就能做)
1. **push 完成建库**:仓库已建好并 commit(`git.hyonglin.top/ylhan/lerobot_learn`),你在本机终端跑一次 `git push -u origin master`(输入 Gitea 账号密码,之后自动记住)。
2. **两台 GPU 机装环境**:clone 后在 **3080 主家** 与 **3090** 各跑一遍 `env/setup_lerobot.sh`,各把 **[1]~[7] 完整输出粘回**。
3. **下单**:[hw/bom.md](hw/bom.md) 先买 **2 条 SO-ARM101(1L+1F)** 起步。
4. **HF 登录**:两台机器都 `huggingface-cli login`(脚本已配 hf-mirror)。
> **协作**:我(本机)写 → 你 push git → 3080/3090 跑 → 粘回输出 → 我迭代。
> 装环境输出回来后,我就铺 **P1 的具体命令/配置**(第一条臂的 find-port / 校准 / 遥操 / 采集)。