添加物理和碰撞属性 [6113]

**目标:**学习如何为链接添加碰撞和惯性属性,以及如何为关节添加关节动力学。 [6114]

教程级别: 中级 [16770]

时间: 10分钟 [16421]

在本教程中,我们将介绍如何为URDF模型添加一些基本的物理属性,并指定其碰撞属性。 [6115]

碰撞 [6116]

到目前为止,我们只为链接指定了一个子元素“visual”,它定义了机器人的外观。然而,为了使碰撞检测工作或者模拟机器人,我们还需要定义一个“collision”元素。这是带有碰撞和物理属性的新URDF文件[6117]

这是我们新基本链接的代码。 [6118]

<link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
      <material name="blue">
        <color rgba="0 0 .8 1"/>
      </material>
    </visual>
    <collision>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </collision>
  </link>
  • 碰撞元素是链接对象的直接子元素,与视觉标签处于同一级别。 [6119]

  • 碰撞元素的形状定义方式与视觉元素相同,都是使用geometry标签。在这里,geometry标签的格式与视觉元素完全相同。 [6120]

  • 您还可以像在视觉元素中一样,在碰撞标签的子元素中指定一个起点。 [6121]

在许多情况下,您希望碰撞几何体和原点与视觉几何体和原点完全相同。然而,有两种情况下您不会这样做: [6122]

  • 更快的处理速度。检测两个网格的碰撞要比检测两个简单几何体复杂得多。因此,您可能希望将网格替换为碰撞元素中的简单几何体。 [6123]

  • 安全区域。您可能希望限制靠近敏感设备的移动。例如,如果我们不希望任何物体与R2D2的头碰撞,我们可以将碰撞几何体定义为一个包围他头部的圆柱体,以防止任何物体靠近他的头部。 [6124]

物理属性 [6125]

为了使您的模型能够正确模拟,您需要定义机器人的几个物理属性,即像Gazebo这样的物理引擎需要的属性。 [6126]

惯性 [6127]

每个被模拟的链接元素都需要一个惯性标签。这是一个简单的标签。 [6128]

<link name="base_link">
  <visual>
    <geometry>
      <cylinder length="0.6" radius="0.2"/>
    </geometry>
    <material name="blue">
      <color rgba="0 0 .8 1"/>
    </material>
  </visual>
  <collision>
    <geometry>
      <cylinder length="0.6" radius="0.2"/>
    </geometry>
  </collision>
  <inertial>
    <mass value="10"/>
    <inertia ixx="1e-3" ixy="0.0" ixz="0.0" iyy="1e-3" iyz="0.0" izz="1e-3"/>
  </inertial>
</link>
  • 该元素也是链接对象的子元素。 [6129]

  • 质量以千克为单位定义。 [6130]

  • 3x3旋转惯性矩阵由惯性元素指定。由于它是对称的,只需要用6个元素来表示。 [6131]

    ixx [6132]

    ixy [6133]

    ixz [6134]

    ixy [6135]

    iyy [6136]

    iyz [6137]

    ixz [6138]

    iyz [6139]

    izz [6140]

  • 这些信息可以由诸如MeshLab之类的建模程序提供。可以使用维基百科的`惯性矩张量列表<https://en.wikipedia.org/wiki/List_of_moments_of_inertia#List_of_3D_inertia_tensors>`_来计算几何原始体(圆柱体、长方体、球体)的惯性(在上面的示例中使用)。 [6141]

  • 惯性张量取决于物体的质量和质量分布。一个很好的第一近似是假设物体的质量在体积上均匀分布,并基于物体的形状计算惯性张量,如上所述。 [6142]

  • 如果不确定应该填写什么,一个常见的中等大小连接的合理默认值是ixx/iyy/izz=1e-3或更小(它对应于一边长为0.1米、质量为0.6千克的长方体)。恒等矩阵是一个特别糟糕的选择,因为它通常太大(它对应于一边长为0.1米、质量为600千克的长方体)。 [6143]

  • 您还可以指定一个原点标签,以指定重心和惯性参考系(相对于链接的参考系)。 [6144]

  • 在使用实时控制器时,惯性元素为零(或几乎为零)可能导致机器人模型突然崩溃,并且所有链接将与世界原点重合。 [6145]

接触系数 [6146]

您还可以定义链接在彼此接触时的行为。这可以通过碰撞标签的子元素contact_coefficients来实现。有三个属性需要指定: [6147]

关节动力学 [6151]

关节的运动由关节的动力学标签定义。这里有两个属性: [6152]

  • 摩擦 - 物理静摩擦力。对于平移关节,单位为牛顿;对于旋转关节,单位为牛顿·米。 [6153]

  • 阻尼 - 物理阻尼值。对于平移关节,单位为牛顿秒/米;对于旋转关节,单位为牛顿·米秒/弧度。 [6154]

如果未指定,则这些系数默认为零。 [6155]

其他标签 [6156]

在纯URDF领域(即不包括Gazebo特定标签的情况下),还有两个剩余的标签可用于定义关节:校准和安全控制器。请查看`规范 <https://wiki.ros.org/urdf/XML/joint>`_,因为它们在本教程中没有包含。 [6157]

下一步 [6158]

通过 使用xacro 减少您需要编写的代码和繁琐的数学计算量。 [6159]