ROS服务通信
ROS服务通信是基于 C/S 模式的双向数据传输模式(有应答的通信机制),ROS话题通信是无应答的通信机制。根据 Master 是否参数也分为两部分:连接前的准备,连接和通信;通信流程如下:
服务通信与 话题通信的 连接和通信 步骤都是一样的。唯一不同的是服务通信是有应答的。
1、Listener 接收到 Talker 的确认消息后,使用 TCP 尝试与 Talker 建立网络连接;
2、成功连接之后,Talker 开始向 Listener 发布话题消息数据;
3、至此,服务通信完成连接和通信过程,可以进行有应答的信息交流了。
4、需要注意,有可能是一个 Talker 连接上多个 Listener。
# 服务端 import rospy from demo03_server_client.src import AddInts,AddIntsRequest,AddIntsResponse def doReq(req): # 解析提交的数据 sum = req.num1 + req.num2 rospy.loginfo("提交的数据:num1 = %d, num2 = %d, sum = %d", req.num1, req.num2, sum) # 创建响应对象,赋值并返回 resp = AddIntsResponse(sum) return resp if __name__ == "__main__": # 初始化ROS节点 rospy.init_node("addints_server_p") # 创建服务对象 server = rospy.Service("AddInts", AddInts, doReq) # 回调函数处理请求并产生响应 rospy.spin() # 客户端 import rospy import sys if __name__ == "__main__": # 初始化ROS节点 rospy.init_node("AddInts_Client_p") # 创建请求对象 client = rospy.ServiceProxy("AddInts", AddInts) # 等待服务器就绪 client.wait_for_service() # 发送请求,接受并处理响应 req = AddIntsRequest()