go1_sft_go2 / deploy /COMMANDS_v2.md
xianglarry's picture
Upload folder using huggingface_hub
0c95a27 verified
|
Raw
History Blame Contribute Delete
5.06 kB
# 测试命令速查 v2(checkpoint_0617,实测验证版)
> 06-21 实测定稿:**头预下俯 + 开腰** 后,当前 checkpoint 能完成"弯腰探入→双臂伸到铝板正上方"。
> 本文件只放验证过的有效命令(旧版默认 `--no-waist` 闭环不起手,已废弃)。
## ⚠️ 执行权限规则(硬约束)
- **可自动跑**:只有模型推理脚本(`infer_stage_c_v3` / `infer_stage_a_v2` / `openloop_verify`)。
- **必须先经用户同意**:任何 `--live` 的复位/调姿/恢复脚本(`pose_io --restore``head_pitch_test``staged_restore``smallstep`)。
- **出问题(臂卡料箱等)由用户遥操恢复**,不自动跑恢复脚本去"捞"。
## 0. 环境(每个终端先跑)
```bash
ssh agi@172.16.64.220 # 真机脚本在机器人上跑; 离线脚本任意机器均可
cd <path-to>/go1_sft_go2 # 仓库根, 下面以 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 # 带 torch+gdk 的解释器(机器人上的 venv)
D=deploy # 脚本目录
```
> 路径均由 [`deploy/go1_env.py`](go1_env.py) 解析(`GO1_*` 环境变量 + 仓库相对默认),见 [README.md](README.md)「配置(路径可移植)」。
## 1. 不动机器人的检查(可自动跑)
```bash
# 离线: pred vs 训练真值, |p0-gt0| 应小
$PY $D/openloop_verify_0617.py 2>/dev/null | grep -E "p0|pred|gt"
# 真机只读: 抓相机+关节→推理, |action[0]-state| 应小(~0.08)
$PY $D/infer_stage_a_v2_0617.py 2>/dev/null | grep -E "iter|action\[0\]-state|suction"
```
## 2. 准备起始位姿(⚠️动机器人,需先同意)
```bash
# 复位到 init(注意: 此脚本不驱动头关节)
$PY $D/pose_io_0617.py --restore --live --speed 0.4
# 头下俯到 0.50 让头镜头看到料箱(关键! pitch=0 看墙→OOD不起手)
$PY $D/head_pitch_test_0617.py --live --pitch 0.50
# 确认料箱在画面中央(只读,抓三相机帧到 $GO1_OUT_DIR, 默认 deploy/)
$PY $D/grab_headcam_0617.py 2>/dev/null | grep -E "head yaw|cam_head"
```
## 3. 闭环模型推理(主命令,可自动跑)
```bash
# 验证有效配置: 开腰 + 头冻结在下俯 + slew0.3。会弯腰探入→双臂伸向铝板。
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
```
- **从当前状态续跑**:同一条命令再跑一次即可(脚本每次重抓当前 state)。
- 关键参数:**不要加 `--no-waist`**(开腰才起手);**保留 `--no-head`**(冻结头在下俯,保持料箱在视野)。
## 4. 恢复到 init / 把双臂从料箱取出(⚠️动机器人,需先同意)
```bash
# 首选: 一键复位, 实测可把双臂从料箱中带出来、回到 init
$PY $D/pose_io_0617.py --restore # 先 dry-run 看计划(不动)
$PY $D/pose_io_0617.py --restore --live --speed 0.4 # 实跑复位(带臂出箱)
# 兜底: 万一一键 restore 被自碰撞避让冻住(rc=0但臂不动) → 逐关节顺序复位
$PY $D/staged_restore_0617.py --live --slew 0.25
# 仍卡停(如先扫肩撞箱) → 由用户遥操把臂抬出, 再复位。
```
---
## 关键事实(实测)
- **不起手的两个阻塞已解**:① 头 pitch=0 严重 OOD(看墙),下俯到 0.50 料箱才入画;② `--no-waist` 冻死了模型最想动的腰(躯干前倾带动伸手)。两个修掉就起手。
- **头 pitch 真实极限 ≈ 0.52**(脚本 clamp 写的 0.65 过大,发 0.55 报 `idx13_head_joint3 out of range`)。
- **吸盘**:v3 脚本只记录不下发;且模型自主闭环里 `suc` 输出一直 ~0、从不触发吸附 → 到抓取位就停、进不到抬出。要真搬:接 EVS08 + 把 cmd[14/15] 接真实吸盘阀(阈值>0.5) + 铝板摆位贴合训练。
- **取臂出箱/复位**:首选 `pose_io --restore --live`,实测可把双臂从料箱带回 init;个别极深姿态可能被自碰撞避让冻住(rc=0但臂不动),退 `staged_restore`(逐关节) 或遥操。
## 当前正确脚本
| 脚本 | 用途 | 动机器人 |
|---|---|---|
| `openloop_verify_0617.py` | 离线 pred vs gt | 否 |
| `infer_stage_a_v2_0617.py` | 真机只读推理 | 否 |
| `grab_headcam_0617.py` | 抓三相机帧 | 否 |
| `infer_stage_c_v3_0617.py` | 闭环主脚本(正确IO+100Hz平滑) | 是 |
| `pose_io_0617.py` | 复位 `--restore`(不动头) | 是 |
| `head_pitch_test_0617.py` | 头下俯到指定 pitch | 是 |
| `staged_restore_0617.py` | 逐关节复位(解自碰撞冻臂) | 是 |
| `smallstep_test_0617.py` | 单关节控制权/跟踪自检 | 是 |