目录
.1 运行
1.1 测试
.2 XML
2,1 基础
2.3 简单实例
2.3 进阶例子
.1 运行
1.1 测试
基于Mujoco210 Ubuntu 22.04配置安装_啥也不是的py人的博客-CSDN博客完成安装后
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)
运行结果
即为接口没问题
.2 XML
XML 语法 | 菜鸟教程
XML Reference - MuJoCo Documentation
2,1 基础
模板
注意大小写在XML中是有区别的
1、mujoco
属性-model: 类型-string
可以定义这个模型的名称,也是xml必要开头
2、compiler
这个元素是用于设置内置解析器和编译器选项。解析和编译后不再有任 何影响。这里的设置是全局性的,适用于整个模型。
boundmass: real , "0"
-提供一个比body更低的边界限制,以解决模型建立不准确问题。注意mujoco没有dummy(虚拟实体)设置。
coordinate[坐标系]:[local , global] "local" for MJCF, always "local" for URDF
-该属性用于指定文档撰写模型的位置方向是在local还是global的。URDF解析器将属性内部设置为loacl,无法修改。
angle:[radian, degree]
-指定弧度制和角度值。MJCF默认弧度制,urdf默认角度制。
meshdir: string, optional
-string是定位mesh或高度场文件路径。
texturedir:string , optional
-用于搜寻文档
3、optional
timestep:real , "0.002"(实数类型)
-以秒为单位的仿真步长,必须长于CPU时长。
apirate:real , "100"
-套接字API的更新速度。不影响物理仿真。
impratio:real , "1"
-定义较为复杂的摩擦力
gravity:real(3),"0 0 -9.81"
-自然是定义重力的。默认z轴向上。
还有wind、density、viscosity、magnetic风、密度、粘度、磁力等物理性质;
collision : [all , predefined , dynamic] , "all"
-检测几何碰撞。括号内表示检测对象的选择。
4、optional/flag
性质的enable和disable
5、asset
texture、hfield、mesh、skin/bone、material
6、(world)body
name:string,optional
-命名
childclass: string, optional
-继承设置
mocap:[false , true],"false"
-仅为世界实体下属且没有关节才设置为真。
pos: real(3),optional
-默认(0,0,0)
6.1、body/inertial
pos:real(3),required
-惯性坐标系的位置
quat,axisangle,xyaxes,zaxis,euler
-惯性坐标系方向
mass:real,required
-实体质量。
diainertia:real(3),optional
-对角惯性矩阵,表达相对于惯性坐标系实体的惯性。如果省略则fullinertia必须。
fullinertia:real(6),optional
-3x3的对称阵M,因此只需要六个变量。
6.2、body/joint 在该元素下创建关节,如若没有定义关节,那么实体就是焊接于母体之上的
name:string,optional
class:string,optional
type:[free , ball , slide , hinge],"hinge"
-定义关节类型。
-free-即六自由度关节,就是可以使实体漂浮。
-ball-就是球形关节
-slide-滑动关节
-hinge-铰接关节,有一个转动自由度,并且是默认关节类型
group:int,"0"
-整合关节组,方便调用
pose:real(3),"0 0 0"
-关节位置
axis:real(3)," 0 0 1"
-指定旋转轴铰链关节旋转方向;滑动关节的滑动方向。
range:reeal(2),"0 0"
-可以限制所有关节,除了自由关节
damping:real, "0"
-阻尼设置
9、body/geom 碰撞的必要条件
name:string,optional
class:string,optional
type: [plane,hfield,sphere,capsule,cylinder,box,mesh],"sphere"
-参数代表了几何形状。
rgba:real(4),"0.5 0.5 0.5 1"
-设置颜色和透明度
mesh:string,optional
-应该指的是,设置为网格时,会参考字符串指定形状生成几何形状。
2.3 简单实例
MuJoCo_Lec_1__Working_with_XML_files_(Spring_2022)_哔哩哔哩_bilibili
创建一个hello.xml
然后simulate一下
或者直接simulate然后拖入xml即可
ps:mujoco只加载一个xml多个xml无法叠加
以下为代码
<mujoco>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
丢进去的效果
两个方块的代码
<mujoco>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
<body pos="0 1 1">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
diffuse是光的漫反射颜色
dir是光的照射方向
pos是光的位置
geom就是导入的物体形状
加一个球的xml如下
<mujoco>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
<body pos="0 1 1">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
<body pos="0 1 1">
<joint type="free"/>
<geom type="sphere" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
2.3 进阶例子
增加euler角
<mujoco>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1" euler="0 30 0">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
修改渲染措施Frame World可以显示世界坐标系
compiler 可以修改单位
比如把角度的单位修改为弧度制
<mujoco>
<compiler angle="radian"/>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1" euler="0 -0.5 0">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
option可以修改一些参数
修改重力,这样物体降落的很慢
<mujoco>
<compiler angle="radian"/>
<option gravity="0 0 -1"/>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1" euler="0 -0.5 0">
<joint type="free"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
修改惯性
加入惯性的xml
<mujoco>
<compiler angle="radian"/>
<option gravity="0 0 -1"/>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1" euler="0 -0.5 0">
<joint type="free"/>
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
inertial pos="0 0 0" pos的修改会影响物体的质心
可以显示mass中心和接触力()
visual模块
场景和物体更亮
<mujoco>
<compiler angle="radian"/>
<visual>
<headlight ambient="1 0.5 0.5">
</visual>
<option gravity="0 0 -1"/>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1" euler="0 -0.5 0">
<joint type="free"/>
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
<geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/>
</body>
</worldbody>
</mujoco>
asset
类似于xarco定义一个变量后续标签直接调用
<mujoco>
<compiler angle="radian"/>
<visual>
<headlight ambient="0.5 0.5 0.5"/>
</visual>
<asset>
<material name="white" rgba="1 1 1 1"/>
</asset>
<option gravity="0 0 -1"/>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1" euler="0 -0.5 0">
<joint type="free"/>
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
<!-- <geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/> -->
<geom type="box" size=".1 .2 .3" material="white"/>
</body>
</worldbody>
</mujoco>
加入两个盒子
<mujoco>
<compiler angle="radian"/>
<visual>
<headlight ambient="0.5 0.5 0.5"/>
</visual>
<asset>
<material name="white" rgba="1 1 1 1"/>
</asset>
<option gravity="0 0 -1"/>
<worldbody>
<light diffuse=".5 .5 .5" pos="0 0 3" dir="0 0 -1"/>
<geom type="plane" size="1 1 0.1" rgba=".9 0 0 1"/>
<body pos="0 0 1" euler="0 0 0">
<joint type="free"/>
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
<!-- <geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/> -->
<geom type="box" size=".1 .2 .3" material="white"/>
</body>
<body pos="0 0 2" euler="0 1.57 0">
<joint type="free"/>
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
<!-- <geom type="box" size=".1 .2 .3" rgba="0 .9 0 1"/> -->
<geom type="box" size=".1 .2 .3" material="white"/>
</body>
</worldbody>
</mujoco>