《精通ROS机器人编程(原书第2版) 》 —1.5.4 ROS服务

举报
华章计算机 发表于 2020/02/10 14:03:01 2020/02/10
【摘要】 本节书摘来自华章计算机《精通ROS机器人编程(原书第2版) 》 一书中第1章,第1.5.4节,作者是[印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace),张新宇 张志杰 等译 。

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。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。