Clase 05
Semana 6 - 21/04/2025
Callbacks
Código publisher y suscriber
Uso de nombres
rclpy
: Programación Orientada a ObjetosExisten 3 formas de escribir código de ROS:
Inline
import rclpy
from std_msgs.msg import String
def main(args=None):
# 1. Inicialización
rclpy.init(args=args)
# 2. Creación de nodo
nodo = rclpy.create_node('publicador')
# 2.1 Lógica del programa
...
# 3. Procesamiento de mensajes y callback
rclpy.spin(nodo)
# 4. Finalización
rclpy.shutdown()
if __name__ == '__main__':
main()
Orientado a objetos
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
def main(args=None):
# 1. Inicialización
rclpy.init(args=args)
# 2. Creación de nodo
nodo = Publicador()
# 2.1 La lógica se encuentra en la clase
# 3. Procesamiento de mensajes y callback
rclpy.spin(nodo)
# 4. Finalización
rclpy.shutdown()
if __name__ == '__main__':
main()
Inline
import rclpy
from std_msgs.msg import String
def main(args=None):
# 1. Inicialización
rclpy.init(args=args)
# 2. Creación de nodo
nodo = rclpy.create_node('publicador')
# 2.1 Lógica del programa
...
# 3. Procesamiento de mensajes y callback
rclpy.spin(nodo)
# 4. Finalización
rclpy.shutdown()
if __name__ == '__main__':
main()
Orientado a objetos
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
def main(args=None):
# 1. Inicialización
rclpy.init(args=args)
# 2. Creación de nodo
nodo = Publicador()
# 2.1 La lógica se encuentra en la clase
# 3. Procesamiento de mensajes y callback
rclpy.spin(nodo)
# 4. Finalización
rclpy.shutdown()
if __name__ == '__main__':
main()
Inline
def main(args=None):
...
...
# 2.1 Lógica del programa
# Creación de publisher
pub = nodo.create_publisher(String, 'chat', 10)
# 2.2 Programación de función de callback
def timer_callback():
# Creación de mensaje
msg = String()
# Completar el campo 'data' del mensaje
msg.data = 'Mensaje de prueba'
# Publicar el mensaje
pub.publish(msg)
# 2.3 Creación del timer
timer = nodo.create_timer(1, timer_callback)
...
Orientado a objetos
class Publicador(Node):
def __init__(self):
super().__init__('publicador')
# 2.1 Creación de publisher
self.pub = self.create_publisher(
String, 'chat', 10)
# 2.2 Creación de mensaje
self.msg = String()
# 2.4 Creación del timer
self.timer = self.create_timer(
1, self.timer_callback)
# 2.3 Programación de función de callback
def timer_callback(self):
# Completar el campo 'data' del mensaje
self.msg.data = f'Mensaje de prueba'
# Publicar el mensaje
self.pub.publish(self.msg)
Inline
def main(args=None):
...
...
# 2.1 Lógica del programa
# Creación de publisher
pub = nodo.create_publisher(String, 'chat', 10)
# 2.2 Programación de función de callback
def timer_callback():
# Creación de mensaje
msg = String()
# Completar el campo 'data' del mensaje
msg.data = 'Mensaje de prueba'
# Publicar el mensaje
pub.publish(msg)
# 2.3 Creación del timer
timer = nodo.create_timer(1, timer_callback)
...
Orientado a objetos
class Publicador(Node):
def __init__(self):
super().__init__('publicador')
# 2.1 Creación de publisher
self.pub = self.create_publisher(
String, 'chat', 10)
# 2.2 Creación de mensaje
self.msg = String()
# 2.4 Creación del timer
self.timer = self.create_timer(
1, self.timer_callback)
# 2.3 Programación de función de callback
def timer_callback(self):
# Completar el campo 'data' del mensaje
self.msg.data = f'Mensaje de prueba'
# Publicar el mensaje
self.pub.publish(self.msg)
Inline
def main(args=None):
...
...
# 2.1 Lógica del programa
# Creación de publisher
pub = nodo.create_publisher(String, 'chat', 10)
# 2.2 Programación de función de callback
def timer_callback():
# Creación de mensaje
msg = String()
# Completar el campo 'data' del mensaje
msg.data = 'Mensaje de prueba'
# Publicar el mensaje
pub.publish(msg)
# 2.3 Creación del timer
timer = nodo.create_timer(1, timer_callback)
...
Orientado a objetos
class Publicador(Node):
def __init__(self):
super().__init__('publicador')
# 2.1 Creación de publisher
self.pub = self.create_publisher(
String, 'chat', 10)
# 2.2 Creación de mensaje
self.msg = String()
# 2.4 Creación del timer
self.timer = self.create_timer(
1, self.timer_callback)
# 2.3 Programación de función de callback
def timer_callback(self):
# Completar el campo 'data' del mensaje
self.msg.data = f'Mensaje de prueba'
# Publicar el mensaje
self.pub.publish(self.msg)
Inline
def main(args=None):
...
...
# 2.1 Lógica del programa
# Creación de publisher
pub = nodo.create_publisher(String, 'chat', 10)
# 2.2 Programación de función de callback
def timer_callback():
# Creación de mensaje
msg = String()
# Completar el campo 'data' del mensaje
msg.data = 'Mensaje de prueba'
# Publicar el mensaje
pub.publish(msg)
# 2.3 Creación del timer
timer = nodo.create_timer(1, timer_callback)
...
Orientado a objetos
class Publicador(Node):
def __init__(self):
super().__init__('publicador')
# 2.1 Creación de publisher
self.pub = self.create_publisher(
String, 'chat', 10)
# 2.2 Creación de mensaje
self.msg = String()
# 2.4 Creación del timer
self.timer = self.create_timer(
1, self.timer_callback)
# 2.3 Programación de función de callback
def timer_callback(self):
# Completar el campo 'data' del mensaje
self.msg.data = f'Mensaje de prueba'
# Publicar el mensaje
self.pub.publish(self.msg)
Inline
def main(args=None):
...
...
# 2.1 Lógica del programa
# Creación de publisher
pub = nodo.create_publisher(String, 'chat', 10)
# 2.2 Programación de función de callback
def timer_callback():
# Creación de mensaje
msg = String()
# Completar el campo 'data' del mensaje
msg.data = 'Mensaje de prueba'
# Publicar el mensaje
pub.publish(msg)
# 2.3 Creación del timer
timer = nodo.create_timer(1, timer_callback)
...
Orientado a objetos
class Publicador(Node):
def __init__(self):
super().__init__('publicador')
# 2.1 Creación de publisher
self.pub = self.create_publisher(
String, 'chat', 10)
# 2.2 Creación de mensaje
self.msg = String()
# 2.4 Creación del timer
self.timer = self.create_timer(
1, self.timer_callback)
# 2.3 Programación de función de callback
def timer_callback(self):
# Completar el campo 'data' del mensaje
self.msg.data = f'Mensaje de prueba'
# Publicar el mensaje
self.pub.publish(self.msg)
Inline
def main(args=None):
...
...
# 2.1 Lógica del programa
# Creación de publisher
pub = nodo.create_publisher(String, 'chat', 10)
# 2.2 Programación de función de callback
def timer_callback():
# Creación de mensaje
msg = String()
# Completar el campo 'data' del mensaje
msg.data = 'Mensaje de prueba'
# Publicar el mensaje
pub.publish(msg)
# 2.3 Creación del timer
timer = nodo.create_timer(1, timer_callback)
...
Orientado a objetos
class Publicador(Node):
def __init__(self):
super().__init__('publicador')
# 2.1 Creación de publisher
self.pub = self.create_publisher(
String, 'chat', 10)
# 2.2 Creación de mensaje
self.msg = String()
# 2.4 Creación del timer
self.timer = self.create_timer(
1, self.timer_callback)
# 2.3 Programación de función de callback
def timer_callback(self):
# Completar el campo 'data' del mensaje
self.msg.data = f'Mensaje de prueba'
# Publicar el mensaje
self.pub.publish(self.msg)
Inline
Orientado a objetos
class Suscriptor(Node):
def __init__(self):
super().__init__('suscriptor')
# 2.2 Creación de suscriptor
self.sub = self.create_subscription(
String, 'chat', self.sub_callback, 10)
# 2.1 Programación de función de callback
def sub_callback(self, msg):
# Mostrar el mensaje en consola
self.get_logger()
.info(f'Recibí: "{msg.data}"')
Inline
Orientado a objetos
class Suscriptor(Node):
def __init__(self):
super().__init__('suscriptor')
# 2.2 Creación de suscriptor
self.sub = self.create_subscription(
String, 'chat', self.sub_callback, 10)
# 2.1 Programación de función de callback
def sub_callback(self, msg):
# Mostrar el mensaje en consola
self.get_logger()
.info(f'Recibí: "{msg.data}"')
Modificación código de nodos publisher y suscriber
Robótica - TUAR - FICH - UNL