服务通信也是ROS中的一种常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。即:一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。
服务通信更适用于对时时性有要求,具有一定逻辑处理的应用场景。
概念:
master--->管理者(管理平台) server--->服务端(服务公司) client--->客户端(我)
以请求响应的方式实现不同节点之间数据交互的通信模式。
注意:
保证顺序,客户端发起请求时,服务端需要已经启动
客户端和服务端可以存在多个
服务通信应用时的关注点:大部分实现已经被封装了,需要关注话题、服务端、客户端、数据载体。
流程:
srv文件内的可用数据类型与nsg文件一致,且定义srv实现流程与自定义msg实现流程类似
按照固定格式创建srv文件
编辑配置文件
编译生成中间文件
1.定义srv文件
功能包下新建srv目录,添加xxx.srv文件,内容:
2.编辑配置文件
package.xml中添加编译依赖与执行依赖
CMakeLists.txt编辑srv相关配置
#需要加入message_generation,必须有std_msgs
#配置srv文件
#int32需要依赖于std_msgs
#执行时依赖
注意:官网没有在catkin_make中配置message_runtime,经测试配置也是可以的。
3.编译
编译后的中间文件查看:
C++需要调用的中间文件(.../工作空间/devel/include/包名/xxx.h)
Python需要调用的中间文件(.../工作空间/devel/lib/python*/dist-packages/包名/srv)