Introduction to Ros (Robot Operating System) for Beginners
Table of Contents
La robótica ha evolucionado en un campo dinámico y accesible, y el Robot Operating System (ROS) destaca como un conjunto de herramientas esencial para desarrolladores y entusiastas por igual. ROS proporciona un marco flexible y distribuido para la escritura de software robot, lo que le permite construir comportamientos complejos, integrar diversos componentes de hardware y reutilizar código en proyectos. Ya sea que sea estudiante, hobbyista o ingeniero profesional, entender ROS desbloquea la capacidad para crear sistemas avanzados
¿Qué es ROS?
ROS es un sistema de código abierto y de operación diseñado específicamente para el desarrollo de software robot. No es un sistema operativo en tiempo real como FreeRTOS o una plataforma de todo tipo como Android; en lugar, se encuentra entre el sistema operativo y su código de aplicación, proporcionando servicios que usted esperaría de un sistema operativo, como abstracción de hardware, control de dispositivos de bajo nivel, comunicación entre procesos, y gestión de paquetes.
Las características clave de ROS incluyen:
- Comunicación entre pares – Los nodos (procesos individuales) se comunican utilizando un modelo de publicación/subscribe y solicitud/responso, permitiendo arquitecturas descentralizadas y escalables.
- Ecosistema basado en instrumentos – Una rica colección de herramientas de línea de comandos, como , , y , para introspección, depuración y visualización.
- Independencia de los idiomas – ROS admite múltiples lenguajes de programación, principalmente C++ y Python, pero también Java, Lisp y otros, a través de definiciones de mensajes agnósticos de lenguaje.
- Ligero y modular – Todo el sistema se construye alrededor de pequeños ejecutables enfocados que pueden ser desarrollados, probados y reutilizados individualmente a través de diferentes robots.
- Organización basada en el paquete – El código se organiza en paquetes que agrupan nodos, bibliotecas, archivos de configuración y documentación, haciendo que el intercambio y la colaboración sea directo.
Existen dos versiones principales: ROS 1 (la versión clásica, con distribuciones como Noetic Ninjemys) y ROS 2 (una versión rediseñado que aborda las limitaciones en tiempo real, seguridad y soporte multiplataforma). Para principiantes, comenzando por ROS 1 sigue siendo común debido a los recursos abundantes, pero ROS 2 es el futuro y vale la pena aprender una vez que los fundamentos son claros.
Conceptos básicos de ROS
Para escribir programas ROS eficazmente, debe internalizar algunas abstracciones fundamentales.Estos conceptos forman la columna vertebral de la comunicación y definen cómo los robots perciben y actúan.
Nodos
A nodos es un proceso que realiza la computación. En un sistema robot típico, usted puede tener un nodo manipulando el procesamiento de imágenes de cámara, otro control del brazo robot, y un tercer editor de datos de odometría. Los ganglios son independientes y se comunican entre sí a través de temas, servicios o acciones. Cada nodo se compila y se ejecuta por separado, de modo que el sistema puede ser distribuido en múltiples máquinas y procesadores.
Temas
Temas son llamados autobuses sobre los cuales nodos intercambian mensajes. El patrón de editor/subscriptor se utiliza: un nodo que quiere enviar datos (por ejemplo, lecturas de escáner láser) publica a un tema como , mientras que los nodos que necesitan que los datos se suscriban al mismo tema. Los temas son asincrónicos y muchos a muchos, lo que significa que múltiples editores y suscriptores pueden coexistir.
Mensajes
Los mensajes son las estructuras de datos enviadas a través de temas. ROS define los tipos de mensajes estándar para datos comunes (por ejemplo, , ], ) pero también puede crear tipos de mensajes personalizados para su aplicación. Un mensaje contiene campos tipodos, como enteros, flotadores, arrays y mensajes anidados.
Servicios
Mientras que los temas proporcionan una transmisión de una sola vía, los servicios permiten interacciones sincrónicas de respuesta. Un servicio se define por un par de estructuras de mensajes: una para la solicitud y otra para la respuesta. Por ejemplo, un nodo puede ofrecer un servicio que, cuando se llama, devuelve la carga actual. Los servicios son útiles para tareas que requieren retroalimentación inmediata, como establecer un parámetro o desencadenar una configuración de acción de un solo disparo.
Servidor de Maestros y Parámetros
El ROS Master es un registro central que permite a los nodos encontrar y conectarse entre sí. Mantiene información sobre temas disponibles, servicios y parámetros. Sin el Maestro, los nodos no se descubrirían entre sí. Parameter Server es parte de los valores de configuración del Master y almacena (como dimensiones robot o ganancias PID) que pueden ser accedidos por cualquier nodo en tiempo de ejecución. Los parámetros son globales y pueden ser actualizados dinámicamente, haciéndolos una manera flexible de sintonizar el comportamiento del robot sin recompilar código.
Bolsas
Una bolsa es un formato de archivo utilizado para grabar y reproducir datos de mensajes ROS. Durante el desarrollo, puede registrar datos de sensores de un verdadero robot en un archivo y luego reproducirlos como si el robot estuviera funcionando de nuevo. Esto es invaluable para depurar, afinar algoritmos y pruebas offline sin necesidad de un robot físico. Rosbag también admite filtración y conversión, lo que lo convierte en una herramienta clave para la robótica digital.
Acciones
Las acciones extienden el modelo de servicio para tareas más largas que necesitan retroalimentación periódica. Por ejemplo, mover un brazo robot a una posición de destino puede tomar varios segundos y desea actualizaciones intermedias del estado. Las acciones utilizan un protocolo de meta, retroalimentación y resultado, lo que le permite cancelar o monitorear el progreso. La biblioteca proporciona la implementación y es ampliamente utilizada en las pilas de navegación y manipulación.
ROS 1 vs. ROS 2: ¿Qué elegir?
ROS 1 (la versión clásica) ha sido la columna vertebral de la investigación robótica durante más de una década. Su última distribución oficial es Noetic Ninjemys, que será soportada hasta 2025. ROS 2 fue introducida para abordar las limitaciones en el rendimiento en tiempo real, seguridad y soporte multiplataforma. Construido en DDS (Data Distribution Service), ROS 2 ofrece mejor apoyo para sistemas multi-robot, dispositivos integrados y entornos de producción.
Comienzo con ROS
El primer paso práctico es instalar ROS en su computadora. Mientras ROS admite macOS, Windows y varias distribuciones de Linux, la plataforma recomendada para principiantes es Ubuntu Linux (20.04 para ROS Noetic, la última distribución ROS 1). El proceso de instalación normalmente implica configurar sus fuentes, añadir la clave del repositorio ROS y ejecutar un comando como:
Esto instala la suite completa de escritorio, incluyendo bibliotecas centrales, herramientas y software de visualización como RViz y Gazebo. Después de la instalación, debe generar el script de entorno ROS (addálo a ) para utilizar las herramientas de línea de comandos:
Para ROS 2, elija una distribución como Humble Hawksbill (Ubuntu 22.04) y siga la guía oficial de instalación.
Creación de un espacio de trabajo
ROS organiza código en un espacio de trabajo de catkin (para ROS 1) o espacio de trabajo de colcon (para ROS 2). Un espacio de trabajo es un directorio donde construyes y ejecutas tus paquetes. Para crear uno para ROS 1:
- Crear una carpeta:
- Navegue a la raíz del espacio de trabajo y corra
- Fuente del archivo de configuración:
Para ROS 2, utilice en su lugar. Los espacios de trabajo le permiten organizar múltiples paquetes y gestionar dependencias fácilmente.
Comandos básicos ROS
Una vez instalado ROS, puede interactuar con el sistema utilizando estos comandos esenciales:
- roscore – Comienza el Maestro ROS, servidor de parámetro, y un nodo de registro. Debe estar corriendo antes de cualquier otro nodo ROS.
- rosrun <package limit; <node – Ejecuta un solo nodo de un paquete dado. Por ejemplo, lanza un simulador de tortuga simple que es genial para aprender.
- roslaunch <package limit; <launchfile – lanza múltiples nodos y sus configuraciones definidas en un archivo de lanzamiento. Lanza archivos simplificar configuraciones complejas.
- lista de los – Lista todos los temas activos.
- eco rostópico <topic – Imprimía mensajes que se publican sobre un tema.
- pub rostópico <topic limit; <msg type trogt; <data trogt; – Publica un mensaje a un tema directamente desde la línea de comandos.
- lista de servicios – Lista de servicios disponibles.
- rosservice call <service plagagt; <args – Llama un servicio.
- rosnode info, lista de rosnode – Obtenga información sobre los nodos de funcionamiento.
Estos comandos le dan una manera poderosa de inspeccionar, diagnosticar y controlar su sistema robot sin escribir ningún código. Pasar el tiempo jugando con el paquete para ponerse cómodo con las herramientas de línea de comandos.
Construcción de una aplicación de robot simple
Para solidificar su comprensión, creará un par mínimo de editor/subscriptor. Este ejemplo consta de dos nodos: uno que publica un mensaje de contra cada segundo (talker) y otro que imprime el mensaje (listener).
Primero, crea un nuevo paquete llamado dentro de su carpeta de trabajo :
Dentro del paquete, escriba un script Python :
Entonces el oyente :
Hacer que ambos scripts sean ejecutables () y luego construir el espacio de trabajo con . Finalmente, encender en un terminal, ejecutar en otro, y en un tercero. Verás los mensajes del hablador impresos por el oyente. Esta comunicación simple demuestra el mecanismo de publicación de núcleos que más complejos.
Herramientas esenciales para el desarrollo de ROS
ROS ofrece varias herramientas gráficas que aceleran dramáticamente el desarrollo y la depuración:
- RViz – Una herramienta de visualización 3D para mostrar datos de sensores, modelos de robots y información de navegación. Puede ver escáneres láser, nubes de puntos, imágenes de cámara y árboles transformadores. Es indispensable para entender lo que su robot percibe.
- rqt – Un marco basado en Qt para el desarrollo de GUI, ofreciendo plugins como (visualiza conexiones node/topic), (plota datos con el tiempo), y (log message viewer).
- ¡Rosbag! – Herramienta de línea de comandos para grabar y reproducir archivos de bolsa de atrás. Use para capturar todos los temas, luego para reproducirlos. Esta es una piedra angular de la investigación robótica reproducible.
- tf2 – La biblioteca de transformación que mantiene el seguimiento de los marcos de coordenadas con el tiempo. Puede utilizar para inspeccionar transformaciones y para comprobar las tasas de publicación.
Dominar estas herramientas pronto le ahorrará horas de depuración y le permitirá enfocarse en la funcionalidad de construcción.
Aprendizaje y recursos comunitarios
ROS tiene una de las comunidades más activas y solidarias de la robótica. Para acelerar su aprendizaje, aproveche estos excelentes recursos:
- Tutoriales oficiales ROS – El ROS Wiki proporciona tutoriales paso a paso para principiantes, cubriendo todo desde la creación del espacio de trabajo hasta las pilas de navegación avanzadas.
- ROS Respuestas – Un foro Q CENTEA donde se pueden hacer preguntas técnicas específicas y buscar soluciones. responses.ros.org.
- ROS Discourse – El consejo oficial de discusión para anuncios, presentaciones de proyectos y conversaciones más largas. discourse.ros.org.
- Cursos en línea – Plataformas como Udemy, Coursera y EdX ofrecen cursos estructurados ROS. La serie "ROS para principiantes" de Anis Koubaa es particularmente popular.
- Libros – Robots programadores con ROS por Morgan Quigley y Brian Gerkey proporciona una introducción completa, mientras Robot Operating System (ROS) para principiantes absolutos por Lentin Joseph es excelente para novicios.
- YouTube Channels – Buscar "Rod tutorial" – canales como The Construct, Robotis y el laboratorio robótico de IIT Kharagpur ofrecen videopasos y demostraciones de proyectos.
- Instalación de ROS en Ubuntu – El funcionario Guía de instalación ROS es la referencia canónica.
No dude en experimentar con herramientas de simulación como Gazebo antes de moverse a un robot físico. La comunidad ROS tiene paquetes para casi cualquier sensor, actuador o algoritmo, por lo que a menudo puede evitar reinventar la rueda.
Temas avanzados para la exploración futura
Una vez que estés cómodo con lo básico, puedes aventurarte en áreas más avanzadas:
- ROS 2 – La próxima generación de ROS, construida sobre DDS para el rendimiento en tiempo real, seguridad y soporte multiplataforma. Muchos nuevos robots y proyectos están adoptando ROS 2.
- Navegación de la basura – Una colección de paquetes para la navegación autónoma de robots, incluyendo SLAM (simultaneous localization and mapping), la planificación global de caminos y la evitación de obstáculos.
- Moverlo – Un poderoso marco para la planificación y manipulación de movimiento, especialmente para los brazos robóticos.
- URDF – Unified Robot Descripción Formato, una especificación XML para describir los cinemáticos de un robot, apariencia visual y modelos de colisión.
- Integración Gazebo – Simular tus nodos ROS en un entorno físico realista antes de desplegarte en un robot real.
- Árboles de comportamiento – Una manera modular de definir comportamientos complejos de robot, cada vez más utilizado en ROS 2 para la planificación de tareas.
Buenas prácticas para el desarrollo de ROS
Al comenzar a construir proyectos reales, tenga en cuenta estas mejores prácticas:
- Usar archivos de lanzamiento – En lugar de ejecutar múltiples terminales, definir su configuración de nodos en un archivo . Esto hace que su sistema sea reproducible y más fácil de depurar.
- Gestionar espacios de nombres – Al ejecutar múltiples robots o componentes, utilice espacios de nombres para evitar colisiones de nombres de temas. Esto mantiene su sistema modular.
- Lograr significativamente – Use , , y con niveles de verbosidad apropiados. Evite imprimir datos brutos para consolar; use para filtrar.
- Control de versiones – Utilice siempre Git para sus paquetes. Incluya un y un con dependencias adecuadas.
- Prueba con simulaciones – Antes de correr en hardware, simula con Gazebo o escenario. Esto reduce el riesgo y acelera el desarrollo.
- Respetar los límites de recursos – Establecer tarifas y tamaños de cola adecuados. Evite los temas de inundación con datos de alta frecuencia a menos que sea necesario.
Conclusión
ROS no es sólo una herramienta; es un ecosistema que sigue evolucionando. Al dominar sus conceptos fundamentales, abre la puerta para crear todo desde simples bots telepresence a sistemas autónomos avanzados. Comience pequeño, practique con tortugasim, construya su primer par de subscriptores editor, e incorpore gradualmente paquetes más complejos. El viaje a la robótica con ROS es desafiante pero inmensamente recompensa. Mantenga la curiosidad, construir pequeños proyectos con la comunidad global,