系列文章目录
前言
表格第二列中的符号含义如下:
! | 必填元素,只能出现一次 |
? | 可选元素,只能出现一次 |
* | 可选元素,可多次出现 |
R | 可选元素,可递归出现多次 |
一、简介
本章是 MuJoCo 中使用的 MJCF 建模语言的参考手册。
1.1 XML 模式
下表总结了 MJCF 中的 XML 元素及其属性。请注意,MJCF 中的所有信息都是通过元素和属性输入的。元素中的文本内容不会被使用;即使存在,解析器也会忽略。
1.2 属性类型
每个属性都有一个由解析器强制执行的数据类型。可用的数据类型有
string | 任意字符串,通常指定文件名或用户自定义的模型元素名称。 |
int(N) | 由 N 个整数组成的数组。如果省略 N,则等于 1。 |
real(N) | 由 N 个实数组成的数组。如果省略 N,则等于 1。 |
[…] | 关键字属性。括号中列出了有效的关键字。 |
对于数组类型的属性,除非在下面的参考文档中另有说明,否则数组的长度由解析器强制执行。
除了数据类型外,属性还可以是必填或可选的。可选属性可以有内部默认值,也可以没有。没有内部默认值的可选属性会以一种特殊的未定义状态初始化。这种状态不同于在 XML 中输入的任何有效设置。通过这种机制,编译器可以确定用户是否以显式方式或通过缺省值 "接触 "过该属性,并采取相应的措施。有些属性的内部默认值(通常为 0)实际上是编译器不允许的。当这些属性与特定上下文相关时,必须将其设置为允许值。
required | 解析器需要该属性。如果不存在,解析器将产生错误。 |
optional | 属性为可选属性。没有内部默认值。属性初始化为未定义状态。 |
“…” | 该属性为可选属性。内部默认值用引号表示。 |
在下面的参考文档中,属性名称以黑体显示,后面是其数据类型,后面是必填/可选状态,包括内部默认值(如果有)。例如,属性 angle 是一个关键字属性,其值可以是 "弧度 "或 "度"。它是一个可选属性,内部默认值为 "度"。因此,它在参考文档中显示为
二、MJCF 参考
MJCF 文件有一个唯一的顶级元素 mujoco。下一级元素称为章节。它们都是可选的。有些部分仅用于分组,没有属性。部分可以重复,以便于通过 include 元素合并模型。元素内属性的顺序可以任意排列。父元素中子元素的顺序也可以任意排列,但有四种例外情况:
- 主体中关节元素的顺序很重要,因为关节变换是按顺序进行的。
- 空间肌腱中元素的顺序很重要,因为它决定了肌腱穿过或缠绕物体的顺序。
- 当同一属性被多次设置为不同值时,重复部分的顺序也很重要。在这种情况下,最后一次设置对整个模型有效。
- 同一默认设置类中多个执行器快捷方式的顺序也很重要,因为每个快捷方式都会设置该默认设置类中单个一般元素的属性,从而覆盖之前的设置。
在本章的其余部分,我们将介绍所有有效的 MJCF 元素及其属性。有些元素可以在多种上下文中使用,在这种情况下,它们的含义取决于父元素。这就是为什么我们在下面的文档中总是以前缀的形式显示父元素。
2.1 元元素
这些元素严格来说并不是底层 MJCF 格式定义的一部分,而是指示编译器对模型执行某些操作。元元素的一般特性是,它们会在保存 XML 时从模型中消失。目前,MJCF 中有四个元元素:
- 模式之外的 include 和坐标系。
- composite 和 flexcomp,它们是模式的一部分,但用于程序化地生成其他 MJCF 元素。
2.1.1 frame(R)
坐标系元元素是一种纯坐标变换,可以包裹运动学树(在 worldbody 下)中的任意一组元素。编译后,坐标系元素消失,其变换累积到直接子元素中。下面将介绍坐标系元元素的属性。
坐标系使用示例
加载并保存此模型:
<mujoco>
<worldbody>
<frame quat="0 0 1 0">
<geom name="Alice" quat="0 1 0 0" size="1"/>
</frame>
<frame pos="0 1 0">
<geom name="Bob" pos="0 1 0" size="1"/>
<body name="Carl" pos="1 0 0">
...
</body>
</frame>
</worldbody>
</mujoco>
该模型的结果:
<mujoco>
<worldbody>
<geom name="Alice" quat="0 0 0 1" size="1"/>
<geom name="Bob" pos="0 2 0" size="1"/>
<body name="Carl" pos="1 1 0">
...
</body>
</worldbody>
</mujoco>
请注意,在保存的模型中,坐标系元素已经消失,但它们的变换与其子元素的变换累积在一起。
2.1.2 include (*)
该元素严格来说不属于 MJCF。相反,它是一个元元素,用于在解析前将多个 XML 文件合并到一个文档对象模型(DOM)中。包含的文件必须是一个有效的 XML 文件,并具有唯一的顶层元素。解析器会移除该顶级元素,并在 include 元素的位置插入其下面的元素。在此过程中,必须至少插入一个元素。包含元素可用于 MJCF 文件中任何需要 XML 元素的地方。允许嵌套包含,但给定的 XML 文件在整个模型中最多只能包含一次。在所有包含的 XML 文件都组装成一个 DOM 后,它必须对应于一个有效的 MJCF 模型。除此之外,用户可以自行决定如何使用包含,以及如何根据需要将大文件模块化。
2.2 mujoco (!)
唯一的顶级元素,用于将 XML 文件标识为 MJCF 模型文件。
2.3 compiler (*)
该元素用于设置内置解析器和编译器的选项。在解析和编译之后,它不再有任何作用。此处的设置是全局性的,适用于整个模型。
2.3.1 compiler/lengthrange (?)
该元素控制执行器长度范围的计算。有关该功能的概述,请参阅长度范围部分。需要注意的是,如果省略该元素,下面显示的默认值仍然适用。要完全禁用长度范围计算,请包含该元素并设置 mode="none"。
2.4 size (*)
此元素指定的尺寸参数不能从模型中的元素个数推断出来。与可以在运行时修改的 mjOption 字段不同,size 是结构参数,不应该在编译后修改。
2.5 statistic (*)
该元素用于覆盖编译器计算的模型统计量。这些统计信息不仅具有信息性,而且还用于缩放渲染和扰动的各个部分。我们在 XML 中提供了一个覆盖机制,因为有时调整少量的模型统计量比调整大量的可视化参数要容易得多。
2.6 visual (*)
该元素与 mjModel 的 mjModel.vis 字段中包含的底层结构 mjVisual 一一对应。这里的设置会影响可视化器,或者更确切地说,影响可视化的抽象阶段,该阶段会生成一个几何实体列表,供后续渲染使用。这里的设置是全局性的,与特定元素的可视化设置不同。全局设置和特定元素设置指的是不重叠的属性。某些全局设置会影响几何基元的三角剖分等属性,而这些属性无法按元素进行设置。其他全局设置会影响装饰对象的属性,即与模型元素不对应的接触点和力箭头等对象。可视化设置按语义分为几个子部分。
该元素非常适合文件包含机制。我们可以创建一个 XML 文件,其中包含与 "主题(theme) "相对应的协调视觉设置,然后将该文件包含在多个模型中。
2.6.1 visual/global (?)
虽然 mjVisual 中的所有设置都是全局性的,但这里的设置却无法放入任何其他子部分。因此,这实际上是一个杂项子节。
ipd:实数,"0.068
该属性指定了自由摄像机的瞳孔间距。它只影响立体模式下的渲染。左右视点在相应方向上的偏移量为该值的一半。
方位角:实数,"90
此属性指定了自由摄像机绕垂直 Z 轴的初始方位角,单位为度。值为 0 表示正 x 方向,默认值为 90 表示正 y 方向。观测点本身由 statistic/center 属性指定,而与观测点的距离则由 statistic/extent 属性控制。
标高:实数,"-45
该属性指定了自由摄像机相对于观测点的初始高度。请注意,由于这是围绕与摄像机 X 轴(像素空间中的右侧)平行的矢量进行的旋转,负数对应于将摄像机从水平面向上移动,反之亦然。观察点本身由 statistic/center 属性指定,而与观察点的距离则由 statistic/extent 属性控制。
线宽:实数,"1
该属性指定 OpenGL 意义上的线宽。它会影响线框模式下的渲染。
glow:real, "0.3"
此属性的值将被添加到所选体上所有几何体的发射系数中。因此,被选中的主体看起来会发光。
realtime: real, "1"
此值用于设置模型在仿真中加载时的初始实时系数。1:实时。小于 1:比实时慢。必须大于 0。
关闭宽度:int, "640"
此属性和下一个属性指定离屏 OpenGL 渲染缓冲区的像素大小。此属性指定缓冲区的宽度。该缓冲区的大小也可在运行时调整,但通常在 XML 中设置更为方便。
offheight: int, "480" (关闭高度)
此属性指定 OpenGL 关闭屏幕渲染缓冲区的高度(像素)。
ellipsoidinertia: [false, true], "false"
此属性用于指定等效惯性的可视化方式。"false":使用方框,"true":使用椭圆体。
bvactive:[false, true], "true
该属性用于指定碰撞和射线投射代码是否应将边界体层次结构中的元素标记为相交,以便可视化。将此属性设置为 "false"(假)可加快高分辨率网格模型的仿真速度。
visual/quality (?)
该元素指定了影响渲染质量的设置。数值越大,质量越高,但速度可能越慢。请注意,simulate.cc 会显示每秒的坐标系帧数(FPS)。FPS 的目标值是 60 Hz;如果可视化器中显示的帧数大大低于此值,则意味着 GPU 负载过重,应该以某种方式简化可视化。
shadowsize:整数,"4096
此属性用于指定阴影贴图所用正方形纹理的大小。数值越大,阴影越平滑。灯光投射阴影的区域大小也会影响光影的平滑度,因此应共同调整这些设置。这里的默认值有些保守。大多数现代 GPU 都能处理大得多的纹理,而不会降低速度。
2.7 asset (*)
2.8 option (*)
2.9 (world)body (R)
该元素用于通过嵌套构建运动树。元素 worldbody 用于顶层体(body),而元素 body 用于所有其他体(body)。顶层体(body)是一种受限制的体(body)类型:它不能有惯性和关节子元素,也不能有任何属性。它与世界坐标系的原点相对应,在世界坐标系中定义了运动树的其他部分。它的体(body)名自动定义为 "world"(世界)。
2.9.1 body/inertial (?)
该元素指定了体(body)的质量和惯性属性。如果给定的体(body)未包含此元素,则惯性属性将从附加到躯体的 geoms 中推断出来。保存编译后的 MJCF 模型时,XML 编写器会使用此元素明确保存惯性属性,即使它们是从几何体中推断出来的。惯性坐标系的中心与物体的质心重合,其轴线与物体的惯性主轴重合。因此惯性矩阵在该坐标系中是对角线。
2.9.2 body/joint (*)
该元素用于创建关节。正如 "运动学树 "中所述,关节在定义关节的体(body)和体(body)的父框架之间创建运动自由度。如果在同一体(body)中定义了多个关节,则会依次应用相应的空间变换(体(body)坐标系相对于父坐标系的变换)。如果没有定义关节,则将体(body)焊接到其父体(body)上。世界体(body)中不能定义关节。运行时,模型中定义的所有关节的位置和方向都会按照运动学树中出现的顺序存储在向量 mjData.qpos 中。线速度和角速度存储在向量 mjData.qvel 中。当使用自由关节或球关节时,这两个向量的维数不同,因为这些关节以单位四元数表示旋转。
2.9.3 body/freejoint (*)
该元素创建一个自由关节,其唯一属性是名称和组。freejoint 元素是
<joint type="free" stiffness="0" damping="0" frictionloss="0" armature="0"/>
虽然这种关节显然可以通过关节元素创建,但默认的关节设置可能会对其产生影响。这通常是不可取的,因为物理自由体不具有非零刚度、阻尼、摩擦或电枢。为了避免这种复杂情况,我们引入了自由关节元素,以确保关节默认设置不会被继承。如果保存 XML 模型,它将显示为自由类型的常规关节。
2.9.4 body/geom (*)
此元素创建一个 geom,并将其刚性连接到定义 geom 的主体上。同一主体可连接多个几何体。在运行时,它们决定体的外观和碰撞属性。在编译时,它们还可以根据惯性元素的存在和编译器中 inertiafromgeom 属性的设置来确定体的惯性属性。具体做法是将所有连接到机体上的 geom 的质量和惯性相加,其中 geom 组的范围由编译器的 inertiagrouprange 属性指定。计算地质体质量和惯性时使用了地质体形状、指定密度或意味着密度的地质体质量以及均匀密度假设。
物理仿真并不严格要求 Geom。我们可以创建和仿真一个只有主体和关节的模型。这样的模型甚至可以可视化,使用等效惯性盒来表示物体。这样的仿真只缺少接触力。我们并不推荐使用此类模型,但了解到这一可能性有助于明确体和关节在 MuJoCo 中的作用。
2.9.4.1 geom/plugin (?)
将此 geom 与引擎插件关联。插件或实例均为必填项。
2.9.5 body/site (*)
该元素创建一个站点,它是一种简化和受限的 geom。这里只提供了一小部分 geom 属性;详细说明请参阅 geom 元素。从语义上讲,站点代表相对于体(body)坐标系的感兴趣的位置。站点不参与碰撞以及体(body)质量和惯性的计算。可用于渲染站点的几何形状仅限于可用 geom 类型的子集。不过,在一些不允许使用几何体的地方也可以使用 "位点":安装传感器、指定空间筋的通点、为执行器构建滑块曲柄传动装置。
2.9.6 body/camera (*)
2.9.7 body/light (*)
2.9.8 body/plugin (?)
2.9.9 body/composite (*)
2.9.10 body/flexcomp (*)
2.9.11 body/frame (*)
2.10 body/frame (*)
2.11 deformable (*)
2.12 equality (*)
2.13 tendon (*)
2.14 actuator (*)
这是执行器定义的分组元素。请回顾计算一章中对 MuJoCo 执行模型的讨论,以及本章前面讨论的执行器快捷方式。下面所有执行器相关元素的前 13 个属性都是相同的,因此我们只在一般执行器下记录一次。
2.14.1 actuator/general (*)
该元素创建了一个通用执行器,提供对所有执行器组件的完全访问权限,并允许用户独立地指定这些组件。
2.14.2 actuator/motor (*)
这三个元素是前面讨论过的执行器快捷方式。当遇到此类快捷方式时,解析器会创建一个普通执行器,并将其 dynprm、gainprm 和 biasprm 属性设置为上述内部默认值,而不考虑任何默认设置。然后,它将根据快捷方式调整 dyntype、gaintype 和 biastype,解析任何自定义属性(除常用属性外),并将其转换为常规属性(即一般执行器类型的属性),详见此处说明。
该元素创建了一个直接驱动执行器。基本的常规属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | none | dynprm | 1 0 0 |
gaintype | fixed | gainprm | 1 0 0 |
biastype | none | biasprm | 0 0 0 |
该元素没有自定义属性。它只有通用属性,即
与执行机构/常规相同。
2.14.3 actuator/position (*)
该元素用于创建位置伺服。基本的一般属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | none | dynprm | 1 0 0 |
gaintype | fixed | gainprm | kp 0 0 |
biastype | affine | biasprm | 0 -kp -kv |
除通用属性外,该元素还有一个自定义属性:
2.14.4 actuator/velocity (*)
该元素用于创建一个速度伺服器。请注意,要创建一个 PD 控制器,必须定义两个执行器:一个位置伺服器和一个速度伺服器。这是因为 MuJoCo 执行器是 SISO 的,而 PD 控制器需要两个控制输入(参考位置和参考速度)。在使用该执行器时,建议使用隐式快速或隐式积分器。基本的一般属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | none | dynprm | 1 0 0 |
gaintype | fixed | gainprm | kv 0 0 |
biastype | affine | biasprm | 0 0 -kv |
除通用属性外,该元素还有一个自定义属性:
与执行机构/常规相同。
2.14.5 actuator/intvelocity (*)
该元素用于创建集成速度伺服。更多信息,请参阅建模章节的激活夹紧部分。基本通用属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | integrator | dynprm | 1 0 0 |
gaintype | fixed | gainprm | kp 0 0 |
biastype | affine | biasprm | 0 -kp -kv |
actlimited | true |
除通用属性外,该元素还有一个自定义属性:
与执行机构/常规相同。
2.14.6 actuator/damper (*)
该元件为主动阻尼器,产生的力与速度和控制力成正比: F = - kv * 速度 * 控制,其中 kv 必须是非负值。使用该执行器时,建议使用隐式快速积分器或隐式积分器。基本的一般属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | none | dynprm | 1 0 0 |
gaintype | affine | gainprm | 0 0 -kv |
biastype | none | biasprm | 0 0 0 |
ctrllimited | true |
除通用属性外,该元素还有一个自定义属性:
与执行机构/常规相同。
2.14.7 actuator/cylinder (*)
该元素适用于气动或液压缸建模。基本的一般属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | filter | dynprm | timeconst 0 0 |
gaintype | fixed | gainprm | area 0 0 |
biastype | affine | biasprm | bias(3) |
除通用属性外,该元素还有四个自定义属性:
与执行机构/常规相同。
2.14.8 actuator/muscle (*)
该元素用于模拟肌肉执行器,如肌肉执行器部分所述。基本的一般属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | muscle | dynprm | timeconst(2) tausmooth |
gaintype | muscle | gainprm | range(2), force, scale, lmin, lmax, vmax, fpmax, fvmax |
biastype | muscle | biasprm | same as gainprm |
除通用属性外,该元素还有九个自定义属性:
与执行机构/常规相同。
timeconst:实数(2),"0.01 0.04"
激活和解除激活动态的时间常数。
tausmooth:实数,"0
激活和去激活时间常数之间平滑过渡的宽度。单位为 ctrl,必须是非负值。
range: real(2), "0.75 1.05" 肌肉的工作长度范围,单位为厘米。
肌肉的工作长度范围,单位为 L0。
力:实数,"-1
静止时的峰值作用力。如果该值为负数,峰值力将通过下面的标度属性自动确定。
scale:实数,"200
如果力属性为负值,肌肉的峰值作用力将设为该值除以 mjModel.actuator_acc0。后者是 qpos0 中执行器传动装置上的单位力所引起的关节空间加速度矢量的法线。换句话说,对于拉动更多重量的肌肉,缩放会产生更高的峰值力。
lmin:实数,"0.5
归一化 FLV 曲线的较低位置范围,单位为 L0。
lmax:实数,"1.6
归一化 FLV 曲线的上限位置范围,以 L0 为单位。
vmax:实数,"1.5
肌力降至零时的缩短速度,单位为 L0/秒。
fpmax:实数,"1.3"
相对于静止峰值力,在 lmax 时产生的被动力。
fvmax:实数,"1.2"
拉伸速度达到饱和时产生的主动力,相对于静止峰值力。
2.14.9 actuator/adhesion (*)
该元素定义了一个主动粘附执行器,可在法线方向的触点上注入力,请参见视频说明。视频中显示的模型可在此处找到,并包含内嵌注释。传输目标是一个体,粘着力会注入到所有涉及到属于这个体的几何体的触点上。力在多个接触点之间平均分配。当不使用间隙属性时,这种致动器需要主动接触,无法远距离施力,更像是壁虎和昆虫脚上的主动粘附,而不是工业真空抓取器。为了实现 "远距离吸力",可将主体的几何体 "充气",并增加一个相应的间隙,只有在间隙穿透距离后才能激活触点。这将在检测到触点但未激活的几何体周围形成一层,可用于施加粘合力。在上面的视频中,这种非活动触点是蓝色的,而活动触点是橙色的。粘合致动器的长度始终为 0。ctrlrange 是必需的,而且必须是非负值(不允许有排斥力)。基本的一般属性设置如下:
Attribute | Setting | Attribute | Setting |
---|---|---|---|
dyntype | none | dynprm | 1 0 0 |
gaintype | fixed | gainprm | gain 0 0 |
biastype | none | biasprm | 0 0 0 |
trntype | body | ctrllimited | true |
该元素有一个常用属性子集和两个自定义属性。
name(名称)、class(类别)、group(组)、forcelimited(有限制的)、ctrlrange(控制范围)、forcerange(控制范围)、user(用户
与执行机构/常规元素相同。
body:字符串,必填
执行器作用于涉及此机构的所有接点。
gain(增益):实数,"1
附着力致动器的增益,以力为单位。执行器施加的总粘着力是控制值乘以增益。这个力会平均分配给目标机构的所有地心。
2.14.10 actuator/plugin (?)
将此执行器与引擎插件关联。插件或实例均为必填项。
plugin:字符串,可选
插件标识符,用于隐式插件实例化。
instance:字符串,可选
实例名称,用于显式插件实例化。
dyntype: [none, integrator, filter, filterexact, muscle, user], "none" (无,积分器,滤波器,精确滤波,肌肉,用户)。
致动器的激活动力学类型。可用的动力学类型已在执行模型部分进行了说明。如果 dyntype 不是 "none",执行器将增加一个激活变量。该变量将被添加到插件计算的激活状态之后(见执行机构插件激活)。
actrange: 实数(2), "0 0"
与执行器动态类型相关的激活状态箝位范围。该限制不适用于插件计算的激活状态。第一个值不得大于第二个值。更多详情,请参阅 "激活箝位 "部分。
与执行机构/常规相同。
2.15 sensor (*)
这是传感器定义的分组元素。它没有属性。所有传感器的输出数据都会汇总到 mjData.sensordata 字段中,该字段的大小为 mjModel.nsensordata。这些数据不会用于任何内部计算。
除了用下面的元素创建的传感器外,顶层函数 mj_step 还计算与身体加速度和相互作用力相对应的 mjData.cacc、mjData.cfrc_int 和 mjData.crfc_ext。其中一些量用于计算某些传感器(力、加速度等)的输出,但即使模型中没有定义此类传感器,这些量本身也是用户可能感兴趣的 "特征"。
2.15.1 sensor/touch (*)
该元素用于创建触摸传感器。传感器的有效区域由一个位置定义。如果接触点位于该位置的范围内,并且涉及到与该位置相连的物体,则相应的接触力将包含在传感器读数中。如果接触点位于传感器区域之外,但法线与传感器区域相交,则也会包括在内。之所以需要这种重新投影功能,是因为如果没有这种功能,接触点可能会从背面离开传感器区域(由于接触点柔性),从而导致错误的力读数。该传感器的输出为非负标量。其计算方法是将所有触点的法向力(标量)相加。
2.15.2 sensor/accelerometer (*)
该元素可创建一个三轴加速度计。传感器安装在站点上,其位置和方向与站点坐标系相同。该传感器会输出三个数字,即在本地坐标中站点的线性加速度(包括重力)。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
2.15.3 sensor/velocimeter (*)
该元素可创建一个三轴测速仪。传感器安装在站点上,其位置和方向与站点坐标系相同。该传感器会输出三个数字,即该站点在本地坐标中的线速度。
2.15.4 sensor/gyro (*)
该元素可创建一个三轴陀螺仪。传感器安装在站点上,其位置和方向与站点坐标系相同。该传感器可输出三个数字,即站点在本地坐标中的角速度。该传感器通常与安装在同一地点的加速度计结合使用,以仿真惯性测量单元(IMU)。
2.15.5 sensor/force (*)
该元素用于创建一个三轴力传感器。传感器会输出三个数字,它们是子代和父代身体之间的相互作用力,用定义传感器的坐标系表示。通常情况下,站点是连接在子代身体上的,力的方向是从子代身体指向父代身体。这里的计算考虑了作用在系统上的所有力,包括接触和外部扰动。使用这种传感器通常需要创建一个与父体焊接在一起的假体(即没有连接元素)。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
2.15.6 sensor/torque (*)
该元素可创建一个三轴扭矩传感器。它与上面的力传感器类似,但测量的是扭矩而不是力。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
2.15.7 sensor/magnetometer (*)
该元素用于创建磁力计。它测量传感器位置处的磁通量,以传感器位置坐标系表示。输出为三维矢量。
2.15.8 sensor/rangefinder (*)
该元素用于创建测距仪。它沿着传感器位置的正 Z 轴所定义的射线,测量到最近的地表的距离。如果射线没有与任何地表相交,传感器的输出值为-1。如果射线的原点在一个地理体内部,则仍会感应到该表面(但不会感应到内部空间)。与传感器位置连接在同一主体上的地理实体将被排除在外。不可见的几何体(定义为 rgba(或其材质 rgba)为 alpha=0 的几何体)也会被排除在外。但请注意,通过禁用其 geom 组而在可视化界面中不可见的 geom 不会被排除;这是因为传感器的计算与可视化界面无关。
2.15.9 sensor/camprojection (*)
该元素用于创建营地投影传感器,以像素坐标返回投影到摄像机图像上的目标位置。该系统的原点位于第一个像素的左上角,因此,如果目标正好投射到图像的一角,其值将为(0,0)。数值不会被剪切,因此落在摄像机图像外的目标值将高于或低于像素限制。此外,摄像机后方的点也会投射到图像上,因此用户可以根据需要过滤掉这些点。为此,可以使用 framepos<sensor-framepos> 传感器,将摄像头作为参考坐标系,然后 Z 坐标中的负值/正值分别表示摄像头前方/后方的位置。
2.15.10 sensor/jointpos (*)
该元素和其余传感器元素不涉及特定传感器的计算。相反,它们会将已经计算过的数量复制到数组 mjData.sensordata 中。该元素用于创建关节位置或角度传感器。它可以连接到标量关节(滑动或铰链)。其输出为标量。
2.15.11 sensor/jointvel (*)
该元素用于创建关节速度传感器。它可以连接到标量关节(滑动或铰链)上。其输出为标量。
2.15.12 sensor/tendonpos (*)
该元素用于创建肌腱长度传感器。它既可连接到空间肌腱,也可连接到固定肌腱。其输出为标量。
2.15.13 sensor/tendonvel (*)
该元素用于创建肌腱速度传感器。它既可连接到空间肌腱,也可连接到固定肌腱。其输出为标量。
2.15.14 sensor/actuatorpos (*)
该元素用于创建执行器长度传感器。每个执行器都有一个具有长度的传动装置。该传感器可以连接到任何执行器上。其输出为标量。
2.15.15 sensor/actuatorvel (*)
该元素用于创建执行器速度传感器。该传感器可连接到任何执行器上。其输出为标量。
2.15.16 sensor/actuatorfrc (*)
该元素用于创建执行器力传感器。传感器感测的是标量执行器力,而不是执行器产生的广义力(后者是标量力与由传动装置决定的力矩臂矢量的乘积)。该传感器可以连接到任何传动器上。其输出为标量。
2.15.17 传感器/关节推杆力传感器 (*)
该元素用于创建一个执行器力传感器,在关节处进行测量。感应的力是所有致动器对单个标量关节(铰链或滑块)产生的广义力。如果关节的致动器重力补偿(actuatorgravcomp)属性为 "true",该传感器还将测量重力补偿力(直接加到关节上,不会记录在致动器重力补偿(actuatorfrc)传感器中)。当多个致动器作用在一个关节上或一个致动器作用在多个关节上时,这种传感器非常重要。详情请参阅力限制。
2.15.18 sensor/ballquat (*)
该元素为球关节创建一个四元数传感器。它会输出与单位四元数相对应的 4 个数字。
2.15.19 sensor/ballangvel (*)
该元素用于创建一个球形关节角速度传感器。它输出 3 个数字,分别对应关节的角速度。该矢量的法线是以拉德/秒为单位的旋转速度,方向是围绕其旋转的轴线。
2.15.20 sensor/jointlimitpos (*)
该元素用于创建位置联合限位传感器。
2.15.21 sensor/jointlimitvel (*)
该元素用于创建速度联合限制传感器。
2.15.22 sensor/jointlimitfrc (*)
该元素用于创建约束力的关节限位传感器。
2.15.23 sensor/tendonlimitpos (*)
该元素用于创建位置腱限位传感器。
名称、噪声、截止、用户
请参见传感器。
tendon:字符串,必填
感应限位的肌腱。传感器输出等于相应限制约束的 mjData.efc_pos - mjData.efc_margin。如果未违反肌腱限制,结果为 0。
2.15.24 sensor/tendonlimitvel (*)
此元素用于创建速度腱限值传感器。
名称、噪声、截止值、用户
请参阅传感器。
肌腱:字符串,必填
感应极限的肌腱。传感器输出复制自 mjData.efc_vel。如果未违反肌腱限值,结果为 0。
2.15.25 sensor/tendonlimitfrc (*)
该元素用于创建约束力的腱限制传感器。
名称、噪声、截止值、用户
请参阅传感器。
tendon:字符串,必填
要检测其极限值的肌腱。传感器输出从 mjData.efc_force 复制。如果未违反肌腱限制,结果为 0。
2.15.26 sensor/framepos (*)
该元素创建一个传感器,返回对象空间坐标系的三维位置,可以是全局坐标,也可以是相对于给定参照系的坐标。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [体、xbody、geom、站点、摄像机],必填
传感器所连接的对象类型。必须是具有空间坐标系的对象类型。"body "指的是物体的惯性坐标系,而 "xbody "指的是物体的规则坐标系(通常以与父物体的连接处为中心)。
objname:字符串,必填
传感器所连接物体的名称。
reftype: [身体、xbody、地理坐标、站点、摄像机]
坐标系所依附的对象类型。其语义与 objtype 属性相同。如果给出 reftype 和 refname,传感器值将根据该坐标系进行测量。如果没有给出这两个属性,则将根据全局坐标系测量传感器值。
refname: 字符串
参照系坐标的对象名称。
2.15.27 sensor/framequat (*)
此元素创建一个传感器,以全局坐标为单位返回指定对象空间坐标系方向的单位四元数。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [body、xbody、geom、site、camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
reftype: [主体、xbody、地理坐标、站点、相机],必填。
请参见帧图像传感器。
refname: 字符串
参见帧坐标传感器。
2.15.28 sensor/framexaxis (*)
此元素创建一个传感器,以全局坐标方式返回与对象空间坐标系 X 轴相对应的三维单位矢量。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [body、xbody、geom、site、camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
reftype: [主体、xbody、地理坐标、站点、相机],必填。
请参见帧图像传感器。
refname: 字符串
请参见 framepos 传感器。
2.15.29 sensor/frameyaxis (*)
此元素创建一个传感器,以全局坐标方式返回与对象空间坐标系 Y 轴相对应的三维单位矢量。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [body、xbody、geom、site、camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
reftype: [主体、xbody、地理坐标、站点、相机],必填。
请参见帧图像传感器。
refname: 字符串
请参见帧姿传感器。
2.15.30 sensor/framezaxis (*)
此元素创建一个传感器,以全局坐标方式返回与物体空间坐标系 Z 轴相对应的三维单位矢量。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [body、xbody、geom、site、camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
reftype: [主体、xbody、地理坐标、站点、相机],必填。
请参见帧图像传感器。
refname: 字符串
请参阅 framepos 传感器。
2.15.31 sensor/framelinvel (*)
此元素创建一个传感器,以全局坐标系为单位返回物体空间坐标系的三维线速度。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [body、xbody、geom、site、camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
reftype: [主体、xbody、地理坐标、站点、相机],必填。
请参见帧图像传感器。
refname: 字符串
请参见 framepos 传感器。
2.15.32 sensor/frameangvel (*)
此元素创建一个传感器,以全局坐标系为单位返回物体空间坐标系的三维角速度。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [body、xbody、geom、site、camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
reftype: [主体、xbody、地理坐标、站点、相机],必填。
请参见帧图像传感器。
refname: 字符串
参见 framepos 传感器。
2.15.33 sensor/framelinacc (*)
此元素创建一个传感器,以全局坐标系为单位返回物体空间坐标系的三维线性加速度。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
名称、噪声、截止值、用户
请参阅 "传感器"。
objtype: [body, xbody, geom, site, camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
2.15.34 sensor/frameangacc (*)
此元素创建一个传感器,以全局坐标为单位返回对象空间坐标系的三维角加速度。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
名称、噪声、截止值、用户
请参阅传感器。
objtype: [body, xbody, geom, site, camera], required
请参阅 framepos 传感器。
objname:字符串,必填
请参阅 framepos 传感器。
2.15.35 sensor/subtreecom (*)
该元素用于创建传感器,以全局坐标返回以指定主体为根的运动学子树的质心。
名称、噪声、截止值、用户
请参阅传感器。
body: 字符串,必填
以运动学子树为根的体的名称。
2.15.36 sensor/subtreelinvel (*)
该元素用于创建传感器,以全局坐标返回以指定机构为根的运动学子树的质心线速度。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_subtreeVel 的调用。
名称、噪声、截止值、用户
请参阅传感器。
body: 字符串,必填
运动学子树的根所在体的名称。
2.15.37 sensor/subtreeangmom (*)
此元素用于创建传感器,以全局坐标返回以指定机构为根的运动学子树质心周围的角动量。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_subtreeVel 的调用。
名称、噪声、截止值、用户
请参阅传感器。
body: 字符串,必填
运动学子树的根所在体的名称。
2.15.38 sensor/clock (*)
此元素创建返回仿真时间的传感器。
name(名称)、noise(噪声)、cutoff(截止)、user(用户
请参阅传感器。
2.15.39 sensor/user (*)
此元素用于创建用户传感器。MuJoCo 不知道如何计算该传感器的输出。用户应安装回调 mjcb_sensor,并在 mjData.sensordata 中填写传感器数据。XML 中的规范用于为该传感器分配空间,并确定该传感器连接到哪个 MuJoCo 对象,以及在计算数据之前需要进行哪个阶段的计算。请注意,此处引用的 MuJoCo 对象可以是一个元组,而元组又可以引用一个自定义的 MuJoCo 对象集合--例如,其质心值得关注的几个物体。
如果用户传感器的阶段为 "vel "或 "acc",则将分别触发 mj_subtreeVel 或 mj_rnePostConstraint。
名称、噪声、截止值、用户
请参阅 "传感器"。
objtype:(任何可命名的元素类型),可选
传感器所连接的 MuJoCo 对象的类型。它与 objname 属性一起决定了实际对象。如果未指定,则为 mjOBJ_UNKNOWN。
objname:字符串,可选
传感器所连接的 MuJoCo 对象的名称。
数据类型: [实数、正数、轴、四元数], "real" (实数
该传感器产生的输出类型。轴 "指单位长度的三维矢量。"quat "表示单位四元数。之所以需要声明这些参数,是因为当 MuJoCo 添加噪声时,必须尊重矢量归一化。"real"(实数)指的是实数的通用数组(或标量),可以独立添加噪声。
需要阶段:[pos, vel, acc],"acc
在用户回调 mjcb_sensor()能够评估该传感器的输出之前必须完成的 MuJoCo 计算阶段。
dim:整数,必填
该传感器的标量输出数。
2.15.40 sensor/plugin (?)
将此传感器与引擎插件关联。插件或实例均为必填项。
plugin:字符串,可选
插件标识符,用于隐式插件实例化。
instance:字符串,可选
实例名称,用于显式插件实例化。
name, cutoff, objtype, objname, reftype, refname, user
请参见传感器。
2.16 keyframe (*)
这是关键帧定义的分组元素。它没有属性。关键帧可用于创建用户感兴趣的状态库,并将仿真状态初始化为库中的一种状态。任何 MuJoCo 计算都不需要关键帧。在 mjModel 中分配的关键帧数量是 size 的 nkey 属性与此处定义的元素数量的较大值。如果此处定义的关键帧元素少于 nkey,则未定义的关键帧的所有数据都将设为 0,但 qpos 属性除外,该属性将设为 mjModel.qpos0。用户也可以在运行时在 mjModel 中设置关键帧数据;这些数据将显示在保存的 MJCF 模型中。请注意,在 simulate.cc 中,仿真状态可以复制到选定的关键帧中,反之亦然。
2.16.1 keyframe/key (*)
此元素为其中一个关键帧设置数据。它们将按照在此出现的顺序进行设置。
名称:字符串,可选
此关键帧的名称。
time:实数,"0
仿真时间,当仿真状态设置为该关键帧时复制到 mjData.time 中。
qpos:real(mjModel.nq),默认 = mjModel.qpos0
关节位置向量,当仿真状态设置为该关键帧时复制到 mjData.qpos 中。
qvel:real(mjModel.nq), "0 0 ..."
关节速度矢量,当仿真状态设置为该关键帧时复制到 mjData.qvel 中。
act:real(mjModel.na),"0 0 ..."
执行器激活向量,当仿真状态设置为该关键帧时复制到 mjData.act 中。
ctrl:real(mjModel.nu), "0 0 ..."。
控制矢量,当仿真状态设置为该关键帧时复制到 mjData.ctrl 中。
mpos:real(3*mjModel.nmocap),默认 = mjModel.body_pos
当仿真状态设置为该关键帧时,复制到 mjData.mocap_pos 中的 mocap 身体位置向量。
mquat:real(4*mjModel.nmocap),默认 = mjModel.body_quat
mocap 身体四元数向量,当仿真状态设置为该关键帧时复制到 mjData.mocap_quat 中。
2.17 default (R)
该元素用于创建一个新的默认类;请参阅上文的默认设置。默认类可以嵌套,继承父类的所有属性值。顶层默认类始终是已定义的;如果省略,则称为 "main"。
class:字符串,必填(顶层除外)
默认类的名称。在所有默认类中必须是唯一的。该名称用于在创建实际模型元素时使该类处于活动状态。
2.17.1 default/mesh (?)
此元素用于设置默认类的虚拟网格元素属性。
这里唯一可用的网格属性是:缩放。
2.17.2 default/material (?)
该元素用于设置默认设置类中虚拟材质元素的属性。
除名称、类别外,所有材料属性都在此可用。
2.17.3 default/joint (?)
该元素用于设置默认设置类中虚拟关节元素的属性。
除名称、类别外,所有关节属性在此都可用。
2.17.4 default/geom (?)
该元素设置默认类的虚拟 geom 元素的属性。
除名称、类别外,所有 geom 属性在此都可用。
2.17.5 default/site (?)
该元素用于设置 defaults 类中虚拟站点元素的属性。
除名称、类别外,所有站点属性在此都可用。
2.17.6 default/camera (?)
该元素用于设置默认设置类中虚拟摄像机元素的属性。
除名称、类别、模式、目标外,所有摄像机属性在此都可用。
2.17.7 default/light (?)
该元素用于设置默认设置类的虚拟灯光元素的属性。
除名称、类别外,所有灯光属性在此都可用。
2.17.8 default/pair (?)
该元素用于设置默认设置类的虚拟配对元素的属性。
除 name、class、geom1、geom2 外,所有配对属性在此都可用。
2.17.9 default/equality (?)
该元素用于设置 defaults 类中虚拟相等元素的属性。实际的平等约束类型取决于用于定义它们的子元素。但在这里,我们设置的是所有平等约束类型的共同属性,因此没有区分类型。
这里可用的平等子元素属性有:active、solref、solimp。
2.17.10 default/tendon (?)
该元素设置 defaults 类中虚拟肌腱元素的属性。与平等约束类似,实际的肌腱也有类型,但这里我们设置的是所有类型的共同属性。
除名称、类别外,所有子元素属性在此都可用。
2.17.11 default/general (?)
该元素设置 defaults 类中虚拟通用元素的属性。
除名称、类别、关节、关节父节点、部位、反射部位、肌腱、滑块部位、曲柄部位外,所有常规属性在此都可用。
2.17.12 default/motor (?)
该元素和后面三个元素使用执行器快捷方式设置一般元素的属性。在同一个默认设置类中使用多个此类快捷方式是没有意义的,因为它们设置的基本属性是相同的,会取代之前的任何设置。除了名称、类别、关节、关节父节点、部位、参考部位、肌腱、滑块部位、曲柄部位外,所有电机属性在此都可用。
2.17.13 default/position (?)
除名称、类别、关节、关节父节点、部位、参考点、肌腱、滑块点、曲柄点外,所有位置属性在此都可用。
2.17.14 default/velocity (?)
此处提供所有速度属性,但以下属性除外:名称、类别、关节、关节父节点、部位、参考点、肌腱、滑块点、曲柄点。
2.17.15 default/intvelocity (?)
所有 intvelocity 属性在此都可用,但以下属性除外:名称、类别、关节、关节父节点、部位、参考点、肌腱、滑块点、曲柄点。
2.17.16 default/damper (?)
除名称、类别、关节、关节父节点、部位、反射部位、肌腱、滑块部位、曲柄部位外,所有阻尼器属性在此都可用。
2.17.17 default/cylinder (?)
除名称、类别、关节、关节父节点、部位、反射部位、肌腱、滑块部位、曲柄部位外,所有圆柱体属性在此都可用。
2.17.18 default/muscle (?)
除名称、类别、关节、关节上源、部位、反射部位、肌腱、滑块部位、曲柄部位外,所有肌肉属性在此都可用。
2.17.19 default/adhesion (?)
除名称、类别、主体外,所有粘附属性在此都可用。