MoJoCo 入门教程(七)XML 参考(一)

简介: MoJoCo 入门教程(七)XML 参考

系列文章目录

 

 


前言

表格第二列中的符号含义如下:

!

必填元素,只能出现一次

?

可选元素,只能出现一次

*

可选元素,可多次出现

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"

       关节所属的整数组。该属性可用于自定义标签。可视化器也可以使用它来启用或禁用整个关节组的渲染。

MoJoCo 入门教程(七)XML 参考(二)+

目录
相关文章
|
2月前
|
传感器 XML 编解码
MoJoCo 入门教程(七)XML 参考(三)
MoJoCo 入门教程(七)XML 参考(三)
56 1
|
2月前
|
传感器 XML 数据可视化
MoJoCo 入门教程(七)XML 参考(二)
MoJoCo 入门教程(七)XML 参考
50 1
|
Java 数据库连接 数据库
MyBatis Generator XML 配置文件参考
在最常见的用例中,MyBatis Generator(MBG)由XML配置文件驱动。配置文件告诉MBG:如何连接到数据库什么对象要生成,以及如何生成它们什么表应用于生成对象以下是一个示例MBG配置文件。
915 0
|
2月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
4月前
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容
|
4月前
|
XML Java 数据格式
java解析xml文件内容
java解析xml文件内容
|
1月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
30 1
|
2月前
|
XML 监控 数据格式
ROS 2 - Python、XML 和 YAML 编写 Launch 文件
ROS 2 - Python、XML 和 YAML 编写 Launch 文件
194 0
|
4月前
|
XML Java 数据库
配置applicationContext.xml文件
配置applicationContext.xml文件