《 无人驾驶原理与实践》一2.7ROS Service

举报
华章计算机 发表于 2019/06/01 23:20:09 2019/06/01
【摘要】 本书摘自《 无人驾驶原理与实践》一书中的第二章,第2.7节,编著是申泽邦 雍宾宾 周庆国 李良 李冠憬

2.7ROS Service

       ROS除了发布/订阅这类通信机制以外,还提供了一种请求/回复(Request/Response)机制,如图29所示。

image.png

       这种通信机制通过Service(服务)来实现。服务和主题很相似,相比于主题,服务会有一个给客户端节点的反馈,服务的定义也与消息相似,
图29请求/回复机制
文件名习惯上使用srv后缀,文件的前面为请求的消息格式,中间以“---”分隔,后面是回复消息的格式,如图210所示。

image.png


       同样,也可以通过命令行对服务进行分析。常用的服务分析命令包括:
      ◆    rosservice list:列出当前所有的服务。
      ◆    rosservice type:显示服务的类型。
         rosservice call:调用服务。
       ROS中的服务器(Server)/客户端(Client)的定义和发布者/订阅者的定义颇为相似,以下面代码为例,客户端向服务器发送两个整数,服务器对两个整数求和,并且将求和的结果反馈给客户端程序。下面首先定义服务器。

image.png


       通过上面的代码得出,调用nodeHandleadvertiseService (service_name, callback_function)即可创建一个服务器。当收到请求时,服务器执行定义好的回调函数,既然代码中存在ROS的回调函数,就应该添加ros::spin()来保持节点的运行和对回调的监听。在回调函数中,当完成处理后应该填充response部分,service的回调函数返回值通常为bool,返回true表明回调被正确地执行了。下面接着分析客户端。

image.png

       类似于发布者的定义,我们使用nodeHandleserviceClient<service_type>(service_name)创建一个客户端,并且像实例化一条消息一样,实例化一个服务。这里我们只需要填充服务的request部分。在客户端,通过clientcall(service)向服务器发送请求,通过serviceresponse来获取反馈的结果。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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