警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

制作可移动的机器人模型

目标 了解如何在 URDF 中定义活动关节。

辅导水平: 中级

时间 10 分钟

在本教程中,我们将修改在 上一个教程 使其具有可移动的关节。在之前的模型中,所有的关节都是固定的。现在,我们将探讨另外三种重要的关节类型:连续关节、外旋关节和棱柱关节。

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

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

以下是新的 urdf 灵活的关节。你可以将它与之前的版本进行比较,以了解所有的变化,但我们将只关注三个关节示例。

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

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

不过,现在这也会弹出一个图形用户界面,允许你控制所有非固定关节的值。玩一下模型,看看它是如何移动的。然后,我们可以看看我们是如何做到这一点的。

灵活模型截图

头部

<joint 名称"head_swivel"; type="连续";>;
  <parent link="base_link";/>;
  孩子 link="head";/>;
   xyz="0 0 1";/>;
  原产地 xyz="0 0 0.3";/>;
</joint>;

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

我们唯一需要添加的额外信息是旋转轴,这里用 xyz 三元组指定,它指定了头部将围绕其旋转的矢量。由于我们希望它绕 Z 轴旋转,因此指定了 "0 0 1 "这个向量。

抓取器

<joint 名称"left_gripper_joint"; type="旋风";>;
   xyz="0 0 1";/>;
  <limit 努力="1000.0"; 降低="0.0"; 上="0.548"; 速度="0.5";/>;
  原产地 rpy="0 0 0"; xyz="0.2 0.01 0";/>;
  <parent link="gripper_pole";/>;
  孩子 link="left_gripper";/>;
</joint>;

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

抓取臂

<joint 名称"gripper_extension"; type=quot;棱镜式";>;
  <parent link="base_link";/>;
  孩子 link="gripper_pole";/>;
  <limit 努力="1000.0"; 降低="-0.38"; 上="0"; 速度="0.5";/>;
  原产地 rpy="0 0 0"; xyz="0.19 0 0.2";/>;
</joint>;

抓臂是一种不同的关节,即棱柱关节。这意味着它是沿轴线运动,而不是绕轴线运动。这种平移运动使我们的机器人模型能够伸出和缩回抓臂。

除了单位是米而不是弧度外,棱柱臂的极限指定方式与旋转接头相同。

其他类型的关节

还有两种关节可以在空间中移动。棱形关节只能沿一个维度移动,而平面关节可以在一个平面或两个维度内移动。此外,浮动关节不受约束,可以在三个维度中的任意维度移动。这些关节不能只用一个数字指定,因此不包括在本教程中。

指定姿势

当您在图形用户界面中移动滑块时,模型就会在 Rviz 中移动。 这是如何实现的?首先 图形用户界面 解析 URDF,找到所有非固定关节及其极限值。然后,它使用滑块的值来发布 sensor_msgs/msg/JointState 信息。然后 机器人状态发布者 来计算不同部分之间的所有变换。生成的变换树将用于在 Rviz 中显示所有图形。

下一步工作

现在您已经有了一个功能明显的模型,您可以 加入一些物理特性开始使用 xacro 简化代码.