esimonsite
ver todos los tutoriales

Publicar datos en ROS2 con python

El siguiente código publica un valor cada cierto tiempo.

Publicando un String

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

class MinimalPublisher(Node):
    def __init__(self):
        super().__init__('minimal_publisher')
        self.publisher = self.create_publisher(String, '/topic', 10)
        timer_period = 0.5  # segundos
        self.timer = self.create_timer(timer_period, self.timer_callback)

    def pub_string(self):
        msg = String()
        msg.data = 'hi'
        self.publisher.publish(msg)
        self.get_logger().info('Publicando: "%s"' % msg.data)

    def timer_callback(self):
        self.pub_string()


def main(args=None):
    rclpy.init(args=args)
    minimal_publisher = MinimalPublisher()
    rclpy.spin(minimal_publisher)
    # Destruye el nodo explícitamente (opcional)
    minimal_publisher.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

Publicando un Int32

import rclpy
from rclpy.node import Node
from std_msgs.msg import Int32

class MinimalPublisher(Node):
    def __init__(self):
        super().__init__('minimal_publisher')
        self.publisher = self.create_publisher(String, '/int_32_example_topic', 10)
        timer_period_seconds = 0.5 
        self.timer = self.create_timer(timer_period_seconds, self.timer_callback)

    def pub_string(self , number):
        self.publisher.publish(Int32(data=number))
        self.get_logger().info('Publicando: "%d"' % msg.data)

    def timer_callback(self):
        self.pub_string(20)


def main(args=None):
    rclpy.init(args=args)
    minimal_publisher = MinimalPublisher()
    rclpy.spin(minimal_publisher)
    minimal_publisher.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

Cosas que debes cambiar

Cambiar el nombre de la clase MinimalPublisher

El nombre de la clase debería reflejar mejor la función específica que realiza dentro de tu aplicación. Por ejemplo, si tu clase está diseñada para publicar mensajes de tipo string, podrías renombrarla como StringPublisher.

Cambiar el nombre del topic:

El nombre del topic debe ser descriptivo respecto al tipo de datos que se están publicando y su propósito. Por ejemplo, si estás publicando un contador o un valor que representa una medida específica, el nombre del topic podría ser algo como counter_topic o measurement_value