【ROS2】中级:URDF-构建一个可移动的机器人模型

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

教程级别:中级

 时间:10 分钟

 目录

  •  头部 Head

  •  夹爪 Gripper

  •  抓取臂 Gripper Arm

  • 其他类型的关节

  •  指定位姿

  •  下一步

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

确保在继续之前已安装所有必备组件。有关所需内容的信息,请参阅上一个教程。

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

这里是带有柔性关节的新 URDF https://github.com/ros/urdf_tutorial/blob/ros2/urdf/06-flexible.urdf 。您可以将其与以前的版本进行比较,以查看所有更改,但我们只关注三个示例关节。

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

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

但是现在这也会弹出一个 GUI,允许您控制所有非固定关节的值。玩一下模型,看看它是如何移动的。然后,我们可以看看我们是如何做到这一点的。

4b909b6fba5a8e922c9da0fcac53a780.png

 头部

<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 中显示所有形状。

 下一步

现在您有了一个明显可用的模型,您可以添加一些物理属性 https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/Adding-Physical-and-Collision-Properties-to-a-URDF-Model.html ,或者开始使用 xacro 来简化您的代码 https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/Using-Xacro-to-Clean-Up-a-URDF-File.html 。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值