1、安装mujoco
1.1 在csdn - 安全中心安装mujoco210
Download the MuJoCo version 2.1 binaries for
[Linux](https://mujoco.org/download/mujoco210-linux-x86_64.tar.gz) or
[OSX](https://mujoco.org/download/mujoco210-macos-x86_64.tar.gz).
1.2 将下载的mujoco210解压到~/.mujoco/mujoco210
路径下
Extract the downloaded `mujoco210` directory into `~/.mujoco/mujoco210`.
If you want to specify a nonstandard location for the package,
use the env variable `MUJOCO_PY_MUJOCO_PATH`.
注意:ctrl + h 可显示前缀带.的隐藏文件
如果要为包指定非标准位置,请使用环境变量MUJOCO_PY_MUJOCO_PATH
。
验证是否安装成功(运行下面代码,出现小人证明安装成功)
cd ~/.mujoco/mujoco210/bin
./simulate ../model/humanoid.xml
2、安装mujoco-py
2.1 使用conda命令新建一个环境安装mujoco-py
conda create -n mujoco_py python=3.8
conda activate mujoco_py
2.2 安装一些必要的库
To install mujoco-py on Ubuntu, make sure you have the following libraries installed:
sudo apt install libosmesa6-dev libgl1-mesa-glx libglfw3
sudo apt install libosmesa6-dev libgl1-mesa-glx libglfw3
# Make sure your python environment is activated
pip install -U 'mujoco-py<2.2,>=2.1'
直接pip安装通常需要等很久,并且易出现超时报错,故暂时换源并延长报错时长
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U 'mujoco-py<2.2,>=2.1' --default-timeout=1000
# -i https://pypi.tuna.tsinghua.edu.cn/simple 使用清华镜像源
# --default-timeout=1000 超时时间1000s
3、 解决mujoco-py安装报错
3.1 报错`-lGL` cannot be found
If you installed above libraries and you still see an error that `-lGL` cannot be found, most likely you needto create the symbolic link directly:
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so
3.2 安装报错:mujoco_py/cymj.pyx:67:5: Exception check on 'c_warning_callback'
[1/1] Cythonizing /root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/cymj.pyx
Error compiling Cython file:
------------------------------------------------------------
...
See c_warning_callback, which is the C wrapper to the user defined function
'''
global py_warning_callback
global mju_user_warning
py_warning_callback = warn
mju_user_warning = c_warning_callback
^
------------------------------------------------------------
/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/cymj.pyx:92:23: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil'
Error compiling Cython file:
------------------------------------------------------------
...
See c_warning_callback, which is the C wrapper to the user defined function
'''
global py_error_callback
global mju_user_error
py_error_callback = err_callback
mju_user_error = c_error_callback
^
------------------------------------------------------------
/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/cymj.pyx:127:21: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil'
Traceback (most recent call last):
File "main.py", line 8, in <module>
import d4rl
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/d4rl/__init__.py", line 14, in <module>
import d4rl.locomotion
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/d4rl/locomotion/__init__.py", line 2, in <module>
from d4rl.locomotion import ant
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/d4rl/locomotion/ant.py", line 20, in <module>
import mujoco_py
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/__init__.py", line 2, in <module>
from mujoco_py.builder import cymj, ignore_mujoco_warnings, functions, MujocoException
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/builder.py", line 504, in <module>
cymj = load_cython_ext(mujoco_path)
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/builder.py", line 110, in load_cython_ext
cext_so_path = builder.build()
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/builder.py", line 226, in build
built_so_file_path = self._build_impl()
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/builder.py", line 278, in _build_impl
so_file_path = super()._build_impl()
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/builder.py", line 239, in _build_impl
dist.ext_modules = cythonize([self.extension])
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/Cython/Build/Dependencies.py", line 1134, in cythonize
cythonize_one(*args)
File "/root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/Cython/Build/Dependencies.py", line 1301, in cythonize_one
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: /root/anaconda3/envs/mujoco_env/lib/python3.8/site-packages/mujoco_py/cymj.pyx
属于cython编译报错,可以查看一下mujoco_py文件'require.txt'里面,对cython版本的要求,大于最低版本就行:
pip uninstall cython
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple cython==3.0.0a10 --default-timeout=1000
4、安装gym
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U gym[all] --default-timeout=1000
4.1 报错ERROR: Could not build wheels for box2d-py
Building wheels for collected packages: box2d-py
Building wheel for box2d-py (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [16 lines of output]
Using setuptools (version 68.0.0).
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-311
creating build\lib.win-amd64-cpython-311\Box2D
copying library\Box2D\Box2D.py -> build\lib.win-amd64-cpython-311\Box2D
copying library\Box2D\__init__.py -> build\lib.win-amd64-cpython-311\Box2D
creating build\lib.win-amd64-cpython-311\Box2D\b2
copying library\Box2D\b2\__init__.py -> build\lib.win-amd64-cpython-311\Box2D\b2
running build_ext
building 'Box2D._Box2D' extension
swigging Box2D\Box2D.i to Box2D\Box2D_wrap.cpp
swig.exe -python -c++ -IBox2D -small -O -includeall -ignoremissing -w201 -globals b2Globals -outdir library\Box2D -keyword -w511 -D_SWIG_KWARGS -o Box2D\Box2D_wrap.cpp Box2D\Box2D.i
error: command 'swig.exe' failed: None
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for box2d-py
Running setup.py clean for box2d-py
Failed to build box2d-py
ERROR: Could not build wheels for box2d-py, which is required to install pyproject.toml-based projects
报错原因参考:ERROR: Failed building wheel for box2d-py 解决方法-CSDN博客
gym是一个强化学习的Python库,它依赖box2d,box2d是一个游戏领域的2D图形引擎,它在运行时又会依赖到swig,swig是一个将c/c++代码封装为Python库的工具(是Python调用c/c++库的一种常见手段)。而swig并不是一个python库,应该说算是一个系统级别的库,在Linux,Windows和Mac上都有不同的发行包,无法通过pip自动安装。所以,在初次构建依赖到gym的Python项目时就会遇到“ERROR: Failed building wheel for box2d-py”错误,原因就是本地操作系统上没有安装swig。
解决方案:
# 查看电脑有无swig软件包
swig --version
# 若没有,安装swig软件包
sudo apt install swig
# 安装box2d-py
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple box2d-py --default-timeout=3000
# 安装gym
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym[all] --default-timeout=3000
5、测试运行mujoco-py
5.1 在.bashrc
文件中添加环境变量(没加会报错提示)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/.mujoco/mujoco210/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
5.2 测试代码正确运行时的情况
$ python3
Python 3.8.18 (default, Sep 11 2023, 13:40:15)
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import 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]
5.3 若运行报错:编译文件出错fatal error: GL/glew.h: No such file or directory
执行以下命令即可:
sudo apt-get install build-essential
sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
sudo apt-get install libglfw3-dev libglfw3
5.4 若运行报错:FileNotFoundError: [Errno 2] No such file or directory: 'patchelf'
执行以下命令即可:
sudo apt-get install patchelf
6、将solidworks导出的urdf文件转成mujoco对应的mjcf文件
6.1 在urdf文件添加一些必要的MuJoCo的tag用于控制编译选项
<mujoco>
<compiler
meshdir="#自己存放模型.stl文件的目录#"
balanceinertia="true"
discardvisual="false" />
</mujoco>
6.2 检查urdf文件(可选)
sudo apt install liburdfdom-tools
check_urdf xxx.urdf
# 检查urdf文件,没问题则显示--- Successfully Parsed XML ---
6.3 将urdf 转成 mjcf
~/mujoco/mujoco210/bin
./compile /path/to/model.urdf /path/to/model.xml
6.4 测试生成的mjcf文件模型
cd ~/.mujoco/mujoco210/bin
./simulate /path/to/model.xml
urdf的xml文件格式官网:urdf/XML - ROS Wiki
mujoco的xml文件格式官网:XML Reference - MuJoCo Documentation
7、安装pytorch
7.1 先查看操作系统的版本
lsb_release -a
返回 Ubuntu 20.04.6 LTS
7.2 查看显卡驱动版本
nvidia-smi
7.3 安装pytorch
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
Start Locally | PyTorch pytorch版本选择传送门
8、引用博客
编译文件出错fatal error: GL/glew.h: No such file or directory-CSDN博客
mujoco安装及urdf转xml方法记录_urdf转换xml-CSDN博客
ERROR: Failed building wheel for box2d-py 解决方法-CSDN博客