Clase 05 - Laboratorio
Programación Orientada a Objetos en ROS 2
Se recomienda crear un paquete nuevo, distinto del utilizado en el lab anterior
Importar
rclpy
y la claseNode
import rclpy
from rclpy.node import Node
Crear la clase
class <nombre_clase>(Node):
__init__(self):
super().__init__(<nombre_nodo>)
...
Publisher, suscriber y timers
Se crean de la mismas manera solo que en vez de utilizar la instancia <nodo>
se accederá a través del objeto mediante el atributo self
.
self.create_publisher( <tipo_mensaje>, '<nombre_topic>', <tamaño_cola>)
self.create_timer(<periodo_en_seg>, <funcion_callback>)
self.create_subscription(<tipo_mensaje>, '<nombre_topic>', <funcion_callback>, <tamaño_cola>)
Funciones de callback
Las funciones de callback serán métodos de la clase
class <nombre_clase>(Node):
...def timer_callback(self):
...# Publicar el mensaje
self.pub.publish(self.msg)
Función
main
Solo será utilizada para la inicialización o init
, la creación del nodo (instanciando la clase), el spin
y la finalización o shutdown
def main(args=None):
# 1. Inicialización
rclpy.init(args=args)
# 2. Creación de nodo
# nodo = ...
# 3. Procesamiento de mensajes y callback
rclpy.spin(nodo)
# 4. Finalización
rclpy.shutdown()
if __name__ == '__main__':
main()
Modificar el código del nodo publisher
Puedes reutilizar el código del lab anterior
Recordatorio
Si se crea un paquete nuevo recuerda:
- Completar las dependencias en
package.xml
e instalar medianterosdep
- Crear el o los ejecutables en
setup.py
- Compilar el paquete con
colcon
- configurar el entorno:
source install/setup.bash
Verificación del funcionamiento
$ ros2 run <nombre_paquete> <nombre_ejecutable>
Comprobar que el nodo se encuentre en ejecución
Puedes utilizar los comandos de ros2 node list
y ros2 node info
Comprobar que se encuentra publicando los mensajes
Puedes utilizar los comandos de ros2 topic list
, ros2 topic info
y ros2 topic echo
Modificar el código del nodo suscriber
Añadir un nuevo ejecutable en el archivo
setup.py
Compilar y ejecutar el nodo
Verificar el funcionamiento de ambos nodos