MuJoCo 入门教程(四)建模(三)

简介: MuJoCo 入门教程(四)建模

MuJoCo 入门教程(四)建模(二)+https://developer.aliyun.com/article/1585356

2.12 复合对象

       复合对象不是新的模型元素。相反,它们是现有元素的(大型)集合,旨在仿真粒子系统、绳索、布料和柔性体。这些集合由模型编译器自动生成。用户可以使用新的 XML 元素复合体及其属性和子元素对自动生成器进行高级配置,详见 XML 参考章节。如果保存编译后的模型,复合元素就不再存在,取而代之的是自动生成的常规模型元素集合。因此,可以把它看作是由模型编译器扩展的宏。

       复合对象由常规的 MuJoCo 主体组成,在这里我们称之为 "元素主体"。元素体是作为复合对象所在体的子体创建的;因此,复合对象会出现在 XML 中定义常规子体的相同位置。每个自动生成的元素体都附有一个几何体,通常是一个球体,但也可能是一个囊体或椭圆体。因此,复合物体本质上是一个粒子系统,但粒子可以通过仿真各种柔性物体的方式一起移动。元素体的初始位置在一维、二维或三维中形成一个规则的网格。它们都可以是父体(可以是世界或另一个规则体;复合对象不能嵌套)的子体,并具有允许相对于父体运动的关节,或者它们可以形成一个运动树,元素体之间具有关节。它们还可以用肌腱连接起来,肌腱长度上有柔性相等约束,形成必要的耦合。在某些情况下也会使用关节相等约束。用户可以调整这些相等约束的 solref 和 solimp 属性,从而调整复合对象的柔性和弹性。

       除了设置物理特性外,复合对象生成器还能创建合适的渲染。二维和三维对象都可以渲染为皮肤。表皮是自动生成的,可以使用双立方体插值进行纹理和细分。实际的物理效果,尤其是碰撞检测,都是基于元素体及其几何体,而表皮则纯粹是一个可视化对象。但在大多数情况下,我们更愿意看到皮肤的表现。为方便起见,生成器会将所有几何体、场地和肌腱归入组 3,默认情况下可视化将被禁用。因此,举例来说,当您加载一个 2D 网格时,您将看到一个连续的柔性表面,而不是一个与筋相连的球体集合。不过,在微调模型并试图理解其背后的物理原理时,渲染球体和腱是非常有用的。要切换渲染风格,请禁用皮肤渲染,并启用第 3 组来渲染球体和筋腱。

       在设计复合对象生成器时,我们尽可能采用直观的高级控制,但同时也提供了大量选项,这些选项之间会相互影响,并对生成的物理效果产生深远影响。因此,用户应该仔细阅读参考文档。作为快速入门,MuJoCo 提供了每种复合对象类型的示例。下面我们将详细介绍这些示例,并解释其中不太明显的地方。在所有示例中,我们都有一个包含在模型中的静态场景,然后是一个单一的复合对象。静态场景有一个 mocap 主体(大胶囊),可以用鼠标移动来探测系统的行为。下面的 XML 片段只是复合对象的定义;完整示例请参阅发行版中的 XML 模型文件。

2.12.1 粒子 Particle.

<worldbody>
  <composite type="particle" count="10 10 10" spacing="0.07" offset="0 0 1">
    <geom size=".02" rgba=".8 .2 .1 1"/>
  </composite>
</worldbody>

       只需使用上述 XML 即可创建一个包含 1000 个粒子的系统,粒子的初始位置为 10-10-10 网格,并可设置粒子的大小、颜色、间距和偏移量。生成的元素体将成为世界体的子元素。人们还可以调整许多其他属性,包括触点的柔性和关节属性。右图显示了关节。每个元素体都有 3 个正交的滑块关节,可以平移但不能旋转。我们的想法是,粒子应该有位置,但没有方向。MuJoCo 主体总是有方向的,但通过只使用滑块关节,我们不允许改变方向。我们会自动调整几何体的默认设置,使它们相互之间以及与模型的其他部分无摩擦接触。因此,该系统有 1000 个体(每个体都有一个 geom)、3000 个自由度和大约 1000 个活动触点。在现代处理器的单核上评估动态效果大约需要 1 毫秒。与其他大多数 MuJoCo 模型一样,柔性约束允许在更大的时间步长下进行仿真(该模型在 30 毫秒时间步长甚至更高的时间步长下都很稳定)。

       粒子还与被动力 2D 和 3D 插件兼容,这将在可变形部分讨论。不过,碰撞仅限于粒子本身,而不是包围粒子的整个表皮边界。这使得接触速度非常快,但并不能保证避免所有穿透。如需了解更全面的处理方法,请再次参阅 "可变形 "部分,其中概述了如何使用 flexcomp 创建此类对象。将使用复合粒子创建的模型移植到可弯曲模型中也很容易,请参阅文件夹 elasticity/(弹性/)中的多个示例。

2.12.2 1D 网格。1D grid.

<composite type="grid" count="20 1 1" spacing="0.045" offset="0 0 1">
  <joint kind="main" damping="0.001"/>
  <tendon kind="main" width="0.01"/>
  <geom size=".02" rgba=".8 .2 .1 1"/>
  <pin coord="1"/>
  <pin coord="13"/>
</composite>

       网格类型可以创建一维或二维网格,具体取决于计数属性。在此,我们以一维网格为例进行说明。这些网格是用筋连接的球串,其长度受柔性-质量限制。柔性可以调整。与粒子类似,这里的元素体也有滑动接头,但没有旋转接头。右图展示了销钉。销钉子元素用于指定销钉体的网格坐标,模型编译器不会为这些体生成关节,从而将它们刚性固定在父体(在本例中为世界)上。这使得右图中的字符串悬挂在空间中。例如,同样的机制也可以用来制作鞭子模型;在这种情况下,父体会移动,而第一个元素体会固定在父体上。

2.12.3 2D grid.

<composite type="grid" count="9 9 1" spacing="0.05" offset="0 0 1">
  <skin material="matcarpet" inflate="0.001" subgrid="3" texcoord="true"/>
  <geom size=".02"/>
  <pin coord="0 0"/>
  <pin coord="8 0"/>
</composite>

       二维网格可用于仿真布料。它真正仿真的是一个由球体组成的 2D 网格,球体之间用平等约束的筋连接(未显示)。模型编译器还可以生成皮肤,可通过上述 XML 中的皮肤子元素启用。一些元素体也可以被钉住,与一维网格类似,但使用两个网格坐标。右图显示的是一块布被固定在世界体的两个角上,并悬挂在我们的胶囊探针上。右侧的皮肤使用双立方体插值法进行细分,在没有纹理的情况下可以提高视觉质量。有纹理时(左图),细分的好处就不那么明显了。

2.12.4 Cable.

<extension>
   <plugin plugin="mujoco.elasticity.cable"/>
</extension>
<worldbody>
   <composite prefix="actuated" type="cable" curve="cos(s) sin(s) s" count="41 1 1"
              size="0.25 .1 4" offset="0.25 0 .05" initial="none">
      <plugin plugin="mujoco.elasticity.cable">
         <!--Units are in Pa (SI)-->
         <config key="twist" value="5e8"/>
         <config key="bend" value="15e8"/>
         <config key="vmax" value="0"/>
      </plugin>
      <joint kind="main" damping="0.15" armature="0.01"/>
      <geom type="capsule" size=".005" rgba=".8 .2 .1 1"/>
   </composite>
</worldbody>

       缆线仿真的是具有扭曲和弯曲刚度的不可拉伸一维弹性物体。它是通过一系列胶囊或盒子离散化的。它的刚度和惯性属性是根据给定参数和横截面形状直接计算得出的,因此可以实现各向异性行为,例如在皮带或计算机电缆中可以发现的行为。它是一棵单一的运动树,因此在不使用额外约束的情况下是完全不可扩展的,从而可以使用较大的时间步长。弹性模型在几何上是精确的,基于计算中心线的毕肖普或无扭转坐标系,即通过横截面中心的线。几何体的方向相对于该坐标系表示,然后分解为扭转和弯曲部分,因此可以独立设置不同的刚度。此外,还可以指定无应力配置是平面还是曲线,例如螺旋弹簧。拉索需要使用第一方引擎插件,将来可能会直接集成到引擎中。

2.12.5 绳索和绳圈

       绳索和绳圈已被弃用。建议使用缆绳仿真弯曲和扭曲的不可拉伸弹性杆,使用一维挠性变形对象仿真拉伸加载场景中的可拉伸弦(如拉伸的橡皮筋)。

2.12.6 布

布已废弃。建议使用二维可弯曲变形对象来仿真薄弹性结构。

2.12.7 盒子 box

<body pos="0 0 1">
  <freejoint/>
  <composite type="box" count="7 7 7" spacing="0.04">
    <skin texcoord="true" material="matsponge" rgba=".7 .7 .7 1"/>
    <geom type="capsule" size=".015 0.05" rgba=".8 .2 .1 1"/>
  </composite>
</body>

       方框类型以及下面的圆柱体和椭圆体类型都用于模拟柔性三维物体。元素体沿外壳形成网格,因此元素体的数量与线性维度的平方成比例。这比仿真三维网格要有效得多。复合体所在的父体位于柔性物体的中心。所有元素体都是母体的子体。每个元素体都有一个滑动连接点,该连接点远离母体。这些关节允许软性物体的表面在任意点压缩和膨胀。为了保持形状,这些关节都受到初始位置的相等约束。此外,每个关节与相邻关节之间都有相等约束,因此当柔性物体发生变形时,变形是平滑的。最后,还有一个腱相等约束,规定所有关节的总和应保持不变。这试图近似地保持柔性物体的体积。如果物体受到来自四面八方的挤压,它就会被压缩,体积就会减小,否则一些元素体就会伸出来补偿其他地方的挤压。左侧的图显示了这种效果;我们使用胶囊探针压缩了一个角,立方体相对的两侧就会膨胀一些,而变形仍保持平滑。计数属性决定了每个维度中元素体的数量,因此如果计数不同,生成的对象将是一个矩形盒子而不是立方体。连接到元素体的几何体可以是球体、胶囊或椭圆体。球体在碰撞检测时速度更快,但会导致外壳变薄,使其他物体 "钻入 "柔性物体的 "皮肤"。使用胶囊或椭圆体时,它们会自动调整方向,使长轴指向外部,从而形成较厚的外壳,不易被穿透。

2.12.8 圆柱体和椭圆体

<body pos="0 0 1">
  <freejoint/>
  <composite type="ellipsoid" count="5 7 9" spacing="0.05">
    <skin texcoord="true" material="matsponge" rgba=".7 .7 .7 1"/>
    <geom type="capsule" size=".015 0.05" rgba=".8 .2 .1 1"/>
  </composite>
</body>

       圆柱体和椭圆体的创建方式与方框相同。唯一的区别是,元素体的参考位置(相对于父体)被投影到圆柱体或椭圆体上,其大小由计数属性暗示。自动皮肤生成器可以识别光滑表面,并相应调整皮肤法线。在图中,我们使用胶囊探针按压每个肢体,然后暂停仿真并将探针移开(这是可能的,因为探针是一个可以独立于物理特性移动的 mocap 肢体)。通过这种方式,我们可以看到探针造成的压痕以及由此导致的身体其他部分的变形。通过改变将柔性物体固定在一起的相等约束的 solref 和 solimp 属性,我们可以调整系统的行为,使其变得更软或更硬、有阻尼或有弹性等。请注意,箱体、圆柱体和椭圆体对象不涉及长运动链,可以在较大的时间步长下进行仿真--这与粒子和网格类似,而与绳索和布料不同。

MuJoCo 入门教程(四)建模(四)+https://developer.aliyun.com/article/1585361

目录
相关文章
|
9月前
|
机器学习/深度学习 缓存 自然语言处理
义无反顾马督工,Bert-vits2V210复刻马督工实践(Python3.10)
Bert-vits2更新了版本V210,修正了日/英的bert对齐问题,效果进一步优化;对底模使用的数据进行优化和加量,减少finetune失败以及电音的可能性;日语bert更换了模型,完善了多语言推理。
义无反顾马督工,Bert-vits2V210复刻马督工实践(Python3.10)
|
1月前
|
传感器 XML 存储
MuJoCo 入门教程(一)(下)
MuJoCo 入门教程(一)(上)
116 3
|
机器学习/深度学习 并行计算 计算机视觉
YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面)
YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面)
5798 1
YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面)
|
1月前
|
XML 数据可视化 机器人
MuJoCo 入门教程(四)建模(四)
MuJoCo 入门教程(四)建模(四)
75 2
|
1月前
|
XML 数据可视化 编译器
MuJoCo 入门教程(一)(上)
MuJoCo 入门教程(一)
127 2
|
1月前
|
XML 算法 数据可视化
MuJoCo 入门教程(四)建模(一)
MuJoCo 入门教程(四)建模
67 0
|
1月前
|
传感器 XML 机器人
MuJoCo 入门教程(四)建模(二)
MuJoCo 入门教程(四)建模
47 0
|
4月前
|
机器学习/深度学习 Python
【Python 机器学习专栏】堆叠(Stacking)集成策略详解
【4月更文挑战第30天】堆叠(Stacking)是机器学习中的集成学习策略,通过多层模型组合提升预测性能。该方法包含基础学习器和元学习器两个阶段:基础学习器使用多种模型(如决策树、SVM、神经网络)学习并产生预测;元学习器则利用这些预测结果作为新特征进行学习,生成最终预测。在Python中实现堆叠集成,需划分数据集、训练基础模型、构建新训练集、训练元学习器。堆叠集成的优势在于提高性能和灵活性,但可能增加计算复杂度和过拟合风险。
526 0
|
4月前
|
机器学习/深度学习 自然语言处理 算法
【Python机器学习】隐马尔可夫模型讲解及在中文分词中的实战(附源码和数据集)
【Python机器学习】隐马尔可夫模型讲解及在中文分词中的实战(附源码和数据集)
81 0