📖 Scenario: You are building a simple ROS system where one node sends messages and another node receives them. This is like a radio station (publisher) broadcasting music and listeners (subscribers) tuning in to hear it.
🎯 Goal: Create a ROS publisher node that sends string messages and a subscriber node that listens and prints those messages.
📋 What You'll Learn
Create a publisher node named talker that publishes to the topic /chatter with message type std_msgs/String.
Create a subscriber node named listener that subscribes to the topic /chatter and prints received messages.
Use ROS Python client library rospy.
Follow ROS node initialization and message publishing/subscribing patterns.
💡 Why This Matters
🌍 Real World
ROS publish-subscribe is used in robots to send sensor data from one part to another, like a camera node sending images to a processing node.
💼 Career
Understanding ROS communication is essential for robotics developers to build modular and scalable robot software.
Progress0 / 4 steps
1
Create the publisher node skeleton
Write a Python script that imports rospy and std_msgs.msg.String. Initialize a ROS node called talker.
ROS
Hint
Use import rospy and from std_msgs.msg import String. Then call rospy.init_node('talker').
2
Create a publisher for the /chatter topic
Add a publisher named pub that publishes String messages to the topic /chatter with a queue size of 10.
ROS
Hint
Use rospy.Publisher with topic '/chatter', message type String, and queue_size=10.
3
Create the subscriber node skeleton and callback
Write a Python script that imports rospy and std_msgs.msg.String. Initialize a ROS node called listener. Define a callback function callback that takes a msg parameter and prints "I heard: " followed by msg.data. Subscribe to the topic /chatter with message type String and the callback function.
ROS
Hint
Define a function callback(msg) that prints the message data. Initialize the node with rospy.init_node('listener') and subscribe with rospy.Subscriber.
4
Add ROS spin to keep subscriber alive
Add a call to rospy.spin() at the end of the subscriber script to keep the node running and listening for messages.
ROS
Hint
Call rospy.spin() to keep the subscriber node running.
Practice
(1/5)
1. What is the main role of a publisher in the ROS publish-subscribe model?
easy
A. To create new topics dynamically
B. To receive messages from a topic
C. To store messages in a database
D. To send messages to a topic
Solution
Step 1: Understand the publish-subscribe roles
In ROS, publishers send messages to topics, while subscribers receive messages from topics.
Step 2: Identify the publisher's function
The publisher's job is to send data to a topic so subscribers can receive it.
3. Given the following ROS Python code snippet, what will be printed when a message with data 'Hello' is published?
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()
medium
A. Received: Hello
B. Hello
C. Received: msg
D. No output
Solution
Step 1: Understand the callback function
The callback prints 'Received: ' followed by the message's data field.
Step 2: Analyze the message content
The message data is 'Hello', so the print statement outputs 'Received: Hello'.
Final Answer:
Received: Hello -> Option A
Quick Check:
Callback prints 'Received: ' + msg.data [OK]
Hint: Callback prints 'Received: ' plus message data [OK]
Common Mistakes:
Printing message object instead of data
Expecting just the message data without prefix
Thinking no output occurs without explicit print
4. Identify the error in this ROS Python subscriber code:
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()
medium
A. Incorrect message type used
B. Missing callback function in Subscriber
C. Node not initialized
D. No import for rospy
Solution
Step 1: Review Subscriber syntax
Subscriber requires three arguments: topic name, message type, and callback function.
Step 2: Check the given code
The Subscriber call misses the callback argument, causing an error.
Final Answer:
Missing callback function in Subscriber -> Option B
Quick Check:
Subscriber needs callback argument [OK]
Hint: Subscriber must include callback function [OK]
Common Mistakes:
Omitting callback in Subscriber
Confusing Publisher and Subscriber arguments
Forgetting to initialize node
5. You want to create a ROS system where multiple nodes publish sensor data to the same topic, and one node subscribes to process all data. Which feature of the publish-subscribe model makes this possible?
hard
A. Topics allow multiple publishers and subscribers to communicate independently
B. Each topic can have only one publisher and one subscriber
C. Publishers must know all subscribers to send messages
D. Subscribers can only listen to one topic at a time
Solution
Step 1: Understand topic communication in ROS
Topics support multiple publishers and subscribers simultaneously, enabling flexible communication.
Step 2: Analyze the scenario
Multiple nodes publishing to the same topic and one subscriber processing all data is possible because topics allow many publishers and subscribers.
Final Answer:
Topics allow multiple publishers and subscribers to communicate independently -> Option A
Quick Check:
Topics support many-to-many communication [OK]
Hint: Topics support many publishers and subscribers [OK]
Common Mistakes:
Thinking topics allow only one publisher or subscriber
Believing publishers must know subscribers
Assuming subscribers can listen to only one topic
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.