警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
添加物理和碰撞属性
目标 了解如何为链接添加碰撞和惯性属性,以及如何为关节添加关节动力学。
辅导水平: 中级
时间 10 分钟
在本教程中,我们将了解如何为 URDF 模型添加一些基本的物理属性,以及如何指定其碰撞属性。
碰撞
到目前为止,我们只用一个子元素指定了链接、 可视
,它定义了(毫不奇怪)机器人的外观。但是,为了让碰撞检测发挥作用或模拟机器人,我们需要定义一个 碰撞
元素。
以下是新的 urdf 碰撞和物理特性。
下面是新基础链接的代码。
链接 名称"base_link";>;
视觉效果
<几何>;
气缸 长度="0.6"; 半径="0.2";/>;
</geometry>;
材料 名称蓝色;>;
颜色 rgba="0 0 .8 1";/>;
</material>;
</visual>;
<碰撞>;
<几何>;
气缸 长度="0.6"; 半径="0.2";/>;
</geometry>;
</collision>;
</link>;
碰撞元素是链接对象的直接子元素,与视觉标记处于同一级别。
碰撞元素定义形状的方式与视觉元素相同,都是使用几何体标签。几何体标签的格式与视觉元素完全相同。
您还可以以与碰撞标记子元素相同的方式指定原点(与视觉效果相同)。
在很多情况下,您都希望碰撞几何体和原点与视觉几何体和原点完全相同。但是,有两种主要情况不需要:
处理速度更快.对两个网格进行碰撞检测比对两个简单几何体进行碰撞检测的计算复杂得多。因此,您可能希望在碰撞元素中用更简单的几何图形替换网格。
安全区.您可能希望限制靠近敏感设备的移动。例如,如果我们不想让任何东西与 R2D2 的头部发生碰撞,我们可以将碰撞几何体定义为一个包裹着他头部的圆柱体,以防止任何东西太靠近他的头部。
物理特性
为了让模型正常模拟,您需要定义机器人的几个物理属性,即 Gazebo 等物理引擎需要的属性。
惯性
每个被模拟的链接元素都需要一个惯性标签。下面是一个简单的例子。
链接 名称"base_link";>;
视觉效果
<几何>;
气缸 长度="0.6"; 半径="0.2";/>;
</geometry>;
材料 名称蓝色;>;
颜色 rgba="0 0 .8 1";/>;
</material>;
</visual>;
<碰撞>;
<几何>;
气缸 长度="0.6"; 半径="0.2";/>;
</geometry>;
</collision>;
<惯性>;
质量 value="10";/>;
惯性 ixx=1e-3"; ixy="0.0"; ixz="0.0"; iyy=1e-3"; iyz="0.0"; izz=1e-3";/>;
</inertial>;
</link>;
该元素也是链接对象的子元素。
质量以千克为单位。
3x3 转动惯量矩阵由惯量元素指定。由于它是对称的,因此只需 6 个元素即可表示。
ixx
ixy
ixz
ixy
iyy
iyz
ixz
iyz
izz
建模程序(如 MeshLab)可以提供这些信息。几何基元(圆柱体、方盒子、球体)的惯性可以使用维基百科的 转动惯量表 (并在上述示例中使用)。
惯性张量取决于物体的质量和质量分布。一个很好的第一近似方法是假设物体体积内的质量分布相等,并根据物体的形状计算惯性张量,如上所述。
如果不确定放什么,对于中等大小的链接来说,ixx/iyy/izz=1e-3 或更小的矩阵通常是合理的默认值(相当于边长为 0.1 米、质量为 0.6 千克的盒子)。同矩阵是一个特别糟糕的选择,因为它往往过高(相当于边长 0.1 米、质量 600 千克的盒子!)。
您还可以指定一个原点标记,以指定重心和惯性参照系(相对于链接的参照系)。
在使用实时控制器时,惯性元素为零(或几乎为零)会导致机器人模型在没有任何警告的情况下崩溃,所有链接的原点都会与世界原点重合。
接触系数
您还可以定义链接在相互接触时的行为方式。这可以通过碰撞标记中名为 contact_coefficients 的子元素来实现。有三个属性可以指定:
联合动力
关节的运动方式由关节的动态标签定义。这里有两个属性:
摩擦
- 物理静摩擦力。对于棱柱接头,单位是牛顿。对于旋转接头,单位为牛顿米。
阻尼
- 物理阻尼值。对于棱柱接头,单位是每米牛顿秒。对于旋转接头,单位为每弧度牛顿米秒。
如果未指定,这些系数默认为零。
下一步工作
通过以下方法减少代码量和烦人的数学计算 使用 xacro.