先建立基本场景
worldbody的一些属性
1 light 灯光
2 geom 外观,涉及到尺寸,位置等
<mujoco model="darwin v1.31">
<compiler angle="radian" inertiafromgeom="true" meshdir="meshes/"/>
<size nconmax="100" njmax="500" nstack="-1"/>
<default>
<geom material="MatFrame" margin='0.001' />
<joint limited='true' frictionloss="0.2" damping="1.06" armature="0.011" axis="0 0 1" pos="0 0 0"/>
<position ctrllimited='true' kp='2.65'/>
</default>
<asset>
<texture type="skybox" builtin="gradient" rgb1="1 1 1" rgb2="0 0 0" width="100" height="100"/>
<texture name="groundplane" type="2d" builtin="checker" rgb1=".7 .7 .75"
rgb2=".9 .9 .95" width="500" height="500" mark="edge" markrgb=".1 .1 .1"/>
<material name="MatPlastic" specular=".8" shininess=".6" reflectance="0.5" rgba=".4 .41 .4 1"/>
<material name="MatFrame" specular="1.2" shininess=".1" reflectance="0.5" rgba=".21 .2 .2 1"/>
<material name="MatGnd" texture="groundplane" texrepeat="5 5" specular=".5" shininess=".01" reflectance="0.1"/>
</asset>
<worldbody>
<light directional="false" cutoff="60" exponent="1" diffuse=".5 .5 .5" specular=".1 .1 .1" pos="0.5 0.1 0.8" dir="-0.5 -0.1 -0.8"/>
<geom name="ground" pos="0 0 0" size="5 5 5" material="MatGnd" type="plane"/>
</worldbody>
</mujoco>
效果:
以上来自Feisy
<body name="pelvis" pos="0 0 0.45">
<joint type="hinge" limited='false' axis="1 0 0" />
<geom type="cylinder" size="0.005 0.1"/>
<body name="l_leg" pos="0 0.0 -0.22" euler="0 0 0">
<joint type="hinge" limited='false' axis="1 0 0" pos="0 0 0"/>
<geom type="cylinder" size="0.01 0.1"/>
</body>
</body>
这里需要注意一下,这里的pos是本连杆的体坐标系在上一个连杆的体坐标系中的坐标,
而不是本连杆的末端在上一个体坐标系中的坐标
看例子就很容易明白了,l_leg,pelvis的长度是0.2,l_leg在pelvis的坐标是0 0 -0.22
两个体坐标系的原点质检的差异是0.22,所以两个连杆之间会有0.02的空隙
ieo艾易欧科技
Mujoco——xml的官方参考文档
https://mujoco.readthedocs.io/en/latest/XMLreference.html
部分解释
一、每个元素的属性顺序无关;父元素下子元素顺序可以任意,除了:
i.body元素下的关节元素的顺序
ii.spatial tendon元素下的元素顺序
iii.重复属性的顺序,以最后一次设置为整个模型参数
iv.快捷键设置的顺序,后者覆盖前者
二、element§ion
(模板:
i、元素名称
属性:参数
-解释)
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)
7、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,因此只需要六个变量。
8、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
-应该指的是,设置为网格时,会参考字符串指定形状生成几何形状。
来自https://blog.csdn.net/LEGEND_KL/article/details/114625110