Recordando los nodos, topics y servicios en ROS

Robot Operating System (ROS)
El Sistema Operativo de Robots (ROS o ros) es una suite de middleware de robótica de código abierto. Aunque ROS no es un sistema operativo (OS) sino un conjunto de marcos de software para el desarrollo de software de robots, proporciona servicios diseñados para un clúster de computadoras heterogéneo, como abstracción de hardware, control de dispositivos de bajo nivel, implementación de funcionalidades comúnmente utilizadas, paso de mensajes entre procesos y gestión de paquetes. Los conjuntos de procesos basados en ROS se representan en una arquitectura de gráficos donde el procesamiento tiene lugar en nodos que pueden recibir, publicar y multiplexar datos de sensores, control, estado, planificación, mensajes de actuador y otros.
Nodos en ROS2
En ROS, los procesos se representan como nodos en una estructura de gráfico, conectados por bordes llamados temas. Los nodos de ROS pueden pasar mensajes entre sí a través de temas, hacer llamadas de servicio a otros nodos, proporcionar un servicio para otros nodos o establecer o recuperar datos compartidos de una base de datos comunal llamada servidor de parámetros. Un proceso llamado el Maestro ROS hace posible todo esto al registrar nodos en sí mismo, establecer comunicación nodo a nodo para temas y controlar las actualizaciones del servidor de parámetros. Los mensajes y las llamadas de servicio no pasan por el maestro; en cambio, el maestro establece comunicación punto a punto entre todos los procesos de nodo después de que se registran con el maestro. Esta arquitectura descentralizada es adecuada para robots, que a menudo constan de un subconjunto de hardware informático en red y pueden comunicarse con computadoras externas para cálculos intensivos o comandos.
Un nodo representa un proceso que se ejecuta en el gráfico de ROS. Cada nodo tiene un nombre, que registra con el maestro ROS antes de que pueda realizar cualquier otra acción. Los nodos están en el centro de la programación de ROS, ya que la mayoría del código cliente de ROS tiene forma de nodo ROS que toma acciones basadas en la información recibida de otros nodos, envía información a otros nodos o envía y recibe solicitudes de acciones a y desde otros nodos.
ros2 run: Es un comando que lanza un ejecutable desde un paquete. Por ejemplo, para ejecutar turtlesim, usarías ros2 run turtlesim turtlesim_node
ros2 run [nombre_del_paquete] [nombre_del_ejecutable]
ros2 node list: Este comando muestra los nombres de todos los nodos en ejecución. Es útil para interactuar con un nodo o para hacer un seguimiento de muchos nodos en un sistema.
ros2 node info: Una vez que conoces los nombres de tus nodos, puedes obtener más información sobre ellos con este comando. Te muestra suscriptores, publicadores, servicios y acciones relacionados con ese nodo.
Remapeo: Te permite reasignar propiedades predeterminadas de un nodo, como nombres de tópicos o servicios, a valores personalizados. Por ejemplo, puedes cambiar el nombre del nodo /turtlesim a /my_turtle usando remapeo. ros2 node info: Una vez que conoces los nombres de tus nodos, puedes obtener más información sobre ellos con este comando. Te muestra suscriptores, publicadores, servicios y acciones relacionados con ese nodo.
Topics en ROS2
Los tópics son un elemento esencial del gráfico de ROS que actúa como un bus para que los nodos intercambien mensajes. Un nodo puede publicar datos en cualquier número de tópicos y, al mismo tiempo, tener suscripciones a cualquier número de tópicos. Los tópicos son una de las principales formas en que los datos se mueven entre nodos y, por lo tanto, entre diferentes partes del sistema.
rqt_graph: Una herramienta gráfica que visualiza nodos, tópicos y sus conexiones.

ros2 topic list: Muestra una lista de todos los tópicos activos en el sistema.
ros2 topic echo: Permite ver los datos que se publican en un tópico.
ros2 topic info: Proporciona información sobre un tópico específico, como el tipo de mensaje y el número de publicadores y suscriptores.
ros2 interface show: Muestra la estructura de un tipo de mensaje específico.El intercambio de la informacion la hacen a través de diferentes mensajes, así vemos la estructura e estos mensajes.
ros2 topic pub: Publica datos en un tópico directamente desde la línea de comandos.
ros2 topic hz: Muestra la tasa a la que se publican los datos en un tópico.
Los nodos publican información a través de tópicos, lo que permite que cualquier número de otros nodos se suscriba y acceda a esa información

El intercambio de la informacion la hacen a través de mensajes o interfaces:
ros2 interface show geometry_msgs/msg/Twist
Servicios en ROS 2
Los servicios son otro método de comunicación para nodos en el gráfico de ROS. A diferencia de los tópicos, que funcionan bajo un modelo de publicador-suscriptor, los servicios operan bajo un modelo de petición-respuesta. Mientras que los tópicos permiten a los nodos suscribirse a flujos de datos y recibir actualizaciones continuas, los servicios solo proporcionan datos cuando un cliente los llama específicamente.

Comandos
ros2 service list: Muestra una lista de todos los servicios activos en el sistema.
ros2 service type: Descubre el tipo de un servicio.
ros2 service find: Encuentra todos los servicios de un tipo específico.
ros2 interface show: Muestra la estructura de un tipo de mensaje específico.
ros2 service call: Llama a un servicio desde la línea de comandos.
Los nodos pueden comunicarse usando servicios en ROS 2. A diferencia de un tópico, que es una comunicación unidireccional donde un nodo publica información que puede ser consumida por uno o más suscriptores, un servicio es un patrón de petición/respuesta donde un cliente hace una solicitud a un nodo que proporciona el servicio y este procesa la solicitud y genera una respuesta.
Entendiendo los parametros en ROS 2
Un parámetro es un valor de configuración de un nodo. Puedes pensar en los parámetros como configuraciones o ajustes de un nodo. Un nodo puede almacenar parámetros como enteros, flotantes, booleanos, cadenas y listas. En ROS 2, cada nodo mantiene sus propios parámetros.
ros2 param list: Muestra una lista de todos los parámetros activos en el sistema.
ros2 param get: Muestra el tipo y valor actual de un parámetro.
ros2 param set: Cambia el valor de un parámetro en tiempo de ejecución.
ros2 param dump: Visualiza todos los valores actuales de los parámetros de un nodo y permite guardarlos en un archivo.
ros2 param load: Carga parámetros de un archivo a un nodo en ejecución.
Los nodos tienen parámetros que definen sus valores de configuración predeterminados. Puedes obtener y establecer valores de parámetros desde la línea de comandos. También puedes guardar la configuración de parámetros en un archivo y recargarlos en una sesión futura.
La robótica moderna exige herramientas y plataformas que permitan una integración y comunicación eficientes entre diferentes componentes y sistemas. ROS 2, con su estructura basada en nodos, tópicos y servicios, proporciona precisamente eso: un marco robusto y flexible para el desarrollo de aplicaciones robóticas avanzadas. Al entender y dominar estos conceptos fundamentales, estamos dando un paso crucial hacia la creación de robots más inteligentes, adaptativos y colaborativos. Esperamos que este tutorial te haya proporcionado una visión clara de los nodos en ROS 2 y te invitamos a seguir explorando y experimentando en este emocionante mundo de la robótica. ¡Hasta la próxima entrada!