3. 向URDF模型添加物理和碰撞属性

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

教程级别:入门

在本教程中,将会学习如何向URDF模型添加一些基本的物理属性以及如何指定其碰撞属性。

3.1 碰撞

到目前为止,我们只使用了一个“视觉(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>

● 碰撞(collision)元素是链接对象的一个直接子元素,与视觉(visual)标签处于同一个层次。

● 碰撞元素以与视觉元素相同的方式定义其形状,即用“几何体(geometry)”标签来定义其形状。其几何体标签的格式与视觉元素中的完全相同。

● 也可以以与视觉元素中相同的方式用碰撞标签的子元素来指定原点。

在许多情况下,您想要让碰撞几何体及其原点与视觉几何体及其原点完全相同。然而,在以下两种主要情况下您不会让它们完全相同:

 更快速处理。对两个网格进行碰撞检测比对两个简单几何体进行碰撞检测具有大得多的计算复杂度。因此,您可能希望在碰撞元素中用更简单的几何体来代替网格。

 安全区域。您可能希望限制机器人在敏感设备附近的移动。例如,如果不想让任何物体与R2D2机器人的头部发生碰撞,则可以将碰撞几何体定义为一个包围该机器人头部的圆柱体,以防止任何物体过于靠近该机器人的头部。

3.2 物理属性

为了正确地对您的机器人模型进行仿真,需要定义机器人的几个物理属性,即Gazebo之类的物理引擎所需的物理属性。

3.2.1 惯性

每个被仿真的链接元素都需要一个惯性(inertial)标签。下面是一个简单示例:

<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>

 惯性(inertial)元素也是链接对象的一个子元素。

● 质量(mass)的单位是千克。

● 该3×3转动惯性矩阵由惯性元素指定。由于该矩阵是对称的,因此可以仅由6个元素来表示,如下所示:

ixx ixy ixz
ixy iyy iyz
ixz iyz izz

● 这个信息可以通过MeshLab等建模程序提供给您。几何图元(圆柱体、方盒、球体)的惯性可以使用维基百科的转动惯性张量列表来计算(且在上面的示例中使用了)。

● 惯性张量的大小取决于物体的质量及质量分布情况。一个好的初步近似是假设物体体积中的质量分布是均匀的并根据物体形状来计算其惯性张量,正如上面所述。

● 如果惯性张量大小不确定,则ixx/iyy/izz=1e-3或更小值的惯性矩阵通常是中型链接(对应于一个边长为0.1m、质量为0.6 kg的方盒)的合理默认值。单位矩阵是一个特别糟糕的选择,因为这样该物体往往会太高了(对应于一个边长为0.1m、质量为600kg的方盒!)。

● 也可以指定一个原点标记来指定物体的重心和惯性参考坐标系(相对于该链接的参考坐标系)。

● 使用实时控制器时,零(或几乎为零)的惯性元素会导致机器人模型在没有任何警告的情况下崩溃,并且显现的所有链接其原点都将会与仿真世界的原点重合。

3.2.2 接触系数

还可以定义在彼此相互接触时各个链接的行为方式。这是通过名为contact_coefficients的碰撞标签子元素来完成的。需要指定以下三个属性:

● mu—摩擦系数(Friction coefficient)

● kp—刚度系数(Stiffness coefficient)

● kd—阻尼系数(Dampening coefficient)

3.2.3 关节动力学

关节的运动方式是由关节的动力学(dynamics)标签定义的。在本示例中关节动力学有以下两个属性:

● friction—物理静摩擦。对于棱柱关节,其单位是牛顿。对于旋转关节,其单位是牛顿米。

● damping—物理阻尼值。对于棱柱关节,其单位是牛顿秒/米。对于旋转关节,其单位是牛顿米秒每弧度。

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

3.3 其它标签

在纯URDF领域(即不包括Gazebo的特定标签),还有两个标签有助于定义关节:校准(calibration)和安全控制器。由于在本教程中并不包含这两个标签的使用说明,因此请查看其规程

3.4 下一步

通过使用xacro来减少代码量和必须做的烦人的数学运算

英语原文地址:docs.ros.org/en/galacti