前言

标准化机器人描述格式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中定义关节,关节名称必须唯一。然后定义关节类型和父连接坐标系和子连接坐标系(即关节相连的前后坐标系)。关节类型如下:

  1. fixed 固定关节
  2. revolute 转动关节
  3. continuous 旋转关节
  4. floating 6自由度浮动关节
  5. 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

效果如下:
在这里插入图片描述

<?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>

三、编写启动文件

在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建立一个更真实一点的机器人模型底盘。