教程九 RoArm-M1 ROS2 URDF模型构建教程一

来自Waveshare Wiki
跳转至: 导航搜索

RoArm-M1 教程目录

RoArm-M1 ROS2 URDF模型构建教程一

本教程主要是学习如何构建一个可以在Rviz中查看的可视化机器人模型。

安装urdf_tutorial软件包

如果您是跟随前面的教程慢慢学习到这儿的,那么可以忽略安装joint_state_publisher软件包这步;如果您是直接学习的这个教程,那么先要确保您已安装了joint_state_publisher软件包。
在Ubuntu的终端中执行以下命令:

sudo apt-get install joint_state_publisher

安装urdf_tutorial软件包

sudo apt update && sudo apt install ros-humble-urdf-tutorial

下载urdf_tutorial官方教程软件包

sudo git clone https://github.com/ros/urdf_tutorial.git

本教程中提到的所有机器人模型(以及源文件)都可以在urdf_tutorial软件包中找到。

一个模型

首先,我们先只探索一个简单的模型,这是一个非常简单的URDF文件示例。

<?xml version="1.0"?>
<robot name="myfirst">
  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </visual>
  </link>
</robot>

这是一个名为myfirst的机器人,它只包含一个模型部分,其可视模型是一个长度为0.6m、半径为0.2m的圆柱体。
要查看模型,请执行以下命令启动display.launch.py文件:

cd urdf_tutorial
ros2 launch urdf_tutorial display.launch.py model:=urdf/01-myfirst.urdf

请注意,上述启动命令必须是先进入urdf_tutorial目录下执行的,如果不是,指向01-myfirst.urdf的相对路径将无效。
在启动display.launch.py后,您应该会看到Rviz显示如图:
一个模型.png
可以看见,该可视模型(圆柱体)的原点默认位于其几何形状的中心。因此,圆柱体的一半位于网格下方。

多个模型

现在让我们看看如何添加多个模型。如果我们只是向URDF中添加更多的模型,解析器将不知道如何安排它们。因此,我们也需要添加link部分的连接关节。关节可以引用可弯曲和不可弯曲的关节。我们将从不可弯曲的关节开始。

<?xml version="1.0"?>
<robot name="multipleshapes">
  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </visual>
  </link>

  <link name="right_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
    </visual>
  </link>

  <joint name="base_to_right_leg" type="fixed">
    <parent link="base_link"/>
    <child link="right_leg"/>
  </joint>
</robot>

这里我们定义了一个尺寸长为0.6m、宽为0.1m、高为0.2m的长方体。关节的定义涉及父连接和子连接。这意味着名为right_leg的模型位置取决于base_link模型的位置。
在执行01-myfirst.urdf的终端界面中,按Ctrl+C可以退出Rviz的界面。要查看02-multipleshapes.urdf的模型,请执行以下命令启动display.launch.py文件:

ros2 launch urdf_tutorial display.launch.py model:=urdf/02-multipleshapes.urdf

在启动display.launch.py后,您应该会看到Rviz显示如图:
多个模型.png
可以看见这两个模型部分是共享相同的原点,因此目前这两个模型是重叠在一起的。如果我们不希望它们重叠,我们必须定义更多的原点。

原点

right_leg的模型是附着在圆柱体模型的上半部分的一侧,因此我们将其指定为关节的原点。此外,我们还需为right_leg模型的原点进行偏移。我们还将该模型旋转使其直立。

<?xml version="1.0"?>
<robot name="origins">
  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </visual>
  </link>

  <link name="right_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
      <origin rpy="0 1.57075 0" xyz="0 0 -0.3"/>
    </visual>
  </link>

  <joint name="base_to_right_leg" type="fixed">
    <parent link="base_link"/>
    <child link="right_leg"/>
    <origin xyz="0 -0.22 0.25"/>
  </joint>
</robot>

我们先查看关节的原点。它是相对于父连接的参考坐标系来定义的,前面也说了这个圆柱体的原点就是这个几何形状的中心,也就是xyz都为0。而我们想让right_leg这个模型附着在圆柱体的一侧,因此先在y轴方向上调整为-0.22m(相对于坐标轴来说是向右的,但相对于我们来说是向左的);并且我们还想让right_leg附着在圆柱体一侧的上半部分,因此在z轴方向上调整为0.25m(向上)。
接着,查看right_leg模型的原点,它具有xyz和rpy的偏移量。由于我们希望right_leg模型可以附着在圆柱体上半部分一侧,我们通过将z偏移量设置为-0.3m,从而可以使得right_leg原点向下偏移。并且我们希望right_leg模型的长与z轴平行,因此我们围绕y轴旋转可视部分。
要查看03-origins.urdf的模型,请执行以下命令启动display.launch.py文件:

ros2 launch urdf_tutorial display.launch.py model:=urdf/03-origins.urdf

在启动display.launch.py后,您应该会看到Rviz显示如图:
原点.png
启动文件会运行一些软件包,这些软件包根据您的URDF为模型中的每个连接创建TF框。Rviz使用TF框来确定每个模型部分显示在哪里。

<material>标签选择引用

这一个部分在教程四中做了详细地讲解,目前由于我们还没有对<material>标签进行设置,因此所有的模型显示都为红色。

<material name="blue">
    <color rgba="0 0 0.8 1"/>
  </material>

  <material name="white">
    <color rgba="1 1 1 1"/>
  </material>

  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
      <material name="blue"/>
    </visual>
  </link>

  <link name="right_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
      <origin rpy="0 1.57075 0" xyz="0 0 -0.3"/>
      <material name="white"/>
    </visual>
  </link>
  
  <link name="left_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
      <origin rpy="0 1.57075 0" xyz="0 0 -0.3"/>
      <material name="white"/>
    </visual>
  </link>

现在,可以看见我们为圆柱体、右腿和左腿分别引用了名字为blue、white和white的<material>标签。使用以下命令查看模型颜色:

ros2 launch urdf_tutorial display.launch.py model:=urdf/04-materials.urdf

完成模型

现在添加上脚、轮子和头部来完成模型。特别注意的是,我们添加了一个球体和一些网格文件。
添加球体的代码如下:

<link name="head">
  <visual>
    <geometry>
      <sphere radius="0.2"/>
    </geometry>
    <material name="white"/>
  </visual>
</link>

这里使用的网格文件是单独的文件,需要指定其路径。您可以使用package://PACKAGE_NAEM/path的格式来指定路径。本教程中的网格文件位于urdf_tutorial软件包中的一个名为meshes的文件夹中。因此具体路径如下:

<link name="left_gripper">
  <visual>
    <origin rpy="0.0 0 0" xyz="0 0 0"/>
    <geometry>
      <mesh filename="package://urdf_tutorial/meshes/l_finger.dae"/>
    </geometry>
  </visual>
</link>

这些网格文件可以使用多种不同的格式进行导入。STL是常见的格式,但引擎也支持DAE格式,它可以具有自己的颜色数据,意味着您不需要指定颜色/材质。
这就是一个完整的URDF模型。现在您可以接着学习RoArm-M1机械臂模型构建的教程了。