Instructions to use EmbodyX/go1_sft_go2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use EmbodyX/go1_sft_go2 with Transformers:
# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("EmbodyX/go1_sft_go2", dtype="auto") - Notebooks
- Google Colab
- Kaggle
checkpoint_0617(G2 22维吸盘搬铝板 GO-1 模型)真机测试套件
本目录汇总在 G2 机器人上测试 checkpoint_0617(22 维吸盘搬铝板 VLA 模型)的全部脚本、命令与排障结论。
- 机器人:智元 G2(agibot-g2),
agi@172.16.64.220,30Hz,3 路彩色相机 + 22 维 qpos/action - 任务 prompt:
reach into the bin, attach both suction cups to the part and lift it out level - 路径配置由
go1_env.py解析(GO1_*环境变量 + 仓库相对默认;见 ../README.md 配置章节) - 推理引擎:带 torch+gdk 的 venv(机器人上
/data/agi/venvs/go1_torch/bin/python),模型代码$GO1_AGIBOT_WORLD
运行命令以 COMMANDS_v2.md 为准(实测验证版)。本文档 §4 命令、§5「起步卡死」结论较早——起步卡死后来已解决:头预下俯 ~0.50(看到料箱)+ 开腰(躯干前倾带动伸手)后当前 checkpoint 能完成"弯腰探入→双臂伸到铝板正上方",详见 COMMANDS_v2.md。
0. 环境(机器人上每个终端先跑)
ssh agi@172.16.64.220 # 真机脚本在机器人上跑; 离线脚本任意机器均可
cd <path-to>/go1_sft_go2 # 仓库根, 下面以 deploy/ 为脚本目录 (D=deploy)
source "${GO1_WORKSPACE:-/home/agi/workspace}/env.sh" # 机器人侧 GDK 运行时
export TMPDIR=/data/agi/tmp # 机器人临时目录
export GO1_CKPT=${GO1_CKPT:-/data/agi/checkpoint_0617} # 可选; 默认 <repo>/checkpoint_22000
PY=/data/agi/venvs/go1_torch/bin/python ; D=deploy
路径由
go1_env.py解析(GO1_*环境变量 + 仓库相对默认)。
1. ⭐ 22 维 state/action 正确布局(lerobot 序,FIXED)
由转换器 profile 写死:
/home/agi/workspace/go2_data_recorder/offline/profiles/go1.py的GO2_SUCTION_EXTRACT_V1
[0:7] 左臂 (idx21-27)
[7:14] 右臂 (idx61-67)
[14] 左吸盘 (state=是否吸住 / action=指令位)
[15] 右吸盘
[16:21] 下半身 (idx01-05: 踝/膝/髋/腰roll/腰yaw)
[21] 头pitch (仅 idx13)
与原始 qpos 序(DEFAULT_JOINT_NAMES_Go2 = 身体5+头3+左臂7+右臂7)完全不同! 这是本项目最关键的坑。
qpos ↔ lerobot 映射:
| 模型维 | 机器人 qpos |
|---|---|
| [0:7] 左臂 | qpos[8:15] |
| [7:14] 右臂 | qpos[15:22] |
| [14],[15] 吸盘 | EVS08 holding / 指令 |
| [16:21] 下半身 | qpos[0:5] |
| [21] 头pitch | qpos[7] (idx13) |
2. 三大根因(全部已解决)
| 问题 | 根因 | 解法 |
|---|---|---|
| 手臂跳变→整机断电重启 | 臂用错 API(joint_servo_control,顺序错位即跳变) |
改用 **move_arm_joint_servo(positions14, period, control_group=2)**(demo 验证、顺序正确) |
| 运动"一顿一顿" | 30Hz + control_period=0.04(与发送间隔不匹配) | 100Hz + control_period=0.01(= 发送周期)+ 细步长(slew 按 rad/s) |
| 乱动 / action[0] 离当前 ~3rad | 关节顺序错位:按 qpos 序喂 state、解 action,模型期望 lerobot 序 | 按上表重排 state 输入 + action 解码(v2/v3 已修) |
修复验证(三重):
- 离线
openloop_verify:喂正确序 state → pred≈gt(误差 0.02~0.12)、action[0]≈当前(0.029) - 真机只读
infer_stage_a_v2:|action[0]-state| 从 2.99 → 0.72 - 真机闭环
infer_stage_c_v3:home 位 action[0] 仅 0.07,平滑无崩溃
3. 脚本清单
✅ 当前正确版(用这些)
| 脚本 | 用途 | 动机器人 |
|---|---|---|
openloop_verify_0617.py |
离线 pred vs 训练真值(验证推理正确) | 否 |
infer_stage_a_v2_0617.py |
真机只读:抓相机+关节→推理→打印(正确序) | 否 |
infer_stage_c_v3_0617.py |
闭环主脚本(正确 IO + 100Hz 平滑 + 头pitch clamp + 吸盘仅记录) | 是 |
pose_io_0617.py |
位姿快照 --save / 恢复 --restore(默认位姿 saved_init_pose.npy) |
restore 时是 |
go_home_servo_0617.py |
平滑驱动到 home/指定位姿(--target-npy) |
是 |
verify_arm_order_0617.py |
臂关节顺序验证门(发当前值零运动) | 是(微) |
smallstep_test_0617.py |
单关节小步跟踪/顺序测试 | 是(微) |
smooth_all_test_0617.py |
逐关节平滑测试(臂14+头3+腰5) | 是 |
squat_test_0617.py |
下蹲/起立协调平滑测试 | 是 |
verify_headwaist_0617.py |
头/腰发当前值门测试 | 是(微) |
check_model_load_0617.py |
1 级纯加载冒烟(注意:其 state 维度旧,仅测加载) | 否 |
数据文件
saved_init_pose.npy— 默认恢复位姿(当前 home:身体站立+双臂对称收拢)kick_qpos.npy— 演示 frame450 partway 伸出位("轻推启动"用)
❌ 已废弃(错序/旧逻辑)
旧版 infer_stage_a_0617 / infer_stage_c_0617 / infer_stage_c_v2_0617 / ramp_to_start_0617 / openloop_check_0617 / go_to_init_pose_0617 / go_head_init_0617 已从本仓库移除(错序/旧逻辑,勿用)。
4. 完整测试流程(命令)
规范流程见 COMMANDS_v2.md;以下为速览(路径用
$D=deploy,环境见 §0)。
# ① 离线验证推理正确(不动机器人)
$PY $D/openloop_verify_0617.py 2>/dev/null | grep -E "frame|p0|pred|gt"
# ② 真机只读(确认 action[0]≈当前)
$PY $D/infer_stage_a_v2_0617.py 2>/dev/null | grep -E "iter|action\[0\]-state|suction"
# ③ 自检臂控制权(腕5°来回; moved~5°=可控, moved~0=遥操占着需释放)
$PY $D/smallstep_test_0617.py --live --joint 6 --delta-deg 5 2>/dev/null | grep -E "moved|verdict"
# ④ 复位到 init + 头下俯看料箱(⚠️动机器人)
$PY $D/pose_io_0617.py --restore --live --speed 0.4
$PY $D/head_pitch_test_0617.py --live --pitch 0.50
# ⑤ 闭环(⚠️动机器人): 开腰 + 头冻结在下俯【关键! 勿加 --no-waist, 否则不起手】
LOG=run_$(date +%H%M%S).log
$PY $D/infer_stage_c_v3_0617.py --live --no-head \
--max-chunks 30 --exec-frames 30 --max-slew 0.3 --max-time-s 120 > $LOG 2>&1
grep -E "^ chunk|done|release" $LOG | tail -34
# ⑥ 快照当前位姿为默认恢复位(只读)
$PY $D/pose_io_0617.py --save
infer_stage_c_v3 参数
| 参数 | 默认 | 说明 |
|---|---|---|
--live |
关 | 加上才动;不加=dry-run |
--no-waist / --no-head |
关 | 冻结腰/头 |
--max-slew |
0.5 | rad/s(100Hz 平滑) |
--exec-frames |
15 | 每 chunk 下发帧数(1~30) |
--max-chunks |
3 | chunk 数 |
--max-time-s |
30 | 总时长上限 |
--sanity-delta |
1.5 | 首步关节delta>此值(rad)才拒(垃圾兜底) |
5. 闭环"起步卡死"——✅ 已解决
结论更新(晚于本节原文):起步卡死的真因是两个可控阻塞,不是当时推测的"模仿学习起步停顿/需更晚checkpoint":① 头 pitch=0 严重 OOD(头镜头看墙、料箱被切在画面底边)②
--no-waist冻死了模型最想动的腰(躯干前倾带动伸手)。头预下俯 ~0.50 + 开腰后,当前 checkpoint 即能完成"弯腰探入→双臂伸到铝板正上方"。详见 COMMANDS_v2.md。下方原始分析保留作记录。
修对一切后,checkpoint-22000 闭环从 home 静止启动会卡住:每个 chunk 都预测≈home(手臂不伸出、只有头 pitch 小幅摆),不主动发起抓取。
- 原因:模仿学习"起步停顿"——演示每段开头在 home 停留 ~360 帧(12s)才由人发起,模型学成"看到 home→停",闭环自我维持成不动点。非推理/执行 bug(openloop 证明喂 mid-task 状态时模型会正确继续动作)。
- 注意:修复前"双臂能张开"是顺序错位制造的垃圾大动作假象(还引发过流重启),不是模型在干活。
- 治法:①训练时裁掉每段开头静止帧 / 加时间-进度条件 ②用训练更久的 checkpoint ③临时"轻推启动":先用
go_home_servo --target-npy kick_qpos.npy推到 partway 伸出位,再接闭环(验证模型会接着做)。
6. 安全 / 恢复
- 臂控制权:跑前用 ③ 自检;遥操占着臂时
move_arm_joint_servo返回 0 但臂不动(提优先级也抢不回,需遥操侧释放)。get_whole_body_status的left/right_arm_control标志不可靠,以实测小步动作为准。 - 急停:所有 live 脚本支持 Ctrl-C 立即停并保持当前位姿;结束自动
set_control_mode(priority=1)交还。 - 腰:默认
--no-waist冻结;放开是 COM 大行程,先小幅验证(小幅增量腰动作已验证安全)。 - 吸盘:v3 只记录 dim14/15,不实际下发(EVS08 actuation 未接)。
- 手动交还控制权:
$PY -c "import agibot_gdk as g,time; g.gdk_init(); r=g.Robot(); time.sleep(0.5); \ m=g.MotionControlMode(); m.control_mode=g.ControlMode.CTRL_JOINT_POSITION; \ m.input_source=g.InputSource.INPUT_GDK; m.safe_mode=g.SafeMode.SAFE_NORMAL; \ m.target=g.Target.TARGET_ARMS; m.priority=1; print(r.set_control_mode(m)); g.gdk_release()"
7. 状态小结(2026-06-21)
- ✅ 部署链路完全打通且正确:IO 顺序/归一化/预处理、臂API、平滑、安全门控、位姿快照恢复
- ✅ 全身平滑控制验证(单关节臂/头/腰 + 协调下蹲起立)
- ⚠️ 待解:① checkpoint 起步卡死(需更晚 checkpoint / 裁静止帧重训)② 腰下蹲大行程 COM 未验 ③ 吸盘 EVS08 actuation 未接
- 另:
README_checkpoint_0617_deploy.md是早期部署文档(部分内容已被本 README 更新覆盖,以本 README 为准)