一,创建我们的第一个URDF模型

我们设计的第一个机器人模型是pan-and-tilt机械结构,代码如下 

pan_tilt.urdf:

 1 <?xml version="1.0"?>
2 <robot name="pan_tilt">
3
4 <link name="base_link">
5
6 <visual>
7 <geometry>
8 <cylinder length="0.01" radius="0.2"/>
9 </geometry>
10 <origin rpy="0 0 0" xyz="0 0 0"/>
11 <material name="yellow">
12 <color rgba="1 1 0 1"/>
13 </material>
14 </visual>
15
16 <collision>
17 <geometry>
18 <cylinder length="0.03" radius="0.2"/>
19 </geometry>
20 <origin rpy="0 0 0" xyz="0 0 0"/>
21 </collision>
22 <inertial>
23 <mass value="1"/>
24 <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
25 </inertial>
26 </link>
27
28 <joint name="pan_joint" type="revolute">
29 <parent link="base_link"/>
30 <child link="pan_link"/>
31 <origin xyz="0 0 0.1"/>
32 <axis xyz="0 0 1" />
33 <limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/>
34 <dynamics damping="50" friction="1"/>
35 </joint>
36
37 <link name="pan_link">
38 <visual>
39 <geometry>
40 <cylinder length="0.4" radius="0.04"/>
41 </geometry>
42 <origin rpy="0 0 0" xyz="0 0 0.09"/>
43 <material name="red">
44 <color rgba="0 0 1 1"/>
45 </material>
46 </visual>
47 <collision>
48 <geometry>
49 <cylinder length="0.4" radius="0.06"/>
50 </geometry>
51 <origin rpy="0 0 0" xyz="0 0 0.09"/>
52 </collision>
53 <inertial>
54 <mass value="1"/>
55 <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
56 </inertial>
57 </link>
58
59 <joint name="tilt_joint" type="revolute">
60 <parent link="pan_link"/>
61 <child link="tilt_link"/>
62 <origin xyz="0 0 0.2"/>
63 <axis xyz="0 1 0" />
64 <limit effort="300" velocity="0.1" lower="-4.64" upper="-1.5"/>
65 <dynamics damping="50" friction="1"/>
66 </joint>
67
68 <link name="tilt_link">
69 <visual>
70 <geometry>
71 <cylinder length="0.4" radius="0.04"/>
72 </geometry>
73 <origin rpy="0 1.5 0" xyz="0 0 0"/>
74 <material name="green">
75 <color rgba="1 0 0 1"/>
76 </material>
77 </visual>
78 <collision>
79 <geometry>
80 <cylinder length="0.4" radius="0.06"/>
81 </geometry>
82 <origin rpy="0 1.5 0" xyz="0 0 0"/>
83 </collision>
84 <inertial>
85 <mass value="1"/>
86 <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
87 </inertial>
88
89 </link>
90
91
92 </robot>

详解URDF文件

<?xml version= "1.0"?>

<robot name = "pan_tilt">

<robot>标签定义了我们将要创建的机器人的名称。在这里,我们将机器人命名为pan_tilt.

如果我们查看<robot>标签定义之后的部分,我们可以看到pan-and-tilt机器结构中连杆和关节的定义:

<link name ="base_link">

<visual>

<geometry>

<cylinder length= "0.01" radius = "0.2"/>

</geometry>

<origin rpy= "0 0 0" xyz="0 0 0"/>

<material name = "yellow">

<color rgba>="1 1 0 1"/>

</material>

</visual>

</link>

前面的这段代码是pan-and-tilt机械结构的base_link的定义。<visual>标签描述了连杆的可见外观,它将在机器人仿真中显示出来。我们就可以用这个标签来定义连杆的几何形状(圆柱、立方体、球体、网络模型)以及连杆的材质(颜色和纹理)。

<joint name="pan_joint " type ="revolute">

<parent link = "base_link"/>

<child link="pan_link"/>

<origin xyz="0 0 0.1"/>

<axis xyz ="0 0 1"/>

</joint>

在前面的代码片段中,我们定义了一个具有唯一名称和关节类型的关节。在这里我们使用的关节类型是旋转关节(revolute),父连杆和子连杆分别是base_link和pan_link。在此标签内还指定了关节原点。

然后检查urdf是否包含错误,命令如下:

$ check_urdf pan_tilt.urdf

check_urdf命令将解析urdf标签并显示错误(如果有的话),如果一切正常,他将输出如下内容:

robot name is: pan_tilt
---------- Successfully Parsed XML ---------------
root Link: base_link has 1 child(ren)
child(1): pan_link
child(1): tilt_link

如果我们想以图形化的方式查看机器人连杆和关节的结构,我们可以使用一个名为urdf_to_graphiz的命令行工具:

$ urdf_to_graphiz pan_tilt.urdf

这个命令将生成两个文件:pan_tilt.gv和pan_tilt.pdf.

我们可以使用以下命令来查看此机器人的结构:

$ evince pan_tilt.pdf

如图所示:

ROS中的3D机器人建模(二)-LMLPHP

二,在RViz中可视化机器人3D模型

设计好URDF后,可以在RViz上查看它。我们可以创建一个view_demo.launch启动文件,代码如下:

 1 <launch>
2 <arg name="model" />
3 <param name="robot_description" textfile="$(find mastering_ros_robot_desc ription_pkg)/urdf/pan_tilt.urdf" />
4 <param name="use_gui" value="true"/>
5
6 <node name="joint_state_publisher" pkg="joint_state_publisher" type="join t_state_publisher" />
7 <node name="robot_state_publisher" pkg="robot_state_publisher" type="stat e_publisher" />
8 <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mastering_ros_ro bot_description_pkg)/urdf.rviz" required="true" />
9
10 </launch>
11

我们使用如下命令来启动模型:

$ roslaunch mastering_ros_robot_description_pkg view_demo.launch

如果一切正常,我们将在RViz中看到这个pan-and-tilt机械结构,如图所示

ROS中的3D机器人建模(二)-LMLPHP

05-06 02:45