实验编号: 实验指导书 实验项目: R0S基本元素实验2 所属课程: ROS机器人操作系统基础与实战 课程代码: 面向专业: 机电专业 课程负责人: 朱笑笑 年月 日
实验编号: 实 验 指 导 书 实验项目: ROS 基本元素实验 2 所属课程: ROS 机器人操作系统基础与实战 课程代码: 面向专业: 机电专业 课程负责人: 朱笑笑 年 月 日
、 实验目的 让学生熟悉ROS基本元素的使用方法如,Node节点,topic,servicef的创建 过程、使用、查看。这些基础元素是OS计算图结构的关键元素,对这些的理解 是对ROS程序理解和开发的基础。 二、 实验内容 1. 创建ROS消息和ROS服务 2. Topic的使用 3. Service的使用 4. Launch的使用 三、 实验过程或其他示意图 首先创建一个package,本实验均在该包中测试。 cd ~/catkin ws/src mkdir chapter3/ cd chapter3 catkin create_pkg topic_service std_msgs rospy roscpp 1. 创建ROS消息和ROS服务 1.1使用msg 1.1.1创建一个msg 下面,我们将在之前创建的package里定义新的消息。 cd ~/catkin ws/src/chapter3/topic service mkdir msg echo "int64 num">msg/Num.msg 上面是最简单的例子一在.msg文件中只有一行数据。当然,你可以仿造上面的形式多 增加几行以得到更为复杂的消息: string first name string last name uint8 age uint32 score 接下来,还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语 言的源代码: 查看package.ml,确保它包含一下两条语句: <build depend>message generation</build depend> <exec depend>message runtime</exec depend> -2
- 2 - 一、 实验目的 让学生熟悉ROS基本元素的使用方法如,Node节点,topic,service的创建 过程、使用、查看。这些基础元素是ROS计算图结构的关键元素,对这些的理解 是对ROS程序理解和开发的基础。 二、 实验内容 1. 创建ROS消息和ROS服务 2. Topic的使用 3. Service的使用 4. Launch的使用 三、 实验过程或其他示意图 首先创建一个package,本实验均在该包中测试。 $ cd ~/catkin_ws/src $ mkdir chapter3/ $ cd chapter3 $ catkin_create_pkg topic_service std_msgs rospy roscpp 1. 创建 ROS 消息和 ROS 服务 1.1 使用 msg 1.1.1 创建一个 msg 下面,我们将在之前创建的 package 里定义新的消息。 $ cd ~/catkin_ws/src/chapter3/ topic_service $ mkdir msg $ echo "int64 num" > msg/Num.msg 上面是最简单的例子——在.msg 文件中只有一行数据。当然,你可以仿造上面的形式多 增加几行以得到更为复杂的消息: string first_name string last_name uint8 age uint32 score 接下来,还有关键的一步:我们要确保 msg 文件被转换成为 C++,Python 和其他语 言的源代码: 查看 package.xml, 确保它包含一下两条语句: <build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>
如果没有,添加进去。注意,在构建的时候,我们只需要"message_generation'。然 而,在运行的时候,我们只需要"message_runtime"。 在你最喜爱的编辑器中打开CMakeLists.txt文件(何以参考前边的教程rosed). 在CMakeLists.txt文件中,利用find_packag函数,增加对message_generation 的依赖,这样就可以生成消息了。你可以直接在COMPONENTS的列表里增加 message generation,就像这样: Do not just add this line to your CMakeLists.txt,modify the existing line find package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) 同样,你需要确保你设置了运行依赖: catkin_package( ·◆· CATKIN DEPENDS message_runtime··· ) 找到如下代码块: add message_files( FILES Messagel.msg Message2.msg #) 去掉注释符号#,用你的.msg文件替代Message*.msg,就像下边这样: add_message_files( FILES Num.msg 手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。确 保添加了如下代码: generate_messages() 现在,你可以生成自己的消息源代码了。 使用catkin_make 1.1.2使用rosmsg 以上就是你创建消息的所有步骤。下面通过rosmsg show命令,检查ROS是否能够 识消息。 使用方法: -3-
- 3 - 如果没有,添加进去。 注意,在构建的时候,我们只需要"message_generation"。然 而,在运行的时候,我们只需要"message_runtime"。 在你最喜爱的编辑器中打开 CMakeLists.txt 文件(可以参考前边的教程 rosed). 在 CMakeLists.txt 文件中,利用 find_packag 函数,增加对 message_generation 的依赖,这样就可以生成消息了。 你可以直接在 COMPONENTS 的列表里增加 message_generation,就像这样: # Do not just add this line to your CMakeLists.txt, modify the existing line find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) 同样,你需要确保你设置了运行依赖: catkin_package( ... CATKIN_DEPENDS message_runtime ... ...) 找到如下代码块: # add_message_files( # FILES # Message1.msg # Message2.msg # ) 去掉注释符号#,用你的.msg 文件替代 Message*.msg,就像下边这样: add_message_files( FILES Num.msg ) 手动添加.msg 文件后,我们要确保 CMake 知道在什么时候重新配置我们的 project。确 保添加了如下代码: generate_messages() 现在,你可以生成自己的消息源代码了。 使用 catkin_make 1.1.2 使用 rosmsg 以上就是你创建消息的所有步骤。下面通过 rosmsg show 命令,检查 ROS 是否能够 识消息。 使用方法:
rosmsg show [message type] 样例: rosmsg show topic service/Num 你将会看到: int64 num 在上边的样例中,消息类型包含两部分: topic service-消息所在的package ● Num-消息名Num. 如果你忘记了消息所在的package,你也可以省略掉package名。输入: rosmsg show Num 你将会看到: [topic service /Num]: int64 num 1.2使用srV 1.2.1创建一个srv 在刚刚那个package中创建一个服务: roscd topic_service mkdir srv 这次我们不再手动创建服务,而是从其他的package中复制一个服务。roscp是一个 很实用的命令行工具,它实现了将文件从一个package复制到另外一个package的功能。 使用方法: s roscp [package_name][file_to_copy_path][copy_pathl 现在我们可以从rospy._tutorials package中复制一个服务文件了: roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv 还有很关键的一步:我们要确保sv文件被转换成C++,Python和其他语言的源代码。 现在认为,你已经如前边所介绍的,在CMakeLists.txt文件中增加了对 message_generation的依赖。: Do not just add this line to your CMakeLists.txt,modify the existing line find package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs -4-
- 4 - $ rosmsg show [message type] 样例: $ rosmsg show topic_service/Num 你将会看到: int64 num 在上边的样例中,消息类型包含两部分: topic_service -- 消息所在的 package Num -- 消息名 Num. 如果你忘记了消息所在的 package,你也可以省略掉 package 名。输入: $ rosmsg show Num 你将会看到: [topic_service /Num]: int64 num 1.2 使用 srv 1.2.1 创建一个 srv 在刚刚那个 package 中创建一个服务: $ roscd topic_service $ mkdir srv 这次我们不再手动创建服务,而是从其他的 package 中复制一个服务。roscp 是一个 很实用的命令行工具,它实现了将文件从一个 package 复制到另外一个 package 的功能。 使用方法: $ roscp [package_name] [file_to_copy_path] [copy_path] 现在我们可以从 rospy_tutorials package 中复制一个服务文件了: $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv 还有很关键的一步:我们要确保 srv 文件被转换成 C++,Python 和其他语言的源代码。 现在认为,你已经如前边所介绍的,在 CMakeLists.txt 文件中增加了对 message_generation 的依赖。: # Do not just add this line to your CMakeLists.txt, modify the existing line find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs
message generation) (对的,message_generation对msg和srv都起作用) 同样,跟msg文件类似,你也需要在package.xml文件中做一些修改。查看上边的说明, 增加额外的依赖项。 删掉#,去除对下边语句的注释: add service files( FILES Servicel.srv Service2.srv #) 用你自己的sV文件名替换掉那些Service*.srv文件: add service files( FILES AddTwoInts.srv 现在,你可以生成自己的服务源代码了。如果你想立即实现,那么就跳过以下部分,到 1.2.2使用rossrv 以上就是创建一个服务所需的所有步骤。下面通过rossrv show命令,检查ROS是 否能够识该服务。 使用方法: s rossrv show <service type> 例子: rossrv show topic service/AddTwoInts 你将会看到: int64 a int64 b --- int64 sum 跟rosmsg类似,你也可以不指定具体的package名来查找服务文件: rossrv show AddTwoInts [topic_service/AddTwoInts]: int64 a int64 b int64 sum [rospy_tutorials/AddTwoInts]: int64 a -5-
- 5 - message_generation) (对的, message_generation 对 msg 和 srv 都起作用) 同样,跟 msg 文件类似,你也需要在 package.xml 文件中做一些修改。查看上边的说明, 增加额外的依赖项。 删掉#,去除对下边语句的注释: # add_service_files( # FILES # Service1.srv # Service2.srv # ) 用你自己的 srv 文件名替换掉那些 Service*.srv 文件: add_service_files( FILES AddTwoInts.srv ) 现在,你可以生成自己的服务源代码了。如果你想立即实现,那么就跳过以下部分,到 1.2.2 使用 rossrv 以上就是创建一个服务所需的所有步骤。下面通过 rossrv show 命令,检查 ROS 是 否能够识该服务。 使用方法: $ rossrv show <service type> 例子: $ rossrv show topic_service/AddTwoInts 你将会看到: int64 a int64 b --- int64 sum 跟 rosmsg 类似, 你也可以不指定具体的 package 名来查找服务文件: $ rossrv show AddTwoInts [topic_service/AddTwoInts]: int64 a int64 b --- int64 sum [rospy_tutorials/AddTwoInts]: int64 a