添加物理和碰撞属性

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

教程级别: 中级

时间: 10分钟

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

碰撞

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

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

<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>
  • 碰撞元素是链接对象的直接子元素,与视觉标签处于同一级别。

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

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

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

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

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

物理属性

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

惯性

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

<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>
  • 该元素也是链接对象的子元素。

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

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

    ixx

    ixy

    ixz

    ixy

    iyy

    iyz

    ixz

    iyz

    izz

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

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

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

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

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

接触系数

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

关节动力学

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

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

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

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

其他标签

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

下一步

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