前言
标准化机器人描述格式URDF是一种用于描述机器人其部分结构、关节、自由度等的XML格式文件。
一、创建、编译功能包
切换到catkin_ws/src目录下,如下:
catkin_create_pkg chapter4_tutorials urdf xacro
切换到catkin_ws目录下,编译该功能包,如下:
catkin_make chapter4_tutorials
一、URDF文件
1、创建URDF文件
切换到chapter4_tutorials功能包目录下,新建urdf文件夹,在里面新建robot1.urdf文件。文件内容如下:
<?xml version="1.0"?>
<robot name="Robot1">
<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="base_to_wheel1" type="fixed">
<parent link="base_link"/>
<child link="wheel_1"/>
<origin xyz="0 0 0"/>
</joint>
<joint name="base_to_wheel2" type="fixed">
<parent link="base_link"/>
<child link="wheel_2"/>
<origin xyz="0 0 0"/>
</joint>
<joint name="base_to_wheel3" type="fixed">
<parent link="base_link"/>
<child link="wheel_3"/>
<origin xyz="0 0 0"/>
</joint>
<joint name="base_to_wheel4" type="fixed">
<parent link="base_link"/>
<child link="wheel_4"/>
<origin xyz="0 0 0"/>
</joint>
</robot>
2、解释URDF文件
描述机器人几何结构的基本字段:连接link和关节joint。
第一个link名字为base_link,为基本连接,这个连接名称必须唯一。
在visual字段中,定义物体的几何形状(圆柱、立方体、球体等)、定义材质(颜色和纹理)、定义原点。box字段的含义为:定义小车的主体为长20cm宽30cm高10cm的长方体。
第2-5个连接,定义四个轮子。cylinder字段的含义为:定义小车的轮子为高度为5cm,半径为5cm的圆柱体。
joint中定义关节,关节名称必须唯一。然后定义关节类型和父连接坐标系和子连接坐标系(即关节相连的前后坐标系)。关节类型如下:
- fixed 固定关节
- revolute 转动关节
- continuous 旋转关节
- floating 6自由度浮动关节
- planar 平面运动关节
3、检查URDF文件
使用如下命令,检查该文件的语法和配置是否正确:
check_urdf robot1.urdf
效果如下:
如果报错,可能是没有安装liburdfdom-tools,安装方法如下:
sudo apt install liburdfdom-tools
4、以图形显示
如下:
urdf_to_graphiz robot1.urdf
执行后会在.urdf文件同目录下,生成Robot1.gv和Robot1.pdf文件。
使用如下命令,可以查看pdf文件:
evince robot1.urdf
效果如下:
三、编写启动文件
在chapter_tutorials功能包文件夹下,新建launch文件夹,在该文件夹下新建display.launch启动文件。
文件内容如下:
<?xml version="1.0"?>
<launch>
<arg name="model"/>
<arg name="gui" default="False"/>
<param name="robot_description" textfile="$(arg model)"/>
<para 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="robot_state_publisher"/>
</launch>
使用如下命令启动:
roslaunch chapter4_tutorials display.launch model:=" ../urdf/robot1.urdf"
正确效果如下:
如果出现如下错误:
可能是因为launch文件中包含中文注释引起的。
四、rviz三维可视化平台展示及控制
启动rviz,命令如下:
rosrun rviz rviz
启动后,通过左下角的Add按钮,添加RobotModel;之后在Global Options->Fixed Frame 选base_link;再通过Add按钮,添加TF,你发现界面中并没有joint_state_publisher 的小插件来控制关节的运动。效果如上图。
其实现在joint_state_publisher节点不会调出图形控制界面,需要我们下载安装joint_state_publisher_gui并修改display.launch文件。
安装joint_state_publisher_gui:
sudo apt-get install ros-melodic-joint-state-publisher-gui
修改启动文件,将joint_state_publisher替换为joint_state_publisher_gui如下:
<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui"/>
修改之后,再启动launch,运行rviz,可以看到该插件已出现:
上图该插件虽然出现了,但我发现并没有调节轮子与主体之间关节运动的控件。将urdf文件中joint里面的type=”fixed”修改为type=“continuous”,再启动rviz,效果如下:
此时,我们就可以通过插件里面的滚动条进行调节了。同时,还可以继续修改urdf文件,为转动角添加限制,设置旋转轴、设置关节运动上下限和关节最大速度等。
总结
这是通过urdf文件,建立的四轮小车模型,但是urdf文件模型冗长、重复内容多,参数修改麻烦、不利二次开发并且没有参数计算的功能。所以出现了xacro这个进化版本,下一篇我们使用xacro建立一个更真实一点的机器人模型底盘。