# 足式与人形强化学习 Sim-to-Real 路线：Isaac Lab vs MuJoCo MJX vs Legged Gym 选型与域随机化清单

> 原文链接：https://robotics.hellobike.com/routes/sim-to-real-locomotion-route
> 频道：routes | 更新日期：2026-10-14 | 标签：sim-to-real, Isaac Lab, MJX, 域随机化
> 核心摘要：三条步态训练栈的安装成本和传感器能力不同。域随机化按类别列清单，数值抄你要对齐的那份 env 配置。

# 三条栈不是精度排名

Isaac Lab 跑在 Isaac Sim 上，PhysX，环境数可以拉到上千，相机和激光要走渲染。MuJoCo MJX 把同一个 MuJoCo 模型放进 JAX，单卡上步态迭代快，Playground 的定位就是分钟级训练和零样本上机。Legged Gym 是 Rudin 等人那套 Isaac Gym 代码，2021–2024 的大量四足论文从这里长出来。Isaac Gym 预览版已经停更，新项目不要把它当长期基座。

| | Isaac Lab | MJX / Playground | Legged Gym |
| --- | --- | --- | --- |
| 目录 id | `isaac-lab` | `google-deepmind-mujoco`、`mujoco-playground` | 无独立卡，上游是 leggedrobotics/legged_gym |
| 物理 | PhysX | MuJoCo | PhysX（Isaac Gym） |
| 适合 | 要相机、要和 NVIDIA 部署对齐、人形接触 | 要快、要 JAX、先把盲走策略上机 | 复现旧论文 |
| 宇树现成仓库 | `unitree_rl_lab`、`unitree_sim_isaaclab` | 可用 menagerie 模型，再自己接部署 | `unitree_rl_gym` |
| 安装 | Isaac Sim 版本必须和 Lab tag 对齐 | pip/jax 即可 | 旧驱动和 Isaac Gym 轮子 |

目录里的 Isaac Lab 卡写着：v3.0.0 对应 Isaac Sim 6.0，v2.3 对应 4.5/5.0/5.1，v2.1 对应 4.5。tag 和 Sim 对不上时，报错看起来像 URDF 导入失败，实际是 Python 绑定版本错了。

`unitree_rl_lab` 已经覆盖 Go2、H1、G1。`unitree_rl_gym` 是更早的 Gym 风格实现。两套的观测向量顺序不一样，策略网络不能互换权重。

## 什么时候用哪条

- 只有关节编码器和 IMU，目标是平地或轻度崎岖行走：MJX 或 `unitree_rl_gym` 都够。Playground 更适合新实验。
- 要深度图、要和操作策略放在同一个 Isaac 场景里：Isaac Lab。
- 论文附录写的是 `legged_gym` 的某个 commit：用那个 commit 复现，复现完再迁到 Lab 或 MJX。中途换物理引擎等于重做随机化。

G1 基础版目录规格是 23 DoF，仿真里常见 29 DoF。随机化加在错误的关节上，真机手臂会跟着腿的残差抖。

## 域随机化清单

下面是类别，不是一组可以直接粘贴的范围。`legged_gym` 的 `LeggedRobotCfg.domain_rand` 和 Isaac Lab 的事件项名字不同，数值要从你要对齐的那份配置抄。

训练时随机化：

- 地面静摩擦、动摩擦
- 恢复系数（不是每份配置都有）
- 基座质量、各连杆质量缩放
- 质心偏移
- 电机强度或扭矩限制缩放
- PD 增益缩放
- 关节摩擦和阻尼
- 动作延迟（步数）
- 外力推力的间隔和大小
- 初始关节位置、基座高度和速度
- 地形高度场（如果策略声称能上楼梯）

观测侧随机化：

- 关节位置、关节速度噪声
- IMU 角速度和投影重力噪声
- 编码器偏置

不要随机化、或者只在最后阶段轻轻加的：

- 重力常数。它会把所有尺度带偏，真机对不上。
- 把摩擦拉到仿真里已经打滑的区间。策略会学成滑步，上真机膝关节超载。

上机前的最小核对：

1. 仿真默认站立高度和真机站立高度差在厘米级，而不是用错误的骨盆高度硬撑。
2. 动作是相对默认姿态的残差，还是绝对位置。两边不一致，第一步就会蹲下去。
3. 策略频率和底层伺服频率。常见是策略 50 Hz、电机位置环更高。部署代码里的 decimation 要和训练一致。
4. 先在 `unitree_mujoco` 里回放，再上吊架，再松吊架。不要从 Isaac 渲染窗口直接下发到电机。

## 和操作策略的边界

这条路线是腿。手臂的模仿学习不要和腿的 PPO 共用一个动作向量。G1 上身若用 GR00T 或 π0，下身应保持厂商行走控制器或单独的行走策略，两边的时钟用时间戳对齐，而不是塞进同一个 `step()`。

## 原始参考来源 (Sources)

- [Isaac Lab](https://github.com/isaac-sim/IsaacLab)
- [MuJoCo MJX](https://mujoco.readthedocs.io/en/stable/mjx.html)
- [MuJoCo Playground](https://github.com/google-deepmind/mujoco_playground)
- [legged_gym](https://github.com/leggedrobotics/legged_gym)
- [unitree_rl_lab](https://github.com/unitreerobotics/unitree_rl_lab)
- [unitree_rl_gym](https://github.com/unitreerobotics/unitree_rl_gym)