服务
- 之前讨论的是消息如何在节点之间传递
- 服务和消息调用的 区别是
- 服务调用 是双向的,一个节点给另一个节点发送信息并等待响应,因此信息流是双向的。而消息发布后就没有响应的概念,甚至不能保证有订阅。
- 服务调用实现的是一对一的通信。每一个服务由一个节点发起,对这个服务的响应返回同一个就节点,另一方面,每一个消息都和一个话题相关,这个话题可能有很多的发布者和订阅者。
- 服务的过程其实就是一个客户端节点发送一些称为请求的数据到一个服务器节点,并等待回应。服务器节点接收到请求后采取一些响应的数据给客户端节点。请求和响应数据携带的特定内容是由服务数据类型来决定的.
- 列出所有的服务 rosservice list 服务名是计算图有源名称
- 查看某个节点的服务类型 rosnode info node-name
- 查看提供服务的节点rosservice node service-name
- 查看服务的数据类型rosservice info service-name
- 查看服务数据类型当服务的数据类型已知时候,rossrv show service-data-type-name
- rosservice 和rossrv区别,前者是用来与目前由某些节点提供的服务进行交互的。后者名称来源于用来声明服务数据类型的文件的扩展名.srv,是用来查看服务数据类型的。
- 从命令行条用服务 rosservice call service-name reequest-content
- 从命令行调用服务对于系统检查和其他只要偶尔完成的事件是非常方便的,但是显然能够从自己代码调用服务会更有帮助。
声明请求和响应的类型
- 每一个服务数据类型都对应一个我们必须包含的相关c++头文件:#include