Service通讯框架:
一个节点具备client功能(客户端),另一个节点具备server功能(服务端的功能)
Service 通讯分为client端和service端
①client端负责发送请求(Request)给server端
②server端负责接收client端发送的请求数据,并处理
③server端收到数据后,根据请求数据和当前的业务需求,产生数据,将数据返回给client端。
Service通讯的特点:
①同步数据访问
②具有响应反馈机制
③一个serve(干活的)r多个client
④注重业务逻辑处理
Service通讯的简单需求:
①构建一个service通讯。需求是一个client端,一个server端。、
②server端为client端提供服务
③服务的内容是:帮助client端计算加法求和
Service通讯-server端实现:
#!/usr/bin/env python
#coding:utf-8
#client:10 20
#server:10 + 20
import rospy
from rospy_tutorials.srv import AddTwoInts,AddTwoIntsRequest,AddTwoIntsResponse
def callback(request):
if not isinstance(request,AddTwoIntsRequest):return
a = request.a
b = request.b
#业务逻辑处理
c = a + b
response =AddTwoIntsResponse()
response.sum = c
return response
if __name__ == '__main__':
#创建节点
rospy.init_node('server_node')
#写service通讯的server端
#服务端server
#服务名称或者服务地址
service_name = 'hello'
#service_class服务的数据类型
#回调,客户端什么时候访问
server = rospy.Service(service_name,AddTwoInts,callback)
rospy.spin()
server端的调试:
输入命令:rosrun rqt_service_caller rqt_service_caller
或者使用命令:rosservice call /hello(服务名称 ) tap几下,就会弹出对应修改参数的码