在 WSL2 上搭建机器人强化学习环境(IsaacGym + MuJoCo 踩坑实录)

1469 字
7 分钟
在 WSL2 上搭建机器人强化学习环境(IsaacGym + MuJoCo 踩坑实录)

具身智能绕不开一个核心环节:机器人的强化学习训练。让四足机器狗学会跑、双足机器人站稳,第一步就是搭好仿真环境。

但主流框架(NVIDIA Isaac Gym)对 Windows 支持极差。重装双系统太折腾,WSL2 是个好选择——但配置过程坑也不少。这篇文章记录我在 Windows 笔记本 + RTX 4060 + WSL2 上完整搭建环境的全过程,以及每个报错的解决方法。


先把这些搞清楚#

搭建环境之前,我们先认识一下机器人强化学习的四件套:

四件套#

组件介绍
Isaac GymGPU 并行物理引擎,能同时跑几千个个仿真环境
RSL-RLETH 开源的 PPO 算法实现
Unitree RL Gym宇树的机器人模型 + 训练模板(Go2/G1/H1)
MuJoCo高精度物理引擎,训练完用来验证和演示

训练流程#

IsaacGym 创建 4096 个环境 → 策略网络输出动作 → GPU 模拟物理
→ 收集经验 → RSL-RL 的 PPO 更新策略 → 循环 1500 轮
→ 训练完成 → MuJoCo 验证效果 → 部署到真机

我的环境#

  • Windows 11 + WSL2 Ubuntu 26.04
  • GPU: NVIDIA RTX 4060 Laptop (8GB)
  • 驱动: NVIDIA 610.47 (WSL 内 610.43.02)
  • Python 3.8.20 (conda)

步骤 1:WSL2 + 显卡驱动#

WSL2 的好处是 GPU 直接透传——Windows 装了驱动,WSL 里就能用 CUDA。不需要在 WSL 里装 NVIDIA 驱动

Terminal window
# PowerShell 管理员
wsl --install
# 重启

重启后进 Ubuntu 终端,先确认显卡能认到:

Terminal window
nvidia-smi
# 应该看到 RTX 4060,显存 8188MiB

如果提示 nvidia-smi: command not found,说明显卡驱动没装或 WSL 版本不对。确保:

  • Windows 端装了最新 NVIDIA Game Ready 驱动
  • wsl --version 确认是 WSL2

装一些底层依赖:

Terminal window
sudo apt update
sudo apt install -y build-essential cmake libx11-dev libxext-dev mesa-utils mesa-vulkan-drivers

步骤 2:Conda 环境#

Terminal window
# 装 miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -u
~/miniconda3/bin/conda init bash
source ~/.bashrc
# 创建环境
conda create -n robot_gym python=3.8 -y
conda activate robot_gym

为什么 Python 3.8? Isaac Gym Preview 4 的预编译 .so 文件绑定了 libpython3.8.so,用其他版本会报 ImportError: libpython3.8.so.1.0: cannot open shared object file


步骤 3:PyTorch + CUDA#

Terminal window
pip install torch==2.0.0 torchvision==0.15.1 --index-url https://download.pytorch.org/whl/cu118
pip install numpy==1.20.0

numpy==1.20 不是乱写的——IsaacGym 的 reward 计算用了旧 API,新版 numpy 会报错。

验证 CUDA 可用:

Terminal window
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
# True
# NVIDIA GeForce RTX 4060 Laptop GPU

步骤 4:Isaac Gym#

NVIDIA 开发者页面 下载 IsaacGym_Preview_4_Package.tar.gz(需要注册 NVIDIA 开发者账号)。

解压后放到 home 目录:

Terminal window
cp -r /mnt/d/IsaacGym_Preview_4_Package ~/
cd ~/IsaacGym_Preview_4_Package/isaacgym/python/
pip install -e .

⚠️ 这里有两个坑:

坑 1:libpython3.8.so.1.0 找不到#

IsaacGym 的 .so 文件需要 libpython3.8.so,它在 conda 的 lib 目录下但不在系统搜索路径里。解决:

Terminal window
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

坑 2:PhysX GPU 物理不生效#

WSL2 的 libcuda.so/usr/lib/wsl/lib/,不是标准路径。PhysX 初始化 GPU 物理时会报 internal error : libcuda.so!,然后回退到 CPU。

Terminal window
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH

验证 GPU 物理是否启用:

import isaacgym # 先 import isaacgym,再 import torch!顺序不能反
import torch
from isaacgym import gymapi
gym = gymapi.acquire_gym()
p = gymapi.SimParams()
p.physx.use_gpu = True
p.use_gpu_pipeline = True
s = gym.create_sim(0, 0, gymapi.SIM_PHYSX, p)
# 输出应该包含:
# +++ Using GPU PhysX
# Physics Device: cuda:0
# GPU Pipeline: enabled
gym.destroy_sim(s)

import 顺序:isaacgym 必须在 torch 前面! 否则会报 ImportError: PyTorch was imported before isaacgym modules


步骤 5:RSL-RL + Unitree RL Gym#

Terminal window
mkdir -p ~/RL/code/unitree_rl_gym
cd ~/RL/code/unitree_rl_gym
git clone https://github.com/leggedrobotics/rsl_rl.git
cd rsl_rl && git checkout v1.0.2 && pip install -e .
cd ..
git clone https://github.com/unitreerobotics/unitree_rl_gym.git
cd unitree_rl_gym && pip install -e .

步骤 6:MuJoCo#

Terminal window
pip install mujoco==3.2.3

MuJoCo 的 GPU 渲染在 WSL2 下默认是软渲染(llvmpipe),画面会卡顿。要启用 GPU 渲染:

Terminal window
export GALLIUM_DRIVER=d3d12
export D3D12_DEFAULT_ADAPTER_NAME=NVIDIA

验证:

Terminal window
glxinfo -B | grep "Device:"
# 硬渲染: Device: D3D12 (NVIDIA GeForce RTX 4060 Laptop GPU)
# 软渲染: Device: llvmpipe (LLVM ...) ← 没生效

步骤 7:写进 .bashrc#

每次手动 export 太麻烦,直接加到 ~/.bashrc 末尾:

Terminal window
# GPU Compute (CUDA)
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
# IsaacGym viewer 兼容性修复
unset WAYLAND_DISPLAY
# MuJoCo 默认软渲染(稳定),需要 GPU 渲染时手动开
export MUJOCO_GL=glfw
# 快捷命令
alias gpu-render-on='export GALLIUM_DRIVER=d3d12 D3D12_DEFAULT_ADAPTER_NAME=NVIDIA MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA; echo "MuJoCo GPU ON"'
alias gpu-render-off='unset GALLIUM_DRIVER D3D12_DEFAULT_ADAPTER_NAME MESA_D3D12_DEFAULT_ADAPTER_NAME; echo "GPU render OFF"'

再在 conda 环境激活时自动加载库路径:

mkdir -p ~/miniconda3/envs/robot_gym/etc/conda/activate.d/
cat > ~/miniconda3/envs/robot_gym/etc/conda/activate.d/env_vars.sh << 'EOF'
#!/bin/bash
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:/usr/lib/wsl/lib:$LD_LIBRARY_PATH"
export MUJOCO_GL=glfw
EOF
chmod +x ~/miniconda3/envs/robot_gym/etc/conda/activate.d/env_vars.sh

最终测试#

Terminal window
conda activate robot_gym
cd ~/RL/code/unitree_rl_gym/unitree_rl_gym
# 1. IsaacGym GPU 训练测试(headless,不渲染窗口)
python legged_gym/scripts/train.py --task=go2 --headless --max_iterations=3
# 2. MuJoCo 部署测试
gpu-render-on
cd deploy/deploy_mujoco
python deploy_mujoco.py g1.yaml

两个都没报错就说明环境 OK 了。


开始训练#

Terminal window
conda activate robot_gym
cd ~/RL/code/unitree_rl_gym/unitree_rl_gym
# 正式训练 Go2
python legged_gym/scripts/train.py --task=go2 --headless
# 看训练曲线
tensorboard --logdir=logs/
参数含义
--task=go2训练 Go2 机器狗
--task=g1训练 G1 人形机器人
--task=h1训练 H1 人形机器人
--headless关掉渲染窗口(训练更快,推荐)
--max_iterations=1000限制训练轮数
--resume从 checkpoint 恢复训练

我踩过的坑(问题清单)#

1. IsaacGym viewer 随机 segfault#

训练时去掉 --headless 偶尔崩溃。这是 NVIDIA 610.x 驱动在 WSL2 上的已知 bug,和 CUDA-GL 互操作有关。临时 workaround 是 unset WAYLAND_DISPLAY 能缓解,但不保证彻底解决。建议训练全程用 --headless,如果需要查看最终效果请用 MuJoCo。

2. PhysX 落在 CPU 上#

Physics Device: cpu 说明 libcuda.so 没被找到。检查 echo $LD_LIBRARY_PATH 是否包含 /usr/lib/wsl/lib

3. CONDA_SHLVL 嵌套#

反复 conda activate 没先 deactivate 会导致环境变量重复拼接(LD_LIBRARY_PATH 变几十行),严重时会 segfault。conda deactivate 多次直到干净,再重新 conda activate robot_gym

4. MuJoCo 渲染卡顿#

glxinfo -B | grep "Device:",如果显示 llvmpipe 说明在软渲染。执行 gpu-render-on 切换到 D3D12 GPU 加速。

5. import isaacgym 放在 import torch 后面#

IsaacGym 会直接报错让你改。养成习惯:isaacgym 永远在最前面。

6. WSL2 别在外面套 Git Bash#

wsl 命令启动或者直接打开 Ubuntu 终端。Git Bash 里跑 wsl 命令会有路径转换问题(中文乱码),直接进 WSL 终端就没事。


总结#

花了大概两天把这些坑趟完了。Windows 笔记本做机器人 RL 训练是可行的,WSL2 的 GPU 透传也够用(RTX 4060 训练 Go2 大约 63k steps/s)。关键是配好 LD_LIBRARY_PATH 和 Mesa 渲染驱动。

接下来的文章会以Open Duck Mini v2为例介绍整个训练流程。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

在 WSL2 上搭建机器人强化学习环境(IsaacGym + MuJoCo 踩坑实录)
https://www.imolin.cc/posts/robot-environment/
作者
莫临
发布于
2026-07-11
许可协议
CC BY-NC-SA 4.0
随机文章 随机推荐
Profile Image of the Author
莫临_Brooke
莫急着走,临我这坐坐
公告
备案完成,即将开放

文章目录