教程九 RoArm-M1 ROS2 URDF模型构建教程一
RoArm-M1 教程目录
- 教程一 RoArm-M1 产品使用教程
- 教程二 RoArm-M1 二次开发教程
- 教程三 RoArm-M1 VirtualBox ROS2入门教程
- 教程四 RoArm-M1 ROS2 URDF模型入门教程
- 教程五 RoArm-M1 ROS2 串口通信节点
- 教程六 RoArm-M1 视频组装教程
- 教程七 RoArm-M1 图文组装教程
- 教程八 RoArm-M1 ROS2中rqt的使用
- 教程九 RoArm-M1 ROS2 URDF模型构建教程一
- RoArm-M1 WIKI 主页
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显示如图:
可以看见,该可视模型(圆柱体)的原点默认位于其几何形状的中心。因此,圆柱体的一半位于网格下方。
多个模型
现在让我们看看如何添加多个模型。如果我们只是向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显示如图:
可以看见这两个模型部分是共享相同的原点,因此目前这两个模型是重叠在一起的。如果我们不希望它们重叠,我们必须定义更多的原点。
原点
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显示如图:
启动文件会运行一些软件包,这些软件包根据您的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机械臂模型构建的教程了。