在WSL上安装MuJoCo和mujoco_py

MuJoCo是什么

MuJoCo是一个著名的多关节动力学和接触Multi-Joint dynamics with Contact)模拟器, 在强化学习领域得到广泛应用. 2021年10月, DeepMind公司宣布将其收购并开源1, 进一步扩大了这一模拟器的影响力. MuJoCo 也就顺利成章地免费开放了.

开发者可以从github.com/deepmind/mujoco上下载到 MuJoCo 2.1及后续版本. 而更早的版本仍可以在roboti.us上下载到, 并且可以获得免费的授权文件mjkey.txt.

我自己安装MuJoCo的起因, 主要是想跟着 UC Berkeley 的深度强化学习课程CS285 Fall 2021 上手搭一个实验框架. 课程里用到的还是MuJoCo开源之前的版本mujoco200, 因此这里写的一些经验可能不适合想要用新版本的朋友, 也可能会随着2022课程更新而过时, 仅供大家参考. 值得一提的是, 这门课程还开放了Google Colab在线编程资源, 不过在编译mujoco_py的时候好像也会报错.

话说回来, 为什么要在WSL(Windows Subsystem for Linux)上安装MuJoCo呢?

首先, 我用了大概3个小时, 试图在Windows上编译这一套环境, 最后还是卡在了building 'mujoco_py.cymj' extension这一步. 提示系统找不到指定的路径但是具体哪里出了问题还是找不到头绪. 后来看到mujoco-py仓库中介绍:

Windows support has been DEPRECATED and removed in 2.0.2.0. One known good past version is 1.50.1.68.

大概就是说不推荐从2.0.2.0开始就放弃支持Windows平台了, 所以干脆就放弃在Windows上安装了.

那么下面就面临一个问题: 去哪里找一个Linux系统? 其实我个人是不喜欢双系统和虚拟机的. 双系统的话要为平行系统划出去很大硬盘空间, 在存储空间的分配上很不灵活. 而虚拟机的话有会占用很多运行资源, 大屏套小屏的样子也谈不上优雅. WSL就是一个十分优秀的解决方案. Windows在二进制层面上实现了对Linux子系统的支持, 使得两套操作系统不仅共用一套文件管理系统, 而且Linux下编译的程序可以在Windows下直接运行. 这就给熟悉Windows的朋友提供了更多可能性, 比如一边跑着Windows独占专业软件, 一边运行Linux环境下的Python脚本. 不过一个遗憾是WSL在设计之初主要面向通过命令行运行Linux指令的程序员, 因此并不原生地支持显示图形窗口. 好在这一问题已经有了解决方案, 后面会介绍.

WSL可以在Microsoft Store中下载到, 一些基础的配置与正常的Ubuntu系统一致. 网上有很多资料, 这里就不展开介绍了. 下面主要说说安装和配置MuJoCo的过程和我遇到的坑.

安装MuJoCo

一开始跟着课程助教写的教程装软件, 信心满满. 不过很快就碰到了挫折, 好在最终还是解决了.

MuJoCo200

MuJoCo本身很好安装.

mkdir ~/.mujoco
cd ~/.mujoco
wget https://www.roboti.us/download/mujoco200_linux.zip
unzip mujoco200_linux.zip
mv mujoco200_linux mujoco200
rm mujoco200_linux.zip
cp <location_of_mjkey.txt> .

一开始是跟着这个流程走的. 过程中可能网速会不稳定, 不过好在软件本身不大, 所以下载的时候不算焦躁. 当然, 急性子又比较会上网的朋友可以直接从这个链接https://www.roboti.us/download/mujoco200_linux.zip下载压缩包, 然后拷贝到相应地位置就行了. 因为现在软件已经完全开源了, 所以mjkey.txt直接开放下载了, 不需要申请什么东西.

接下来就是把一些链接库添加到环境变量里.

export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin/

然后停一停, 测试一下是不是安装成功了. 在~/.mujoco目录下运行:

cd ./mujoco200/bin
./simulate ../model/humanoid.xml

这个时候不出意外报错了. 具体错误提示已经找不到了, 不过大致就是说没有GLFW这个库. 没有这个库的原因主要是WSL里没有图形界面, 自然也就没有安装相应的OpenGL图形库. 下面就见招拆招安装和配置一下图形库.

后面会提到, 在写代码的过程中其实没有用到VcXsrv等功能. 因为示例代码中将gym运行过程的视频保存在tensorboard中, 而tensorboard可以在浏览器中显示, 也可以嵌入到VS CodeJupyter Notebook中. 所以也就避免了直接跳出图形界面展示. 不过还是要安装下面这些OpenGL有关的库的.

WSL2中已经可以运行图形界面了, 不过因为我已经安装了WSL, 并且WSL2似乎在文件系统的共享上面不如WSL方便, 所以就没有考虑升级. 不过刚刚入门的朋友可以考虑一下WSL2.

配置OpenGL图形界面

参考在WSL上配置OpenGL3.3开发环境2的博客配置了一下图形界面. 基本上就是安装各种库.

sudo apt install libgl1-mesa-dev freeglut3-dev libglu1-mesa-dev
sudo apt install libsoil-dev libglm-dev libassimp-dev libglew-dev libglfw3-dev libxinerama-dev libxcursor-dev libxi-dev

然后在Windows端下载安装VcXsrv. 安装过程一路Next就好了. 安装完成之后记得运行一下VcXsrv. 注意取消勾选Native opengl选项.

然后,在WSL终端中运行:

export DISPLAY=:0.0

一些测试

sudo apt install x11-apps mesa-utils
glxgears

详细参考原博客2.

接下来可能会碰到一点问题:

MuJoCo Pro version 2.00
ERROR: OpenGL version 1.5 or higher required

Press Enter to exit ...

办法是在~/.bashrc的末尾写下面两行:

export MESA_GL_VERSION_OVERRIDE=3.3
unset LIBGL_ALWAYS_INDIRECT

然后运行

source ~/.bashrc

让配置生效.

找不到mjkey.txt

虽然在新的MuJoCo版本中已经不再需要mjkey.txt了, 但是更早的版本中还有必要. 各种官方文档中都提示要把mjkey,txt放在~/.mujoco/目录下, 但是我这里会提示:

ERROR: Could not open activation key file mjkey.txt

这个Issue提到了同样的问题. 解决办法是将mjkey,txt拷贝放在mujoco200bin目录下, 也就是~/.mujoco/mujoco200/bin/mjkey.txt. 强调要拷贝一份的原因是在python中调用mujoco_py的时候可能还是会在~/.mujoco/目录下寻找mjkey.txt.

试一下

下面试一下MuJoCo是不是装好了:

cd ~/.mujoco/mujoco200/bin/
./simulate ../model/humanoid.xml

注意这里不进入~/.mujoco/mujoco200/bin/这个目录下面好像还会提示找不到mjkey.txt.

如果可以弹出下面的界面, 那就是安装好了.

如果能看到这个倒地小人, 那就配置好啦
👆如果能看到这个倒地小人, 那就配置好啦

安装Python环境

上面已经安装好了MuJoCo, 接下来安装一下mujoco_pygym, 这样就可以在python的环境下训练强化学习模型了.

然后按照教程里的方式安装相应的python的依赖库. 这里最好先创建虚拟环境. 比如, 取名叫做rl

conda create -n rl python==3.6
conda activate rl
pip install numpy \
    gym==0.17.2 \
    mujoco-py==2.0.2.2 \
    tensorboard==2.3.0 \
    tensorboardX==1.8 \
    matplotlib==2.2.2 \
    ipython==6.4.0 \
    moviepy==1.0.0 \
    pyvirtualdisplay==1.3.2 \
    torch==1.6.0 \
    opencv-python==4.4.0.42 \
    ipdb==0.13.3 \
    box2d-py \

在安装过程中, 可能会提示没有安装numpy, 这个重新执行pip那一行命令就可以了. 还会碰到一些例如command ‘gcc‘ failed with exit status 1等问题, 可以参考一些其他的博客3 4.

如果网速比较慢的话建议换源. 在学校的朋友们, https://mirrors.bfsu.edu.cn/ubuntu是一个不错的源.

接下来, 如果要在Jupyter Notebook运行的话, 还需要一下一点额外的配置. 首先, 为了运行mujoco_py, 应该需要在sudo模式下运行Jupyter Notebook. 但是sudo模式下的环境变量与普通用户的有区别. 所以需要将

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tiantian/.mujoco/mujoco200/bin

添加到文件/etc/environment中. 然后

source /etc/environment

来更新环境变量.

然后, 安装一个依赖库:

pip install pyvirtualdisplay ipykernel
python -m ipykernel install --user --name rl --display-name rl_py36

接下来, 运行Jupyter Notebook:

sudo jupyter notebook --allow-root

将下面根据例程代码写到一个Cell里:

import mujoco_py
import gym

from gym.wrappers import Monitor
import glob
import io
import base64
from IPython.display import HTML
from IPython import display as ipythondisplay

## modified from https://colab.research.google.com/drive/1flu31ulJlgiRL1dnN2ir8wGh9p7Zij2t#scrollTo=TCelFzWY9MBI

def show_video():
  mp4list = glob.glob('./content/video/*.mp4')
  if len(mp4list) > 0:
    mp4 = mp4list[0]
    video = io.open(mp4, 'r+b').read()
    encoded = base64.b64encode(video)
    ipythondisplay.display(HTML(data='''<video alt="test" autoplay 
                loop controls style="height: 400px;">
                <source src="data:video/mp4;base64,{0}" type="video/mp4" />
             </video>'''.format(encoded.decode('ascii'))))
  else: 
    print("Could not find video")
    

def wrap_env(env):
  env = Monitor(env, './content/video', force=True)
  return env

import os
from pyvirtualdisplay import Display

display = Display(visible=0, size=(1400, 900))
display.start()

env = wrap_env(gym.make("Ant-v2"))

observation = env.reset()
for i in range(20):
    env.render(mode='rgb_array')
    obs, rew, term, _ = env.step(env.action_space.sample() ) 
    if term:
      break;
            
env.close()
print('Loading video...')
show_video()

如果可以看到下面的样子, 那么就算是大功告成了.

这个小蚂蚁(?)是会动的
👆这个小蚂蚁(?)是会动的


  1. https://mujoco.readthedocs.io/en/latest/overview.html ↩︎

  2. 在WSL上配置OpenGL3.3开发环境: https://www.bilibili.com/read/cv8285780/ ↩︎ ↩︎

  3. 安装mujoco_py遇到的一些问题与解决方法,如command ‘gcc‘ failed with exit status 1: https://blog.csdn.net/weixin_44420419/article/details/116231500 ↩︎

  4. Mujoco&Mujoco-py安装教程以及常见报错解决方法: https://zhuanlan.zhihu.com/p/352304615 ↩︎

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值