本文是为了搭建Sawyer机器人的强化学习环境,安装MuJoCo 及 mujoco-py等是为了服务Meta-world
安装环境:win10、Meta-world=2.0.0、MuJoCo=1.5.0、mujoco-py=1.50.1
安装教程
1.安装前言
1.1安装建议
如果能在Linux系统上部署,尽量不要在windows上面,因为必须要下载Visual Studio,版本之间的对应也有问题。虽然目前可以成功运行环境。
目前 MuJoCo 主要适用于 Linux 系统或 MacOS 系统,根据其它博客可知,Windows 系统支持最完美的版本是 mjpro150 和 mujoco-py 1.50.1.0。
1.2软件介绍
2021年10月,DeepMind 宣布收购 MuJoCo 物理模拟器,并承诺将MuJoCo 作为一个免费的、开源的、社区驱动的项目进行开发和维护。简而言之,MuJoCo 的所有权从最初的 Roboti LLC 转为现在的 DeepMind。可以在Roboti LLC网站下载,也可以在DeepMind上下载。
OpenAI 官方也提供了 mujoco-py Github的地址。和注意版本 MuJoCo要对应。
2.安装流程
2.1安装软件分享
我将安装所需的文件打包上传至百度网盘中,具体的链接如下:mujoco安装所需要的环境
2.2安装 Visual Studio
这一步在整个安装过程中是并不可少的,因为 mujoco仿真引擎是基于C/C++的,所以每一次运行时实际上都是通过 VS Build Tools 进行编译转换。先给出 Microsoft Visual Studio 的官网:下载visual studio build tools
我在百度网盘中添加 vs_buildtools_2017.exe、vs_buildtools_2019.exe 和 vs_buildtools_2022.exe 三个文件,有需要可自行取用。
我安装的是 vs_buildtools_2017.exe,安装时选择的界面如下图所示:
2.3安装 mjpro150
-
下载 mjpro150
去下载页面获取对应的版本,网盘中是 mjpro150 win64
-
在C盘的用户目录下(C:\Users\zlm)新建一个文件夹名为.mujoco。这里注意,用户名必须是英文,不能是中文,如果需要改可以在TB,Pdd上面找人改,非常快
-
将下载解压后的mjpro150放在.mujoco中
-
将mjkey.txt文件放入C:\Users\xxx.mujoco文件夹以及C:\Users\xxx.mujoco\mjpro150\bin文件夹中
-
添加环境变量
在自己电脑上的“编辑系统环境变量>环境变量”中找到“用户变量”、“系统变量”,分别添加两个环境变量
变量名:MUJOCO_PY_MJPRO_PATH
变量值:C:\Users\xxx.mujoco\mjpro150
变量名:MUJOCO_PY_MJKEY_PATH
变量值:C:\Users\xxx.mujoco\mjpro150\bin\mjkey.txt
- 添加环境变量
在自己电脑上的“编辑系统环境变量>环境变量”中找到“用户变量”和“系统变量”中的Path,双击,点击“新建”,将mjpro150文件中的bin文件夹的地址输入其中(例如:C:\Users\zlm.mujoco\mjpro150\bin),
重启电脑
- 安装成功后可以在bin文件夹中打开simulate.exe,并且将model文件夹中的XML文件夹拖拽到应用界面上则会出现对应模型的3D物理仿真模拟。
2.4安装mujoco_py
- 创建虚拟环境,python必须是3.8,Meta-world要求3.8以上
conda create -n py38 python=3.8
- “mujoco-py-1.50.1.0.tar.gz”上传到百度网盘里了。将压缩包内的文件解压至“C:\Users\zlm.mujoco”路径下,打开cmd控制台,依次执行如下指令。这里建议把mujoco-py-1.50.1文件名改为mujoco-py
cd C:\Users\zlm\.mujoco\mujoco-py #进入解压后的目录
conda activate py38 #激活虚拟环境
pip install -r requirements.txt #下载并安装相关依赖
pip install -r requirements.dev.txt #下载并安装相关依赖
python setup.py install #安装mujoco-py
上面第三行和第四行命令如果下载得比较慢,可以用以下代码替换:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt #从清华源下载并安装相关依赖
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.dev.txt #从清华源下载并安装相关依赖
- mujoco-py测试
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)
sim.step()
print(sim.data.qpos)
注意上述脚本需要在py38虚拟环境中运行。第一次执行会有很多东西,不用担心,是在用安装的Visual Studio Build Tools构建一些东西。如果顺利,你将在最后看到
这里肯定会出现错误
错误1:Cython.Compiler.Errors.CompileError: D:\Anaconda\Anaconda3\envs\py37\lib\site-packages\mujoco_py\cymj.pyx
解决方法:降低版本
pip uninstall cython
pip install cython==0.29.21
错误2:ImportError: DLL load failed while importing cymj
这个报错是因为 Python 的版本较高,自 Python 3.8 开始,在程序运行时只会加载 trusted dlls。该问题已在 Github 上有对应的 Issue,具体可参考这里。
解决办法:
在代码前面加入下面的三行代码:xxx是自己的用户名
import os
os.add_dll_directory("C://Users//XXX//.mujoco//mjpro150//bin")
os.add_dll_directory("C://Users//XXX//.mujoco//mujoco-py//mujoco_py")
错误3:fatal error C1081: ‘C:\Users\Ian\Miniconda3\envs\drlnd\lib\site-packages\mujoco_py-1.50.1.59-py3.6.egg\mujoco_py\generated_pyxbld_1.50.1.59_36_windowsextensionbuilder\temp.win-amd64-3.6\Release\Users\Ian\Miniconda3\envs\drlnd\lib\site-packages\mujoco_py-1.50.1.59-py3.6.egg\mujoco_py\cymj.obj’: file name too long文件名过长。
解决方案:把其中的mujoco_py文件夹中的mujoco_py复制到自己的python虚拟环境python包的所在位置
具体如下,主要路径的正确!!!
3.安装Meta-world
点击Meta-world官网
git clone https://github.com/Farama-Foundation/Metaworld.git
cd Metaworld
conda activate ×××
pip install -e .
项目随便下在哪里都好,但是安装的时候注意,一定要激活自己安装mujoco_py的环境。
在安装的过程中,会提醒少了Mujoco模块,在网上查询了很久,也没有找到解决办法。无奈之下,在虚拟环境中又安装了Mujoco=2.3.7,接着就不会报错了。 尝试了Mujoco==3.0以上的版本,但是会报错,数组的大小不对,安装2.3.7版本的可以成功运行。
下面运行了ML1环境的示例代码,并做了一些改动。
import metaworld
import random
import os
os.add_dll_directory("C://Users//zlm//.mujoco//mjpro150//bin")
os.add_dll_directory("C://Users//zlm//.mujoco//mujoco-py//mujoco_py")
import mujoco_py
import matplotlib.pyplot as plt
#print(metaworld.ML1.ENV_NAMES) # Check out the available environments
ml1 = metaworld.ML1('pick-place-v2') # Construct the benchmark, sampling tasks
env = ml1.train_classes['pick-place-v2']() # Create an environment with task `pick_place`
task = random.choice(ml1.train_tasks)
env.set_task(task) # Set task
obs = env.reset() # Reset environment
a = env.action_space.sample() # Sample an action
obs, reward, truncation, termination, info = env.step(a) # Step the environment with the sampled random action
print(env.step(a))
运行结果如下所示:
后续会学习garage库中的一些示例,有兴趣的小伙伴可以一起交流。