如果您是ROS的初学者,并且想学习如何创建ROS服务,那么本教程非常适合您。我将详细描述所有步骤,从创建程序包开始,直至使用服务并打印结果。
本教程的目的是将其他信息添加到ROS服务的材料支持上, ROS Wiki页面.
关于ROS服务的几句话
- ROS服务与远程过程调用的运行时间完全相同;
- ROS服务具有输入和输出;输入和输出的定义类似于ROS消息;
- ROS服务可以具有输入数字和输出字符;
- 通常您应该在定义ROS服务时’偶尔需要做某事。例如我’将为我的机器人创建ROS服务,该机器人在遇到障碍物时会拍照。
软件和编程语言:
- I’m使用ROS Kinetic版本1.12.14
- 操作系统是Linux Ubuntu 16.04 LTS
- 编程语言:Python
下面,我详细介绍了实现ROS服务的实际示例的所有步骤。在这个例子中,我’ll将使用具有随机数作为输入并且具有ON或OFF文本作为输出的ROS服务。
1.创建ROS包
我想从头开始运行此练习,第一步是创建一个包来存储服务文件。如果您已经有一个软件包,并且只想创建一个ROS服务,则不需要这样做。
导航到 src 工作区的目录,然后键入以下命令:
catkin_create_pkg 罗斯_service 红润的
光盘..
catkin_make
源devel / setup.bash
如果完成上述命令,则应该有一个名为ros_service的新ROS软件包。第一步完成,接下来我们将开始创建ROS服务。第一步是创建 srv 目录和服务定义文件。
2.建立‘srv’ directory and ‘srv file’
从这一步开始,当我们使用输入和输出创建服务定义文件时,将创建目录。
当您要创建ROS服务时,导航至包目录:
罗斯cd 罗斯_service
mkdir srv
在srv目录中,创建一个名为ServiceExample.srv的文件,并编写以下三行:
int32 一个零
—
弦转
三个破折号标记输入的结尾和输出的开始。
最后三行‘srv file’,我们结束了服务定义文件。接下来,是时候更新创建代码和类定义以与我们定义的服务一起使用所需的两个文件了。
3.更新package.xml和CMakeLists.txt
打开package.xml文件并编写以下行。如果在创建ROS软件包时放置了rospy依赖项,则该文件中应该已经包含了rospy build依赖和run依赖。否则,将以下所有行放入package.xml中:
<build_depend> 红润的</build_depend>
<exec_depend> 红润的</exec_depend>
<build_depend> 烂摊子age_generation</build_depend>
<exec_depend> 烂摊子age_runtime</exec_depend>
We’对package.xml文件进行处理,我们将转到CMakeFiles.txt。在此文件中,我们必须添加依赖项和服务文件:
(信息:您应该已经将大多数这些列表作为注释)
find_package(catkin所需组件
罗斯科普
红润的
烂摊子age_generation
)
add_service_files(
档案
服务实例.srv
)
generate_messages(
依赖
std_msgs
)
现在,我们必须运行catkin_make命令来生成用于与服务交互的类。
catkin_make
源devel / setup.bash
4.编写callService.py
在srv目录中,创建一个名为callService.py的新文件。使用以下命令将此文件可执行“chmod + x callService.py”.
该文件显示了一个简单的服务器,该服务器接受输入一或零,并作为输出返回ON或OFF。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/ usr / bin / env python 进口 红润的 #import catkin生成的代码。 #我们需要ServiceExample作为第一种消息类型, #和来自第二个消息类型的ServiceExampleResponse ServiceExample.srv文件 从 罗斯_service.srv 进口 服务实例, 服务实例Response 定义 turn_on_off(烂摊子): 如果 烂摊子.一个零== 1: 返回 服务实例Response('上') 其他: 返回 服务实例Response(“关闭”) 红润的.init_node('service_respond') 服务=红润的.服务('service_example',服务实例,turn_on_off) 红润的.旋转() |
5.检查服务和有用的命令
该服务已编写,因此我们必须尝试一下。第一步是打开一个终端并打开roscore。然后打开一个新终端并运行:
罗斯run 罗斯_service callService.py
您的服务应已启动并正在运行。要检查该服务是否有效,我们必须提供一些输入:
罗斯service呼叫service_example‘0’
您的结果应如下图所示:

罗斯service结果
6.使用服务
要使用该服务,我们必须创建一个新文件。让’s在srv目录中创建名为‘useService.py’. Don’不要忘记使其可执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/ usr / bin / env python 进口 红润的 从 罗斯_service.srv 进口 服务实例 进口 系统 红润的.init_node(“ use_service”) #等待要发布的服务,否则服务使用将失败 红润的.wait_for_service('service_example') #设置服务的本地代理 srv=红润的.服务代理('service_example',服务实例) #使用服务并为其发送值。在这种情况下,我可以发送1或0 服务_example=srv(0) #打印服务结果 打印 服务_example |