mujoco 安装笔记(解决pycharm下报错)

以前装过一次mujoco,但是中间一年多去做了个别的研究方向,最近又重回DRL,申请了个license,重装mujoco,整理一下笔记,安装总体很简单,主要是记录一下安装过程中的几个报错,以及在终端下能好好地运行,但是到了pycharm下就报相关错的问题,希望看到的人能顺利安装,不要在这种破事上废时间。

license的申请和mjkey.txt就不在这里啰嗦,假设你已经拿到了mjkey.txt

环境

Ubuntu 16.04, anaconda 4.8.0
Tensorflow-gpu 1.14
PyTorch 1.5cuda10.1
Python 3.6.7
mujoco200

mujoco 安装

  1. 下载 mujoco200 (mujoco 200对应mujoco_py200), website:

2. 在home目录下,创建隐藏文件夹.mujoco,然后将你收到的mjkey.txt拷贝到.mujoco文件夹中。

mkdir ~/.mujoco
cp mujoco200_linux.zip ~/.mujoco
cd ~/.mujoco
unzip mujoco200_linux.zip
cp mjkey.txt ~/.mujoco
cp mjkey.txt ~/.mujoco/mujoco200/bin
⚠️注意:必须把 ~/.mujoco/mujoco200_linux 修改为 ~/.mujoco/mujoco200,不论解压出来的文件名是什么都必须改为mujoco200,因为import mujocopy的时候,会报错 “You appear to be missing MuJoCo. We expected to find the file here: /home/用户名/.mujoco/mujoco200 ”, 因为默认只从~/.mujoco/mujoco200这个路径找。
后面的安装好像都可能,在ubuntu18.04上我用的是mujoco200,ubuntu20.04上用mujoco200_
linux

3. 添加环境变量

gedit ~/.bashrc
# 在文件末尾添加如下内容 (如果你安装的是200,请将150更换为200):
export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} 
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin
source ~/.bashrc

4. 测试

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

mujoco_py 安装

1. 获取源码,并安装相关依赖

# 获取源码
git clone https://github.com/openai/mujoco-py.git
conda activate gymlab # 激活 gymlab 虚拟环境
(gymlab) $ cd ~/mujoco-py
(gymlab) $ cp requirements.txt requirements.dev.txt ./mujoco_py
(gymlab) $ cd mujoco_py
(gymlab) $ pip install -r requirements.txt
(gymlab) $ pip install -r requirements.dev.txt
其中gymlab是conda 环境,可以自己clone一个,或者新建一个

2.1 安装方式一(已验证)

pip install -U 'mujoco-py<2.1,>=2.0'

注意:我安装的时候没有报错,可能会报下面错误:

报错:Could not build wheels for mujoco-py which use PEP 517 and cannot be installed directly
解决:`pip install --no-use-pep517 'mujoco-py<2.1,>=2.0'`
报错:No such file or directory: 'patchelf': 'patchelf'
解决:
​ `sudo apt-get update -y`
​ `sudo apt-get install -y patchelf`

2.2 安装方式二

# the following two commands may not be required actually:
cd ~/mujoco-py/vendor 或者为 cd ~/mujoco-py-master/vendor
./Xdummy-entrypoint
cd ..

⚠️注意:使用python、pip命令安装时,应注意你的python、pip命令对应的是python的什么版本,否则可能会默认使用python2,同时也要注意mujoco-py安装到是哪个版本的python环境,后面运行mujoco-py的库代码就必须该python版本的环境。

sudo /home/jacky/anaconda3/envs/pytorch_1.6/bin/python3 setup.py install
报错:ImportError: No module named setuptools
解决:sudo apt-get install python-setuptools

3. 添加环境变量

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so:/usr/lib/x86_64-linux-gnu/libGL.so
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/buduo/.mujoco/mujoco200/bin

测试是否安装成功

注意:这里在import mujoco_py时可能会报一个关于cffi的错,版本冲突,或者找不到cffi module的问题,可以重装cffi 解决问题

# 若已经安装了,报版本冲突的错,先卸载
pip uninstall cffi
pip install cffi
# 下面这条是必要的,否则安装成功了还是会报找不到cffi 的错误
pip install pygit2

测试代码(先在终端下测试通过,先不要在pycharm中测试):

import mujoco_py   
# 如果导入时显示没有该模块,就卸载重装 ‘sudo pip3 uninstall mujoco-py’
import os
mj_path, _ = mujoco_py.utils.discover_mujoco()
xml_path = os.path.join(mj_path, 'model', 'humanoid.xml')
model = mujoco_py.load_model_from_path(xml_path)
sim = mujoco_py.MjSim(model)
print(sim.data.qpos)
#输出 [0.  0.  1.4 1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
# 0.  0.  0.  0.  0.  0.  0.  0.  0.  0. ]
sim.step()
print(sim.data.qpos)
#输出:[-1.12164337e-05  7.29847036e-22  1.39975300e+00  9.99999999e-01
#  1.80085466e-21  4.45933954e-05 -2.70143345e-20  1.30126513e-19
# -4.63561234e-05 -1.88020744e-20 -2.24492958e-06  4.79357124e-05
# -6.38208396e-04 -1.61130312e-03 -1.37554006e-03  5.54173825e-05
# -2.24492958e-06  4.79357124e-05 -6.38208396e-04 -1.61130312e-03
# -1.37554006e-03 -5.54173825e-05 -5.73572648e-05  7.63833991e-05
# -2.12765194e-05  5.73572648e-05 -7.63833991e-05 -2.12765194e-05]

pycharm中运行代码

上面的安装教程(从实验室师兄的笔记中摘抄)全网有很多,只是为了完整性才写,下面的两个报错才是重点:

第一个报错:

Exception:
Missing path to your environment variable.
Current values LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64/
Please add following line to .bashrc:
export D_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/buduo/.mujoco/mujoco200/bin

这是环境变量的问题,显然在上面的mujoco_py 安装的第3点中,是添加了环境变量的,可是还是报错了。

第二个报错在训练时,如果没有对env进行可视化时,是不会报错的,当执行env.render()时,报openGL的错:

Creating window glfw
ERROR: GLEW initalization error: Missing GL version

但是上面这两个错在终端下运行都是不会报错的,可见是pycharm的环境变量和系统的环境变量不相通的问题,这个问题在我的另一篇PyCharm配置的笔记中出现过:报的找不到cuda相关的文件。

因此,这里也可以用同样的方法来解决:

修改`/usr/share/applications/`下的`pycharm.desktop`文件中·`Exec`的值:

Exec=env LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64/" LD_LIBRARY_PATH="/home/buduo/.mujoco/mujoco200/bin" LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libGLEW.so" "/home/BackUp/MY_INSTALL/pycharm-community-2020.2/bin/pycharm.sh" %f

也就是说,以后如果再报有关PyCharm环境变量的错,都可以用这个办法来解决

在使用时也有可能会报一个错:

from dm_control import suite

OSError: /home/t640/.mujoco/mujoco200/bin/libmujoco200.so: undefined symbol: __glewBindBuffer

这可以通过下面的命令来解决

sudo apt-get install libglfw3 libglew2.0

编辑于 2021-06-10 13:06