go1_sft_go2 / deploy /HANDOFF.md
xianglarry's picture
Upload folder using huggingface_hub
0c95a27 verified
|
Raw
History Blame Contribute Delete
3.89 kB
# HANDOFF — checkpoint_0617 真机测试(新会话精简交接)
> 早期交接快照(命令以 `/data/agi` 原路径示意)。**当前规范命令与最新结论以 [COMMANDS_v2.md](COMMANDS_v2.md) 为准**(含"头下俯+开腰"使闭环起手的实测验证)。
> 详细见同目录 [README.md](README.md) / [COMMANDS_v2.md](COMMANDS_v2.md)。
## 基本信息
- 机器人 `agi@172.16.64.220`;模型 `/data/agi/checkpoint_0617`(G2 22维 吸盘搬铝板 GO-1 / AgiBot-World)
- 推理 venv:`/data/agi/venvs/go1_torch/bin/python`;模型代码 `/data/agi/AgiBot-World`
- 环境:`source /home/agi/workspace/env.sh; export TMPDIR=/data/agi/tmp; export PYTHONPATH=/home/agi/workspace:$PYTHONPATH`
- 脚本:机器人 `/data/agi/*_0617.py`,本地副本本目录
## 22维 state/action 布局(lerobot 序,FIXED)
来源:`/home/agi/workspace/go2_data_recorder/offline/profiles/go1.py``GO2_SUCTION_EXTRACT_V1`
```
[0:7]左臂 | [7:14]右臂 | [14]左吸盘 | [15]右吸盘 | [16:21]下半身(idx01-05) | [21]头pitch(idx13)
```
qpos ↔ lerobot:左臂=qpos[8:15],右臂=qpos[15:22],下半身=qpos[0:5],头pitch=qpos[7],吸盘=EVS08
## 三个已验证的关键修复(必须带上)
1. **关节顺序**:必须按上面 lerobot 序拼 state、解 action(**不是** qpos 原序「身体5+头3+臂14」)。错序 → 动作完全乱(action[0] 离当前 ~3rad)。
2. **臂下发 API**:用 `move_arm_joint_servo(positions14, period, control_group=2)`**禁用** `joint_servo_control`(顺序错位 → 手臂跳变 → 整机断电重启)。
3. **平滑**:伺服 **100Hz + control_period=0.01(= 发送周期)**;**不要** 30Hz + control_period=0.04(会一顿一顿)。步长按 rad/s 折算。头 pitch clamp 到 `[-0.10, 0.65]`。
## 基本测试方法(三级 + 工具)
```bash
# 0) 环境(见上); PY=/data/agi/venvs/go1_torch/bin/python
# 1) 离线验证推理(不动机器人): pred vs 训练真值
$PY /data/agi/openloop_verify_0617.py
# 2) 真机只读(不动机器人): 抓相机+关节 → 推理 → 打印 action[0]
$PY /data/agi/infer_stage_a_v2_0617.py
# 3) 自检臂控制权(动腕5°): moved~5° = 可控; moved~0 = 遥操占着,需释放
$PY /data/agi/smallstep_test_0617.py --live --joint 6 --delta-deg 5
# 4) 闭环(⚠️动机器人): 正确IO + 100Hz平滑
$PY /data/agi/infer_stage_c_v3_0617.py --live --no-waist --max-chunks 30 --exec-frames 30 --max-slew 0.5
# 复位到初始位姿(⚠️动机器人)
$PY /data/agi/pose_io_0617.py --restore --live --speed 0.4
```
## 注意(事实,非结论)
- 闭环需臂控制权在手(遥操释放,否则 `move_arm_joint_servo` 返回 0 但臂不动;`left/right_arm_control` 标志不可靠,以小步实测为准)。
- 默认 `--no-waist` = 不发腰指令(此模式腰可能前倾下沉,留意)。吸盘只记录不下发(EVS08 未接)。
- 所有 live 脚本 Ctrl-C 立即停并保持当前位姿;结束自动 `set_control_mode(priority=1)` 交还。
- 默认恢复位姿文件 `/data/agi/saved_init_pose.npy`。
## 当前正确脚本(用这些)
| 脚本 | 用途 |
|---|---|
| `openloop_verify_0617.py` | 离线 pred vs gt |
| `infer_stage_a_v2_0617.py` | 真机只读推理 |
| `infer_stage_c_v3_0617.py` | 闭环主脚本(正确 IO + 100Hz 平滑)|
| `pose_io_0617.py` | 位姿快照 `--save` / 恢复 `--restore` |
| `go_home_servo_0617.py` | 平滑驱动到 home / 指定位姿(`--target-npy`) |
| `smallstep_test_0617.py` / `smooth_all_test_0617.py` / `squat_test_0617.py` | 关节/平滑测试 |
| `verify_arm_order_0617.py` / `verify_headwaist_0617.py` | 顺序/通路验证 |
❌ 废弃(错序/旧逻辑):`infer_stage_a_0617.py`、`infer_stage_c_0617.py`、`infer_stage_c_v2_0617.py`、`ramp_to_start_0617.py`、`openloop_check_0617.py`、`go_to_init_pose_0617.py`、`go_head_init_0617.py`