宇树 Go2 机器人强化学习 RL 开发实操指南
介绍宇树 Go2 机器人强化学习开发全流程。涵盖硬件系统要求,基于 Isaac Gym 的环境配置、模型训练及验证步骤,以及基于 Isaac Lab 的进阶任务实现。重点讲解从仿真到实物部署的 sim2real 关键操作,包括网络配置、模型格式转换与 SDK 调用。同时提供常见问题解决方案,帮助开发者快速落地 RL 开发。

介绍宇树 Go2 机器人强化学习开发全流程。涵盖硬件系统要求,基于 Isaac Gym 的环境配置、模型训练及验证步骤,以及基于 Isaac Lab 的进阶任务实现。重点讲解从仿真到实物部署的 sim2real 关键操作,包括网络配置、模型格式转换与 SDK 调用。同时提供常见问题解决方案,帮助开发者快速落地 RL 开发。

在 Go2 机器人的 RL 开发中,环境配置、模型训练、效果验证与策略部署的实操步骤是核心环节。本文基于宇树科技官方文档及开源资源,以 Isaac Gym 和 Isaac Lab 两大主流仿真平台为核心,提供从环境搭建到实物部署的全流程操作步骤,覆盖关键命令与参数配置,帮助开发者快速落地 RL 开发。
在开始操作前,需确保硬件与系统满足 RL 开发的基础需求,避免后续因配置不足导致训练中断或性能瓶颈。
| 类别 | 具体要求 | 说明 |
|---|---|---|
| 显卡 | NVIDIA RTX 系列(显存≥8GB) | 需支持 CUDA 加速,Isaac Gym/Isaac Lab 均依赖 GPU 进行仿真与训练 |
| 操作系统 | Ubuntu 18.04/20.04/22.04 | 推荐 20.04 版本,兼容性最佳,避免使用 Windows 系统(部分依赖不支持) |
| 显卡驱动 | 525 版本及以上 | 需与 CUDA 版本匹配(如 CUDA 11.3 对应驱动≥465.19.01,CUDA 11.8 对应驱动≥520.61.05) |
| 软件依赖 | Conda(Python 包管理) | 用于创建独立虚拟环境,避免依赖冲突 |
Isaac Gym 是宇树科技官方文档指定的仿真平台,适合快速实现基础 RL 任务(如行走、避障),操作步骤如下:
若未安装 Conda,需先下载 Miniconda(轻量版),再创建并激活 Go2 专属 RL 环境:
# 1. 下载 Miniconda(Ubuntu 64 位)
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.10.0-1-Linux-x86_64.sh
# 2. 安装 Miniconda(按提示输入 yes,默认路径即可)
bash Miniconda3-py38_23.10.0-1-Linux-x86_64.sh
# 3. 重启终端或执行以下命令加载 Conda
source ~/.bashrc
# 4. 创建虚拟环境(Python 3.8,名称为 rl-go2)
conda create -n rl-go2 python=3.8
# 5. 激活虚拟环境
conda activate rl-go2
Isaac Gym 需依赖特定版本的 CUDA 与 PyTorch,官方推荐 CUDA 11.3 + PyTorch 1.10.0:
# 1. 安装 CUDA 11.3(若已安装则跳过,需确保驱动兼容)
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run
# 安装时取消勾选"Driver"(已装驱动避免冲突)
# 2. 配置 CUDA 环境变量(添加到~/.bashrc)
echo 'export PATH=/usr/local/cuda-11.3/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc # 生效环境变量
# 3. 安装 PyTorch 1.10.0(含 CUDA 11.3 支持)
pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
# 4. 安装低版本 numpy(避免与 Isaac Gym 冲突,推荐 1.23.5)
pip install numpy==1.23.5
需从 NVIDIA 官网下载 Isaac Gym Preview 4(需注册账号),解压后安装并验证:
# 1. 假设下载的压缩包路径为~/Downloads/IsaacGym_Preview_4_Package.tar.gz,解压到~/IsaacGym
tar -zxvf ~/Downloads/IsaacGym_Preview_4_Package.tar.gz -C ~/
# 2. 进入 Isaac Gym 的 Python 目录,安装依赖
cd ~/IsaacGym/python
pip install -e .
# 3. 验证安装(运行示例脚本,若弹出仿真窗口则成功)
cd examples
python 1080_balls_of_solitude.py
rsl_rl 是 legged_gym 依赖的 RL 算法库,需安装 1.0.2 版本以适配 Go2:
# 1. 克隆 rsl_rl 仓库
git clone https://github.com/leggedrobotics/rsl_rl
# 2. 切换到 1.0.2 版本
cd rsl_rl
git checkout v1.0.2
# 3. 安装 rsl_rl
pip install -e .
# 克隆宇树官方 rl 示例仓库
git clone https://github.com/unitreerobotics/unitree_rl_gym
cd unitree_rl_gym
需修改 train.py 和 play.py 中的路径,确保脚本能找到 legged_gym:
# 1. 编辑 train.py
nano legged_gym/scripts/train.py
# 2. 找到以下代码行,替换为自己的 unitree_rl_gym 路径(如~/unitree_rl_gym)
sys.path.append("/home/unitree/go2/legged_gym") # 原路径
sys.path.append("~/unitree_rl_gym/legged_gym") # 修改后的路径(需与实际一致)
# 3. 按 Ctrl+O 保存,Ctrl+X 退出,重复上述步骤修改 play.py
nano legged_gym/scripts/play.py
# 激活虚拟环境(若已激活则跳过)
conda activate rl-go2
# 进入示例代码目录
cd ~/unitree_rl_gym
# 启动训练(--task=go2 指定任务为 Go2 基础控制,默认开启可视化)
python3 legged_gym/scripts/train.py --task=go2
| 参数 | 说明 | 示例 |
|---|---|---|
--headless | 关闭可视化界面(训练速度提升 50%+) | python3 train.py --task=go2 --headless |
--num_envs | 并行训练环境数量(显存足够时调大,推荐 32/64) | python3 train.py --task=go2 --num_envs=64 |
--max_iterations | 最大训练迭代次数(默认 1500,可按需调整) | python3 train.py --task=go2 --max_iterations=2000 |
--sim_device | 指定仿真设备(默认 GPU,CPU 训练需设为 cpu) | python3 train.py --task=go2 --sim_device=cpu |
--resume | 从上次 checkpoint 继续训练(需有历史日志) | python3 train.py --task=go2 --resume |
--headless,会弹出 Isaac Gym 窗口,实时显示 Go2 的训练动作(如站立、行走)。logs/<experiment_name>/<date_time>_<run_name>/,包含模型文件(model_xxx.pt)和日志。当训练迭代达到 1500 次后,可通过 play.py 验证策略效果:
# 基础测试命令(加载最新模型,默认开启可视化)
python3 legged_gym/scripts/play.py --task=go2
# 加载指定 checkpoint(如加载第 1200 次迭代的模型)
python3 legged_gym/scripts/play.py --task=go2 --checkpoint=1200
# 关闭可视化测试(仅输出日志)
python3 legged_gym/scripts/play.py --task=go2 --headless
--num_envs 参数,重新训练。play.py 会自动导出 Actor 网络(决策模型),路径为:
logs/<experiment_name>/exported/policies/policy_1.pt # MLP 网络(默认)
# 若使用 RNN 网络,导出为 policy_lstm_1.pt
导出的模型可用于后续的 sim2sim(跨仿真器部署)和 sim2real(实物部署)。
Isaac Lab 是 NVIDIA 推出的新一代机器人 RL 框架,支持更复杂的任务(如上下台阶、后空翻),且兼容 Go2,操作步骤如下:
# 1. 安装系统依赖
sudo apt-get update && sudo apt-get install -y libgl1-mesa-glx libglib2.0-0
# 2. 创建并激活 Isaac Lab 专属虚拟环境
conda create -n isaaclab python=3.8
conda activate isaaclab
# 3. 安装 CUDA 11.8(Isaac Lab 推荐版本)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
# 同样取消勾选 Driver
# 4. 配置 CUDA 11.8 环境变量
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 5. 安装 PyTorch 2.0.0(适配 CUDA 11.8)
pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --extra-index-url https://download.pytorch.org/whl/cu118
# 1. 克隆 Isaac Lab 仓库
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
# 2. 运行官方安装脚本(自动安装依赖)
./setup_conda_env.sh
# 3. 验证安装(创建空场景,弹出仿真窗口则成功)
python source/standalone/tutorials/00_sim/create_empty.py
USD 模型是 Isaac Lab 中 Go2 的仿真载体,需从宇树官方或 Isaac Lab 社区获取:
unitree_go2.usd)。mkdir -p source/extensions/omni.isaac.lab_assets/resources/robots/unitree_go2
cp ~/Downloads/unitree_go2.usd source/extensions/omni.isaac.lab_assets/resources/robots/unitree_go2/
Isaac Lab 默认使用 PPO 算法(机器人 RL 主流算法),以'上下台阶'任务为例,操作步骤如下:
在 source/standalone/rl 目录下创建 go2_stairs.py,定义场景(地面、台阶、Go2 机器人):
from omni.isaac.lab.app import AppLauncher
from omni.isaac.lab.assets import Robot
from omni.isaac.lab.scene import InteractiveScene
from omni.isaac.lab.envs import ManagerBasedRLEnv
# 1. 启动仿真器(关闭 headless 便于调试)
app_launcher = AppLauncher(headless=False)
simulation_app = app_launcher.app
# 2. 创建场景
scene = InteractiveScene()
# 添加地面
scene.add_ground_plane()
# 添加台阶(尺寸:长 2m、宽 1m、高 0.15m)
scene.add_box(prim_path="/World/Stairs", size=[2.0, 1.0, 0.15], position=[1.0, 0.0, 0.075], mass=0)
# 添加 Go2 机器人(使用 USD 模型)
go2_robot = Robot(
prim_path="/World/Go2",
usd_path="source/extensions/omni.isaac.lab_assets/resources/robots/unitree_go2/unitree_go2.usd",
position=[0.0, 0.0, 0.5] # 初始位置(地面上方 0.5m)
)
scene.add_robot(go2_robot)
# 3. 创建 RL 环境(绑定场景与 PPO 算法)
env = ManagerBasedRLEnv(scene=scene, policy_cfg="ppo")
# 4. 启动训练(简化版,实际需添加奖励函数与动作空间定义)
num_episodes = 1000
for episode in range(num_episodes):
obs, _ = env.reset()
done = False
while not done:
action = env.policy.compute_action(obs)
obs, reward, done, _, _ = env.step(action)
print(f"Episode {episode+1}, Reward: {reward:f}")
simulation_app.close()
# 激活 Isaac Lab 环境
conda activate isaaclab
# 进入脚本目录
cd IsaacLab/source/standalone/rl
# 启动训练
python go2_stairs.py
当仿真训练效果达标后,需将策略部署到 Go2 实物机器人,核心步骤如下:
ssh [email protected]
转换模型格式:将仿真导出的 policy_1.pt(PyTorch 模型)转换为 Go2 支持的格式(如 ONNX):
python -m torch.onnx.export \
--model=policy_1.pt \
--input-shape=(1,32) # 输入维度需与观测空间一致(如 32 维观测) \
--output=go2_policy.onnx
安装 Go2 SDK:在开发电脑上安装 Go2 SDK(从宇树官网下载),确保能调用机器人的运动控制接口:
# 假设 SDK 解压到~/UnitreeSDK
cd ~/UnitreeSDK
sudo ./install.sh
在 Go2 上运行部署脚本:
# 登录 Go2
ssh [email protected]
# 安装依赖(若未安装)
pip install onnxruntime torch
# 执行部署
python deploy_real.py
上传模型与脚本:将转换后的 go2_policy.onnx 与部署脚本(如 deploy_real.py)上传到 Go2:
scp go2_policy.onnx [email protected]:~/
scp deploy_real.py [email protected]:~/
import onnxruntime as ort
from unitree_sdk2py import Go2SDK
# Go2 SDK 接口
# 1. 初始化 Go2 SDK
sdk = Go2SDK()
sdk.connect()
# 2. 加载 ONNX 模型
session = ort.InferenceSession("go2_policy.onnx")
# 3. 实时获取观测数据(如关节角度、IMU 数据)
def get_observation():
joint_angles = sdk.get_joint_angles() # 获取关节角度
imu_data = sdk.get_imu() # 获取 IMU 数据(加速度、角速度)
return joint_angles + imu_data # 拼接为观测向量(需与训练时一致)
# 4. 执行策略并控制机器人
while True:
obs = get_observation() # 模型推理获取动作
action = session.run(None, {"input": [obs]} )[0]
# 发送动作到 Go2
sdk.send_joint_commands(action)
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
| 训练时弹出'CUDA out of memory' | 显存不足 | 1. 降低 --num_envs(如从 64 改为 32);2. 开启 --headless;3. 更换更大显存显卡 |
| Isaac Gym 示例脚本运行报错'ImportError: No module named 'isaacgym'' | 路径未配置 | 重新执行 pip install -e .(在 Isaac Gym/python 目录下),并确保虚拟环境激活 |
| 实物部署时 Go2 无响应 | 1. 网络未连接;2. SDK 未初始化 | 1. 检查 IP 是否正确,ping 192.168.123.100;2. 确保 sdk.connect() 返回 True |
| play.py 测试时 Go2 频繁跌倒 | 训练不充分或奖励函数不合理 | 1. 增加训练迭代次数(如到 2000 次);2. 调整奖励函数(如增加姿态稳定奖励) |
通过以上步骤,开发者可完成从仿真训练到实物部署的全流程操作。建议先基于 Isaac Gym 完成基础任务(如行走),再通过 Isaac Lab 挑战复杂任务(如上下台阶),逐步积累 RL 开发经验。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online