系列文章目录
前言
表格第二列中的符号含义如下:
! | 必填元素,只能出现一次 |
? | 可选元素,只能出现一次 |
* | 可选元素,可多次出现 |
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 是一个关键字属性,其值可以是 "弧度 "或 "度"。它是一个可选属性,内部默认值为 "度"。因此,它在参考文档中显示为
angle: [radian, degree], “degree”
二、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 模型。除此之外,用户可以自行决定如何使用包含,以及如何根据需要将大文件模块化。
file: string, required
要包含的 XML 文件的名称。文件位置相对于 MJCF 主文件的目录。如果文件不在同一目录下,则应使用相对路径作为前缀。
2.2 mujoco (!)
唯一的顶级元素,用于将 XML 文件标识为 MJCF 模型文件。
model: string, “MuJoCo Model”
模型名称。此名称将显示在 simulate.cc 的标题栏中。
2.3 compiler (*)
该元素用于设置内置解析器和编译器的选项。在解析和编译之后,它不再有任何作用。此处的设置是全局性的,适用于整个模型。
autolimits: [false,true],"true
该属性会影响 "limited"(在<body-joint>或<tendon>上)、"forcelimited"、"ctrllimited "和 "actlimited"(在<actuator>上)等属性的行为。如果为 "true",则不需要这些属性,它们的值将从相应的 "range "属性中推断出来。如果为 "false",则不会进行此类推理: 要限制一个关节点,必须同时指定 limited="true" 和 range="min max"。在这种模式下,指定一个没有限制的范围是错误的。
boundmass:实数,"0
除世界体外,此属性为每个物体的质量设置了一个下限。将此属性设置为大于 0 的值,可以快速解决包含无质量运动体的设计不良的模型问题,例如 URDF 模型中经常用来连接传感器的假体。请注意,在 MuJoCo 中不需要创建假体。
boundinertia:实数,"0
此属性为除世界体以外的每个体的对角惯性分量设置了一个下限。其用途与上述的 boundmass 类似。
settotalmass:实数,"-1"
如果此值为正,编译器将缩放模型中所有物体的质量和惯性,使总质量等于此处指定的值。世界体的质量为 0,不参与任何与质量相关的计算。该缩放操作是最后进行的,在所有其他影响物体质量和惯性的操作之后进行。同样的缩放操作可以在运行时通过函数 mj_setTotalmass 应用于编译后的 mjModel。
balanceinertia:[false, true], "false"。
一个有效的对角惯性矩阵必须满足 A+B>=C 对三个对角元素的所有排列。一些设计不佳的模型会违反这一约束,通常会导致编译错误。如果将此属性设置为 "true",只要违反上述条件,编译器就会默默地将所有三个对角元素设置为其平均值。
strippath: [false,true],对于 MJCF 为 "false",对于 URDF 为 "true
当此属性为 "true "时,解析器将删除模型中指定的文件名中的任何路径信息。这对于加载使用不同目录结构在不同系统上创建的模型非常有用。
coordinate: [local, global], “local”
在以前的版本中,该属性可用于指定坐标系的位置和方向是用本地坐标还是全局坐标表示,但 "全局 "选项后来已被删除,并将导致生成错误。为了转换使用 "全局 "选项的旧模型,请在 MuJoCo 2.3.3 或更早版本中加载和保存它们。
angle: [radian, degree], “degree” for MJCF, always “radian” for URDF
此属性指定 MJCF 模型中的角度是以度还是弧度为单位。编译器会将 "度 "转换为 "弧度",因此 mjModel 总是使用 "弧度"。对于 URDF 模型,无论 XML 设置如何,解析器都会在内部将此属性设置为 "弧度"。
fitaabb:[false, true], "false
编译器可以用与网格匹配的几何基元替换网格;请参阅下文的 geom。如果此属性为 "true",拟合过程将使用网格的轴对齐包围盒(aabb)。否则将使用网格的等效惯性方框。拟合所使用的几何基元类型由每个 geom 单独指定。
eulerseq:字符串,"xyz
此属性用于指定具有空间坐标系的元素的所有欧拉属性的欧拉旋转序列,如 "坐标系方向 "中所述。这必须是一个字符串,其中包含来自 {x, y, z, X, Y, Z} 集合的 3 个字符。位于 n 位的字符决定了 n 次旋转所围绕的轴。小写字母表示随坐标系旋转的轴(内在轴),大写字母表示固定在父坐标系中的轴(外在轴)。URDF 中使用的 "rpy "约定与 MJCF 中的 "XYZ "相对应。
meshdir:字符串,可选
此属性指示编译器在何处查找网格和高度场文件。文件的完整路径按以下方式确定。如果上述 strippath 属性为 "true",则会删除文件名中的所有路径信息。然后依次进行以下检查:(1) 如果文件名包含绝对路径,则使用该绝对路径而不做进一步更改;(2) 如果设置了该属性且包含绝对路径,则完整路径为此处给出的字符串,并与文件名相附加;(3) 完整路径为 MJCF 主模型文件的路径,如果指定了该属性,则与该属性值相附加,并与文件名相附加。
texturedir:字符串,可选
该属性用于指示编译器在哪里查找纹理文件。其作用与上述 meshdir 相同。
assetdir: 字符串,可选
此属性设置上述 meshdir 和 texturedir 的值。后两个属性中的值优先于 assetdir。
discarevisual:[false, true],对于 MJCF 为 "false",对于 URDF 为 "true
此属性指示编译器丢弃所有纯粹视觉的、对物理没有影响的模型元素(有一个例外,见下文)。这通常可以缩小 mjModel 结构并加快仿真速度。
- 舍弃所有材质
- 丢弃所有纹理
- 丢弃所有 contype=conaffinity=0 的几何体(如果它们未在其他 MJCF 元素中引用)。如果已丢弃的几何体用于推断体惯性,则会在体上添加一个显式惯性元素。
- 所有未被任何几何元素引用的网格(尤其是上述被丢弃的网格)都将被丢弃。
编译后的模型将具有与原始模型完全相同的动力学特性。唯一可能改变的引擎级计算是射线投射计算的输出,例如测距传感器使用的射线投射,因为射线投射会报告可视几何体的距离。在可视化使用此标记编译的模型时,需要注意的是碰撞几何体通常被放置在默认情况下不可见的组中。
convexhull: [false, true], “true”
如果此属性为 "true",编译器将自动为每个至少在一个非可视几何体中使用的网格生成一个凸壳(在上述 discardvisual 属性的意义上)。这样做是为了加快碰撞检测的速度;请参阅 "计算 "章节中的 "碰撞检测 "部分。即使网格已经是凸的,弧体也包含网格文件中没有的边缘信息,因此需要构建弧体。禁用此功能的唯一原因是为了在编辑模型时加快重新加载大网格模型的速度(因为凸壳计算是编译器执行的最慢操作)。然而,一旦模型设计完成,就应该启用该功能,因为凸壳的可用性会大大加快大型网格的碰撞检测速度。
usethread: [false, true], “true”
如果此属性为 "true",模型编译器将以多线程模式运行。目前,多线程仅在计算执行器长度范围时使用,但将来编译器的其他阶段可能会使用多线程。
fusestatic:[false, true],对于 MJCF 为 "false",对于 URDF 为 "true
此属性控制一种编译器优化功能,即静态体与其父体融合,并且在这些体中定义的任何元素都会重新分配给父体。此功能只适用于在运动树中没有能命名引用的元素的模型,即皮肤、接触对、排除、肌腱、致动器、传感器、图元、摄像机、灯光。如果模型中包含这些元素,即使启用了 fusestatic 功能也无济于事。这种优化在导入 URDF 模型时特别有用,因为 URDF 模型通常有许多假体,但也可用于优化 MJCF 模型。优化后,新模型的运动学和动力学特性与原始模型完全相同,但仿真速度更快。
inertiafromgeom: [false, true, auto], "auto"
该属性控制从连接到物体上的几何体自动推断物体质量和惯性。如果设置为 "false",则不会执行自动推理。在这种情况下,每个体必须通过惯性元素明确定义质量和惯性,否则会产生编译错误。如果该设置为 "true"(真),则每个体的质量和惯性都将从与其相连的 geoms 中推断出来,并覆盖惯性元素中指定的任何值。默认设置 "auto(自动)"表示只有当体定义中缺少惯性元素时才会自动推断质量和惯性。将该属性设置为 "true "而不是 "auto "的一个原因是为了覆盖从设计不佳的模型中导入的惯性数据。特别是一些公开的 URDF 模型的惯性似乎是任意的,与质量相比过大。这导致等效惯性盒远远超出了模型的几何边界。请注意,内置的 OpenGL 可视化程序可以渲染等效惯性盒。
exactmeshinertia:[false, true], "false"
如果此属性设置为 false,则使用传统算法计算网格惯性,该算法仅对凸网格精确。如果设置为 true,则对任何封闭网格几何体都是精确的。
inertiagrouprange: int(2), "0 5".
此属性指定用于推断体质量和惯性的 geom 组的范围(启用推断时)。geom 的 group 属性是一个整数。如果该整数在此处指定的范围内,则在惯性计算中使用该 geom,反之亦然。
2.3.1 compiler/lengthrange (?)
该元素控制执行器长度范围的计算。有关该功能的概述,请参阅长度范围部分。需要注意的是,如果省略该元素,下面显示的默认值仍然适用。要完全禁用长度范围计算,请包含该元素并设置 mode="none"。
mode: [none, muscle, muscleuser, all], “muscle”
确定应用长度范围计算的执行器类型。无 "禁用此功能。"全部 "适用于所有执行器。"肌肉 "适用于增益类型或偏astype 设置为 "肌肉 "的执行机构。"肌肉用户 "适用于增益类型或偏astype 设置为 "肌肉 "或 "用户 "的执行器。默认值为 "肌肉",因为 MuJoCo 的肌肉模型要求定义致动器的长度范围。
useexisting: [false,true],"true
如果该属性为 "true",且模型中已定义了给定致动器的长度范围,则将使用现有值,并跳过自动计算。如果第一个数字小于第二个数字,则该范围被视为已定义。将此属性设为 "false "的唯一原因是为了强制重新计算执行器的长度范围--当模型的几何形状被修改时就需要这样做。需要注意的是,自动计算依赖于仿真,速度可能较慢,因此建议保存模型并尽可能使用现有值。
uselimit: [false, true], “false”
如果该属性为 "true",并且致动器连接到一个已定义了限制的关节或肌腱上,那么这些限 制将被复制到致动器的长度范围内,自动计算将被跳过。这似乎是个好主意,但要注意的是,在复杂的模型中,肌腱致动器的可行范围取决于整个 模型,而且可能小于用户为该肌腱定义的限制。因此更安全的方法是将其设置为 "false",让自动计算来发现可行范围。
accel: real, “20”
该属性可缩放应用于仿真的力,以便将每个推杆推至最小和最大长度。在计算力的大小时,所得到的联合空间加速度矢量的规范等于此属性。
maxforce: real, “0”
当推杆具有非常小的力矩时,通过上述 accel 属性计算出的力可能会非常大。这样的力仍能产生合理的加速度(根据构造),但较大的力可能会导致数值问题。虽然我们从未观察到此类问题,但还是提供了本属性作为保障。将其设置为大于 0 的值可限制仿真过程中施加的力的标准值。默认设置为 0 时将禁用该保护措施。
timeconst: real, “1”
以非物理方式对仿真进行阻尼,以便将执行器推至极限,同时避免出现不稳定的风险。具体做法是在每个时间步长内降低关节速度。在没有新加速度的情况下,这种缩放将以指数方式降低速度。timeconst 属性指定了指数下降的时间常数,单位为秒。
timestep: real, “0.01”
用于内部仿真的时间步长。设置为 0 将导致使用模型的时间步长。后者不是默认值,因为可能不稳定的模型通常时间步数较小,而这里的仿真是人为阻尼的,非常稳定。为了加快长度范围计算速度,用户可以尝试增加该值。
inttotal: real, “10”
运行内部仿真的总时间间隔(以秒为单位),针对每个执行器和执行器方向。每次仿真的初始值为 qpos0。预计在 inttotal 时间结束后,模拟就会结束。
interval: real, “2”
仿真结束时收集和分析长度数据的时间间隔。记录该时间间隔内达到的最大(或最小)长度。最大值和最小值之间的差值也会被记录下来,并作为偏差的测量值。如果仿真稳定,这个差值就会很小。如果差值不小,可能是因为仿真尚未稳定 —— 在这种情况下应调整上述属性 —— 或者是因为模型没有足够的关节和肌腱限制,因此驱动器的范围实际上是无限的。这两种情况都会导致编译器出错。请注意,在本仿真中触点被禁用,因此关节和肌腱限制以及整体几何形状是唯一可以防止推杆无限长的因素。
tolrange: real, “0.05”
这决定了检测分歧和产生编译器错误的阈值。区间内观察到的推杆长度范围除以仿真计算出的总长度范围。如果该值大于 tolrange,就会产生编译器错误。因此,抑制编译器错误的一种方法是简单地增大该属性,但在这种情况下,结果可能会不准确。
2.4 size (*)
此元素指定的尺寸参数不能从模型中的元素个数推断出来。与可以在运行时修改的 mjOption 字段不同,size 是结构参数,不应该在编译后修改。
memory: string, “-1”
此属性指定在 mjData.arena 内存空间中为动态数组分配的内存大小,单位为字节。默认设置为-1,指示编译器猜测分配多少空间。在数字后面加上字母 {K、M、G、T、P、E},分别设置单位为 {kilo、mega、giga、tera、peta、exa}-字节。因此,"16M "表示 "分配 16 兆字节的舞台内存"。详情请参阅 "内存分配 "部分。
njmax: int, “-1” (legacy)
这是一个已废弃的传统属性。在 2.3.0 之前的版本中,它决定了允许的最大约束数量。目前,它的意思是 "分配与此约束数量相同的内存"。同时指定 njmax 和内存会导致错误。
nconmax: int, “-1” (legacy)
该属性指定运行时生成的最大联系人数。如果活动联系人的数量即将超过此值,多余的联系人将被丢弃并生成警告。这是一个已废弃的传统属性,在 2.3.0 版之前会影响内存分配。保留该属性是为了向后兼容和调试。
nstack: int, “-1” (legacy)
这是一个已废弃的传统属性。在 2.3.0 之前的版本中,它决定堆栈的最大大小。在 2.3.0 版之后,如果指定了 nstack,则 mjData.narena 的大小为 nstack * sizeof(mjtNum) 字节,外加一个用于约束求解器的额外空间。同时指定 nstack 和内存会导致错误。
nuserdata: int, “0”
mjData 中 mjData.userdata 字段的大小。该字段应用于存储自定义动态变量。另请参阅用户参数。
nkey:int, "0"
mjModel 中分配的坐标系数量是该值与下面关键元素数量中较大者。请注意,交互式仿真器具有拍摄系统状态快照并保存为关键帧的功能。
nuser_body: int, "-1"
添加到每个主体定义中的自定义用户参数的数量。另请参阅用户参数。参数值通过 body 元素的用户属性设置。MuJoCo 无法访问这些值。它们可用于定义用户回调和其他自定义代码中所需的元素属性。
nuser_jnt:int, "-1"
添加到每个关节定义中的自定义用户参数的数量。
nuser_geom:int, "-1"
用户自定义添加到每个几何体定义中的参数个数。
nuser_site:int, "-1"
定义每个站点时添加的用户自定义参数的数量。
nuser_cam:int, "-1"
为每个摄像机定义的自定义用户参数的数量。
nuser_tendon:int,"-1"
定义每个肌腱时添加的用户自定义参数的个数。
nuser_actuator: int, “-1”
在每个执行器的定义中添加的自定义用户参数的数量。
nuser_sensor: int, “-1”
为每个传感器定义的自定义用户参数的数量。
2.5 statistic (*)
该元素用于覆盖编译器计算的模型统计量。这些统计信息不仅具有信息性,而且还用于缩放渲染和扰动的各个部分。我们在 XML 中提供了一个覆盖机制,因为有时调整少量的模型统计量比调整大量的可视化参数要容易得多。
meanmass(平均质量):实数,可选
如果指定了此属性,它将取代编译器计算的 mjModel.stat.meanmass 值。计算值是平均身体质量,不包括无质量的世界体。运行时,该值会对扰动力进行缩放。
meaninertia(平均惯性):实数,可选
如果指定了此属性,它将取代编译器计算的 mjModel.stat.meaninertia 值。计算值是模型处于 qpos0 时关节空间惯性矩阵的平均对角线元素。在运行时,该值会调整求解器成本和梯度,用于提前终止。
meansize:实数,可选
如果指定了此属性,它将取代编译器计算的 mjModel.stat.meansize 值。运行时,该值将乘以上述标度元素的属性,并作为其长度单位。如果需要特定的长度,可以方便地将 meansize 设置为 1 或 0.01 这样的整数,这样刻度值就可以使用公认的长度单位。这是 meansize 的唯一语义,设置它没有其他副作用。自动计算值是启发式的,代表平均体半径。启发式计算基于几何体尺寸(如果有)、关节间距离(如果有)以及等效惯性盒的尺寸。
extent:实数,可选
如果指定了此属性,它将取代编译器计算的 mjModel.stat.extent 值。计算值是初始配置中模型边界框边长的一半。运行时,该值将乘以上述地图元素的某些属性。首次加载模型时,自由摄像机与中心的初始距离(见下文)是范围的 1.5 倍。必须严格为正值。
center: real(3),可选
如果指定了此属性,它将替换编译器计算出的 mjModel.stat.center 值。计算值是初始配置中整个模型边界框的中心。在首次加载模型时,此 3D 向量用于将自由摄像机的视图居中。
2.6 visual (*)
该元素与 mjModel 的 mjModel.vis 字段中包含的底层结构 mjVisual 一一对应。这里的设置会影响可视化器,或者更确切地说,影响可视化的抽象阶段,该阶段会生成一个几何实体列表,供后续渲染使用。这里的设置是全局性的,与特定元素的可视化设置不同。全局设置和特定元素设置指的是不重叠的属性。某些全局设置会影响几何基元的三角剖分等属性,而这些属性无法按元素进行设置。其他全局设置会影响装饰对象的属性,即与模型元素不对应的接触点和力箭头等对象。可视化设置按语义分为几个子部分。
该元素非常适合文件包含机制。我们可以创建一个 XML 文件,其中包含与 "主题(theme) "相对应的协调视觉设置,然后将该文件包含在多个模型中。
2.6.1 visual/global (?)
虽然 mjVisual 中的所有设置都是全局性的,但这里的设置却无法放入任何其他子部分。因此,这实际上是一个杂项子节。
fovy:实数,"45
该属性指定了自由摄像机的垂直视场,即即使模型中没有明确定义摄像机,可视化器中始终可用的摄像机。无论编译器的角度属性如何设置,它始终以度为单位表示,在底层模型中也以度为单位表示。这是因为我们将其传递给使用度数的 OpenGL。同样的约定也适用于下面摄像机元素的 fovy 属性。
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"(世界)。
name:字符串,可选
体(body)名称。
childclass:字符串,可选
如果存在此属性,所有接受默认类的后代元素都将使用此处指定的类,除非它们指定了自己的类,或者在嵌套体(body)链中遇到另一个带有 childclass 属性的体(body)。调用默认设置。
mocap: [false,true], "false"
如果此属性为 "true",则该体(body)被标记为 mocap 体(body)。只有作为世界体(body)的子体(body)且没有关节时才允许这样做。从动力学的角度来看,这些体是固定的,但在每个时间步长内,前向运动学会根据 mjData.mocap_pos 和 mjData.mocap_quat 字段设置它们的位置和方向。这些数组的大小由编译器调整,以便与模型中的 mocap 主体数量相匹配。这种机制可用于将动作捕捉数据流引入仿真。即使在动态仿真模式下,也可以通过鼠标扰动在交互式可视化器中移动模拟体。这对于创建可调整位置和方向的道具非常有用。另请参阅 flag 的 mocap 属性。
pos:实数(3),可选
体(body)坐标系在父坐标系中的 3D 位置。如果未定义,则默认为 (0,0,0)。
quat、axisangle、xyaxes、zaxis、euler
请参阅坐标系方向。
gravcomp:实数,"0"
重力补偿力,指定为体重的一部分。该属性会产生一个向上的力,作用于身体的质心,抵消重力。举例来说,数值为 1 会产生一个与身体重量相等的向上力,并完全补偿重力。大于 1 的值将产生净向上力或浮力效应。
user: real(nbody_user), "0 0 ..."
请参阅用户参数。
2.9.1 body/inertial (?)
该元素指定了体(body)的质量和惯性属性。如果给定的体(body)未包含此元素,则惯性属性将从附加到躯体的 geoms 中推断出来。保存编译后的 MJCF 模型时,XML 编写器会使用此元素明确保存惯性属性,即使它们是从几何体中推断出来的。惯性坐标系的中心与物体的质心重合,其轴线与物体的惯性主轴重合。因此惯性矩阵在该坐标系中是对角线。
pos:实数(3),必填
惯性坐标系的位置。即使惯性属性可以从几何图形中推断出来,该属性也是必需的。这是因为惯性元素本身的存在会禁用自动推理机制。
quat、axisangle、xyaxes、zaxis、euler
惯性坐标系的方向。请参阅坐标系方向。
mass:实数,必填
物体的质量。不允许使用负值。MuJoCo 要求广义坐标中的惯性矩阵为正无穷大,有时即使有些物体的质量为零,也可以做到这一点。但一般情况下,没有理由使用无质量体。在其他引擎中,无质量体通常用于绕过关节不能组合的限制,或用于连接传感器和摄像头。在 MuJoCo 中,原始的关节类型可以组合,而且我们的站点是一种更有效的连接机制。
diaginertia: real(3), 可选
对角惯性矩阵,表示相对于惯性坐标系的身体惯性。如果省略该属性,下一个属性将成为必填项。
fullinertia:real(6),可选项
全惯性矩阵 M。由于 M 是 3 乘 3 的对称矩阵,因此只需使用 6 个数字按以下顺序指定即可: M(1,1)、M(2,2)、M(3,3)、M(1,2)、M(1,3)、M(2,3)。编译器会计算 M 的特征值分解,并相应设置坐标系方向和对角线惯性。如果遇到非正特征值(即 M 不是正定值),则会产生编译错误。
2.9.2 body/joint (*)
该元素用于创建关节。正如 "运动学树 "中所述,关节在定义关节的体(body)和体(body)的父框架之间创建运动自由度。如果在同一体(body)中定义了多个关节,则会依次应用相应的空间变换(体(body)坐标系相对于父坐标系的变换)。如果没有定义关节,则将体(body)焊接到其父体(body)上。世界体(body)中不能定义关节。运行时,模型中定义的所有关节的位置和方向都会按照运动学树中出现的顺序存储在向量 mjData.qpos 中。线速度和角速度存储在向量 mjData.qvel 中。当使用自由关节或球关节时,这两个向量的维数不同,因为这些关节以单位四元数表示旋转。
name:字符串,可选
关节的名称。
class:字符串,可选
用于设置未指定属性的默认类。
type:[free, ball, slide, hinge]([自由、球、滑动、铰链]), “hinge”("铰链".)
关节的类型。关键字的含义如下: 自由类型创建的自由 "关节 "具有三个平移自由度和三个旋转自由度。换句话说,它使体(body)浮动。旋转以单位四元数表示。只有世界体的子体才允许使用这种关节类型。如果定义了自由关节,则无法在躯体中定义其他关节。与其他关节类型不同,自由关节在体(body)坐标系中没有位置。相反,关节位置被假定为与体(body)坐标系的中心重合。因此在运行时,自由关节的位置和方向数据与体(body)坐标系的全局位置和方向相对应。自由关节不能有限制。球(ball)类型创建了一个具有三个旋转自由度的球关节。旋转用单位四元数表示。四元数(1,0,0,0)对应于定义模型时的初始配置。任何其他四元数都被解释为相对于该初始配置的三维旋转。旋转是围绕下面 pos 属性所定义的点进行的。如果一个体(body)有一个球形关节,它就不能有其他旋转关节(球形或铰链)。允许在同一肢体中将球形关节与滑动关节结合使用。
滑动(slide)类型可创建具有一个平移自由度的滑动或棱柱关节。此类关节由位置和滑动方向定义。仿真时只需要滑动方向,关节位置则用于渲染。
铰链(hinge)类型创建了一个具有一个旋转自由度的铰链关节。旋转是通过指定位置绕指定轴线进行的。这是最常见的关节类型,因此也是默认类型。大多数模型只包含铰链和自由关节。
group(组):int, "0"
关节所属的整数组。该属性可用于自定义标签。可视化器也可以使用它来启用或禁用整个关节组的渲染。
pos:real(3), "0 0 0"
关节的位置,在定义关节的体(body)坐标系中指定。对于自由关节,该属性将被忽略。
axis:real(3), "0 0 1"
该属性用于指定铰链(hinge)关节的旋转轴和滑动(slide)关节的平移方向。自由关节和球形关节则忽略该属性。只要指定的矢量长度大于 10E-14,就会自动归一化为单位长度;否则会产生编译错误。
springdamper: real(2), "0 0"
当这两个数字都为正数时,编译器将覆盖以下属性中指定的刚度和阻尼值,并自动设置它们,从而使该关节的质量弹簧阻尼器具有所需的时间常数(第一个值)和阻尼比(第二个值)。这是通过考虑模型参考配置中的关节惯性实现的。请注意,格式与约束求解器的 solref 参数相同。
limited: [false,true,auto], "auto"
此属性指定关节是否有限制。它与下面的范围属性相互作用。如果该属性为 "false",则关节限制无效。如果该属性为 "true",则启用关节限位。如果此属性为 "auto"(自动),并且编译器中设置了自动限制,那么如果定义了范围,就会启用关节限制。
actuatorfrclimited: [false,true,auto],"auto"
该属性指定是否应夹紧作用在关节上的执行器力。详情请参阅力限制。该属性仅适用于标量关节(铰链和滑块),球关节和自由关节忽略不计。
该属性与下面的 actuatorfrcrange 属性交互。如果该属性为 "false"(假),执行器力夹紧将被禁用。如果该属性为 "true",则启用执行器力夹紧。如果该属性为 "auto"(自动),且编译器中设置了 autolimits(自动限制),则在定义了 actuatorfrcrange 时将启用执行器力箝位。
solreflimit, solimplimit
用于仿真关节限制的约束求解器参数。请参阅求解器参数。
solreffriction, solimpfriction
用于仿真干摩擦的约束求解器参数。请参见求解器参数。
stiffness:实数,"0"
关节刚度。如果该值为正,将创建一个弹簧,其平衡位置由下面的 springref 给出。弹簧力将与其他被动力一起计算。
range: real(2), "0 0" 关节限值。
关节限位。除自由关节外,所有关节类型都可以施加限制。对于铰链和球形关节,根据编译器的角度属性,以度或弧度为单位指定范围。对于球形关节,限制的是旋转角度(相对于参考配置),与旋转轴无关。球关节只使用第二个范围参数,第一个范围参数应设置为 0。 更多信息请参阅计算章节中的限制部分。
在未指定 limited 的情况下设置此属性是错误的,除非在编译器中设置了自动限制。
actuatorfrcrange: real(2), "0 0"
作用在该关节上的总推杆力的箝位范围。详情请参阅力限制。它仅适用于标量关节(铰链和滑块),球关节和自由关节忽略不计。
编译器希望第一个值小于第二个值。
在未指定 actuatorfrclimited 的情况下设置该属性是错误的,除非设置了编译器自动限制。
margin:实数,"0"
距离阈值,低于该值时限制将被激活。请注意,约束求解器通常会在约束激活后立即产生作用力,即使 margin 参数会在一定距离内产生作用力。该属性与 solreflimit 和 solimplimit 一起可用于模拟柔性连接限制。
ref:实数,"0"
关节的参考位置或角度。该属性仅用于滑动和铰链关节。它定义了与初始模型配置相对应的关节值。关节在运行时的空间变换量等于存储在 mjData.qpos 中的当前关节值减去存储在 mjModel.qpos0 中的参考值。这些向量的含义已在《概述》一章的独立章节中讨论过。
springref:实数,"0
关节弹簧(如果有)达到平衡的关节位置或角度。与存储用上述 ref 属性指定的所有关节参考值的向量 mjModel.qpos0 类似,用该属性指定的所有弹簧参考值都存储在向量 mjModel.qpos_spring 中。与 mjModel.qpos_spring 对应的模型配置也用于计算所有肌腱的弹簧参考长度,这些长度存储在 mjModel.tendon_lengthspring 中。这是因为筋也可以有弹簧。
armature:实数,"0"
此关节创建的所有自由度的电枢惯性(或转子惯性,或反射惯性)。这些是添加到广义坐标惯性矩阵对角线上的常数。它们使仿真更加稳定,通常还能增加物理逼真度。这是因为当电机与系统相连时,传动装置会将电机力放大 c,转子(即电机的运动部分)的惯性也会放大 c*c。行星齿轮箱早期阶段的齿轮也是如此。这些额外的惯性通常会主导模型中明确表示的机器人部件的惯性,而电枢属性正是对其进行建模的方法。
damping:实数,"0"
应用于该关节创建的所有自由度的阻尼。与约束求解器计算的摩擦损失不同,阻尼只是一个与速度线性相关的力。它包含在被动力中。尽管计算简单,但较大的阻尼值会导致数值积分器不稳定,这也是我们的欧拉积分器隐式处理阻尼的原因。请参阅计算章节中的积分。
frictionloss:实数,"0"
干摩擦造成的摩擦损失。此值对该关节产生的所有自由度都是相同的。从语义上讲,摩擦损失对自由关节没有意义,但编译器允许使用。要启用摩擦损耗,请将此属性设置为正值。
user:real(njnt_user), "0 0 ..."
请参阅用户参数。
2.9.3 body/freejoint (*)
该元素创建一个自由关节,其唯一属性是名称和组。freejoint 元素是
<joint type="free" stiffness="0" damping="0" frictionloss="0" armature="0"/>
虽然这种关节显然可以通过关节元素创建,但默认的关节设置可能会对其产生影响。这通常是不可取的,因为物理自由体不具有非零刚度、阻尼、摩擦或电枢。为了避免这种复杂情况,我们引入了自由关节元素,以确保关节默认设置不会被继承。如果保存 XML 模型,它将显示为自由类型的常规关节。
name:字符串,可选
关节点的名称。
group:整数,"0"
关节所属的整数组。该属性可用于自定义标签。可视化器也可以使用它来启用或禁用整个关节组的渲染。
2.9.4 body/geom (*)
此元素创建一个 geom,并将其刚性连接到定义 geom 的主体上。同一主体可连接多个几何体。在运行时,它们决定体的外观和碰撞属性。在编译时,它们还可以根据惯性元素的存在和编译器中 inertiafromgeom 属性的设置来确定体的惯性属性。具体做法是将所有连接到机体上的 geom 的质量和惯性相加,其中 geom 组的范围由编译器的 inertiagrouprange 属性指定。计算地质体质量和惯性时使用了地质体形状、指定密度或意味着密度的地质体质量以及均匀密度假设。
物理仿真并不严格要求 Geom。我们可以创建和仿真一个只有主体和关节的模型。这样的模型甚至可以可视化,使用等效惯性盒来表示物体。这样的仿真只缺少接触力。我们并不推荐使用此类模型,但了解到这一可能性有助于明确体和关节在 MuJoCo 中的作用。
name(名称):字符串,可选
几何体的名称。
class:字符串,可选
用于设置未指定属性的默认类。
type: [plane, hfield, sphere, capsule, ellipsoid, cylinder, box, mesh, sdf]([平面、hfield、球体、胶囊、椭圆体、圆柱体、长方体、网格、sdf]),"sphere"(球体)
几何体的类型。关键字的含义如下:
- 平面(plane)类型定义了一个用于碰撞检测的无限平面。它只能连接到世界本体或世界的静态子对象。平面通过通过 pos 属性指定的点。它的法线指向 geom 本地坐标系的 Z 轴。+Z 方向对应的是空白空间。因此,位置和方向默认值(0,0,0)和(1,0,0,0)将创建一个 Z=0 高度的地面平面,+Z 方向是世界的垂直方向(这是 MuJoCo 的惯例)。由于平面是无限的,因此可以使用平面上的任何其他点来定义。不过,指定的位置对于渲染还有额外的意义。如果前两个尺寸参数中的任何一个为正值,那么平面将被渲染为一个有限尺寸的矩形(正维)。该矩形以指定位置为中心。需要三个尺寸参数。前两个参数指定了矩形沿 X 轴和 Y 轴的半径。第三个尺寸参数很特别:它指定了用于渲染的平面网格细分间距。在线框渲染模式下,这些细分网格会显示出来,但一般来说,它们不应该用来在地平面上绘制网格(应该使用纹理)。相反,它们的作用是改善光照和阴影,与用于渲染方框的细分效果类似。从背面观察平面时,平面会自动变成半透明状态。平面和方框的 +Z 面是唯一可以显示反射的表面,前提是应用于该几何体的材质具有正反射。要渲染无限平面,请将前两个尺寸参数设置为零。
- hfield 类型定义了高度域 geom。geom 必须使用下面的 hfield 属性引用所需的高度区域资产(asset)。geom 的位置和方向设置了高度区域的位置和方向。geom 的大小将被忽略,取而代之的是高度字段资产(asset)的大小参数。请参阅 hfield 元素的说明。与平面类似,高度场 geom 只能附加到世界主体或世界的静态子对象上。
- 球体(sphere)类型定义了一个球体。该类型和接下来的四种类型对应于内置的几何基元。这些基元被视为用于碰撞检测的解析曲面,在许多情况下依赖于自定义的成对碰撞例程。仅包含平面、球面、胶囊和长方体的模型在碰撞检测方面效率最高。其他几何体类型会调用通用的凸碰撞器。球体以几何体的位置为中心。只使用一个尺寸参数,指定球体的半径。几何基元的渲染是通过自动生成的网格完成的,网格的密度可以通过质量进行调整。球体网格沿经纬线进行三角剖分,Z 轴穿过南北极。在线框模式下,这对坐标系方向的可视化非常有用。
- 胶囊(capsule)类型定义了一个胶囊,它是一个由两个半球体封盖的圆柱体。它的坐标系是 Z 轴。按常规方法指定地理坐标系时,需要两个尺寸参数:胶囊的半径和圆柱体部分的半高。不过,胶囊和圆柱体也可以被视为连接器,因此可以使用下面的 fromto 属性进行另一种指定。在这种情况下,只需要一个尺寸参数。
- 椭球体(ellipsoid)类型定义了一个椭球体。这是一个沿本地坐标系的 X、Y 和 Z 轴分别缩放的球体。它需要三个尺寸参数,分别对应三个半径。需要注意的是,尽管椭球体是平滑的,但它们的碰撞也是通过通用的凸形碰撞器来处理的。唯一的例外是平面-椭球体碰撞,它是通过分析计算得出的。
- 圆柱体(cylinder)类型定义了一个圆柱体。它需要两个尺寸参数:圆柱体的半径和半高。圆柱体沿几何体坐标系的 Z 轴定向。也可以使用下面的 fromto 属性来指定。
- 长方体(box)类型定义了一个长方体。需要三个尺寸参数,分别对应于方框沿几何体坐标系 X、Y 和 Z 轴的半尺寸。请注意,方框-方框碰撞是唯一一种可以生成大量接触点的成对碰撞类型,根据配置的不同,最多可以生成 8 个接触点。接触点生成本身速度很快,但这会减慢约束求解器的速度。作为一种替代方法,我们在标记中提供了 boxconvex 属性,它将导致使用通用的凸对撞器,每个几何体对最多产生一个接触点。
- 网格(mesh)类型定义了一个网格。geom 必须使用 mesh 属性引用所需的网格资产。请注意,网格资产也可以从其他 geom 类型引用,从而拟合出原始形状;请参阅下文。网格大小由网格资产决定,geom 大小参数将被忽略。与所有其他几何体不同,编译后的网格几何体的位置和方向与此处相应属性的设置不相等。相反,它们会被平移和旋转所偏移,而平移和旋转是网格资产在其自身坐标系中居中和对齐所必需的。请回顾在网格元素中关于居中和对齐的讨论。
- sdf 类型定义了一个带符号的距离域(SDF,也称为带符号的距离函数)。为了使 SDF 可视化,必须使用 mesh/plugin 属性指定自定义网格。请参阅 model/plugin/sdf/ 目录,了解带有 SDF 几何图形的示例模型。有关 SDF 插件的更多详情,请参阅扩展部分章节。
contype: int, "1"
此属性和下一个属性指定 32 位整数位掩码,用于动态生成的接触对的接触过滤。请参阅计算章节中的碰撞检测。如果一个几何体的 contype 与另一个几何体的 conaffinity 兼容,或反之亦然,则两个几何体可以发生碰撞。兼容是指两个位掩码有一个共同的位被设置为 1。
conaffinity:int, "1"
用于过滤接触的位掩码;参见上文的 contype。
condim:int, "3"
动态生成的接触对的接触空间维度被设置为两个参与几何体的 condim 值的最大值。请参阅计算章节中的接触。允许的值及其含义如下:
condim
Description
1
无摩擦接触。 3
常规摩擦接触,切线平面上的对向滑移。 4
摩擦接触,切线平面上的对向滑动以及围绕接触法线的旋转。这对于模拟柔性接触非常有用(与接触穿透力无关)。 6
摩擦接触、切线平面内的对向滑移、绕接触法线的旋转以及绕切线平面两轴的旋转。后一种摩擦效应对于防止物体无限滚动非常有用。
group: int, "0"
该属性指定了该 geom 所属的整数组。对物理的唯一影响是在编译时,根据组别选择的 geom 会推断出体质量和惯量;请参阅编译器的 inertiagrouprange 属性。在运行时,可视化器使用该属性启用或禁用整个几何体组的渲染。它也可用作自定义计算的标记。
priority: int, "0"
geom 优先级决定了如何将两个碰撞 geom 的属性组合起来形成接触点的属性。它与 solmix 属性相互影响。请参阅触点参数。
size: real(3), "0 0 0"
几何体尺寸参数。所需的参数数量及其含义取决于 geom 类型,详见 type 属性。这里我们只提供一个摘要。所有要求的尺寸参数都必须为正值;内部默认值与无效设置相对应。需要注意的是,当非网格 geom 类型引用网格时,该类型的几何基元会与网格相匹配。在这种情况下,尺寸将从网格中获取,而 geom 尺寸参数将被忽略。因此,下表中所需尺寸参数的数量和描述仅适用于不引用网格的几何体。
Type
Number
Description
plane
(平面)
3
X 半尺寸;Y 半尺寸;渲染时方格线之间的间距。如果 X 或 Y 半尺寸为 0,则平面在尺寸为 0 的维度上渲染为无限大。 hfield
(高度域)
0
几何尺寸将被忽略,取而代之的是高度区域尺寸。 sphere
(球)
1
球体半径。 capsule
(胶囊)
1 or 2
胶囊半径;不使用 fromto 规范时,圆柱体部分的半长。 ellipsoid
(椭圆体)
3
X 半径;Y 半径;Z 半径。 cylinder
(圆柱体)
1 or 2
圆柱体半径;不使用 fromto 规格时的圆柱体半长。 box
(长方体)
3
X 半径;Y 半径;Z 半径。 mesh
(网格)
0
忽略几何尺寸,使用网格尺寸。
material:字符串,可选
如果指定了该属性,则该属性会将一种材质应用到几何体(geom)上。材质决定了几何体的视觉属性。唯一的例外是颜色:如果下面的 rgba 属性与其内部默认值不同,则会优先使用该属性,而其余的材质属性仍会应用。需要注意的是,如果同一材料被多个几何体(以及站点和筋腱)引用,并且用户在运行时更改了它的某些属性,那么这些更改将立即对引用该材料的所有模型元素生效。这是因为编译器会将材料及其属性保存为 mjModel 中的一个单独元素,而使用该材料的元素只保留对它的引用。
rgba: real(4), "0.5 0.5 0.5 1".
该属性可用于仅设置颜色和透明度,而不是创建材质资产并对其进行引用。这种方法不如材质机制灵活,但更方便,通常也足够了。如果该属性的值与内部默认值不同,它将优先于材质。
friction(摩擦力):real(3), "1 0.005 0.0001"
动态生成的接触对的接触摩擦参数。第一个数字是滑动摩擦力,沿切线平面的两条轴线作用。第二个数字是扭转摩擦力,作用于接触法线周围。第三个数字是滚动摩擦力,围绕切平面的两个轴线产生作用。接触对的摩擦参数根据混合溶胶和优先属性进行组合,详见 "接触参数"。
mass:实数,可选
如果指定了此属性,则下面的密度属性将被忽略,并根据给定的质量、几何形状和均匀密度假设计算出几何密度。计算得出的密度将用于获取几何体(geom)惯性。请注意,几何体(geom)质量和惯性仅在编译过程中使用,必要时用于推断主体(body)质量和惯性。在运行时,只有主体(body)惯性属性会影响仿真;几何体(geom)质量和惯性甚至不会保存在 mjModel 中。
density:实数,"1000
用于计算几何体质量和惯性的材料密度。计算基于几何体形状和均匀密度假设。内部默认值 1000 是以 SI 单位表示的水的密度。该属性仅在上述质量属性未指定时使用。
shellinertia [false, true], "假"
如果为 "true",则计算地壳惯性时会假设所有质量都集中在边界上。在这种情况下,密度被解释为表面密度,而不是体积密度。
solmix:实数, "1"
该属性指定用于平均接触参数的权重,并与优先级属性交互。请参阅 "接触参数"。
solref, solimp
用于触点仿真的约束求解器参数。请参见求解器参数。
margin:实数,"0
距离阈值,低于此阈值时将检测到触点并将其纳入全局数组 mjData.contact。但这并不意味着会产生接触力。只有当两个几何表面之间的距离低于 margin-gap 时,接触才会被认为是有效的。请注意,约束阻抗可以是距离的函数,这在求解器参数中已有说明。该函数适用的量是两个几何体之间的距离减去边距加上间隙。
gap:实数,"0
此属性用于生成非活动触点,即约束求解器忽略的触点,但为了进行自定义计算而包含在 mjData.contact 中。当此值为正数时,margin 和 margin-gap 之间的 geom 距离将与此类非活动触点相对应。
fromto:real(6),可选
该属性只能用于胶囊、方框、圆柱体和椭圆体几何体(capsule, box, cylinder and ellipsoid geoms)。它提供了对几何体长度以及坐标系位置和方向的另一种指定。六个数字是一个点的三维坐标,然后是另一个点的三维坐标。几何体的拉长部分连接这两点,几何体坐标系的 +Z 轴从第一点朝向第二点,而在垂直方向上,几何体的尺寸都等于尺寸属性的第一个值。坐标系的方向与 "坐标系方向 "中描述的 z 轴属性的步骤相同。坐标系位置位于端点之间的中间位置。如果指定了该属性,其余与位置和方向相关的属性将被忽略。右边的图片演示了使用相同的 Z 值将 fromto 与四个支持的几何体结合使用。模型在此。请注意,capsule 的 fromto 语义是独一无二的:两个端点指定了半径定义 capsule 表面的分段。
pos:real(3),"0 0 0"
几何体(geom)的位置,在定义几何体(geom)坐标的体(body)坐标系中指定。
quat、axisangle、xyaxes、zaxis、euler
坐标系框架的方向。请参阅坐标系方向。
hfield:字符串,可选
如果且仅当 geom 类型为 "hfield "时,才必须指定此属性。它引用了在坐标系框架的位置和方向上实例化的高度域资产。
mesh:字符串,可选
如果 geom 类型为 "mesh",则此属性为必填项。它引用了要实例化的网格资产。如果 geom 类型对应的是几何基元,即 "球体"、"胶囊"、"圆柱体"、"椭圆体"、"盒体 "(“sphere”, “capsule”, “cylinder”, “ellipsoid”, “box”)中的一种,也可以指定此属性。在这种情况下,该基元会自动拟合到此处引用的网格资产中。拟合过程使用网格的等效惯性盒或轴对齐包围盒,这由编译器的属性 fitaabb 决定。拟合后的几何体大小通常符合预期,如果不符合预期,可以使用下面的 fitcale 属性进一步调整。在编译后的 mjModel 中,geom 表示为指定基元类型的常规 geom,没有用于拟合的网格参考。
fitcale:实数,"1"
此属性仅在原始几何类型与网格资产拟合时使用。此处指定的缩放比例是相对于自动拟合程序的输出结果而言的。默认值为 1 时,结果保持不变;默认值为 2 时,拟合几何体的所有尺寸都会增大两倍。
fluidshape: [none, ellipsoid], “none”
"椭圆体 "激活基于椭圆体近似几何体形状的几何体级流体相互作用模型。激活后,基于体惯性大小的模型将在定义 geom 的体上禁用。详情请参阅 "基于椭球体的流体相互作用模型 "一节。
fluidcoef: real(5), "0.5 0.25 1.5 1.0 1.0" 无量纲系数
流体相互作用模型的无量纲系数,如下所示。详见基于椭球体的流体相互作用模型一节。
Index
Description
Symbol
Default
0
钝阻力系数 0.5
1
细长阻力系数 0.25
2
角阻力系数 1.5
3
库塔升力系数 1.0
4
马格努斯升力系数 1.0
user: real(nuser_geom), "0 0 ..."
参见用户参数。
2.9.4.1 geom/plugin (?)
将此 geom 与引擎插件关联。插件或实例均为必填项。
plugin:字符串,可选
插件标识符,用于隐式插件实例化。
instance:字符串,可选
实例名称,用于显式插件实例化。
2.9.5 body/site (*)
该元素创建一个站点,它是一种简化和受限的 geom。这里只提供了一小部分 geom 属性;详细说明请参阅 geom 元素。从语义上讲,站点代表相对于体(body)坐标系的感兴趣的位置。站点不参与碰撞以及体(body)质量和惯性的计算。可用于渲染站点的几何形状仅限于可用 geom 类型的子集。不过,在一些不允许使用几何体的地方也可以使用 "位点":安装传感器、指定空间筋的通点、为执行器构建滑块曲柄传动装置。
name:字符串,可选
站点名称。
class:字符串,可选
用于设置未指定属性的默认类别。
type:[sphere, capsule, ellipsoid, cylinder, box]([球体、胶囊、椭圆体、圆柱体、长方体]), sphere("球体").
几何形状类型。该类型用于渲染,并决定触摸传感器的活动感应区。
group: int, "0"
站点(site)所属的整数组。该属性可用于自定义标签。可视化器也可使用该属性启用或禁用整个站点组的渲染。
material:字符串,可选
用于指定站点(site)视觉属性的材质。
rgba:real(4),"0.5 0.5 0.5 1"
颜色和透明度。如果该值与内部默认值不同,则会覆盖相应的材质属性。
size:real(3), "0.005 0.005 0.005" 表示站点(site)几何形状的尺寸。
代表站点的几何图形的尺寸。
fromto:real(6),可选
该属性只能用于胶囊、圆柱体、椭圆体和箱体(capsule, cylinder, ellipsoid and box)站点。它提供了站点长度以及坐标系位置和方向的另一种规格。这六个数字是一个点的三维坐标,然后是另一个点的三维坐标。站点的拉长部分连接这两点,站点坐标系的 +Z 轴从第一点朝向第二点。坐标系方位的获取步骤与 "坐标系方位 "中所述的 Z 轴属性相同。坐标系位置位于两点之间的中间。如果指定了该属性,其余与位置和方向相关的属性将被忽略。
pos:real(3), "0 0 0"
站点坐标系的位置。
quat、axisangle、xyaxes、zaxis、euler
站点坐标系的方向。请参见坐标系方向。
user: real(nuser_site), "0 0 ..."
请参见用户参数。
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 (*)
该元素创建了一个通用执行器,提供对所有执行器组件的完全访问权限,并允许用户独立地指定这些组件。
name:字符串,可选
元素名称。参见元素命名。
class:字符串,可选
活动默认类。请参阅默认设置。
group(组):int, "0"
执行器所属的整数组。该属性可用于自定义标签。可视化器也可以使用它来启用或禁用整个执行器组的渲染。
ctrllimited: [false,true,auto], "auto"
如果为 true,执行器的控制输入将在运行时自动箝位到 ctrlrange。如果为假,则控制输入箝位被禁用。如果在编译器中设置了 "auto"(自动)和 autolimits(自动限制),则在未明确将此属性设置为 "true "的情况下,如果定义了 ctrlrange,控制箝位将自动设置为 true。请注意,控制输入箝位也可以通过 option/flag 的 clampctrl 属性全局禁用。
forcelimited: [false,true,auto],"auto
如果为 "true",执行器的力输出将在运行时自动夹紧至 forcerange。如果为 "false",将禁用力夹紧。如果在编译器中设置了 "auto"(自动)和 autolimits(自动限制),则在没有明确将此属性设置为 "true "的情况下,如果定义了 forcerange,力夹紧将自动设置为 true。
actlimited: [false,true,auto], "auto"
如果为 true,则与该执行器相关的内部状态(激活)将在运行时自动箝位到 actrange。如果为假,则激活箝位被禁用。如果在编译器中设置了 "auto"(自动)和 autolimits(自动限制),则在没有明确将此属性设置为 "true"(真)的情况下定义 actrange 时,激活箝位将自动设置为 "true"(真)。更多详情,请参阅激活箝位部分。
ctrlrange:real(2), "0 0"
控制输入的箝位范围。第一个值必须小于第二个值。
在未指定 ctrllimited 的情况下设置此属性是错误的,除非编译器中设置了自动限制。
forcerange:real(2), "0 0"
夹紧力输出的范围。第一个值不得大于第二个值。
设置此属性而不指定 forcelimited 将导致错误,除非编译器中设置了 autolimits。
actrange: real(2), "0 0"
箝位激活状态的范围。第一个值不得大于第二个值。更多详情,请参阅激活箝位部分。
在未指定 actlimited 的情况下设置此属性是错误的,除非编译器设置了 autolimits。
lengthrange:real(2), "0 0"
执行机构传动的可行长度范围。参见长度范围。
gear: real(6), "1 0 0 0 0 0"
在所有传动类型中,该属性可缩放推杆的长度(以及力矩臂、速度和力)。它不同于力发生机制中的增益,因为增益只对力输出进行缩放,而不影响长度、力矩臂和速度。对于标量传输的执行机构,只需使用该矢量的第一个元素。其余元素需要用于关节、关节父节点和现场传输,其中该属性用于指定三维力轴和扭矩轴。
cranklength:实数,"0"
仅用于滑块曲柄传动类型。指定连杆的长度。当存在滑块曲柄式变速器时,编译器希望该值为正值。
joint:字符串,可选
该属性和接下来的四个属性决定了传动装置的类型。所有属性均为可选属性,但必须指定其中一个。如果指定了该属性,推杆将作用于给定的关节。对于铰链和滑动(hinge and slide)接头,推杆长度等于接头位置/角度乘以齿轮(gear)的第一个元素。对于球形关节,齿轮的前三个元素定义了子坐标系中的 3d 旋转轴,执行器围绕该轴产生扭矩。执行器长度定义为该齿轮轴与关节四元数的角轴表示之间的点积,如果齿轮(gear)进行了归一化处理(通常按齿轮法线缩放),则执行器长度以弧度为单位。请注意,在总旋转量超过 π 后,长度将变为 -π,反之亦然。因此,用于球形关节的位置伺服一般应使用更严格的限制,以防止出现这种缠绕。对于自由关节,齿轮在世界坐标系中定义了一个三维平移轴,然后在子坐标系中定义了一个三维旋转轴。执行器相对于指定的轴产生力和扭矩。自由关节的执行器长度定义为零(因此不应与位置伺服器一起使用)。
jointinparent: 字符串,可选
与关节相同,但对于球关节和自由关节,齿轮(gear)给出的三维旋转轴是在父坐标系(自由关节的世界坐标系)而不是子坐标系中定义的。
site:字符串,可选
该传动装置可以在某一位置施加力和扭矩。齿轮矢量定义了一个三维平移轴和一个三维旋转轴。两者都在站点的坐标系中定义。这可用于模拟喷气式飞机和螺旋桨。其效果类似于驱动一个自由关节,而且除非定义了一个反射点(见下文),否则执行器的长度定义为零。与上述关节和母关节传动的一个不同点是,这里的致动器是在部位而不是关节上工作的,但当部位定义为自由浮体的坐标系原点时,这一不同点就消失了。另一个不同点是,对于部位传动,平移轴和旋转轴都是以局部坐标定义的。相反,对于关节来说,平移是全局坐标,旋转是局部坐标,而对于父节点来说,平移和旋转都是全局坐标。
refsite: 字符串,可选
当使用现场传输时,测量与 refsite 的坐标系相关的平移和旋转。在这种情况下,执行器确实有长度,位置执行器可以用来直接控制末端执行器,参见 refsite.xml 示例模型。如上所述,长度是齿轮矢量与坐标系差值的点积。因此,gear="0 1 0 0 0 0 "表示 "站点在 refsite 坐标系中的 Y 偏移",而 gear="0 0 0 0 1 "表示旋转 "站点在 refsite 坐标系中的 Z 旋转"。建议使用归一化齿轮矢量,只在齿轮的前 3 个或后 3 个元素中使用非零点,因此执行器长度将分别以长度单位或弧度为单位。与球形关节(见上文关节)一样,超过总角度 π 的旋转将产生缠绕,因此建议使用更严格的限制。
body:字符串,可选
该传动可在接触点上施加与接触法线方向一致的线性力。接触点集是属于指定主体的所有接触点。这可用于模拟自然界的主动粘附机制,如壁虎和昆虫的脚。致动器长度同样定义为零。更多信息,请参阅下面的粘附快捷方式。
tendon:字符串,可选
如果指定,致动器将作用于给定的肌腱。推杆长度等于肌腱长度乘以齿轮比。可以使用空间筋和固定筋。
cranksite:字符串,可选
如果指定,则执行机构作用于滑块-曲柄机构,该机构由执行机构隐式决定(即它不是一个单独的模型元素)。指定位置对应于连接曲柄和连杆的销轴。推杆长度等于滑块-曲柄机构的位置乘以齿轮比。
slidersite:字符串,用于滑块曲柄变速器
仅用于滑块曲柄式传动。指定的位置是连接滑块和连杆的销轴。滑块沿滑块坐标系的 Z 轴移动。因此,在运动学树中定义滑块时,应根据需要确定滑块的方向;在执行器定义中不能改变滑块的方向。
user: real(nuser_actuator), "0 ... 0"
参见用户参数。
actdim:实数,"-1"
激活状态的尺寸。默认值为-1,指示编译器根据 dyntype 设置维度。大于 1 的值只允许用于用户定义的激活状态,因为本地类型只需要 0 或 1 的维度。对于大于 1 的激活维度,最后一个元素将用于产生力。
dyntype: [none, integrator, filter, filterexact, muscle, user], "none"
执行机构的激活动力学类型。可用的动力学类型已在执行模型部分进行了描述。用稍有不同的符号(与 mjModel 和 mjData 字段相对应)重复上述描述,我们可以得到
Keyword
Description
none
No internal state
integrator
act_dot = ctrl
filter
act_dot = (ctrl - act) / dynprm[0]
filterexact
Like filter but with exact integration
muscle
act_dot = mju_muscleDynamics(…)
user
act_dot = mjcb_act_dyn(…)
gaintype: [fixed, affine, muscle, user], “fixed”
增益和偏置共同决定了目前假定为仿射的力发生机制的输出。正如在 "激活模型 "中所解释的,一般公式为:标量力 = 增益项 * (act 或 ctrl) + 偏置项。该公式在激活状态存在时使用激活状态,否则使用控制状态。关键字的含义如下:
Keyword
Description
fixed
gain_term = gainprm[0]
affine
gain_term = gain_prm[0] + gain_prm[1]*length + gain_prm[2]*velocity
muscle
gain_term = mju_muscleGain(…)
user
gain_term = mjcb_act_gain(…)
biastype: [none, affine, muscle, user], “none”
关键字的含义如下:
Keyword
Description
none
bias_term = 0
affine
bias_term = biasprm[0] + biasprm[1]*length + biasprm[2]*velocity
muscle
bias_term = mju_muscleBias(…)
user
bias_term = mjcb_act_bias(…)
dynprm: real(10), "1 0 ... 0"
激活动态参数。内置激活类型(肌肉除外)只使用第一个参数,但我们提供了额外参数,以备用户回调实现更复杂的模型。解析器不会强制规定该数组的长度,因此用户可以根据需要输入尽可能多的参数。这些默认值与肌肉致动器不兼容;请参阅下文肌肉。
gainprm: real(10), "1 0 ... 0"
增益参数。内置增益类型(肌肉除外)只使用第一个参数,但我们提供了额外参数,以备用户回调实现更复杂的模型。解析器不会强制规定该数组的长度,因此用户可以根据需要输入尽可能多的参数。这些默认值与肌肉致动器不兼容;请参阅下文肌肉。
biasprm: real(10), "0 ... 0"
偏置参数。仿射偏置类型使用三个参数。解析器不会强制规定该数组的长度,因此用户可以根据需要输入尽可能多的参数。这些默认值与肌肉致动器不兼容;请参阅下文肌肉。
actearly: [false,true], "false"
如果为 "true",力计算将使用激活变量的下一个值,而不是当前值。设置该标志可将控制和加速度之间的延迟减少一个时间步长。
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 |
该元素没有自定义属性。它只有通用属性,即
name, class, group, ctrllimited, forcelimited, ctrlrange, forcerange, lengthrange, gear, cranklength, joint, jointinparent, tendon, cranksite, slidersite, site, refsite, user
与执行机构/常规相同。
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 |
除通用属性外,该元素还有一个自定义属性:
name, class, group, ctrllimited, forcelimited, ctrlrange, forcerange, lengthrange, gear, cranklength, joint, jointinparent, tendon, cranksite, slidersite, site, refsite, user
与执行机构/常规相同。
kp:实数,"1
位置反馈增益。
kv:实数,"0
执行机构施加的阻尼。使用该属性时,建议使用隐式快速或隐式积分器。
heritrange:实数,"0
自动设置执行器的范围,使其与传输目标的范围相匹配。默认值表示 "禁用"。例如,如果目标关节的范围是 [0,1],那么值 1.0 将把 ctrlrange 设为 [0,1];值 0.8 和 1.2 将分别把 ctrlrange 设为 [0.1,0.9] 和 [-0.1,1.1]。小于 1 的值有利于不触及极限;大于 1 的值有利于在极限处保持控制权限(可以推动极限)。该属性与 ctrlrange 属性是排他性的,仅适用于定义了范围的关节和肌腱传输。需要注意的是,虽然 inheritrange 既可以作为位置属性,也可以在默认类中使用,但保存的 XML 总是会在执行器处将其转换为显式的 ctrlrange。
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 |
除通用属性外,该元素还有一个自定义属性:
name, class, group, ctrllimited, forcelimited, ctrlrange, forcerange, lengthrange, gear, cranklength, joint, jointinparent, tendon, cranksite, slidersite, site, refsite, user
与执行机构/常规相同。
kv:实数,"1
速度反馈增益。
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 |
除通用属性外,该元素还有一个自定义属性:
name, class, group, ctrllimited, forcelimited, ctrlrange, forcerange, actrange, lengthrange, gear, cranklength, joint, jointinparent, tendon, cranksite, slidersite, site, refsite, user
与执行机构/常规相同。
kp:实数,"1
位置反馈增益。
kv:实数,"0
执行机构施加的阻尼。使用该属性时,建议使用隐式快速或隐式积分器。
inheritrange:实数,"0
与 position/inheritrange 相同,但设置的是 actrange(与传输目标具有相同的长度语义),而不是 ctrlrange(具有速度语义)。
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 |
除通用属性外,该元素还有一个自定义属性:
name, class, group, ctrllimited, forcelimited, ctrlrange, forcerange, lengthrange, gear, cranklength, joint, jointinparent, tendon, cranksite, slidersite, site, refsite, user
与执行机构/常规相同。
kv:实数,"1
速度反馈增益。
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) |
除通用属性外,该元素还有四个自定义属性:
name, class, group, ctrllimited, forcelimited, ctrlrange, forcerange, lengthrange, gear, cranklength, joint, jointinparent, tendon, cranksite, slidersite, site, refsite, user
与执行机构/常规相同。
timeconst:实数,"1
激活动态的时间常数。
面积:实数,"1
气缸的面积。内部用作执行机构增益。
直径:实数,可选
用户可以指定直径来代替面积。如果两者都指定,则直径优先。
偏置:real(3), "0 0 0"
偏置参数,内部复制到 biasprm 中。
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 (*)
该元素用于创建触摸传感器。传感器的有效区域由一个位置定义。如果接触点位于该位置的范围内,并且涉及到与该位置相连的物体,则相应的接触力将包含在传感器读数中。如果接触点位于传感器区域之外,但法线与传感器区域相交,则也会包括在内。之所以需要这种重新投影功能,是因为如果没有这种功能,接触点可能会从背面离开传感器区域(由于接触点柔性),从而导致错误的力读数。该传感器的输出为非负标量。其计算方法是将所有触点的法向力(标量)相加。
name, noise, cutoff, user
请参见传感器。
site:字符串,必填
定义活动传感器区域的站点。
2.15.2 sensor/accelerometer (*)
该元素可创建一个三轴加速度计。传感器安装在站点上,其位置和方向与站点坐标系相同。该传感器会输出三个数字,即在本地坐标中站点的线性加速度(包括重力)。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
name, noise, cutoff, user
请参阅 "传感器"。
site:字符串,必填
安装传感器的位置。加速度计与站点本地坐标系居中对齐。
2.15.3 sensor/velocimeter (*)
该元素可创建一个三轴测速仪。传感器安装在站点上,其位置和方向与站点坐标系相同。该传感器会输出三个数字,即该站点在本地坐标中的线速度。
name, noise, cutoff, user
请参阅传感器。
site:字符串,必填
安装传感器的位置。测速仪以站点本地坐标系为中心对齐。
2.15.4 sensor/gyro (*)
该元素可创建一个三轴陀螺仪。传感器安装在站点上,其位置和方向与站点坐标系相同。该传感器可输出三个数字,即站点在本地坐标中的角速度。该传感器通常与安装在同一地点的加速度计结合使用,以仿真惯性测量单元(IMU)。
name, noise, cutoff, user
请参阅传感器。
site:字符串,必填
安装传感器的位置。陀螺仪与站点本地坐标系居中对齐。
2.15.5 sensor/force (*)
该元素用于创建一个三轴力传感器。传感器会输出三个数字,它们是子代和父代身体之间的相互作用力,用定义传感器的坐标系表示。通常情况下,站点是连接在子代身体上的,力的方向是从子代身体指向父代身体。这里的计算考虑了作用在系统上的所有力,包括接触和外部扰动。使用这种传感器通常需要创建一个与父体焊接在一起的假体(即没有连接元素)。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
name, noise, cutoff, user
请参阅 "传感器"。
site:字符串,必填
安装传感器的位置。测量到的相互作用力是在定义了该位置的车身与其父车身之间,并从子车身指向父车身。当然,建模的物理传感器也可以连接到父体上,在这种情况下,传感器数据的符号将与之相反。请注意,每个机体都有一个唯一的父机体,但可以有多个子机体,这就是我们通过子机体而不是父机体来定义传感器的原因。
2.15.6 sensor/torque (*)
该元素可创建一个三轴扭矩传感器。它与上面的力传感器类似,但测量的是扭矩而不是力。
该传感器在模型中的存在会在传感器计算过程中触发对 mj_rnePostConstraint 的调用。
name, noise, cutoff, user
请参见传感器。
site:字符串,必填
安装传感器的位置。测量的相互作用力矩在定义了该位置的主体与其父主体之间。
2.15.7 sensor/magnetometer (*)
该元素用于创建磁力计。它测量传感器位置处的磁通量,以传感器位置坐标系表示。输出为三维矢量。
name, noise, cutoff, user
请参阅传感器。
site:字符串,必填
连接传感器的位置。
2.15.8 sensor/rangefinder (*)
该元素用于创建测距仪。它沿着传感器位置的正 Z 轴所定义的射线,测量到最近的地表的距离。如果射线没有与任何地表相交,传感器的输出值为-1。如果射线的原点在一个地理体内部,则仍会感应到该表面(但不会感应到内部空间)。与传感器位置连接在同一主体上的地理实体将被排除在外。不可见的几何体(定义为 rgba(或其材质 rgba)为 alpha=0 的几何体)也会被排除在外。但请注意,通过禁用其 geom 组而在可视化界面中不可见的 geom 不会被排除;这是因为传感器的计算与可视化界面无关。
name, noise, cutoff, user
请参阅传感器。
site:字符串,必填
连接传感器的站点。
2.15.9 sensor/camprojection (*)
该元素用于创建营地投影传感器,以像素坐标返回投影到摄像机图像上的目标位置。该系统的原点位于第一个像素的左上角,因此,如果目标正好投射到图像的一角,其值将为(0,0)。数值不会被剪切,因此落在摄像机图像外的目标值将高于或低于像素限制。此外,摄像机后方的点也会投射到图像上,因此用户可以根据需要过滤掉这些点。为此,可以使用 framepos<sensor-framepos> 传感器,将摄像头作为参考坐标系,然后 Z 坐标中的负值/正值分别表示摄像头前方/后方的位置。
site:字符串,必填
投射到摄像机图像上的位置。
camera:字符串,必填
用于投影的摄像机,其分辨率属性必须为正数。
name, noise, cutoff, user
请参阅传感器。
2.15.10 sensor/jointpos (*)
该元素和其余传感器元素不涉及特定传感器的计算。相反,它们会将已经计算过的数量复制到数组 mjData.sensordata 中。该元素用于创建关节位置或角度传感器。它可以连接到标量关节(滑动或铰链)。其输出为标量。
name, noise, cutoff, user
参见传感器。
joint: 字符串,必填
将感应其位置或角度的关节。此处只能引用标量关节。传感器输出从 mjData.qpos 复制。
2.15.11 sensor/jointvel (*)
该元素用于创建关节速度传感器。它可以连接到标量关节(滑动或铰链)上。其输出为标量。
name, noise, cutoff, user
参见传感器。
joint: 字符串,必填
将被感应速度的关节。此处只能引用标量关节。传感器输出复制自 mjData.qvel。
2.15.12 sensor/tendonpos (*)
该元素用于创建肌腱长度传感器。它既可连接到空间肌腱,也可连接到固定肌腱。其输出为标量。
name, noise, cutoff, user
请参阅传感器。
肌腱:字符串,必填
将被感应长度的肌腱。传感器输出复制自 mjData.ten_length。
2.15.13 sensor/tendonvel (*)
该元素用于创建肌腱速度传感器。它既可连接到空间肌腱,也可连接到固定肌腱。其输出为标量。
name, noise, cutoff, user
请参阅传感器。
肌腱:字符串,必填
将被感应速度的肌腱。传感器输出复制自 mjData.ten_velocity。
2.15.14 sensor/actuatorpos (*)
该元素用于创建执行器长度传感器。每个执行器都有一个具有长度的传动装置。该传感器可以连接到任何执行器上。其输出为标量。
name, noise, cutoff, user
请参见传感器。
执行器:字符串,必填
将感应其传输长度的执行器。传感器输出复制自 mjData.actuator_length。
2.15.15 sensor/actuatorvel (*)
该元素用于创建执行器速度传感器。该传感器可连接到任何执行器上。其输出为标量。
name, noise, cutoff, user
参见传感器。
执行器:字符串,必填
传感其传动速度的执行器。传感器输出复制自 mjData.actuator_velocity。
2.15.16 sensor/actuatorfrc (*)
该元素用于创建执行器力传感器。传感器感测的是标量执行器力,而不是执行器产生的广义力(后者是标量力与由传动装置决定的力矩臂矢量的乘积)。该传感器可以连接到任何传动器上。其输出为标量。
name, noise, cutoff, user
请参见传感器。
执行器:字符串,必填
将感应其标量力输出的执行器。传感器输出从 mjData.actuator_force 复制。
2.15.17 传感器/关节推杆力传感器 (*)
该元素用于创建一个执行器力传感器,在关节处进行测量。感应的力是所有致动器对单个标量关节(铰链或滑块)产生的广义力。如果关节的致动器重力补偿(actuatorgravcomp)属性为 "true",该传感器还将测量重力补偿力(直接加到关节上,不会记录在致动器重力补偿(actuatorfrc)传感器中)。当多个致动器作用在一个关节上或一个致动器作用在多个关节上时,这种传感器非常重要。详情请参阅力限制。
name, noise, cutoff, user
请参阅传感器。
关节:字符串,必填
感应执行器力的关节。传感器输出从 mjData.qfrc_actuator 复制。
2.15.18 sensor/ballquat (*)
该元素为球关节创建一个四元数传感器。它会输出与单位四元数相对应的 4 个数字。
name, noise, cutoff, user
请参见传感器。
joint: 字符串,必填
四元数被感应的球形关节。传感器输出从 mjData.qpos 中复制。
2.15.19 sensor/ballangvel (*)
该元素用于创建一个球形关节角速度传感器。它输出 3 个数字,分别对应关节的角速度。该矢量的法线是以拉德/秒为单位的旋转速度,方向是围绕其旋转的轴线。
name, noise, cutoff, user
请参阅传感器。
joint: string, required
感应角速度的球形关节。传感器输出复制自 mjData.qvel。
2.15.20 sensor/jointlimitpos (*)
该元素用于创建位置联合限位传感器。
name, noise, cutoff, user
参见传感器。
关节:字符串,必填
感应限位的关节。传感器输出等于相应极限约束的 mjData.efc_pos - mjData.efc_margin。请注意,如果违反了限值,无论违反了限值的哪一边,结果都是负值。如果同时违反了限制的两边,则只返回第一个分量。如果没有违反,结果为 0。
2.15.21 sensor/jointlimitvel (*)
该元素用于创建速度联合限制传感器。
name, noise, cutoff, user
请参阅传感器。
关节:字符串,必填
感应其限值的关节。传感器输出复制自 mjData.efc_vel。如果未违反关节限值,结果为 0。
2.15.22 sensor/jointlimitfrc (*)
该元素用于创建约束力的关节限位传感器。
name, noise, cutoff, user
请参阅传感器。
关节:字符串,必填
感应其极限值的关节。传感器输出从 mjData.efc_force 复制。如果没有违反关节限值,则结果为 0。
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 (?)
除名称、类别、主体外,所有粘附属性在此都可用。