go1_sft_go2 / README.md
xianglarry's picture
Upload folder using huggingface_hub
0c95a27 verified
|
Raw
History Blame Contribute Delete
4.67 kB
---
license: other
language:
- en
- zh
library_name: transformers
pipeline_tag: robotics
tags:
- robotics
- vision-language-action
- vla
- go-1
- agibot-world
- imitation-learning
- dual-arm
- suction
---
# go1_sft_go2 — G2 双臂吸盘搬铝板 VLA (GO-1 / AgiBot-World)
GO-1 架构的 Vision-Language-Action 策略,用于智元 **G2 双臂人形**在料箱中用**吸盘抓取铝板并抬出**。本仓库含一个 SFT checkpoint(`checkpoint_22000/`)+ G2 真机部署/测试代码(`deploy/`)。
## 仓库结构
```
go1_sft_go2/
├── README.md # 本卡片
├── .gitattributes # LFS: *.safetensors/*.model/*.npy/...
├── .gitignore
├── checkpoint_22000/ # ★ 模型 (step 22000, 推理必需文件)
│ ├── model-0000{1,2}-of-00002.safetensors # 权重 ~5.6GB (LFS)
│ ├── model.safetensors.index.json
│ ├── config.json
│ ├── dataset_stats.json # 归一化必需
│ └── added_tokens / special_tokens_map / tokenizer_config / tokenizer.model / tokenization_internlm2.py
└── deploy/ # G2 真机部署+测试代码 (入口 INDEX.md / COMMANDS_v2.md)
└── go1_env.py # 路径配置: GO1_* 环境变量 + 仓库相对默认值
```
加载时 `from_pretrained` 指向 **`checkpoint_22000/`**。
## 模型概览
- **架构**:`go1`(model_type);InternLM2 主干(hidden 2048)+ action expert(hidden 1024,输出 22 维)
- **输入**:3 路相机(head / hand_l / hand_r)+ 22 维本体 state + 文本指令
- **输出**:动作 chunk,shape `(1, 30, 22)` —— 未来 30 帧 × 22 维,控制频率 30Hz
- **规模**:~2.82B 参数,bf16,推理约 11.5GB 显存
## 22 维 state/action 布局(lerobot 序,固定)
```
[0:7] 左臂 | [7:14] 右臂 | [14] 左吸盘 | [15] 右吸盘 | [16:21] 下半身 | [21] 头 pitch
```
来源 profile:`GO2_SUCTION_EXTRACT_V1`。qpos ↔ lerobot:左臂=qpos[8:15]、右臂=qpos[15:22]、下半身=qpos[0:5]、头 pitch=qpos[7]。
## 任务 prompt
> What action should the robot take to reach into the bin, attach both suction cups to the part and lift it out level?
## 归一化
推理前 state 用 `checkpoint_22000/dataset_stats.json` 的 mean/std 标准化;action 输出反标准化(×std + mean)。
## 配置(路径可移植)
所有宿主机/机器人相关路径都由 **[`deploy/go1_env.py`](deploy/go1_env.py)** 统一解析:**默认值按本仓库目录结构推导**,用环境变量即可覆盖,无需改代码。
| 环境变量 | 含义 | 默认值 |
|---|---|---|
| `GO1_CKPT` | 模型 checkpoint 目录 | `<repo>/checkpoint_22000` |
| `GO1_WORKSPACE` | GDK / go2_data_recorder 安装位置 | `/home/agi/workspace` |
| `GO1_AGIBOT_WORLD` | AgiBot-World 模型代码 | `/data/agi/AgiBot-World` |
| `GO1_POSE_FILE` | 初始位姿 `.npy` | `<repo>/deploy/saved_init_pose.npy` |
| `GO1_OUT_DIR` | `grab_*.jpg` 等输出目录 | `<repo>/deploy` |
- 默认即指向仓库自带的 `checkpoint_22000/`,clone 后**离线脚本**(`openloop_verify` / `check_model_load`)配好 `GO1_AGIBOT_WORLD` 后可直接跑。
- **真机脚本**(`infer_*` / `pose_io` / `head_pitch_test` 等)还需机器人侧 GDK 运行时:先 `source $GO1_WORKSPACE/env.sh` 再运行。
- 示例:
```bash
# 机器人上想用原 checkpoint, 覆盖默认即可:
export GO1_CKPT=/data/agi/checkpoint_0617
source /home/agi/workspace/env.sh
python deploy/infer_stage_a_v2_0617.py # 不设 GO1_CKPT 时默认从 <repo>/checkpoint_22000 加载
```
## 部署(G2 真机)
完整流程/命令见 **[`deploy/COMMANDS_v2.md`](deploy/COMMANDS_v2.md)**(入口索引 `deploy/INDEX.md`)。要点:
- 推理用 venv `go1_torch`;state 按 lerobot 序拼;臂下发用 `move_arm_joint_servo(group=2)`;100Hz 平滑。
- **起手必需**:①头预下俯 ~0.50(让头镜头看到料箱,否则视觉 OOD 卡 home)②开腰(躯干前倾带动伸手,勿用 `--no-waist`)。
- 当前能做"弯腰探入 → 双臂伸到铝板正上方";**吸盘 actuation(EVS08)部署侧未接、模型自主闭环也未触发吸附**,故"吸附+抬出"未在真机验证。
## 数据来源
AgiBot-World 风格示教,59 episodes。`dataset_stats.json` 的归一化量由各 episode 的逐条统计(`episodes_stats.jsonl`)聚合生成(训练产物 episodes/trainer_state 未随本仓库分发)。
## 使用与许可
内部研发用私有模型。真机控制脚本会驱动双臂人形,运行前务必人守急停、按 `deploy/COMMANDS_v2.md` 的权限规则操作。