ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Unitree RL GYM 入门实战:4 条命令让 Unitree 机器人用强化学习走起来

Unitree RL GYM 入门实战:4 条命令让 Unitree 机器人用强化学习走起来

Unitree RL GYM 入门实战:4 条命令让 Unitree 机器人用强化学习走起来

【免费下载链接】unitree_rl_gym项目地址: https://gitcode.com/GitHub_Trending/un/unitree_rl_gym

想让 G1 机器人自己稳稳地走起来,过去要靠人工调一整套控制律。Unitree RL GYM 把这件事变成几条能直接复制的命令:先在 Isaac Gym 仿真里训练出步态策略,再到 MuJoCo 里复核,最后部署到真机,覆盖 Go2、H1、H1_2、G1 四种机器人。

本文按"训练 → 回放 → 跨仿真验证 → 真机"这条流水线走一遍,目标是用 G1 完成一次完整的闭环。

完整流水线的四个环节 🤖

强化学习(Reinforcement Learning,让机器人通过与环境试错自行摸索出控制策略的方法)在这个项目里体现为四个脚本,各管一个环节:

  1. Train:机器人在 Isaac Gym(Nvidia 的 GPU 加速刚体仿真框架)里与环境交互,用 PPO(Proximal Policy Optimization,一种常用强化学习算法)训练出控制策略。
  2. Play:把训练好的模型加载回仿真,直观查看步态效果。
  3. Sim2Sim:在 MuJoCo 这个另一款物理仿真器中跑同一套策略,确认策略没有"偏科"于 Isaac Gym 的物理引擎特性。
  4. Sim2Real:把策略下发到真实机器人,实际行走。

四个环节在仓库里的对应位置:

环节入口脚本相关配置
Trainlegged_gym/scripts/train.pylegged_gym/envs/下各机器人目录
Playlegged_gym/scripts/play.py同 Train,默认加载实验目录
Sim2Simdeploy/deploy_mujoco/deploy_mujoco.pydeploy/deploy_mujoco/configs/
Sim2Realdeploy/deploy_real/deploy_real.pydeploy/deploy_real/configs/

每种机器人的初始关节角、奖励权重、随机化开关都放在legged_gym/envs/对应目录,例如 G1 的参数在 legged_gym/envs/g1/g1_config.py。

小结:先把这四个命令的分工记住,后面所有参数都是挂在这条链上的。

安装与环境验证

系统要求(详见 doc/setup_zh.md):

  • Ubuntu 18.04 或更高版本
  • Nvidia 显卡,驱动 525 以上
  • 建议用 Conda 建独立虚拟环境,避免污染系统 Python

创建虚拟环境并安装 PyTorch

依次运行下面两条命令创建并激活 Python 3.8 环境,再安装文档指定的 PyTorch 版本:

conda create -n unitree-rl python=3.8 conda activate unitree-rl
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia

安装 Isaac Gym 与 rsl_rl

  • Isaac Gym:从 Nvidia 官网下载,解压后进入isaacgym/python目录执行pip install -e .。
  • rsl_rl:强化学习算法库,安装文档要求使用v1.0.2分支,在仓库根目录执行pip install -e .。

两者的具体下载源与顺序以 doc/setup_zh.md 为准。

装完 Isaac Gym 后先做冒烟测试:进入其examples目录运行1080_balls_of_solitude.py,窗口中弹出 1080 个球下落即为正常。

安装 unitree_rl_gym

克隆仓库并在根目录安装:

git clone https://gitcode.com/GitHub_Trending/un/unitree_rl_gym cd unitree_rl_gym pip install -e .

这条命令会连带装好mujoco==3.2.3、tensorboard等依赖,Sim2Sim 环节所需的组件就包含在内。运行下面这条命令确认包可正常导入:

python -c "import legged_gym"

没有报错输出,环境即就绪。另注意:unitree_sdk2py(与真机通信的库)只在 Sim2Real 阶段才需要,之前可以跳过。

✅ 验证标准:import legged_gym无报错,且 Isaac Gym 示例能正常渲染球体下落动画。

第一次训练命令与必知参数

运行这条命令启动 G1 的步态训练:

python legged_gym/scripts/train.py --task=g1

--task的取值有go2、g1、h1、h1_2四个,注册关系见legged_gym/envs/__init__.py。新手建议从g1起步:腿部 12 个自由度(自由度,Joint DOF,指关节可独立运动的数目)即可完成行走,环境参数也最直观。

高频参数速查

  • **--headless true**:不渲染图形界面,纯数值训练,效率更高。
  • **--num_envs**:并行环境数量,越大越快,但显存占用越高。
  • **--max_iterations**:最大训练迭代次数,G1 默认 10000,想快速出结果可以先调小。
  • **--resume**搭配**--checkpoint**:从历史检查点(训练中途保存的模型快照)继续训练。

结果存到哪里

每次训练会在logs/g1/下生成一个以时间戳命名的目录,内含model_<iteration>.pt模型文件。G1 的默认实验名是g1(见g1_config.py中的runner配置),后续 Play 和导出都以这个目录为基准。

小结:训练放后台跑即可,但记住logs/g1/...这条路径,下一步要依赖它。

Play 查看训练效果并导出部署网络

训练完成后运行:

python legged_gym/scripts/play.py --task=g1

Play 默认加载实验目录下最后一次运行的最后一个 checkpoint,也可以用**--load_run**和**--checkpoint**指定其他模型。

观察时有两个要点:

  • Play 会自动关闭观测噪声、域随机化(Domain Randomization,训练时随机扰动摩擦系数等参数、防止策略过拟合仿真)与地形课程(curriculum),所以回放画面比训练时"干净",这是有意设计,不代表训练有水分。
  • 程序会同时把 Actor 网络导出到logs/g1/exported/policies/:G1 使用 LSTM(一种能记住历史信息的循环网络),导出文件为**policy_lstm_1.pt**;普通 MLP 网络则导出policy_1.pt。这个文件就是 Sim2Sim 与 Sim2Real 的输入。

✅ 验证标准:机器人在仿真中持续行走、不频繁摔倒,且policies目录中出现了新的.pt文件。

跨仿真器验证:在 MuJoCo 里预演一遍 🛠️

Sim2Sim 的目的,是确认策略没有依赖 Isaac Gym 特有的物理细节。运行:

python deploy/deploy_mujoco/deploy_mujoco.py g1.yaml

g1.yaml会到deploy/deploy_mujoco/configs/下查找,h1、h1_2也有对应配置文件。几个关键字段值得了解:

  • **policy_path**:决定加载哪个网络,默认指向仓库自带预训练模型deploy/pre_train/g1/motion.pt;要跑自己训练的网络,让这个字段指向 Play 导出的策略文件即可。
  • **simulation_duration**/**simulation_dt**/**control_decimation**:仿真时长与时间步,G1 配置下控制频率为 50Hz。
  • **kps**/**kds**/**default_angles**:PD 控制(比例-微分控制,按误差与变化率计算关节力矩)参数和默认关节角,与真机部署配置保持一致,避免"仿真里对、真机上不对"。

MuJoCo 窗口里的机器人能持续行走一段时间不倒,就可以进入真机环节。

小结:这一步是最便宜的保险,跳过它意味着问题会拖到吊装真机时才暴露。

真机部署:G1 走起来前的三个动作 ⚠️

真机部署的风险远高于仿真,操作顺序严格参考 deploy/deploy_real/README.zh.md。

1. 让机器人进入调试模式

  1. 将机器人吊装状态下开机,等待进入零力矩模式(关节松弛,可徒手晃动)。
  2. 零力矩模式下按遥控器L2+R2组合键,机器人进入调试模式(关节处于阻尼状态)。
  3. 用网线连接电脑与机器人网口,运行ifconfig查看连向机器人的网卡名(例如enp3s0),记下来作为命令参数。

2. 运行部署程序

python deploy/deploy_real/deploy_real.py enp3s0 g1.yaml

第一个参数是网卡名,第二个参数在deploy/deploy_real/configs/下查找。

3. 用遥控器完成控制交接

  • start 键:机器人运动到默认关节位置,随后缓慢下放吊装绳让脚接触地面。
  • A 键:进入运动控制模式,先原地踏步,确认状态稳定后再降低吊装绳。
  • 左摇杆:控制 x、y 方向线速度;右摇杆:控制偏航(yaw)角速度。
  • select 键:退出控制,机器人进入阻尼状态倒下;终端中Ctrl+C同样可结束程序。

⚠️ 这一步别跳过:该部署程序是示例性质,不是工业级安全控制器。全程保持吊装,不要给机器人施加扰动,出现任何异常立即按 select 退出。

常见卡点与排查路径

训练起不来或速度很慢

  • 加**--headless true**去掉图形开销。
  • 显存吃紧就调小**--num_envs**。
  • 确认训练落在 GPU 上,可用**--sim_device**/**--rl_device**显式指定计算设备。

Play 加载不到模型

  • 前提是该实验至少训练过一次;用**--experiment_name**、**--load_run**、**--checkpoint**核对加载路径是否指向正确的logs/g1/...目录。

Isaac Gym 冒烟测试不通过

  • 优先核对驱动与 CUDA 版本:安装文档建议驱动 525+,PyTorch 2.3.1 搭配 CUDA 12.1。
  • 具体报错对照isaacgym/docs/index.html中的官方文档处理。

真机部署找不到网卡或无法通信

  • 重新插拔网线,用ifconfig核对网卡名是否变化。
  • 确认已安装unitree_sdk2py,它是与真机通信的底层依赖。

小结:多数问题集中在"仿真依赖没装对"和"网卡/模型路径没找对"两类,按这个顺序排查效率最高。

进阶方向:从稳定行走走向自定义任务

调整行走风格:奖励权重集中在g1_config.py的rewards.scales类里,tracking_lin_vel(速度跟踪)、base_height(机身高度)等参数决定策略对速度指令和躯干姿态的侧重程度。

加大环境难度:摩擦系数范围、随机推挤等域随机化开关在同文件的domain_rand类;地形生成逻辑在 legged_gym/utils/terrain.py。

换一种机器人:go2、h1、h1_2 的训练、回放、部署流程与 G1 完全同构,把--task换掉、选用对应 yaml 配置即可,环境参数分别在legged_gym/envs/下各自的目录中。

更低延迟的真机推理:deploy/deploy_real/cpp_g1/提供了 G1 真机部署的 C++ 推理版本,适合对实时性要求更高的场景;熟悉流程时 Python 版足够。

小结:流程跑通之后,定制工作基本收敛在两类文件——机器人配置(legged_gym/envs/)与部署 yaml(deploy/下)。

接下来的具体动作:先在本地跑通python legged_gym/scripts/train.py --task=g1 --headless true,让它训练十几分钟;然后用**--resume**从logs/g1/的检查点继续,跑一次 Play 确认步态。这个闭环走通之后,Sim2Sim 与真机部署只是照抄后两条命令的事。

【免费下载链接】unitree_rl_gym项目地址: https://gitcode.com/GitHub_Trending/un/unitree_rl_gym

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进