实验编号: 实验指导书 实验项目: 机器人建模与仿真 所属课程: ROS机器人操作系统基础与实战 课程代码: 面向专业: 机电专业 课程负责人: 朱笑笑 年月 日
实验编号: 实 验 指 导 书 实验项目: 机器人建模与仿真 所属课程: ROS 机器人操作系统基础与实战 课程代码: 面向专业: 机电专业 课程负责人: 朱笑笑 年 月 日
、 实验目的 让学生掌握创建虚拟机器人的方法,学会利用虚拟机器人简化我 们的机器人开发过程。 二、实验内容 1. 创建我们的机器人的3D模型 2. 为我们的机器人提供动作,物理限制,惯性和其他物理方面 0 添加虚拟的传感器到我们的3D模型 4. 在仿真器上使用模型 三、 实验过程或其他示意图 本次实验将创建一个具有四个轮子的移动机器人,同时还安装了一个带抓手的机械臂。 1. 创建一个URDF文件 首先,在urdf文件夹下创建robot1.urdf文件,输入以下代码。这种URDF文件是基于XML 格式的,可以使用专门的编辑器来进行编辑,我们这里直接使用gedit来进行编辑 <?xml version="1.0"?> <robot name="Robot1"> <link name="base link"> <visual> <geometry> <box size="0.2.3.1"> </geometry> <origin rpy="000"xyz="000.05"> <material name="white"> <color rgba="1 111"> </material> </visual> </link> <link name="wheel 1"> <visual> <geometry> <cylinder length="0.05"radius="0.05"/> </geometry> <origin rpy="0 1.50"xyz="0.10.10"> <material name="black"> <color rgba="0001"/> </material> </visual> </link> <link name="wheel 2"> <visual> <geometry> -2-
- 2 - 一、 实验目的 让学生掌握创建虚拟机器人的方法,学会利用虚拟机器人简化我 们的机器人开发过程。 二、 实验内容 1. 创建我们的机器人的3D模型 2. 为我们的机器人提供动作,物理限制,惯性和其他物理方面 3. 添加虚拟的传感器到我们的3D模型 4. 在仿真器上使用模型 三、 实验过程或其他示意图 本次实验将创建一个具有四个轮子的移动机器人,同时还安装了一个带抓手的机械臂。 1. 创建一个URDF文件 首先,在urdf文件夹下创建robot1.urdf文件,输入以下代码。这种URDF文件是基于XML 格式的,可以使用专门的编辑器来进行编辑,我们这里直接使用gedit来进行编辑 <?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=-"01.50"xyz="-0.10.10"> <material name="black"/> </visual> </link> <link name="wheel 3"> <visual> <geometry> <cylinder length="0.05"radius="0.05"> </geometry> <origin rpy=-"01.50"xyz="0.1-0.10"> <material name="black"/> </visual> </link> <link name="wheel 4"> <visual> <geometry> <cylinder length="0.05"radius="0.05"/> </geometry> <origin rpy="01.50"xyz="-0.1-0.10"> <material name="black"/> </visual> </link> <joint name="base_to_wheell"type="fixed"> <parent link="base link"> <child link="wheel 1"/> <origin xyz="000"> </joint> <joint name="base_to_wheel2"type="fixed"> <parent link="base link"/> <child link="wheel 2"> <origin xyz="000"> </joint> <joint name="base to wheel3"type="fixed"> <parent link="base link"/> <child link="wheel 3"> <origin xyz="000"> </joint> <joint name="base to wheel4"type="fixed"> <parent link="base link"/> <child link="wheel 4"/> <origin xyz="000"> </joint> </robot> -3-
- 3 - <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>
在这个代码中,可以看到有两个主要的部分描述了这个移动机器人:Iink和joint 第一个link是名为base_link。该名字必须是唯一的。 <link name="base link"> <visual> <geometry> <box size="0.2.3.1"> </geometry> <origin rpy="000"xyz="000.05"> <material name="white"> <color rgba="1 111"> </material> </visual> </link> 为了定位在仿真其中将会显示的机器人内容,使用visual字段。在visual中可以通过定 义geometry(圆柱,立方体,球,等简单的形状,也可以是网格等自定义的或者由3维绘图 软件的生成的文件),material(颜色或者纹理),和原点。 <joint name="base to wheell"type="fixed"> <parent link="base link"> <child link="wheel 1"A> <origin xyz="000"> </joint> Joint字段定义了两个link间的连接方式。可以定义joint的类型(固定,旋转,平移, 浮动,平面),父连杆,子连杆和原点。在本实验中wheel_.1是base_Iink的一个子连杆。我 们将其设置为固定的,但是作为一个轮子也可以将其设置为旋转类型。 利用check_urdf检查urdf文件是否为问题。 S check urdf robot1.urdf robot name is:Robotl ---Successfully Parsed XML- root Link:base link has 4 child(ren) child(1):wheel 1 child(2):wheel_2 child(3):wheel 3 child(4):wheel 4 另外,通过图像化工具来查看urdf S urdf_to_graphiz"rospack find chapter5_tutorials'/ urdf/robot1.urdf 将会看到以下图像化输出 -4-
- 4 - 在这个代码中,可以看到有两个主要的部分描述了这个移动机器人:link和joint 第一个link是名为base_link。该名字必须是唯一的。 <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> 为了定位在仿真其中将会显示的机器人内容,使用visual字段。在visual中可以通过定 义geometry(圆柱,立方体,球,等简单的形状,也可以是网格等自定义的或者由3维绘图 软件的生成的文件),material(颜色或者纹理),和原点。 <joint name="base_to_wheel1" type="fixed"> <parent link="base_link"/> <child link="wheel_1"/> <origin xyz="0 0 0"/> </joint> Joint字段定义了两个link间的连接方式。可以定义joint的类型(固定,旋转,平移, 浮动,平面),父连杆,子连杆和原点。在本实验中wheel_1是base_link的一个子连杆。我 们将其设置为固定的,但是作为一个轮子也可以将其设置为旋转类型。 利用check_urdf检查urdf文件是否为问题。 $ check_urdf robot1.urdf robot name is: Robot1 ---------- Successfully Parsed XML --------------- root Link: base_link has 4 child(ren) child(1): wheel_1 child(2): wheel_2 child(3): wheel_3 child(4): wheel_4 另外,通过图像化工具来查看urdf $ urdf_to_graphiz "`rospack find chapter5_tutorials`/ urdf/robot1.urdf" 将会看到以下图像化输出
base_link xyz:000 xyz:000 yz:000 xyz:000 py0-00 rpy:0-0 0 py0-00 pr0-00 base to wheell base to wheel2 base to wheel3 base to wheel4 wheel_1 wheel_2 wheel_3 wheel_4 2. 在rviz中观察3D模型 首先创建一个display..launch文件在1 aunch/文件夹下,输入以下代码 <launch> <arg name="model"/> <arg name="gui"default="False"> <param name="robot description"textfile="S(arg model)"/> <param name="use gui"value="S(arg gui)"> <node name="joint state publisher"pkg="joint state publisher" type="joint state publisher"></node> <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.vcg"> </launch> 可以用以下命令调用riviz S roslaunch chapter7 display.launch model:="rospack find Chapter7/urdf/robot1.urdf" 正常情况下会出现以下画面 35 surhtee 制4tT3652r9rpt7B1 声06nm976价0的r07准61 尝试完成机械臂的urdf文件的设计,也可以查看己有的例程robotl.urdf。在rviz中可以看到以 下的效果。 -5-
- 5 - 2. 在rviz中观察3D模型 首先创建一个display.launch文件在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> <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.vcg" /> </launch> 可以用以下命令调用riviz $ roslaunch chapter7 display.launch model:="`rospack find Chapter7`/urdf/robot1.urdf" 正常情况下会出现以下画面 尝试完成机械臂的urdf文件的设计,也可以查看已有的例程robot1.urdf。在rviz中可以看到以 下的效果