deploy 成功
This commit is contained in:
138
test_deploy.md
Normal file
138
test_deploy.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Go1 PRO ONNX 策略部署测试
|
||||
|
||||
## 环境准备
|
||||
|
||||
```bash
|
||||
conda activate free_dog_sdk
|
||||
cd /Users/chenyouyuan/cyy_ws/deploy_go1_pro
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 推荐部署命令
|
||||
|
||||
```bash
|
||||
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 — 观测数据查验 ✓
|
||||
|
||||
```bash
|
||||
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 — 遥控器测试 ✓
|
||||
|
||||
```bash
|
||||
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 | 旋转 |
|
||||
Reference in New Issue
Block a user