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()

 

posted @ 2024-09-07 14:18  心如__止水  阅读(14)  评论(0编辑  收藏  举报