目标: 学习如何向 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 个元素表示,如下所示。
| ixx | ixy | ixz |
| ixy | iyy | iyz |
| ixz | iyz | izz |
- 此信息可以由 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 官方文档,仅用于学习交流。
夜雨聆风