乐于分享
好东西不私藏

机器人系统——ROS2文档(进阶)—URDF-添加物理和碰撞属性

机器人系统——ROS2文档(进阶)—URDF-添加物理和碰撞属性

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

教程级别: 中级
时间: 10 分钟

目录
碰撞
物理属性
o惯性
o接触系数
o关节动力学
其他标签
后续步骤

在本教程中,我们将了解如何向 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 元素相同的方式定义其形状。geometry 标签的格式在此处与 visual 完全相同。
  • 您还可以以与 visual 相同的方式在 collision 标签内指定 origin 作为子元素。

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

  • 更快的处理 - 对两个网格进行碰撞检测比两个简单几何体的计算复杂得多。因此,您可能希望在 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 对象的子元素。
  • 质量以千克为单位定义。
  • 3x3 旋转惯性矩阵由 inertia 元素指定。由于它是对称的,因此可以仅由 6 个元素表示,如下所示。
ixxixyixz
ixyiyyiyz
ixziyzizz
  • 此信息可以由 MeshLab 等建模程序提供给您。几何基本体(圆柱、盒子、球体)的惯性可以使用维基百科的“3D 惯性张量列表”来计算(并在上述示例中使用)。
  • 惯性张量取决于物体的质量和质量分布。一个好的初步近似是假设质量在物体体积中均匀分布,并基于物体形状计算惯性张量,如上所述。
  • 如果不确定要放什么,对于中等大小的 link(对应于边长 0.1 米、质量 0.6 千克的盒子),ixx/iyy/izz=1e-3 或更小的矩阵通常是一个合理的默认值。单位矩阵是一个特别糟糕的选择,因为它通常太高了(对应于边长 0.1 米、质量 600 千克的盒子!)。
  • 您还可以指定 origin 标签来指定重心和惯性参考系(相对于 link 的参考系)。
  • 当使用实时控制器时,为零(或几乎为零)的惯性元素可能导致机器人模型在没有警告的情况下崩溃,并且所有 link 将显示其原点与世界原点重合。

接触系数

您还可以定义 link 之间接触时的行为。这是通过 collision 标签的子元素 contact_coefficients 完成的。有三个属性需要指定:

  • mu - 摩擦系数
  • kp - 刚度系数
  • kd - 阻尼系数

关节动力学

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

  • friction - 物理静摩擦。对于 prismatic 关节,单位是牛顿。对于 revolute 关节,单位是牛顿米。
  • damping - 物理阻尼值。对于 prismatic 关节,单位是牛顿秒每米。对于 revolute 关节,单位是牛顿米秒每弧度。

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

其他标签

在纯 URDF 领域(即排除 Gazebo 特定标签),还有两个剩余标签有助于定义关节:calibration 和 safety_controller。查看规范,它们不包含在本教程中。

后续步骤

通过使用 xacro 来减少代码量和需要做的繁琐数学运算。

本文档完整翻译自 ROS 2 Lyrical 官方文档,仅用于学习交流。

相关学习资料