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,让机器人通过与环境试错自行摸索出控制策略的方法)在这个项目里体现为四个脚本,各管一个环节:
- Train:机器人在 Isaac Gym(Nvidia 的 GPU 加速刚体仿真框架)里与环境交互,用 PPO(Proximal Policy Optimization,一种常用强化学习算法)训练出控制策略。
- Play:把训练好的模型加载回仿真,直观查看步态效果。
- Sim2Sim:在 MuJoCo 这个另一款物理仿真器中跑同一套策略,确认策略没有"偏科"于 Isaac Gym 的物理引擎特性。
- Sim2Real:把策略下发到真实机器人,实际行走。
四个环节在仓库里的对应位置:
| 环节 | 入口脚本 | 相关配置 |
|---|---|---|
| Train | legged_gym/scripts/train.py | legged_gym/envs/下各机器人目录 |
| Play | legged_gym/scripts/play.py | 同 Train,默认加载实验目录 |
| Sim2Sim | deploy/deploy_mujoco/deploy_mujoco.py | deploy/deploy_mujoco/configs/ |
| Sim2Real | deploy/deploy_real/deploy_real.py | deploy/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-rlconda 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=g1Play 默认加载实验目录下最后一次运行的最后一个 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.yamlg1.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. 让机器人进入调试模式
- 将机器人吊装状态下开机,等待进入零力矩模式(关节松弛,可徒手晃动)。
- 零力矩模式下按遥控器L2+R2组合键,机器人进入调试模式(关节处于阻尼状态)。
- 用网线连接电脑与机器人网口,运行
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),仅供参考