# 发布方 # 以发布订阅的方式实现不同节点之间数据交互的通讯模式,用于不断更新的、少逻辑处理的数据传输场景 impoosyt rospy from std_msgs.msg import String# 初始化ROS节点(命门) rospy.init_node("talker_1") # 实例化发布者对象 pub_1 = rospy.Publisher("chatter", String, queue_size=10) # 主体名称、消息类别、队列大小 # 组织被发布数据,编写逻辑发布数据 msg = String() msg_front = "hello_laobiao" count = 0 # 设置循环频率 rate =rospy.Rate(1) while not rospy.is_shutdown():msg.data = msg_front + str(count) # 拼接字符串 pub_1.publish(msg)rate.sleep()rospy.loginfo("写出的数据:%s", msg.data) # 打印字符串count += 1# 订阅方 imort rospy from std_msgs.msg import Stringdef doMsg(msg):rospy.loginfo("hello_too_laobiao:#s", msg.data)# 初始化ROS节点(命名) rospy.init_node("listener_1") # 实例化订阅者对象 sub_1 = rospy.Subscriber("chatter", String, doMsg, queue_size=10) # 设置循环调用回调函数 rospy.spin()
连接与通信:
1、Listener 接收到 Talker 的确认消息后,使用 TCP 尝试与 Talker 建立网络连接;
2、成功连接之后,Talker 开始向 Listener 发布话题消息数据;
3、至此,完成了 Talker 向 Listener 发布消息的过程;Master 在这个阶段并不参与两者之间的数据传递;
4、需要注意,有可能多个 Talker 连接一个 Listener,也有可能是一个 Talker 连接上多Listener。