ubuntu 16.04 安装mujoco仿真 mujoco_py gym stable_baselines版本问题
1.ubuntu 16.04系统mujoco安装的依赖记录
Python 3.7.16
mujoco200
查看已有虚拟环境
conda env list
新建虚拟环境
conda create --name koopmanproject python=3.7
激活一个环境:
conda activate <env_name>
停用当前环境:
conda deactivate
(py37mujoco) abc@123:~/github/spinningup$ pip list
Package Version Editable project location
----------------------------- --------- ---------------------------
absl-py 1.4.0
alabaster 0.7.13
ale-py 0.8.1
astor 0.8.1
atari-py 0.2.9
attrs 23.1.0
Babel 2.12.1
backcall 0.2.0
Box2D 2.3.10
Box2D-kengz 2.3.3
box2d-py 2.3.5
certifi 2022.12.7
cffi 1.15.1
charset-normalizer 3.2.0
click 8.1.6
cloudpickle 1.2.1
cycler 0.11.0
Cython 0.29.23
decorator 4.4.2
dill 0.3.7
docutils 0.18.1
exceptiongroup 1.1.2
fasteners 0.18
fonttools 4.38.0
future 0.18.3
gast 0.2.2
glfw 2.6.2
glob2 0.7
google-pasta 0.2.0
grpcio 1.56.2
gym 0.15.7
gym-notices 0.0.8
h5py 2.10.0
idna 3.4
ImageHash 4.3.1
imageio 2.31.1
imageio-ffmpeg 0.4.8
imagesize 1.4.1
importlib-metadata 6.7.0
importlib-resources 5.12.0
iniconfig 2.0.0
ipdb 0.13.13
ipython 7.34.0
jedi 0.18.2
Jinja2 3.1.2
joblib 1.3.1
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.2
kiwisolver 1.4.4
lockfile 0.12.2
lz4 4.3.2
Markdown 3.4.3
MarkupSafe 2.1.3
matplotlib 3.1.1
matplotlib-inline 0.1.6
moviepy 1.0.3
mpi4py 3.1.4
mujoco 2.2.0
mujoco-py 2.0.2.8
numpy 1.17.3
numpydoc 1.5.0
opencv-python 4.8.0.74
opt-einsum 3.3.0
packaging 23.1
pandas 1.3.5
parso 0.8.3
pexpect 4.8.0
pickleshare 0.7.5
Pillow 9.5.0
pip 22.3.1
pluggy 1.2.0
proglog 0.1.10
progressbar2 4.2.0
prompt-toolkit 3.0.39
protobuf 3.20.0
psutil 5.9.5
ptyprocess 0.7.0
py 1.11.0
pycparser 2.21
pygame 2.1.0
pyglet 1.5.0
Pygments 2.15.1
PyOpenGL 3.1.7
pyparsing 3.1.0
pytest 7.0.1
pytest-instafail 0.3.0
python-dateutil 2.8.2
python-utils 3.5.2
pytz 2023.3
PyWavelets 1.3.0
pyzmq 25.1.0
requests 2.31.0
scipy 1.7.3
seaborn 0.8.1
setuptools 65.6.3
six 1.16.0
snowballstemmer 2.2.0
Sphinx 5.3.0
sphinx-rtd-theme 1.2.2
sphinxcontrib-applehelp 1.0.2
sphinxcontrib-devhelp 1.0.2
sphinxcontrib-htmlhelp 2.0.0
sphinxcontrib-jquery 4.1
sphinxcontrib-jsmath 1.0.1
sphinxcontrib-qthelp 1.0.3
sphinxcontrib-serializinghtml 1.1.5
spinup 0.2.0 /home/abc/github/spinningup
stable-baselines 2.10.2
swig 4.1.1
tensorboard 1.14.0
tensorflow 1.14.0
tensorflow-estimator 1.14.0
termcolor 2.3.0
tomli 2.0.1
torch 1.3.1
tqdm 4.65.0
traitlets 5.9.0
typing_extensions 4.7.1
urllib3 2.0.4
wcwidth 0.2.6
Werkzeug 2.2.3
wheel 0.38.4
wrapt 1.15.0
zipp 3.15.0
zmq 0.0.0
============================
windows 10系统
Python 3.7.11
mujoco200
(mujoco) C:\Users\AIRS\Documents\git\guyueclass-main\machine_learning\MuJoCo_reinforcement_learning\9. gym实例讲解>pip list
Package Version
----------------------------- ---------
absl-py 0.13.0
alabaster 0.7.12
ale-py 0.7
appdirs 1.4.4
argcomplete 1.12.3
argh 0.26.2
arrow 0.13.1
astor 0.8.1
astroid 2.6.6
async-generator 1.10
atari-py 0.2.9
atomicwrites 1.4.0
attrs 21.2.0
autopep8 1.5.6
Babel 2.9.1
backcall 0.2.0
bcrypt 3.2.0
binaryornot 0.4.4
black 19.10b0
bleach 4.0.0
brotlipy 0.7.0
cached-property 1.5.2
certifi 2021.5.30
cffi 1.14.6
chardet 4.0.0
charset-normalizer 2.0.4
click 8.0.1
cloudpickle 1.2.1
colorama 0.4.4
cookiecutter 1.7.2
cryptography 3.4.7
cycler 0.10.0
Cython 0.29.24
debugpy 1.4.1
decorator 5.0.9
defusedxml 0.7.1
diff-match-patch 20200713
docutils 0.17.1
entrypoints 0.3
fasteners 0.16.3
flake8 3.9.0
future 0.18.2
gast 0.2.2
glfw 2.2.0
google-pasta 0.2.0
grpcio 1.40.0
gym 0.15.7
h5py 3.4.0
idna 3.2
imageio 2.9.0
imagesize 1.2.0
importlib-metadata 4.8.1
importlib-resources 5.2.2
inflection 0.5.1
iniconfig 1.1.1
intervaltree 3.1.0
ipykernel 6.2.0
ipython 7.26.0
ipython-genutils 0.2.0
isort 5.9.3
jedi 0.17.2
Jinja2 2.11.3
jinja2-time 0.2.0
joblib 1.0.1
jsonschema 3.2.0
jupyter-client 7.0.1
jupyter-core 4.7.1
jupyterlab-pygments 0.1.2
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.2
keyring 23.1.0
kiwisolver 1.3.2
lazy-object-proxy 1.6.0
Markdown 3.3.4
MarkupSafe 1.1.1
matplotlib 3.4.3
matplotlib-inline 0.1.2
mccabe 0.6.1
mistune 0.8.4
mpi4py 3.1.1
mujoco-py 2.0.2.8
mypy-extensions 0.4.3
nbclient 0.5.3
nbconvert 6.1.0
nbformat 5.1.3
nest-asyncio 1.5.1
numpy 1.20.1
numpydoc 1.1.0
opencv-python 4.5.3.56
opt-einsum 3.3.0
packaging 21.0
pandas 1.3.3
pandocfilters 1.4.3
paramiko 2.7.2
parso 0.7.0
pathspec 0.7.0
pexpect 4.8.0
pickleshare 0.7.5
Pillow 8.3.2
pip 21.0.1
pluggy 0.13.1
poyo 0.5.0
prompt-toolkit 3.0.17
protobuf 3.18.0
psutil 5.8.0
ptyprocess 0.7.0
py 1.10.0
pycodestyle 2.6.0
pycparser 2.20
pydocstyle 6.1.1
pyflakes 2.2.0
pyglet 1.5.0
Pygments 2.10.0
pylint 2.9.6
pyls-black 0.4.6
pyls-spyder 0.3.2
PyNaCl 1.4.0
pyOpenSSL 20.0.1
pyparsing 2.4.7
pyrsistent 0.17.3
PySocks 1.7.1
pytest 6.2.5
python-dateutil 2.8.2
python-jsonrpc-server 0.4.0
python-language-server 0.36.2
python-slugify 5.0.2
pytz 2021.1
pywin32 228
pywin32-ctypes 0.2.0
PyYAML 5.4.1
pyzmq 22.2.1
QDarkStyle 3.0.2
qstylizer 0.1.10
QtAwesome 1.0.2
qtconsole 5.1.0
QtPy 1.10.0
regex 2021.8.3
requests 2.26.0
rope 0.19.0
Rtree 0.9.7
scipy 1.7.1
setuptools 58.0.4
simple-pid 1.0.1
six 1.16.0
snowballstemmer 2.1.0
sortedcontainers 2.4.0
Sphinx 4.0.2
sphinxcontrib-applehelp 1.0.2
sphinxcontrib-devhelp 1.0.2
sphinxcontrib-htmlhelp 2.0.0
sphinxcontrib-jsmath 1.0.1
sphinxcontrib-qthelp 1.0.3
sphinxcontrib-serializinghtml 1.1.5
spinup 0.1
spyder 5.0.5
spyder-kernels 2.0.5
stable-baselines 2.10.2
tensorboard 1.14.0
tensorflow 1.14.0
tensorflow-estimator 1.14.0
termcolor 1.1.0
testpath 0.5.0
text-unidecode 1.3
textdistance 4.2.1
three-merge 0.1.1
tinycss 0.4
toml 0.10.2
torch 1.3.1+cpu
torchvision 0.4.2+cpu
tornado 6.1
traitlets 5.0.5
typed-ast 1.4.3
typing-extensions 3.10.0.2
ujson 4.0.2
Unidecode 1.2.0
urllib3 1.26.6
watchdog 2.1.3
wcwidth 0.2.5
webencodings 0.5.1
Werkzeug 2.0.1
wheel 0.37.0
whichcraft 0.6.1
win-inet-pton 1.1.0
wincertstore 0.2
wrapt 1.12.1
yapf 0.31.0
zipp 3.5.0
安装依赖:
pip install -r requirements.txt
如果是environment.yaml文件
pip install pyyaml
import os
import yaml
with open("environment.yaml") as file_handle:
environment_data = yaml.safe_load(file_handle)
for dependency in environment_data["dependencies"]:
if isinstance(dependency, dict):
for lib in dependency['pip']:
os.system(f"pip install {lib}")
运行脚本即可安装
2.mujoco建模文件xml中坐标轴位姿设定的问题
欧拉角的设定与旋转顺序和参考坐标轴有关
默认的mujoco遵循以下规则,api文档上没有讲清楚,又翻了下教科书才搞清楚。

假如想得到左脚的坐标轴位姿i,对比右脚关节的位姿坐标轴j。初始时,i坐标系和j坐标系是重合的。
mujoco的欧拉角采用的是XYZ旋转顺序,并且是绕imu自身轴i旋转的方式赋值,方向符合右手定则。这种叫欧拉角。有意区别与固定脚,固定角在旋转时,参考坐标轴不动。
即,先绕自身i的x轴旋转-90度,再绕自身i的y轴旋转0度,最后再绕自身i的z轴旋转90度。
<site name="footimu" pos="0.08 0.05 0 " euler="-1.57 0 1.57" size="0.001" rgba="0.5 0.5 1 1"/>
当然也可以表示成,坐标系i相对于坐标系j的姿态,这种表达方式叫固定角。其中X-Y-Z的固定角度,等价与Z-Y-X的欧拉角。不是mujoco采用的方式,需要注意。
旋转矩阵的旋转顺序依据的是左乘的顺序,因此,在从mujoco模型中的数据求解旋转矩阵时,其顺序与欧拉角的顺序是颠倒过来的,其XYZ顺序的欧拉角变换为旋转矩阵的,写法和顺序应为R_j__foot = R_x*R_y*R_z;
按照矩阵乘法,其变换顺序为Z,Y,X,因为欧拉角变换为旋转矩阵时顺序是颠倒过来的,因为对应的欧拉角顺序为XYZ,因此求得的旋转矩阵与mujoco是一直的。
//j坐标到foot坐标的XYZ顺序的欧拉角,求解其对应的旋转矩阵
double x = -M_PI / 2.0; // 绕X轴旋转-π/2
double y = 0.0; // 绕Y轴旋转0
double z = M_PI / 2.0; // 绕Z轴旋转π/2
Eigen::Matrix3d R_x;
R_x<<1,0,0,
0,cos(x),-sin(x),
0,sin(x),cos(x);
Eigen::Matrix3d R_y;
R_y<<cos(y),0,sin(y),
0,1,0,
-sin(y),0,cos(y);
Eigen::Matrix3d R_z;
R_z<<cos(z),-sin(z),0,
sin(z),cos(z),0,
0,0,1;
// 创建一个Euler角对象
Eigen::Matrix3d R_j__foot;
// 将四元数转换为旋转矩阵
// Eigen::Matrix3d R_j__foot = q.toRotationMatrix();
R_j__foot = R_x*R_y*R_z;
// 输出旋转矩阵从joint到foot的旋转矩阵
std::cout << "Rotation Matrix:\n" << R_j__foot << std::endl;
- 求解踝关节的关节夹角
w为世界坐标系,foot是脚侧面坐标系,shank是小腿坐标系在膝关节处,j是关节坐标系,依据坐标变换的链式法则:
目的为求解小腿与关节坐标系夹角,有
至此,公式中所有的变量都是已知量。imu提供的数据为世界坐标系w变换到当前坐标系的值。
3.urdf文件的坐标系关系,以及为脚部添加连杆
在比较精细的考虑脚部运动的时候,需要考虑前脚掌,需要编辑urdf文件进行添加,这样在使用一些机器人库的时候,比如pinocchio::computeFrameJacobian(pinModel, pinData, q_full, rfId, Jright); 计算脚踝处的雅可比矩阵,才能得到准确的脚踝部的运动学数据,以及在pitch与roll方向上的扭矩分配。
添加后脚掌部分如黄色所示,坐标轴为关节坐标轴如图所示

在修改urdf时,有以下几个容易搞混的要点:
1.可视化中的Rendering>>Frame>>Body所显示出的坐标系指的实际上是joint中origin定义的位置;
2.joint中origin位置的定义是相对于父连杆的关节定义的;
3.link中的<collision>的坐标系定义origin的位置参数的定义,是link的几何体中心相对于当前连杆的joint坐标系进行平移,<collision>也是pinocchio库使用的的坐标系的位置,<visual>只是与显示和贴图有关系。
下面是一个添加了右腿脚掌连杆的模型的urdf文件对应的代码部分
<!-- 添加脚尖 -->
<link name="Z7">
<inertial>
<origin xyz="0.0598388610290919 9.18999240586971E-05 -0.0415390165522792" rpy="0 0 0" />
<mass value="0.00470444612628482" />
<inertia ixx="0.00000293207569580641" ixy="4.45841778728434E-08" ixz="0.00000169114902760741" iyy="0.0000285775028065618" iyz="-1.27420911277767E-08" izz="0.000029741248311021" />
</inertial>
<visual>
<origin xyz="0.035 0 0" rpy="0 0 0" />
<geometry>
<!-- 假设脚尖是一个小盒子,忽略显示 -->
<box size="0.01 0.01 0.01" />
</geometry>
<material name="">
<color rgba="0.8 0.8 0.0 1" />
</material>
</visual>
<collision>
<origin xyz="0.035 0 0" rpy="0 0 0" />
<geometry>
<box size="0.07 0.07 0.025" /> <!-- 与视觉属性相同 -->
</geometry>
</collision>
</link>
<joint name="ZJ7" type="revolute">
<origin xyz="0.12 0 -0.045" rpy="0 0 0" />
<parent link="Z6" />
<child link="Z7" />
<axis xyz="0 1 0" />
<limit lower="0.35" upper="-0.35" effort="0" velocity="0" />
</joint>
<!-- 添加脚尖 -->
4.solidworks导出urdf文件,urdf文件结构
一句话概括,urdf中每个关节和连杆标签是按照solidworks的装配体中,配合关系的顺序生成的。
因此,当为人形机器人的树状结构时,采用如下的顺序。

当为脚掌固定的,类似机械臂的结构时,可以重新排列连杆坐标系的顺序,把脚部坐标系放在最上面,可以通过拖动进行排序。这样,导出的顺序就不会差太多。
如果使用body在最上面,也没有关系,生成urdf文件后,可以手动重新排列joint和link标签的内容,也是能得到正确的urdf文件。
更多推荐
所有评论(0)