Bird
Raised Fist0
ROSframework~10 mins

Creating a publisher node in ROS - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize a ROS node named 'talker'.

ROS
rclpy.init(args=[1])
Drag options to blanks, or click blank then click option'
Arclpy
Bargs
Cnode
DNone
Attempts:
3 left
💡 Hint
Common Mistakes
Passing undefined variables instead of None
Forgetting to initialize the ROS client library
2fill in blank
medium

Complete the code to create a publisher for the 'chatter' topic with message type String.

ROS
publisher = node.create_publisher(std_msgs.msg.[1], 'chatter', 10)
Drag options to blanks, or click blank then click option'
AInt32
BBool
CString
DFloat32
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong message type like Int32 for text messages
Misspelling the message type name
3fill in blank
hard

Fix the error in the code to publish a message with data 'Hello World'.

ROS
msg = std_msgs.msg.String()
msg.data = [1]
publisher.publish(msg)
Drag options to blanks, or click blank then click option'
A'Hello World'
BHello World
C"Hello World"
DHello_World
Attempts:
3 left
💡 Hint
Common Mistakes
Not using quotes around the string data
Using undefined variables instead of string literals
4fill in blank
hard

Fill both blanks to create a ROS node and spin it to keep it alive.

ROS
rclpy.init(args=[1])
node = rclpy.create_node('[2]')
rclpy.spin(node)
Drag options to blanks, or click blank then click option'
ANone
Btalker
Clistener
Dargs
Attempts:
3 left
💡 Hint
Common Mistakes
Passing wrong arguments to init
Using incorrect node names
5fill in blank
hard

Fill all three blanks to create a publisher node that publishes 'Hello ROS' every second.

ROS
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class TalkerNode(Node):
    def __init__(self):
        super().__init__('talker')
        self.publisher_ = self.create_publisher(String, 'chatter', 10)
        self.timer = self.create_timer(1.0, self.timer_callback)

    def timer_callback(self):
        msg = String()
        msg.data = [1]
        self.publisher_.publish(msg)
        self.get_logger().info('Publishing: "%s"' % [2])


def main(args=None):
    rclpy.init(args=[3])
    node = TalkerNode()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()
Drag options to blanks, or click blank then click option'
A'Hello ROS'
Bmsg.data
CNone
D'Hello World'
Attempts:
3 left
💡 Hint
Common Mistakes
Not quoting the string message
Logging the wrong variable
Passing wrong args to init

Practice

(1/5)
1. What is the main purpose of a publisher node in ROS?
easy
A. To store data in a database
B. To receive messages from other nodes
C. To compile the ROS package
D. To send messages on a topic to share information

Solution

  1. Step 1: Understand the role of a publisher node

    A publisher node sends messages to other nodes by publishing on a topic.
  2. Step 2: Compare options with the role

    Only To send messages on a topic to share information describes sending messages on a topic, which matches the publisher's role.
  3. Final Answer:

    To send messages on a topic to share information -> Option D
  4. Quick Check:

    Publisher node = sends messages [OK]
Hint: Publisher nodes send messages, subscribers receive them [OK]
Common Mistakes:
  • Confusing publisher with subscriber
  • Thinking publisher stores data
  • Assuming publisher compiles code
2. Which of the following is the correct way to create a publisher in a ROS2 Python node?
easy
A. self.createPublisher(String, 'topic_name', 10)
B. self.create_publisher(String, 'topic_name', 10)
C. create_publisher(String, 'topic_name', 10)
D. self.create_publisher('topic_name', String, 10)

Solution

  1. Step 1: Recall ROS2 Python publisher syntax

    The method is called on the node instance as self.create_publisher, with message type first, then topic name, then queue size.
  2. Step 2: Check each option's syntax

    self.create_publisher(String, 'topic_name', 10) matches the correct method name and argument order. self.createPublisher(String, 'topic_name', 10) has wrong method name casing. create_publisher(String, 'topic_name', 10) misses self. self.create_publisher('topic_name', String, 10) swaps argument order.
  3. Final Answer:

    self.create_publisher(String, 'topic_name', 10) -> Option B
  4. Quick Check:

    Correct method and argument order = self.create_publisher(String, 'topic_name', 10) [OK]
Hint: Use self.create_publisher with message type first [OK]
Common Mistakes:
  • Wrong method name casing
  • Missing self when calling method
  • Swapping topic name and message type
3. Given this ROS2 Python publisher code snippet, what will be printed when the timer callback runs?
def timer_callback(self):
    msg = String()
    msg.data = 'Hello ROS'
    self.publisher.publish(msg)
    print('Published:', msg.data)
medium
A. Published: Hello ROS
B. Hello ROS
C. Published: msg.data
D. Error: msg.data undefined

Solution

  1. Step 1: Analyze the print statement

    The print outputs the string 'Published:' followed by the value of msg.data, which is 'Hello ROS'.
  2. Step 2: Confirm msg.data value

    msg.data is assigned 'Hello ROS' before publishing, so the print shows 'Published: Hello ROS'.
  3. Final Answer:

    Published: Hello ROS -> Option A
  4. Quick Check:

    Print shows 'Published:' plus msg.data [OK]
Hint: Print uses string plus msg.data value [OK]
Common Mistakes:
  • Printing variable name instead of value
  • Assuming print shows only msg.data
  • Confusing msg.data with undefined
4. Identify the error in this ROS2 Python publisher node snippet:
def __init__(self):
    self.publisher = self.create_publisher(String, 'chatter', 10)

def timer_callback(self):
    msg = String()
    msg.data = 'Hello'
    self.publisher.publish(msg)

self.timer = self.create_timer(1.0, timer_callback)
medium
A. timer_callback is missing 'self' parameter
B. create_publisher is called with wrong arguments
C. Timer is created outside the class constructor
D. msg.data is assigned incorrectly

Solution

  1. Step 1: Check code structure and indentation

    The self.timer = self.create_timer(1.0, timer_callback) line lacks indentation and appears outside __init__ at class level, where 'self' is undefined, causing NameError.
  2. Step 2: Verify other options

    A: timer_callback includes 'self'. B: create_publisher args are correct (type, topic, qos). D: msg.data = 'Hello' is valid.
  3. Final Answer:

    Timer is created outside the class constructor -> Option C
  4. Quick Check:

    self assignments must be inside instance methods like __init__ [OK]
Hint: Create timers inside __init__ with self.create_timer(1.0, self.timer_callback) [OK]
Common Mistakes:
  • Omitting 'self' in method parameters
  • Misordering create_publisher arguments
  • Creating timer outside class context
5. You want to create a ROS2 publisher node that publishes integers incrementing every second starting from 0. Which code snippet correctly implements this behavior?
hard
A. class IntPublisher(Node): def __init__(self): super().__init__('int_publisher') self.publisher = self.create_publisher(Int32, 'numbers', 10) self.i = 0 self.timer = self.create_timer(1.0, self.timer_callback) def timer_callback(self): msg = Int32() msg.data = self.i self.publisher.publish(msg) self.i += 1
B. class IntPublisher(Node): def __init__(self): super().__init__('int_publisher') self.publisher = self.create_publisher(Int32, 'numbers', 10) self.i = 0 self.timer = self.create_timer(1.0, self.timer_callback) def timer_callback(): msg = Int32() msg.data = self.i self.publisher.publish(msg) self.i += 1
C. class IntPublisher(Node): def __init__(self): super().__init__('int_publisher') self.publisher = self.create_publisher(Int32, 'numbers', 10) self.i = 0 self.timer = self.create_timer(1.0, self.timer_callback) def timer_callback(self): msg = Int32() msg.data = 0 self.publisher.publish(msg) self.i += 1
D. class IntPublisher(Node): def __init__(self): super().__init__('int_publisher') self.publisher = self.create_publisher(Int32, 'numbers', 10) self.i = 1 self.timer = self.create_timer(1.0, self.timer_callback) def timer_callback(self): msg = Int32() msg.data = self.i self.publisher.publish(msg) self.i = 0

Solution

  1. Step 1: Check timer_callback method signatures

    Options A and C define timer_callback(self); B omits 'self', causing AttributeError on self.i and self.publisher.
  2. Step 2: Verify increment logic

    class IntPublisher(Node): def __init__(self): super().__init__('int_publisher') self.publisher = self.create_publisher(Int32, 'numbers', 10) self.i = 0 self.timer = self.create_timer(1.0, self.timer_callback) def timer_callback(self): msg = Int32() msg.data = self.i self.publisher.publish(msg) self.i += 1 initializes self.i=0 and does self.i += 1 after publishing, yielding 0,1,2,... class IntPublisher(Node): def __init__(self): super().__init__('int_publisher') self.publisher = self.create_publisher(Int32, 'numbers', 10) self.i = 0 self.timer = self.create_timer(1.0, self.timer_callback) def timer_callback(self): msg = Int32() msg.data = 0 self.publisher.publish(msg) self.i += 1 always publishes 0. class IntPublisher(Node): def __init__(self): super().__init__('int_publisher') self.publisher = self.create_publisher(Int32, 'numbers', 10) self.i = 1 self.timer = self.create_timer(1.0, self.timer_callback) def timer_callback(self): msg = Int32() msg.data = self.i self.publisher.publish(msg) self.i = 0 publishes 1 then sets self.i=0 repeatedly.
  3. Final Answer:

    self.i = 0; msg.data = self.i; self.i += 1 -> Option A
  4. Quick Check:

    self.i starts 0, increment after publish [OK]
Hint: Use self.i and increment after publishing in timer callback [OK]
Common Mistakes:
  • Missing 'self' in timer_callback
  • Not incrementing the counter
  • Resetting counter inside callback
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard