4.8 KiB
4.8 KiB
Go1 PRO ONNX 策略部署测试
环境准备
conda activate free_dog_sdk
cd /Users/chenyouyuan/cyy_ws/deploy_go1_pro
目录结构
deploy_go1_pro/
├── deploy_45dim/ # 45-dim 策略部署
│ ├── deploy_onnx_pro_sdk.py
│ ├── policy.onnx
│ ├── go1_sim2sim.py
│ └── sim2sim_test_deploy.py
├── deploy_wtw/ # Walk-These-Ways 部署(开发中)
│ ├── deploy_isaaclab_onnx_no_torch_wtw_r2.py (LCM 版本)
│ ├── body_latest.jit
│ └── adaptation_module_latest.jit
├── sim2sim_mujoco_example/
├── logs/
└── test_deploy.md
推荐部署命令(45-dim)
cd deploy_45dim
python deploy_onnx_pro_sdk.py --onnx policy.onnx --kill-sport --log-dir ../logs \
--kp 80 --kd 1 --kp-cal 20 --kd-cal 1 \
--power-factor 7 --position-protect-limit 1.0 \
--action-ema-alpha 0.3 --print-every 10
测试流程
Step 0 — 观测数据查验 ✓
cd deploy_45dim && python deploy_onnx_pro_sdk.py --obs-check --kill-sport --log-dir ../logs
| obs 段 | 含义 | 期望 | 结果 |
|---|---|---|---|
[0:3] |
gyro×0.25 | ~0 | ✅ |
[3:6] |
投影重力 | ~[0,0,-1] | ✅ |
[6:18] |
关节偏差 | ~0(站姿时) | ⚠️ 蹲姿,正常 |
[18:30] |
关节速度 | ~0 | ✅ |
[30:42] |
上步动作 | [0] | ✅ |
[42:45] |
指令×scale | ~0 | ✅ |
结论:关节初始为阻尼蹲姿(膝盖 ~-2.79rad),ramp 渐变到站姿。
Step 1 — 遥控器测试 ✓
cd deploy_45dim && python deploy_onnx_pro_sdk.py --monitor --kill-sport --log-dir ../logs
全部按钮(R2/L2/L1/A/B/X/Y/START)上升沿/下降沿检测正常,摇杆四轴 ±1.0。
Step 2 — 起身 ✓
R2 → CALIBRATE(2s 渐变)→ HOLD(伺服站姿)。
Step 3 — 急停 ✓
L2 → 立即 IDLE(全阻尼),恢复正常。
Step 4 — RL 联调 ✓
R2 → RL,摇杆控制速度。
参数调优记录
最终工作参数
| 参数 | 值 | 说明 |
|---|---|---|
--kp |
80 | 与 sim 一致,直连 MCU |
--kd |
1 | sim Kd=0.5+被动0.5=1.0 |
--kp-cal |
20 | ramp 阶段 Kp |
--kd-cal |
1.0 | ramp 阶段 Kd |
--power-factor |
7 | hip:16.6, thigh:16.6, knee:24.9 Nm |
--position-protect-limit |
1.0 | RL 阶段位置偏差保护 |
--action-ema-alpha |
0.3 | 平滑 action 高频换向 |
调参过程
| 阶段 | 问题 | 原因 | 解决 |
|---|---|---|---|
| 起身 | 力矩被掐断 | position_protect=0.5 膝盖差 1.0rad 触发 |
ramp/HOLD 阶段禁用 position_protect |
| 起身 | 力不够 | Kp=5 / power_factor=3 太保守 |
Kp→20-30, power_factor→7 |
| RL | 高频抖动 | policy 本就会每2-3步换向(sim 和 real 一致),Kd=0.3 刹不住 | Kd→1, 加 EMA 滤波 |
| RL | 关节偏软 | Kp 不够大 | Kp→80 与 sim 对齐 |
Safety 策略分层
| 阶段 | position_protect | 原因 |
|---|---|---|
| Ramp(起身) | ❌ 禁用 | 大范围移动(膝盖 ~1.0rad) |
| HOLD(站姿) | ❌ 禁用 | 维持固定站姿,本身安全 |
| RL(行走) | ✅ limit=1.0rad | 防策略突跳 |
EMA 滤波
Policy 输出的 action 在 sim 和真机上方向切换率一致(hips ~40%, calves ~25%),这是模型本身特性。sim 中 Kp=80 硬吃掉了,真机需要用 EMA 平滑:
--action-ema-alpha 0.3:new = 0.3×raw + 0.7×prev,时间常数 ~30ms- 0.2:更强平滑但响应慢
- 1.0:不过滤
Kd 选择依据
| 来源 | Kp | Kd | Kd/Kp |
|---|---|---|---|
| sim(含被动阻尼 0.5) | 80 | 1.0 (0.5+0.5) | 0.0125 |
| WTW LCM deploy | 20 | 0.5 | 0.025 |
| 最终直连 MCU | 80 | 1 | 0.0125 |
状态机
┌──────────────────────────────────────┐
│ L2 (急停) │
▼ │
IDLE ──R2──► CALIBRATE ──auto──► HOLD ──R2──► RL │
▲ ▲ │ │
└──────────── L2(急停) ────────────┘ R2 ──┘ │
└─────────────────────────────────────────────────────────┘
IDLE: 全阻尼,等待 R2
CALIBRATE: 渐变到站姿(2s),自动→HOLD
HOLD: 伺服保持站姿,等待 R2 启动 RL
RL: 运行 ONNX 策略,摇杆控制
遥控器
| 按键 | 功能 |
|---|---|
| R2 | 状态切换(IDLE→起身 / HOLD↔RL) |
| L2 | 急停(任意状态→IDLE) |
| 左杆 Y | 前进/后退 |
| 左杆 X | 平移 |
| 右杆 X | 旋转 |