向URDF模型添加物理和碰撞属性 [待校准@8927]

Goal目标: Learn了解如何为链接添加碰撞和惯性特性,以及如何为关节添加关节动力学。 [待校准@8928]

教程级别: 初学者 [Alyssa@7088]

在本教程中,我们将介绍如何向URDF模型添加一些基本物理属性,以及如何指定其碰撞属性。 [待校准@8929]

碰撞 [待校准@8930]

到目前为止,我们只指定了与单个子元素 visual 的链接, visual 定义了 (毫不奇怪) 机器人的样子。然而,为了让碰撞检测工作或模拟机器人,我们还需要定义一个 collision 元素。具有碰撞和物理性质的 Here is the new urdf[待校准@8931]

这是我们新的基本链接的代码。 [待校准@8932]

<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>
  • 冲突元素是链接对象的直接子元素,与可视标记处于同一级别。 [待校准@8933]

  • 碰撞元素使用几何标签以与视觉元素相同的方式定义其形状。几何标签的格式与视觉上的格式完全相同。 [待校准@8934]

  • 您还可以以与碰撞标签的子元素相同的方式指定原点 (与视觉一样)。 [待校准@8935]

在许多情况下,您希望碰撞几何图形和原点与视觉几何图形和原点完全相同。然而,有两种主要情况下你不会: [待校准@8936]

  • 更快的处理。对两个网格进行碰撞检测比对两个简单的几何图形进行碰撞检测要复杂得多。因此,您可能希望用碰撞元素中更简单的几何图形替换网格。 [待校准@8937]

  • 安全区。你可能想要限制靠近敏感设备的移动。例如,如果我们不想让任何东西与R2D2的头部碰撞,我们可以将碰撞几何定义为围绕他头部的圆柱体,以防止任何东西离他的头部太近。 [待校准@8938]

物理性质 [待校准@8939]

为了使模型正确模拟,您需要定义机器人的几个物理属性,即像Gazebo这样的物理引擎所需要的特性。 [待校准@8940]

惯性 [待校准@8941]

每个被模拟的连杆元件都需要一个惯性标签。这里有一个简单的。 [待校准@8942]

<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="0.4" ixy="0.0" ixz="0.0" iyy="0.4" iyz="0.0" izz="0.2"/>
  </inertial>
</link>
  • 此元素也是link对象的子元素。 [待校准@8943]

  • 质量定义为千克。 [待校准@8944]

  • 用惯性元件指定3x3旋转惯性矩阵。由于这是对称的,因此只能由6个元素表示。 [待校准@8945]

  • 这些信息可以通过MeshLab等建模程序提供给您。几何原语 (圆柱体、盒子、球体) 的惯性可以使用维基百科的 list of moment of inertia tensors 来计算 (在上面的例子中使用)。 [待校准@8955]

  • 惯性张量取决于物体的质量和质量分布。一个好的第一近似是假设质量在物体体积中的分布相等,并根据物体的形状计算惯性张量,如上所述。 [待校准@8956]

  • 如果不确定放什么,对于中等尺寸的链接,ixx/iyy/izz = 1e-3或更小的矩阵通常是合理的默认值 (它对应于一个边长0.1米、质量为0的盒子。6千克)。一致性矩阵是一个特别糟糕的选择,因为它通常太高了 (它相当于一个边长0.1米、质量为600千克的盒子!)。 [待校准@8957]

  • 您还可以指定原点标签以指定重心和惯性参考帧 (相对于链接的参考帧)。 [待校准@8958]

  • 当使用实时控制器时,零 (或几乎为零) 的惯性元素会导致机器人模型在没有警告的情况下折叠,并且所有链接将以它们的起源与世界起源一致出现。 [待校准@8959]

接触系数 [待校准@8960]

您还可以定义链接相互接触时的行为。这是通过调用contact_coefficients的冲突标签的子元素完成的。有三个属性需要指定: [待校准@8961]

联合动力学 [待校准@8965]

关节如何移动由关节的动力学标签定义。这里有两个属性: [待校准@8966]

  • [需手动修复的语法]``friction`` -物理静摩擦。对于棱柱形接头,单位为牛顿。对于旋转接头,单位为牛顿米。 [待校准@8967]

  • [需手动修复的语法]``damping`` -物理阻尼值。对于棱柱形接头,单位为每米牛顿秒。对于旋转接头,每弧度牛顿米秒。 [待校准@8968]

如果未指定,则这些系数默认为零。 [待校准@8969]

其他标签 [待校准@8970]

在纯URDF领域 (即除Gazebo标签外),还有两个标签可以帮助定义接头: 校准和安全控制器。查看 spec ,因为它们不包括在本教程中。 [待校准@8971]

下一步 [待校准@8972]

通过 using xacro 减少你必须做的代码和恼人的数学。 [待校准@8973]