URDF全称为Unified Robot Description Format,中文可以翻译为“统一机器人描述格式”。与计算机文件中的.txt文本格式、.jpg图像格式等类似,URDF是一种基于XML规范、用于描述机器人结构的格式。根据该格式的设计者所言,设计这一格式的目的在于提供一种尽可能通用(as general as possible)的机器人描述规范。
其实最好的urdf入门教程是ROS Wiki里的教程。这里主要是按照自己实际接触的进行总结。URDF能设置的属性有很多,但在项目刚开始时并不需要那么多,也没必要浪费太多精力在外观上,因此,本博客将根据后续会引入的其余特性持续更新。
文章目录
初始的四轮demo
最初的需求是弄出一个四轮小车的样子,形象来讲也就是一个立方体加四个圆柱体的组合。代码如下:
<?xml version="1.0"?>
<robot name = "scout_xu">
<link name="base_link">
<visual>
<geometry>
<box size="0.2 0.3 0.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_RF">
<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_LF">
<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_RB">
<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_LB">
<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= "base_to_wheel_RF" type="fixed">
<parent link="base_link"/>
<child link="wheel_RF"/>
<origin xyz="0 0 0 "/>
</joint>
<joint name= "base_to_wheel_LF" type="fixed">
<parent link="base_link"/>
<child link="wheel_LF"/>
<origin xyz="0 0 0 "/>
</joint>
<joint name= "base_to_wheel_RB" type="fixed">
<parent link="base_link"/>
<child link="wheel_RB"/>
<origin xyz="0 0 0"/>
</joint>
<joint name= "base_to_wheel_LB" type="fixed">
<parent link="base_link"/>
<child link="wheel_LB"/>
<origin xyz="0 0 0"/>
</joint>
</robot>
建好后,起名为myfirst.urdf。可以使用check_urdf来检查下是否是一个有效的urdf文件。
check_urdf myfirst.urdf
输出结果应当为:
robot name is: scout_xu
---------- Successfully Parsed XML ---------------
root Link: base_link has 4 child(ren)
child(1): wheel_LB
child(2): wheel_LF
child(3): wheel_RB
child(4): wheel_RF
表示有一个base_link,并有四个子零件与他相连。
想在rviz中进行可视化则可运行下面命令:
roslaunch urdf_tutorial display.launch model:=myfirst.urdf
这个命令会报错,提示没有GUI,这也是正常的,因为我们的urdf里没涉及这一块,暂时不用理会。可以看到可视化效果大概是下面这个样子的。