未来,该语言会从ROS独立出来,集成到Ubuntu官方包发布。必须承认,URDF 是个很难懂的语言,但有RViz的强大仿真功能,我们很容易调试它。今天我们就以经常见到智能四轮驱动小车为例介绍它的使用。
OS: Ubuntu 14.04
ROS: Indigo Full package
具体实际的物理小车的建立请看我的文章树莓派搭建 ROS 系统下四论驱动车,并用 IPad, 手机控制。该车有两层,4个轮子,头部还有一个hc-sr04超声波和舵机。
基座(base_link): 长 27cm 宽 15cm 每层板厚度3mm 下层高度4.5cm 上层高度7.8cm
轮子 直径6.8cm 这个尺寸必须非常精确,影响测速和轨迹运算。厚度2.5cm
该车名字 SP1S (顺跑1 Smart)
<span style="font-size:18px;">$ catkin_create_pkg sp1s std_msgs rospy roscpp urdf $ cd sp1s/ $ mkdir urdf</span>catkin_create_pkg最后一个参数是引入urdf 库。创建urdf目录存放urdf文件。
**必须已经创建好了一个workspace的情况下,使用该命令创建package.
创建目录launch并新建文件dispaly.launch 建立好urdf文件后就使用该文件launch
<launch> <arg name="model" /> <arg name="gui" default="False" /> <param name="robot_description" textfile="$(arg model)" /> <param name="use_gui" value="$(arg gui)"/> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /> <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" required="true" /> </launch>该文件可以帮助启动RViz来观察机器人。其中有三个node,一个是rviz,另外两个joint_state_publisher robot_state_publisher是必须的node。
第一个输入参数 model 就是要启动的urdf文件路径。
第二个输入参数 gui 指定是否启用关节转动控制面板窗口。
ROS里面把每个零件称为link,作为基座的link统一称为base_link.在官方的所有事例文章里面到处可以看到base_link,所以最好也延续该名称。其它的link都要依附到base_link上。这里我们把下层的板作为base_link. 新建一个文件sp1s.urdf,描述代码如下:
<pre name="code" class="html"><span style="font-size:18px;"><?xml version="1.0"?> <robot name="sp1s"> <link name="base_link"> <visual> <geometry> <box size="0.27 .15 .003"/> </geometry> <material name="white"> <color rgba="1 1 1 .5"/> </material> </visual> </link> </robot></span>
link可以指定许多属性:
我们详细看一下<visual>的定义:
使用下面命令启动RViz来查看我们刚刚完成的机器人模型:
roslaunch sp1s display.launch model:=urdf/sp1s.urdf
这时只是显示了一个半透明的长方体,就是我们的主体部分。中间的黄色点代表了base_link的原点,也是整个RViz世界的原点。
下面我们开始创建四个轮子,它们的名字分别为tyer_front_left, tyer_front_right, tyer_back_left, tyer_back_right. 尺寸大小直径6.8cm 厚度2.5cm. 先以一个轮子为例:
<span style="font-size:18px;"><?xml version="1.0"?> <robot name="sp1s"> <link name="base_link"> <visual> <geometry> <box size="0.27 .15 .003"/> </geometry> <material name="white"> <color rgba="1 1 1 .5"/> </material> </visual> </link> <link name="tyer_front_left"> <visual> <geometry> <cylinder length=".025" radius="0.034"></cylinder> </geometry> <material name="yellow"> <color rgba="1 1 0 1"/> </material> </visual> </link> <joint name="base_to_front_left" type="fixed"> <parent link="base_link"/> <child link="tyer_front_left"/> </joint> </robot> </span>
<span style="font-size:18px;">roslaunch sp1s display.launch model:=urdf/sp1s.urdf</span>
可以看到黄色的轮子显示到了车身的中央,因为它的原点origin和base_link的origin重合. 选中TFcheckbox,就会显示出XYZ坐标轴,红色为X, 绿色为Y,蓝色为Z。
下一篇文章将讲述如何使用joint将轮子平移到左上方并旋转。