# 智身钢镚 L1 / L2 从 MATRiX 仿真迁移强化学习策略至真机时关节索引与轮毂电机震颤

> 原文链接：https://robotics.hellobike.com/pitfalls/genisom-matrix-sim2real-joint-order
> 频道：pitfalls | 更新日期：2026-10-21 | 标签：智身, MATRiX, Sim2Real, URDF, 强化学习, 轮足控制
> 核心摘要：MATRiX 仿真导出的 ONNX 策略与真机 SDK 关节顺序或 PD 增益量纲不一致会导致起立扭曲或轮足高频抖动。

# 智身钢镚 L1 / L2 从 MATRiX 仿真迁移强化学习策略至真机时关节索引与轮毂电机震颤

## 硬件与软件环境
- **机型**：钢镚 L1 / L1-W / L2-W（12 关节电机 + 4 轮毂电机复合构型）
- **仿真与模型库**：`zsibot/genisom_model`（`ZSL-1.urdf` / `ZSL-1W.urdf`）+ `MATRiX_Python_SDK`

## 故障现象与报错
在 MATRiX 或 Isaac Gym 中训练收敛的步态策略导出为 ONNX 后，部署到真机上电切入强化学习控制模式时：
1. 四条腿动作不对称（前左腿与前右腿指令互换，或髋/大腿/小腿顺序错位）；
2. 轮足版（L1-W / L2-W）足端轮毂电机在静止站立时出现高频正反转啸叫与机身前后微幅震颤。

## 根因分析
1. **URDF 树遍历顺序与底层 SDK 数组索引差异**：物理仿真器按 URDF/MJCF 树深度优先遍历生成的关节向量顺序（通常为 `FL_hip, FL_thigh, FL_calf, FR_...`），若与底层运控 SDK 电机 CAN ID 数组顺序不一致，会导致观测（Observation）与动作（Action）错位。
2. **轮毂电机控制模式混用**：髋、大腿、小腿 12 个关节采用位置 PD 控制（`q_des` + `kp`/`kd`），而足端 4 个轮毂电机在地面滚动时应使用速度阻尼控制（`kp = 0`, 仅给定 `dq_des` 与 `kd`）；若误对轮毂电机设置非零位置刚度 `kp`，轮子微小的里程计积分误差就会产生持续恢复力矩引发震颤。

## 解决步骤
1. **先在悬空吊架上跑零动作映射校验**：将机器人吊起离地，在部署脚本中逐一对第 `0..11` 号关节施加 `+0.15 rad` 的正弦微动，核对 `ZSL-1.urdf` / `ZSL-1W.urdf` 中的 `joint_names` 与真机 SDK 电机索引及旋转正方向（右手定则）完全一致。
2. **分离腿部关节与轮毂电机的增益配置**：
   - 12 个腿部关节（P65 / P85 运动单元）：设置标准位置刚度 `kp`（如 25～45 N·m/rad）与阻尼 `kd`（1.0～2.5 N·m·s/rad）；
   - 4 个轮毂电机（W150-S / W190-S）：强制设置位置刚度 `kp = 0.0`，将策略输出的动作分量映射为目标角速度 `dq_des`，仅保留速度阻尼项 `kd`。
3. **对齐重力投影与角速度滤波**：确保传入策略网络的机身角速度（`base_ang_vel`）与重力投影向量（`projected_gravity`）坐标系与训练时一致，并对真机关节差分角速度做一阶低通滤波（截止频率约 30Hz）以抑制高频噪声。

## 原始参考来源 (Sources)

- [GitHub zsibot/genisom_model](https://github.com/zsibot/genisom_model)
- [GitHub zsibot/MATRiX_Python_SDK](https://github.com/zsibot/MATRiX_Python_SDK)