Skip to content

添加物理与碰撞属性

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

教程级别: 中级

预计用时: 10 分钟

本教程将介绍如何为 URDF 模型添加基本的物理属性,并定义碰撞属性。

到目前为止,我们只通过 visual 子元素来定义 link,顾名思义,它描述的是机器人的外观。但要让碰撞检测正常工作或在仿真器中运行,还需要额外定义 collision 元素。这里是带有碰撞和物理属性的新 URDF。

以下是新的 base link 代码。

<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 元素是 link 的直接子元素,与 visual 标签同级。
  • collision 元素通过 geometry 标签定义形状,用法与 visual 元素完全相同。
  • 同样可以在 collision 标签下指定 origin 子元素,方式与 visual 一致。

在多数情况下,碰撞几何体和原点会与可视几何体和原点保持一致。但有两种常见情况需要区别对待:

  • 提升处理速度: 对两个网格进行碰撞检测的计算量远大于两个简单几何体。因此,可以在 collision 元素中用更简单的几何体替代网格。
  • 安全区域: 有时需要限制运动范围,避免靠近敏感部件。例如,如果不希望任何东西碰到 R2D2 的头部,可以把碰撞几何体定义为一个包围头部的圆柱体,从而阻止其他物体过于靠近。

要让模型正确仿真,需要为机器人定义一些物理属性,也就是 Gazebo 等物理引擎所需的参数。

每个参与仿真的 link 元素都需要一个 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="1e-3" ixy="0.0" ixz="0.0" iyy="1e-3" iyz="0.0" izz="1e-3"/>
</inertial>
</link>
  • 这个元素同样是 link 的子元素。
  • 质量的单位为千克。
  • 3×3 旋转惯性矩阵通过 inertia 元素指定。由于矩阵是对称的,只需 6 个元素即可表示,如下所示:
ixxixyixz
ixyiyyiyz
ixziyzizz
  • 这些信息可以由 MeshLab 等建模软件提供。几何图元(圆柱体、长方体、球体)的惯性可以参考维基百科的惯性矩张量列表来计算(上面的示例就使用了这些值)。
  • 惯性张量取决于物体的质量和质量分布。一个较好的初步近似,是假设质量在物体体积内均匀分布,再根据物体形状计算惯性张量。
  • 如果不确定该填什么,ixx/iyy/izz=1e-3 或更小的值对于中等大小的 link 通常是一个合理的默认值(对应于边长 0.1 m、质量 0.6 kg 的长方体)。单位矩阵则是特别糟糕的选择,因为惯性通常过高(对应于边长 0.1 m、质量 600 kg 的长方体!)。
  • 还可以指定 origin 标签,用于定义重心和惯性参考系(相对于 link 的参考系)。
  • 使用实时控制器时,零(或接近零)的惯性可能导致机器人模型在没有任何警告的情况下坍塌,所有 link 的原点将与世界原点重合。

此外,还可以定义 link 之间接触时的行为方式,这通过 collision 标签下的 contact_coefficients 子元素来设置。需要指定三个属性:

关节的运动特性由 dynamics 标签定义,包含两个属性:

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

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

在纯 URDF 范畴内(即不包括 Gazebo 特定的标签),还有两个标签可用于定义关节特性:calibration 和 safety controller。它们不在本教程的讨论范围内,请参阅规范。

通过使用 xacro来减少代码量和繁琐的数学计算。