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