添加物理和碰撞属性

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

教程级别:中级

时间:10 分钟

在本教程中,我们将了解如何向 URDF 模型添加一些基本物理属性以及如何指定其碰撞属性。

碰撞

到目前为止,我们仅使用单个子元素“visual”指定了我们的链接,它(毫不奇怪)定义了机器人的外观。 但是,为了使碰撞检测正常工作或模拟机器人,我们还需要定义一个“碰撞”元素。 这是新的 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>
  • 碰撞元素是链接对象的直接子元素,与视觉标记处于同一级别。

  • 碰撞元素使用几何标记定义其形状的方式与视觉元素相同。

几何标记的格式与视觉元素完全相同。 * 您还可以以与碰撞标记子元素相同的方式指定原点(与视觉元素一样)。

在许多情况下,您希望碰撞几何图形和原点与视觉几何图形和原点完全相同。 但是,有两种主要情况您不会这样做:

  • 更快的处理。对两个网格进行碰撞检测比对两个简单几何图形进行碰撞检测要复杂得多。

因此,您可能希望在碰撞元素中用更简单的几何图形替换网格。 * 安全区。您可能希望限制靠近敏感设备的移动。 例如,如果我们不想让任何东西与 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 完成的。 有三个属性需要指定:

关节动力学

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

*friction - 物理静摩擦力。 对于棱柱关节,单位是牛顿。 对于旋转关节,单位是牛顿米。 *damping - 物理阻尼值。 对于棱柱关节,单位是牛顿秒/米。 对于旋转关节,单位是牛顿米秒/弧度。

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

其他标签

在纯 URDF 领域(即不包括 Gazebo 特定标签),还有两个标签可帮助定义关节:校准和安全控制器。 查看`spec <https://wiki.ros.org/urdf/XML/joint>`_,因为它们不包含在本教程中。

下一步

通过 使用 xacro 减少您必须执行的代码量和烦人的数学运算。