构建一个可移动的机器人模型。

**目标:**学习如何在URDF中定义可移动关节。

教程级别: 中级

时间: 10分钟

在本教程中,我们将对在 上一个教程 中创建的R2D2模型进行修改,使其具有可移动关节。在之前的模型中,所有的关节都是固定的。现在我们将探索其他三种重要的关节类型:连续关节、旋转关节和平移关节。

在继续之前,请确保您已安装了所有先决条件。有关所需内容,请参阅 上一个教程

同样,本教程中提到的所有机器人模型都可以在 urdf_tutorial 包中找到。

这里是带有灵活关节的新URDF文件,您可以将其与先前版本进行比较,看看发生了哪些变化,但我们将只关注三个示例关节。

要可视化和控制此模型,请运行与上一个教程相同的命令:

ros2 launch urdf_tutorial display.launch.py model:=urdf/06-flexible.urdf

然而,现在这将会弹出一个GUI界面,允许您控制所有非固定关节的值。试着动一下模型,看看它如何移动。然后,我们可以看看我们是如何实现这一点的。

灵活模型的截图

头部

<joint name="head_swivel" type="continuous">
  <parent link="base_link"/>
  <child link="head"/>
  <axis xyz="0 0 1"/>
  <origin xyz="0 0 0.3"/>
</joint>

身体和头部之间的连接是一个连续关节,意味着它可以取负无穷到正无穷的任意角度。车轮也是这样建模的,因此它们可以永远向两个方向滚动。

我们要补充的唯一附加信息是旋转轴,这里用一个xyz三元组来指定,它指定了头部将绕其旋转的矢量。由于我们希望它绕z轴旋转,我们指定矢量"0 0 1"。

夹爪

<joint name="left_gripper_joint" type="revolute">
  <axis xyz="0 0 1"/>
  <limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/>
  <origin rpy="0 0 0" xyz="0.2 0.01 0"/>
  <parent link="gripper_pole"/>
  <child link="left_gripper"/>
</joint>

右夹爪和左夹爪关节都被建模为旋转关节。这意味着它们以与连续关节相同的方式旋转,但它们有严格的限制。因此,我们必须包含限制标签,指定关节的上限和下限(以弧度为单位)。我们还必须为该关节指定最大速度和力量,但实际值对我们这里的目的不重要。

夹爪臂

<joint name="gripper_extension" type="prismatic">
  <parent link="base_link"/>
  <child link="gripper_pole"/>
  <limit effort="1000.0" lower="-0.38" upper="0" velocity="0.5"/>
  <origin rpy="0 0 0" xyz="0.19 0 0.2"/>
</joint>

夹爪臂是一种不同类型的关节,即移动关节。这意味着它沿一个轴线移动,而不是围绕轴旋转。这种平移运动使我们的机器人模型能够伸展和收缩夹爪臂。

与旋转关节相同,平移臂的限制也是以相同的方式指定,只是单位是米,而不是弧度。

其他类型的关节

还有另外两种可以在空间中移动的关节。与棱柱关节只能沿一个维度移动不同,平面关节可以在平面内或两个维度上移动。此外,浮动关节没有限制,可以在三个维度中移动。这些关节不能仅通过一个数值来指定,因此在本教程中不包括它们。

指定姿态

当您在GUI中移动滑块时,模型会在Rviz中移动。这是如何实现的?首先,`GUI <https://index.ros.org/p/joint_state_publisher_gui>`_解析URDF并找到所有非固定关节及其限制。然后,它使用滑块的值发布`sensor_msgs/msg/JointState <https://github.com/ros2/common_interfaces/blob/eloquent/sensor_msgs/msg/JointState.msg>`_消息。然后,`robot_state_publisher <https://index.ros.org/p/robot_state_publisher>`_使用这些消息计算不同部分之间的所有变换。生成的变换树然后用于在Rviz中显示所有形状。

下一步

现在您已经拥有一个可见的功能模型,您可以:doc:添加一些物理属性,或者:doc:开始使用xacro来简化您的代码