ROS话题通信

# 发布方
# 以发布订阅的方式实现不同节点之间数据交互的通讯模式,用于不断更新的、少逻辑处理的数据传输场景
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 String

def 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。

 

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