mujoco200的安装需要去官网申请激活码
MuJoCo(Multi-Joint dynamics withContact)是一个模拟机器人,生物力学,图形和动画等领域的物理引擎。用于物理仿真分析,主要用于机器人领域的开发和研究。
安装Mujoco是因为gym环境中的许多仿真环境都用到这个物理引擎,比如Robotics,Mujoco最初是由华盛顿大学研发的,目前是收费使用的,作为学生党的我们可以有一年的免费使用,但是需要使用edu邮箱进行注册申请,同时也可以申请一个月的临时使用。Mujoco的网址为https://www.roboti.us/license.html
我们选用的是linux安装,点击蓝色的linux ,会出现一个下载.
然后先将信息填好,fullname可以乱填, Email address可以填自己的邮箱用于接收license.有学生邮箱(即以.edu结尾的)可以有一年的试用期.如果是普通邮箱,就只有1个月的试用期.
chmod +x getid_linux
./getid_linux
运行结果如下所示,把id拷贝并填入到前面的网页Computer id一栏中,
下载150的链接为mjpro150 linux,下载200的链接为mujoco200 linux,博主安装的mujoco200.
由于以 ‘.’ 开头的文件夹是隐藏目录, 创建好隐藏目录后, 系统会自动隐藏, 因此需要在主目录下按 ctrl + H 来显示隐藏目录.
注意: 解压后的文件夹需要命名为mujoco200, 而不能使用mujoco200_linux. 因为后续安装的gym默认路径是/home/(usrname)/.mujoco200/… 因此需要保证自己的文件夹命名如下图所示, 不是这样命名的需要改成一样的.
mkdir ~/.mujoco
cp mujoco200_linux.zip ~/.mujoco
cd ~/.mujoco
unzip mujoco200_linux.zip
cp mjkey.txt ~/.mujoco
cp mjkey.txt ~/.mujoco/mujoco200/bin
gedit ~/.bashrc
# MUJOCO200 START
# export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} #这种导入方式可能导致在终端mujoco运行正常,但是在编译器如vscode和pycharm中运行报错
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/zeroonegame/.mujoco/mujoco200/bin
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
# MUJOCO200 END
cd ~/.mujoco/mujoco200/bin
./simulate ../model/humanoid.xml
# 这里博主安装深度强化学习的环境命名为drl , 大家可以根据自己的环境名称更改,下同
conda activate drl
如果直接使用github太慢,可以使用国内的gitee将github的文件拷贝镜像,使用gitee加速.具体操作参考百度
git clone https://github.com/openai/mujoco-py.git
到这一步, 你会遇到大量的问题, 需要有耐心有毅力, 毕竟玩深度学习, 玩强化学习坑多的是, 得慢慢适应.
这里我们使用的是mujoco200,因此根据下述的命令执行,如果是安装mujoco150自行选择即可.
# mujoco150
# pip install -U 'mujoco-py<1.50.2,>=1.50.1'
# mujoco200
pip3 install -U 'mujoco-py<2.1,>=2.0'
sudo apt-get install libglew-dev
pip3 install numpy
# 使用国内源加速下载
# pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo apt-get install libgl1-mesa-dev libgl1-mesa-glx libosmesa6-dev
sudo apt-get install patchelf
wget http://httpredir.debian.org/debian/pool/contrib/m/msttcorefonts/ttf-mscorefonts-installer_3.6_all.deb
sudo dpkg -i ttf-mscorefonts-installer_3.6_all.deb
# 再次运行
sudo apt-get install libgl1-mesa-dev libgl1-mesa-glx libosmesa6-dev python3-pip python3-numpy python3-scipy
pip3 install --no-use-pep517 'mujoco-py<2.1,>=2.0'
这里在import mujoco_py时可能会报一个关于cffi的错,版本冲突,或者找不到cffi module的问题,可以重装cffi 解决问题
# 若已经安装了,报版本冲突的错,先卸载
pip uninstall cffi
pip install cffi
# 下面这条是必要的,否则安装成功了还是会报找不到cffi 的错误
pip install pygit2
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]
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/(usrname)/.mujoco/mujoco200/bin
根据前面配置Mujoco-py 环境和文件的第6)步确认自己的环境变量.
如果是按照博主前面的流程来,是可以正常在vscode下运行上述测试代码的
pip3 install gym
pip3 install gym[all]
但是博主在实际测试过程中发现自动安装的版本和前面的mujoco200不对应, 即gym会自动匹配到mujoco150而不是mujoco200,而我们前面安装的是mujoco200. 搜索了一圈没发现很好的解决办法.
因此暂时只能是用到哪个模块再单独安装了.如有大佬知晓解决方法, 望能指教一二.
import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
observation = env.reset()
for t in range(100):
env.render()
print(observation)
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
print("Episode finished after {} timesteps".format(t+1))
break
import gym
env = gym.make('Hero-ram-v0')
for i_episode in range(20):
observation = env.reset()
for t in range(100):
env.render()
print(observation)
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
print("Episode finished after {} timesteps".format(t+1))
break
解决方案:
pip3 install atari-py
https://zhuanlan.zhihu.com/p/266029027
https://zhuanlan.zhihu.com/p/124001142
https://blog.csdn.net/weixin_44377470/article/details/104928067
https://blog.csdn.net/qs17809259715/article/details/103747724
https://blog.csdn.net/qq_43697649/article/details/105905403
https://blog.csdn.net/jianghao_ava/article/details/80874254
https://blog.csdn.net/chauncygu/article/details/108448173
https://blog.csdn.net/w5688414/article/details/85807467