文章目录
实验 2 熟悉和使用 URDF 创建机器人模型
1、实验目的
创建 URDF 机器人模型
添加激光或者视觉传感器并进行参数设置
2、实验设备
硬件环境:windows 10
系统环境:Ubuntu20.04、ROS noetic
3、实验内容
3.1 创建 URDF 机器人模型:
(1)URDF 介绍
URDF(Unified Robot Description Format,统一机器人描述格式)是ROS 中非常重要的机
器人模型描述格式,URDF 是一种基于XML 规范、用于描述机器人结构的格式。
(2)准备建立机器人模型
·创建文件夹以及功能文件
首先建立 ROS 工作空间,然后进入到创建好的 ROS 工作空间:
cd ~/urdf_ws/src
创建一个机器人建模的功能包,如图 3 所示。
catkin_create_pkg about_des urdf xacro
接下来我们要创建以下几个文件夹,如图 4 所示,用来存放相关文件,urdf:存放机器人模型的 URDF 或 xacro 文件,meshes:放置 URDF 中引用的模型渲染文件,launch:保存相关启动文件,config:保存 rviz 的配置文件。
进入 urdf 文件夹下,新建一个 about_urdf.urdf 文件。
touch about_urdf.urdf
打开 about_urdf.urdf 文件,编写机器人的 URDF。(一定要在 URDF 的目录下输入以下指令)
gedit about_urdf.urdf
·编写相关机器人模型信息
添加 robot 标签, 并且创建一个机器人的主体部分,主体以长方体为例:
<?xml version="1.0" ? >
<robot name="robot" >
<link name="base_link" >
<visual >
<origin xyz="0 0 0" rpy="0 0 0" / >
<geometry >
<box size="0.30 0.25 0.15" / >
</geometry >
<material name="yellow" >
<color rgba="1 0.4 0 1" / >
</material >
</visual >
</link >
</robot >
在 launch 文件下创建启动文件
about.launch
touch about.launch
打开 about.launch 文件,然后写入以下内容:
<launch >
<param name="robot_description" textfile=" $(find about_des)/urdf/about_urdf.urdf" / >
<!--设置 GUI 参数,显示关节控制插件 -- >
<param name="use_gui" value="true" / >
<!-- 运动 joint_state_publisher 节点,发布机器人关节状态 -- >
< nodename nodename ="joint_state_publisher"pkg="joint_state_publisher" type="joint_state_publisher" / >
<!-- 运行 robot_state_publisher 节点,发布 TF -- >
< nodename nodename ="robot_state_publisher"pkg="robot_state_publisher" type="robot_state_publisher" / >
</launch >
·运行演示
首先在 src 目录下编译文件并且利用 source 命令刷新环境,然后运行 launch 文件,如图 5
所示:
roslaunch about_des about.launch
并且启动可视化工具 rviz:
rosrun rviz rviz
先将 Fixed Fram 改为 base_link。
然后点击Add 添加可视化模块,选择“RobotModel”,点击 ok,然后就可以看到机器人的主体情况,如图 7 所示。
·完善机器人
目前已经准备好了 launch 启动文件,接下来开始完善机器人(主要配置 urdf 文件,launch
可以先不用修改了)。接下来为机器人添加轮子,再次打开 about_urdf.urdf,将下面内容添加到机器人主体的形容语句下面:
<?xml version="1.0" ? >
<robot name="robot" >
<link name="base_link" >
<visual >
<origin xyz="0 0 0" rpy="0 0 0" / >
<geometry >
<box size="0.30 0.25 0.15" / >
</geometry >
<material name="yellow" >
<color rgba="1 0.4 0 1" / >
</material >
</visual >
</link >
<link name="left_front_link" >
<visual >
<origin xyz="0 0 0" rpy="1.5707 0 0" / >
<geometry >
<cylinder radius="0.04" length="0.025" / >
</geometry >
<material name="white" >
<color rgba="1 1 1 0.9" / >
</material >
</visual >
</link >
<joint name="left_front_joint" type="continuous" >
<origin xyz="0.10 0.15 -0.05" rpy="0 0 0" / >
<parent link="base_link" / >
<child link="left_front_link" / >
<axis xyz="0 1 0" / >
</joint >
<link name="left_back_link" >
<visual >
<origin xyz="0 0 0" rpy="1.5707 0 0" / >
<geometry >
<cylinder radius="0.06" length="0.025" / >
</geometry >
<material name="white" >
<color rgba="1 1 1 0.9" / >
</material >
</visual >
</link >
<joint name="left_back_joint" type="continuous" >
<origin xyz="-0.10 0.15 -0.05" rpy="0 0 0" / >
<parent link="base_link" / >
<child link="left_back_link" / >
<axis xyz="0 1 0" / >
</joint >
</robot >
·再次运行查看
然后重新运行launch文件和 rviz可视化工具,查看效果:
动手实现1∶利用实验所学知识,为机器人添加另外两个轮子?
打开 about_urdf.urdf,将下面内容添加到机器人主体的形容语句下面:
right_front_link和 right_back_link
<link name="right_front_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.04" length="0.025" />
</geometry>
<material name="white">
<color rgba="1 1 1 0.9" />
</material>
</visual>
</link>
<joint name="right_front_joint" type="continuous">
<origin xyz="0.10 -0.15 -0.05" rpy="0 0 0" />
<parent link="base_link" />
<child link="right_front_link" />
<axis xyz="0 1 0" />
</joint>
<link name="right_back_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length="0.025" />
</geometry>
<material name="white">
<color rgba="1 1 1 0.9" />
</material>
</visual>
</link>
<joint name="right_back_joint" type="continuous">
<origin xyz="-0.10 -0.15 -0.05" rpy="0 0 0" />
<parent link="base_link" />
<child link="right_back_link" />
<axis xyz="0 1 0" />
</joint>
再次运行查看
然后重新运行launch文件和 rviz可视化工具,查看效果:
3.2 在 URDF 中添加激光传感器
·修改机器人模型
为机器人添加激光雷达传感器。先把之前创建的 URDF 文件复制一份出来,修改名称为
about_with_laser.urdf,在最下端添加雷达的形容词(注意 urdf 文件不能有中文)。(用一个
圆柱体来代表激光雷达传感器)
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<cylinder radius="0.04" length="0.040" />
</geometry>
<material name="black">
<color rgba="0 0 0 0.95" />
</material>
</visual>
</link><joint name="laser_joint" type="fixed">
<origin xyz="0 0 0.09" rpy="0 0 0" />
<parent link="base_link" />
<child link="laser_link" />
</joint>
然后修改 launch 文件,将参数名改为 about_with_laser.urdf,然后启动 launch 文件和 rviz。
显示如下,我们就已经成功的将激光雷达添加进去了。
·运行查看
重新运行 launch 文件和 rviz 可视化工具,查看效果,如图 10 所示:
最终相关文件目录结构如图 11 所示:
动手实现 2:利用之前所学的知识,编写 urdf 文件,在添加激光雷达传感器的基础上为机器人加上摄像头的模型。
在about_with_laser.urdf中添加相机的形容词
<link name="camera_link" >
<visual >
<origin xyz="0 0 0" rpy="0 0 0" / >
<geometry >
<cylinder radius="0.02" length="0.040" / >
</geometry >
<material name="white" >
<color rgba="1 1 1 0.95" / >
</material >
</visual >
</link >
<joint name="camera_joint" type="fixed" >
<origin xyz="0 0 0.13" rpy="0 1.5707 0" / >
<parent link="base_link" / >
<child link="camera_link" / >
</joint >