《精通ROS机器人编程(原书第2版) 》 —1.5.4 ROS服务
1.5.4 ROS服务
如果我们需要一个请求/应答式的通信方式,就必须采用 ROS服务。ROS话题的通信方式是单向的,因此无法实现这种双向的通信方式。ROS服务主要应用于分布式系统。
ROS服务由一对消息定义。请求和应答的数据类型都定义在一个名为srv的文件中。所有的srv文件都存储在软件包内的srv文件夹中。
在ROS服务中,一个节点作为ROS服务提供者(服务器),另一个节点(客户端)可以向这个节点请求服务。如果服务提供者完成了服务,将把结果返回给服务客户端。比如,一个节点可以计算给定的两个数的和,并以ROS服务的形式实现此功能。系统中的其他节点则可以通过该节点提供的服务,请求计算给定的两数之和。与之不同的是,话题用于传递连续的数据流。
可以通过如下方式访问ROS的服务定义。比如,my_package/srv/Image.srv 可以被my_package/Image访问。
在ROS服务中,还有一项MD5校验和比较,用于检查节点。如果校验值匹配,服务器才对请求的客户端做出响应。
有两个ROS辅助工具可用于获得关于ROS服务的信息。一个工具为rossrv,类似于rosmsg,可用于获得有关服务类型的信息。另一个工具为rosservice,用于列出并查询正在运行的ROS服务。
下面说明如何用rosservice获取正在运行的ROS服务的相关信息:
$ rosservice call /service args: 使用给定的参数调用服务。
$ rosservice find service_type: 查找给定服务类型的服务。
$ rosservice info /services: 显示服务的相关信息。
$ rosservice list: 列出系统中正在运行的服务。
$ rosservice type /service: 显示给定服务的服务类型。
$ rosservice uri /service: 显示服务的ROSRPC URI。
- 点赞
- 收藏
- 关注作者
评论(0)