我的环境
Ubuntu 16.04 64bit
cuda 8.0
cudnn 6.0
python3.5.2
tensorflow-gpu 1.4.1
1.去Mujoco官网下载mjpro150 linux。
2.在home目录下创建隐藏文件夹mujoco,并将刚才下载好的安装包解压到这个文件夹下。
mkdir ~/.mujoco
cp mjpro150_linux.zip ~/.mujoco
cd ~/.mujoco
unzip mjpro150_linux.zip
3.在官网的license界面,下载getid_linux,获取该执行程序的可执行权限后,运行此程序,获得你computer_id.填写你的信息,下载免费30天的license,博主直接获取了学生免费license,可以用一年,非学生用户是要付钱的。总之你会获得一个mjkey.txt文件,拷贝到刚才创建的文件夹下面,以及mjpro150的bin目录里。
运行getid_linux:
chmod +x getid_linux
./getid_linux
拷贝许可证:
cp mjkey.txt ~/.mujoco
cp mjkey.txt ~/.mujoco/mjpro150/bin
4.添加环境变量
gedit ~/.bashrc
内容如下:
export LD_LIBRARY_PATH=~/.mujoco/mjpro150/bin${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
说明:没有这一步,运行下面内容的时候,会报以下错,几个动态链接没找到:
./simulate: error while loading shared libraries: libmujoco150.so: cannot open shared object file: No such file or directory
ldd simulate
出现以下信息,bin目录下三个链接文件都没有找到:
linux-vdso.so.1 => (0x00007fffb27f8000)
libmujoco150.so => not found
libGL.so.1 => /usr/lib/nvidia-384/libGL.so.1 (0x00007fca30c9f000)
libglew.so => not found
libglfw.so.3 => not found
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fca30995000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fca305cb000)
libnvidia-tls.so.384.111 => /usr/lib/nvidia-384/tls/libnvidia-tls.so.384.111 (0x00007fca303c6000)
libnvidia-glcore.so.384.111 => /usr/lib/nvidia-384/libnvidia-glcore.so.384.111 (0x00007fca2e509000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fca2e1cf000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fca2dfbc000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fca2ddb8000)
/lib64/ld-linux-x86-64.so.2 (0x000056302c1db000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fca2db96000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fca2d991000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fca2d78b000)
添加的环境变量的第二条是为安装mujoco_py做准备,这里直接先写上了。
5.进入bin目录下,运行simulate,拖动xml文件进去,会看到下图:
cd ~/.mujoco/mjpro150/bin
./simulate
博主的安装方法并不唯一,另外注意的是,安装完mujoco_py之后,3D渲染器的功能没有实现,但是别担心,博主后面会提出补救措施,如果介意的话,请查阅其他资料。
1.下载mujoco_py的源码,解压到你指定的目录下,比如home目录。
2.先把可能缺的东西装全, 建议去更换一下软件源。
sudo apt-get update -q
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y curl git libgl1-mesa-dev libgl1-mesa-glx libglew-dev libosmesa6-dev python3-pip python3-numpy python3-scipy net-tools unzip vim wget xpra xserver-xorg-dev
sudo apt-get clean
rm -rf /var/lib/apt/lists/*
3.安装patchelf
sudo -s
curl -o /usr/local/bin/patchelf https://s3-us-west-2.amazonaws.com/openai-sci-artifacts/manual-builds/patchelf_0.9_amd64.elf
chmod +x /usr/local/bin/patchelf
4.确认显卡驱动安装正确,cuda、cudnn安装无误,进行下一步操作
cp ~/mujoco-py-master/vendor/10_nvidia.json /usr/share/glvnd/egl_vendor.d/10_nvidia.json
5.进入mujoco_py目录里,执行以下语句,把依赖包装好。
cd ~/mujoco-py-master
cp requirements.txt requirements.dev.txt mujoco_py
cd mujoco_py
sudo pip3 install -r requirements.txt
sudo pip3 install -r requirements.dev.txt
6.安装
cd ~/mujoco-py-master/vendor
./Xdummy-entrypoint
cd ..
sudo python3 setup.py install
这里注意的是,博主都是sudo pip3安装的,会安装到/usr/local/lib/python3.5/dist-packages这个目录下,当然,也可以不加sudo,会安装到/home/ls/.local/lib/python3.5/site-packages里面,注意的是,要么都加,要么都不加,不然会出现一些包找不到的问题。
7.测试是否可用:
如果你像我一样sudo安装的话,建议你第一次先sudo python3 打开编辑界面,import mujoco_py,不然会出现以下报错:
执行上一步操作后,运行以下代码:
运行examples下面的body_interaction.py ,会报错:
这个问题在Github上有热烈讨论,见issues,mujoco_py.MjViewer不能用,不能显示你的控制成果。不过别着急,可以自己写渲染器,比如我在issues回答里面找到的这个:
import glfw
import numpy as np
from OpenGL.GLU import *
from OpenGL.GL import *
class Viewer():
def __init__(self, sim):
self.sim = sim
if not glfw.init():
return
# Create a windowed mode window and its OpenGL context
self._window = glfw.create_window(640, 480, "Hello World", None, None)
if not self._window:
glfw.terminate()
return
# Make the window's context current
glfw.make_context_current(self._window)
def render(self):
# Make the window's context current
glfw.make_context_current(self._window)
if glfw.window_should_close(self._window):
glfw.terminate()
self.image = self.sim.render(640, 480).astype(np.float) / 255.0
# Render here, e.g. using pyOpenGL
self.texture = glGenTextures(1)
glEnable(GL_TEXTURE_2D)
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glBindTexture(GL_TEXTURE_2D, self.texture)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP)
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGB,
self.image.shape[1], self.image.shape[0], 0,
GL_RGB,
GL_FLOAT,
self.image)
glDisable(GL_TEXTURE_2D)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glClearColor(0., 0., 0., 0.)
glClearDepth(1)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glBindTexture(GL_TEXTURE_2D, self.texture)
glEnable(GL_TEXTURE_2D)
# draw a textured quad, shrink it a bit so the edge is clear
glBegin(GL_QUADS)
glTexCoord2f(0., 0.)
glVertex3f(-0.9, -0.9, 0.)
glTexCoord2f(1., 0.)
glVertex3f(0.9, -0.9, 0.)
glTexCoord2f(1., 1.)
glVertex3f(0.9, 0.9, 0.)
glTexCoord2f(0., 1.)
glVertex3f(-0.9, 0.9, 0.)
glEnd()
glDisable(GL_TEXTURE_2D)
# Swap front and back buffers
glfw.swap_buffers(self._window)
# Poll for and process events
glfw.poll_events()
调用这个viewer可以勉强使用,检测运行动态。
其实mujoco可以用c++语言控制,但是博主最近在做强化学习下的控制,主要用的python代码,对python的环境熟悉一些,所以踏遍所有坑也要安装mujoco_py。当然还有一些不完美,比如3D渲染器不能用,issues上也没有给出有效解决措施,只能先用上面的代替一下,后期会继续改进。另外,后期博主会更新一些mujoco中xml代码的编写规范,和mujoco_py的运用,希望做强化学习控制的小伙伴多多交流。比心~*^_^*~