Concept Flow - Publish-subscribe communication model
Publisher Node
Subscriber Node(s)
Process Message
The publisher sends messages to the ROS Master, which then forwards them to all subscriber nodes that have registered interest.
import rospy from std_msgs.msg import String def callback(msg): rospy.loginfo(f"Received: {msg.data}") rospy.init_node('listener') rospy.Subscriber('chatter', String, callback) rospy.spin()
| Step | Action | Publisher State | ROS Master State | Subscriber State | Message Flow |
|---|---|---|---|---|---|
| 1 | Publisher node starts and initializes | Ready to publish | Idle | Idle | No messages |
| 2 | Subscriber node starts and subscribes to 'chatter' | Ready to publish | Registers subscriber for 'chatter' | Subscribed to 'chatter' | No messages |
| 3 | Publisher publishes message 'Hello' | Message 'Hello' sent | Receives message 'Hello' on 'chatter' | Waiting for message | Message queued for subscribers |
| 4 | ROS Master forwards message to subscriber | Message sent | Forwards 'Hello' to subscriber | Receives message 'Hello' | Message delivered |
| 5 | Subscriber callback processes message | Idle | Idle | Processes and logs 'Received: Hello' | Message processed |
| 6 | No new messages | Idle | Idle | Idle | No messages |
| Exit | No more messages to publish | Publisher stops or waits | No messages to forward | Subscriber waits | Execution stops |
| Variable | Start | After Step 2 | After Step 3 | After Step 4 | After Step 5 | Final |
|---|---|---|---|---|---|---|
| Publisher State | Not started | Ready to publish | Message 'Hello' sent | Message sent | Idle | Idle |
| ROS Master State | Idle | Registers subscriber | Receives message | Forwards message | Idle | Idle |
| Subscriber State | Idle | Subscribed | Waiting for message | Receives message | Processes message | Idle |
| Message Flow | No messages | No messages | Message queued | Message delivered | Message processed | No messages |
Publish-subscribe model in ROS: - Publisher sends messages to a topic via ROS Master - Subscribers register interest to topics with ROS Master - ROS Master forwards messages from publishers to all subscribers - Subscribers receive messages asynchronously via callbacks - Decouples sender and receiver for flexible communication
publisher in the ROS publish-subscribe model?import rospy
from std_msgs.msg import String
def callback(msg):
print(f'Received: {msg.data}')
rospy.init_node('listener')
sub = rospy.Subscriber('chatter', String, callback)
rospy.spin()import rospy
from std_msgs.msg import String
def callback(msg):
print(msg.data)
rospy.init_node('listener')
sub = rospy.Subscriber('chatter', String)
rospy.spin()Pass the test and this pattern moves unknown