URDF(nified Robot Description Format) 统一机器人描述格式。
我们可以通过编辑自己的URDF文件来创建自己的机器人模型,以下就通过构建一个简单的小车模型来说明如何创建机器人模型。
1.描述整体的结构
整体的结构用部件(Link)和关节(Joint)来描述,关节用来连接部件;
我们要描述一个带有4个轮子的车子,那么首先有5个部件(车身、轮子)和4个关节:
<robot name="test_robot">
<link name="base_link"/>
<link name="wheel_1"/>
<link name="wheel_2"/>
<link name="wheel_3"/>
<link name="wheel_4"/>
<joint name="joint_base_wheel1" type="fixed">
<parent link="base_link">
<child link="wheel_1">
</joint>
<joint name="joint_base_wheel2" type="fixed">
<parent link="base_link">
<child link="wheel_2">
</joint>
<joint name="joint_base_wheel3" type="fixed">
<parent link="base_link">
<child link="wheel_3">
</joint>
<joint name="joint_base_wheel4" type="fixed">
<parent link="base_link">
<child link="wheel_4">
</joint>
</robot>
我们可以采用 check_urdf xxx.urdf
命令来检查我们写好的urdf文件的语法正确性
2.部件和关节的详细属性说明
我们的小车各部件还没有形状和大小的描述,在URDF中可以用
visual 用来描述模块的视觉效果。
geometry 用来描述模块的形状和大小。
origin 用来描述模块的位置。
添加好上述属性的urdf文件:
<robot name="test_robot">
<link name="base_link">
<visual>
<geometry>
<box size="0.2 .3 .1"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0.05"/>
</visual>
</link>
<link name="wheel_1">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>
</visual>
</link>
<link name="wheel_2">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>
</visual>
</link>
<link name="wheel_3">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/>
</visual>
</link>
<link name="wheel_4">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/>
</visual>
</link>
<joint name="joint_base_wheel1" type="fixed">
<parent link="base_link"/>
<child link="wheel_1"/>
</joint>
<joint name="joint_base_wheel2" type="fixed">
<parent link="base_link"/>
<child link="wheel_2"/>
</joint>
<joint name="joint_base_wheel3" type="fixed">
<parent link="base_link"/>
<child link="wheel_3"/>
</joint>
<joint name="joint_base_wheel4" type="fixed">
<parent link="base_link"/>
<child link="wheel_4"/>
</joint>
</robot>
3.在rviz中查看增加颜色属性
<robot name="test_robot">
<link name="base_link">
<visual>
<geometry>
<box size="0.2 .3 .1"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0.05"/>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</visual>
</link>
<link name="wheel_1">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<link name="wheel_2">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>
<material name="black"/>
</visual>
</link>
<link name="wheel_3">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/>
<material name="black"/>
</visual>
</link>
<link name="wheel_4">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/>
<material name="black"/>
</visual>
</link>
<joint name="joint_base_wheel1" type="fixed">
<parent link="base_link"/>
<child link="wheel_1"/>
</joint>
<joint name="joint_base_wheel2" type="fixed">
<parent link="base_link"/>
<child link="wheel_2"/>
</joint>
<joint name="joint_base_wheel3" type="fixed">
<parent link="base_link"/>
<child link="wheel_3"/>
</joint>
<joint name="joint_base_wheel4" type="fixed">
<parent link="base_link"/>
<child link="wheel_4"/>
</joint>
</robot>
当然ROS提供的属性描述tag还有很多,具体参见:
urdf_description
创建好的模型如下: