- MuJoCo是什么
- 安装MuJoCo
- MuJoCo200
- 配置OpenGL图形界面
- 找不到mjkey.txt
- 试一下
- 安装Python环境
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一开始跟着课程助教写的教程装软件, 信心满满. 不过很快就碰到了挫折, 好在最终还是解决了.
MuJoCo200MuJoCo本身很好安装.
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.
一开始是跟着这个流程走的. 过程中可能网速会不稳定, 不过好在软件本身不大, 所以下载的时候不算焦躁. 当然, 急性子又比较会上网的朋友可以直接从这个链接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 Code和Jupyter Notebook中. 所以也就避免了直接跳出图形界面展示. 不过还是要安装下面这些OpenGL有关的库的.
配置OpenGL图形界面WSL2中已经可以运行图形界面了, 不过因为我已经安装了WSL, 并且WSL2似乎在文件系统的共享上面不如WSL方便, 所以就没有考虑升级. 不过刚刚入门的朋友可以考虑一下WSL2.
参考在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拷贝放在mujoco200的bin目录下, 也就是~/.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.
如果可以弹出下面的界面, 那就是安装好了.
如果能看到这个倒地小人, 那就配置好啦
上面已经安装好了MuJoCo, 接下来安装一下mujoco_py和gym, 这样就可以在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
接下来, 运行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=''''''.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()
如果可以看到下面的样子, 那么就算是大功告成了.
这个小蚂蚁(?)是会动的
https://mujoco.readthedocs.io/en/latest/overview.html ↩︎
在WSL上配置OpenGL3.3开发环境: https://www.bilibili.com/read/cv8285780/ ↩︎ ↩︎
安装mujoco_py遇到的一些问题与解决方法,如command ‘gcc‘ failed with exit status 1: https://blog.csdn.net/weixin_44420419/article/details/116231500 ↩︎
Mujoco&Mujoco-py安装教程以及常见报错解决方法: https://zhuanlan.zhihu.com/p/352304615 ↩︎