在 WSL2 上配置 Isaac Gym 宇树机器人强化学习环境
前言
微软开发并开源了 WSL (Windows Subsystem for Linux),相比安装双系统,WSL2 的使用更加灵活。因此在需要配置 Isaac Gym 环境时我优先考虑了是否可以使用 WSL 进行仿真运行。幸运的是在谷歌了一番后成功找到这样一篇成功案例,于是便开始了我的折腾之路
准备工作
- (可选) 安装 PowerShell 7
- 安装 WindTerm / MobaXterm,我个人更喜欢 WindTerm
这里安装 WindTerm / MobaXterm 一是因为 Windows 的终端真的太难用了,二是为了后续支持 X11 forward 来打开图形化 Isaac Gym 界面
WSL2 安装
首先当然是安装 WSL2。目前 WSL2 是 Windows 的默认选项,因此直接按照官网指南进行安装即可
右键终端,打开 PowerShell
- 安装 WSL2 并重启电脑
wsl --install
- 安装 Ubuntu
# 列出所有可安装的发行版
wsl -l -o
# 选择 20.04 及以上的 Ubuntu 发行版进行安装
wsl --install -d Ubuntu-24.04
- 启动 Ubuntu
wsl
- Troubleshooting
此时大概率会报错:
wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
解决方案[1]:
- 前往
%USERPROFILE%文件夹,创建.wslconfig - 添加如下内容
[experimental]
autoMemoryReclaim=gradual
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
- 重启 WSL2
wsl --shutdown
wsl
Ubuntu 准备工作
cd ~
mkdir -p dev/toolchains
我是 macOS 用户,所以我更熟悉 zsh。其实完全没必要安装 zsh
SSH
- 安装 ssh,然后就可以摆脱难用的 Windows 终端了。
sudo apt install openssh-server
这时可能会报错:
E: Sub-process /usr/bin/dpkg returned an error code (1)
解决方案[2]:
这里的问题是安装时候会尝试启动 ssh 服务并监听 22 端口。但是这里可能会与 Windows 自身的 ssh 监听冲突。因此需要修改 /etc/ssh/sshd_config 来配置端口,如修改为 222。
sudo vim /etc/ssh/sshd_config
# sshd_config
...
# port
Port 222
# 强制 ipv4
AddressFamily inet
...
# 允许 ssh root 登录
PermitRootLogin yes
...
# X11
X11Forwarding yes
X11UseLocalhost no
...
- 添加防火墙入站规则
打开 高级安全 Windows Defender 防火墙,入站规则 -> 新建规则...

选择 端口 -> 下一页 -> 特定本地端口,填写上面设置的端口 222

下一页 -> 下一页 -> 下一页,输入名称,点击 完成

WindTerm
- 新建会话,配置主机
127.0.0.1和端口222,填写标签

- 开启 X11 forwarding
选择 X11 选项卡,将 X11显示 修改为 内部 X 显示

MobaXterm 可以自行寻找开启办法,网上教程很多
- 双击刚才创建的会话,选择
账户输入用户名和密码进行登录
CUDA
Windows NVIDIA 驱动现在内置 WSL2 支持,只需要下载 CUDA Toolkit 即可。在官网一步步选择正确的架构和平台,通过给出的命令行命令进行下载
注意事项:
- Distribution 一定要选择
WSL-Ubuntu - Installer Type 都可以选,我选择的
deb(network),因为整体耗时更短。
以最新版本 12.9 为例(20250519)

- 执行安装命令
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-9
- 添加环境变量至环境变量文件
如果安装了 zsh,环境变量文件在
~/.zshrc,否则在~/.bashrc如果不确定,运行
echo $SHELL进行查看
export PATH=/usr/local/cuda-12.9/bin:$PATH
# libcuda.so
export LD_LIBRARY_PATH=/usr/lib/wsl/lib/:$LD_LIBRARY_PATH
Miniconda
- 安装
根据官方文档进行安装即可
# 创建文件夹
mkdir -p dev/toolchains/miniconda3
# 下载安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O dev/toolchains/miniconda3/miniconda.sh
# 给予运行权限并运行
cd dev/toolchains/miniconda3
chmod 777 miniconda.sh
./miniconda.sh -b -u -p ~/dev/toolchains/miniconda3
# 删除脚本
rm miniconda.sh
- 添加环境变量
conda init 会自动添加环境到环境变量文件。如果是 zsh 则运行 conda init zsh
~/dev/toolchains/miniconda3/bin/conda init
- 创建虚拟环境
训练的是宇树开源的 unitreerobotics / unitree_rl_gym 工程,根据安装指南配置虚拟环境
# 创建 python 3.8 虚拟环境
conda create -n unitree-rl python=3.8
# 激活虚拟环境
conda activate unitree-rl
后续的安装都需要在这个虚拟环境里进行配置
- 安装 PyTorch
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia
Isaac Gym
- 安装
从官网下载 .tar.gz 文件,在 Windows 文件资源管理器里找到 Linux 用户文件夹,将下载的文件拷贝进来。
回到 Linux 终端运行下面的命令解压并尝试运行 demo
# 解压
tar -xzvf IsaacGym_Preview_4_Package.tar.gz -C dev/toolchains/
# 安装
cd dev/toolchains/isaacgym/python
pip install -e .
# 验证运行
cd examples
python 1080_balls_of_solitude.py
- Troubleshooting
大概率第一次无法运行,会出现这样的报错:

解决方案[3]:
寻找对应的库文件并复制到 /usr/lib/x86_64-linux-gnu 文件夹中
find / -name libpython3.8.so.1.0
sudo cp /home/erbws/dev/toolchains/miniconda3/envs/unitree-rl/lib/libpython3.8.so.1.0 /usr/lib/x86_64-linux-gnu
再次运行再次报错:

意思是没有安装 Vulkan,下面安装 Vulkan
Vulkan
- 下载
从官网选择 Linux - Ubuntu Packages,找到对应 Ubuntu 版本的命令进行下载

wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.4.313-noble.list https://packages.lunarg.com/vulkan/1.4.313/lunarg-vulkan-1.4.313-noble.list
sudo apt update
sudo apt install vulkan-sdk
该方法后续会 deprecate,Tarball 安装方法参考官方文档
这时运行 vulkaninfo --summary 会发现在使用 CPU (llvmpipe) 而不是 NVIDIA GPU,这是因为 WSL2 内置的 mesa 是 CPU 实现[4],我们需要使用第三方 mesa 源来启用 GPU
- 修改 mesa
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade
- 修改环境变量
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/dzn_icd.x86_64.json
这时再运行 vulkaninfo --summary 不出意外可以看到 GPU 被成功识别
出意外也没关系,继续往下看

- 再次运行 demo
不出意外已经可以成功运行
出意外也没关系,继续往下看

Unitree RL GYM
最终目的是运行宇树机器人的强化学习环境,因此还需要一些后续步骤
- 拉取工程
mkdir -p ~/dev/opensource
cd ~/dev/opensource
# rsl_rl
git clone https://github.com/leggedrobotics/rsl_rl.git
cd rsl_rl
git checkout v1.0.2
pip install -e .
cd ..
# unitree_rl_gym
git clone https://github.com/unitreerobotics/unitree_rl_gym.git
cd unitree_rl_gym
pip install -e .
- 运行
cd ~/dev/opensource/unitree_rl_gym/legged_gym/scripts
# 限制模型数为 1 避免性能不够
python train.py --task=go2 --num_envs=1
- Troubleshooting
大概率这时候会报这样的错误:

解决方案[5]:
将 /usr/lib/x86_64-linux-gnu/ 内的 libstdc++.so.6 软链接到 unitree-rl 中
cd ~/dev/toolchains/miniconda3/envs/unitree-rl/lib
mv libstdc++.so.6 libstdc++.so.6.old
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
再次运行可以看到成功运行,这时候再去运行 demo 大概率也正常了
如果还是运行不了就只有自己谷歌找找有没有解决办法了

后记
到此环境就配置完成了。训练时还有其他参数可选,比如 --headless 来关闭图形界面
Isaac Gym 毕竟已经 deprecate 了,配置起来总是有各种问题
我配置的时候一路通,直接就配置完成了,结果我朋友跟着我这文档一通操作还是跑不了 demo,一会能跑一会不能跑的,也不知道哪里的问题
实在受不了了去把宇树的工程拉下来跑发现报错,缺少 GLIBCXX_3.4.32,我才想起来我没把这个问题写在文档里。结果宇树的工程成功跑起来了,再回去跑 demo 也能跑了,搞不懂
所以上面才会说跑不起来也没事,继续往下看

浙公网安备 33010602011771号