Performance: Creating a publisher node
This affects the responsiveness and CPU usage of the ROS system by controlling how often messages are published and how efficiently the node operates.
import rclpy from rclpy.node import Node from std_msgs.msg import String class PublisherNode(Node): def __init__(self): super().__init__('publisher_node') self.publisher_ = self.create_publisher(String, 'topic', 10) timer_period = 0.5 # seconds self.timer = self.create_timer(timer_period, self.timer_callback) def timer_callback(self): msg = String() msg.data = 'Hello World' self.publisher_.publish(msg) self.get_logger().info(f'Publishing: "{msg.data}"') def main(args=None): rclpy.init(args=args) node = PublisherNode() rclpy.spin(node) node.destroy_node() rclpy.shutdown()
import rclpy from rclpy.node import Node from std_msgs.msg import String class PublisherNode(Node): def __init__(self): super().__init__('publisher_node') self.publisher_ = self.create_publisher(String, 'topic', 10) while rclpy.ok(): msg = String() msg.data = 'Hello World' self.publisher_.publish(msg) self.get_logger().info('Publishing: "%s"' % msg.data) def main(args=None): rclpy.init(args=args) node = PublisherNode() rclpy.spin(node) node.destroy_node() rclpy.shutdown()
| Pattern | CPU Usage | Message Rate | Network Load | Verdict |
|---|---|---|---|---|
| Tight loop publishing | High (100%) | Very High (uncontrolled) | High (floods network) | [X] Bad |
| Timer-based publishing | Low (minimal) | Controlled (fixed rate) | Moderate (expected) | [OK] Good |
def timer_callback(self):
msg = String()
msg.data = 'Hello ROS'
self.publisher.publish(msg)
print('Published:', msg.data)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)Pass the test and this pattern moves unknown