--- 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 目录 | `/checkpoint_22000` | | `GO1_WORKSPACE` | GDK / go2_data_recorder 安装位置 | `/home/agi/workspace` | | `GO1_AGIBOT_WORLD` | AgiBot-World 模型代码 | `/data/agi/AgiBot-World` | | `GO1_POSE_FILE` | 初始位姿 `.npy` | `/deploy/saved_init_pose.npy` | | `GO1_OUT_DIR` | `grab_*.jpg` 等输出目录 | `/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 时默认从 /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` 的权限规则操作。