Robot Operating System ( 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 funcionalidad de uso común, paso de mensajes entre procesos y administración de paquetes . Los conjuntos de procesos en ejecución basados en ROS se representan en una arquitectura gráfica donde el procesamiento tiene lugar en nodos que pueden recibir, publicar y multiplexar datos de sensores, control, estado, planificación, actuador y otros mensajes. A pesar de la importancia de la reactividad y la baja latencia en el control de robots, ROS no es un sistema operativo en tiempo real (RTOS). Sin embargo, es posible integrar ROS con código de computación en tiempo real . [3] La falta de soporte para sistemas en tiempo real se ha abordado en la creación de ROS 2, [4] [5] [6] una revisión importante de la API de ROS que aprovechará las bibliotecas y tecnologías modernas para las funciones centrales de ROS y agregará soporte para código en tiempo real y hardware de sistema integrado .
El software en el ecosistema ROS [7] se puede separar en tres grupos:
Tanto las herramientas independientes del lenguaje como las principales bibliotecas de cliente ( C++ , Python y Lisp ) se publican bajo los términos de la licencia BSD y, como tales, son software de código abierto y gratuitos tanto para uso comercial como de investigación. La mayoría de los demás paquetes tienen licencia de varias licencias de código abierto . Estos otros paquetes implementan funciones y aplicaciones de uso común, como controladores de hardware, modelos de robots, tipos de datos, planificación, percepción , localización y mapeo simultáneos (SLAM), herramientas de simulación y otros algoritmos .
Las principales bibliotecas de cliente ROS están orientadas a un sistema tipo Unix , principalmente debido a su dependencia de grandes conjuntos de dependencias de software de código abierto. Para estas bibliotecas de cliente, Ubuntu Linux aparece como "compatible", mientras que otras variantes como Fedora Linux , macOS y Microsoft Windows se designan como "experimentales" y cuentan con el apoyo de la comunidad. [12] Sin embargo, la biblioteca de cliente ROS nativa de Java, rosjava, [13] no comparte estas limitaciones y ha permitido escribir software basado en ROS para el sistema operativo Android . [14] rosjava también ha permitido integrar ROS en una caja de herramientas MATLAB oficialmente compatible que se puede utilizar en Linux , macOS y Microsoft Windows. [15] También se ha desarrollado una biblioteca de cliente JavaScript , roslibjs [16], que permite la integración de software en un sistema ROS a través de cualquier navegador web compatible con estándares.
En algún momento antes de 2007, las primeras piezas de lo que eventualmente se convertiría en ROS comenzaron a fusionarse en la Universidad de Stanford . [17] [18] Eric Berger y Keenan Wyrobek, estudiantes de doctorado que trabajaban en el laboratorio de robótica de Kenneth Salisbury [19] en Stanford, dirigían el Programa de Robótica Personal. [20] Mientras trabajaban en robots para realizar tareas de manipulación en entornos humanos, los dos estudiantes notaron que muchos de sus colegas se veían frenados por la naturaleza diversa de la robótica: un excelente desarrollador de software podría no tener el conocimiento de hardware requerido, alguien que desarrollara planificación de rutas de última generación podría no saber cómo hacer la visión por computadora requerida. En un intento por remediar esta situación, los dos estudiantes se propusieron crear un sistema de referencia que proporcionara un punto de partida para que otros en el ámbito académico pudieran construir sobre él. En palabras de Eric Berger, "algo que no apestara, en todas esas diferentes dimensiones". [17]
En sus primeros pasos hacia este sistema unificador, los dos construyeron el PR1 como un prototipo de hardware y comenzaron a trabajar en el software a partir de él, tomando prestadas las mejores prácticas de otros marcos de software robótico de código abierto tempranos, particularmente Switchyard, un sistema en el que Morgan Quigley, otro estudiante de doctorado de Stanford, había estado trabajando en apoyo del STanford Artificial Intelligence Robot (STAIR) [21] [22] [23] [24] por el Laboratorio de Inteligencia Artificial de Stanford . Joanna Hoffman y Alain Rossmann proporcionaron una financiación inicial de 50.000 dólares estadounidenses , que apoyaron el desarrollo del PR1. Mientras buscaban financiación para un mayor desarrollo, [25] Eric Berger y Keenan Wyrobek conocieron a Scott Hassan, el fundador de Willow Garage , una incubadora de tecnología que estaba trabajando en un todoterreno autónomo y un barco autónomo solar. Hassan compartía la visión de Berger y Wyrobek de un "Linux para la robótica", y los invitó a venir a trabajar en Willow Garage. Willow Garage se inició en enero de 2007 y la primera confirmación del código ROS se realizó en SourceForge el 7 de noviembre de 2007. [26]
Willow Garage comenzó a desarrollar el robot PR2 como una continuación del PR1, y ROS como el software para ejecutarlo. Grupos de más de veinte instituciones hicieron contribuciones a ROS, tanto al software principal como al creciente número de paquetes que funcionaban con ROS para formar un ecosistema de software más grande. [27] [28] El hecho de que personas ajenas a Willow contribuyeran a ROS (especialmente del proyecto STAIR de Stanford) significó que ROS era una plataforma multi-robot desde el principio. Si bien Willow Garage originalmente tenía otros proyectos en progreso, estos fueron descartados a favor del Programa de Robótica Personal: enfocado en producir el PR2 como una plataforma de investigación para la academia y ROS como la pila de robótica de código abierto que sustentaría tanto la investigación académica como las nuevas empresas tecnológicas, de manera muy similar a la pila LAMP para las nuevas empresas basadas en la web.
En diciembre de 2008, Willow Garage alcanzó el primero de sus tres hitos internos: navegación continua para el PR2 durante un período de dos días y una distancia de pi kilómetros. [29] Poco después, se lanzó una versión temprana de ROS (0.4 Mango Tango) [30] , seguida por la primera documentación de RVIZ y el primer artículo sobre ROS. [28] A principios del verano, se alcanzó el segundo hito interno: tener al PR2 navegando por la oficina, abriendo puertas y conectándose solo. [31] Esto fue seguido en agosto por el inicio del sitio web ROS.org. [32] Los primeros tutoriales sobre ROS se publicaron en diciembre, [33] preparándose para el lanzamiento de ROS 1.0, en enero de 2010. [34] Este fue el Hito 3: producir toneladas de documentación y tutoriales para las enormes habilidades que los ingenieros de Willow Garage habían desarrollado durante los 3 años anteriores.
Después de esto, Willow Garage logró uno de sus objetivos más antiguos: regalar 10 robots PR2 a instituciones académicas dignas. Este había sido un objetivo durante mucho tiempo de los fundadores, ya que sentían que el PR2 podría impulsar la investigación robótica en todo el mundo. Terminaron otorgando once PR2 a diferentes instituciones, incluidas la Universidad de Friburgo (Alemania), Robert Bosch GmbH , el Instituto de Tecnología de Georgia , KU Leuven (Bélgica), el Instituto Tecnológico de Massachusetts (MIT), la Universidad de Stanford , la Universidad Técnica de Múnich (Alemania), la Universidad de California, Berkeley , la Universidad de Pensilvania , la Universidad del Sur de California (USC) y la Universidad de Tokio (Japón). [35] Esto, combinado con el exitoso programa de pasantías de Willow Garage [36] (gestionado de 2008 a 2010 por Melonee Wise), ayudó a difundir la palabra sobre ROS en todo el mundo de la robótica. El primer lanzamiento oficial de ROS, ROS Box Turtle, se lanzó el 2 de marzo de 2010, lo que marcó la primera vez que ROS se distribuyó oficialmente con un conjunto de paquetes versionados para uso público. Estos desarrollos llevaron al primer dron que ejecutaba ROS, [37] al primer automóvil autónomo que ejecutaba ROS, [38] y a la adaptación de ROS para Lego Mindstorms . [39] Con el programa PR2 Beta en marcha, el robot PR2 se lanzó oficialmente para su compra comercial el 9 de septiembre de 2010. [40]
2011 fue un año destacado para ROS con el lanzamiento de ROS Answers, un foro de preguntas y respuestas para usuarios de ROS, el 15 de febrero; [41] la introducción del exitoso kit de robot TurtleBot el 18 de abril; [42] y el número total de repositorios de ROS superando los 100 el 5 de mayo. [43] Willow Garage comenzó 2012 creando la Open Source Robotics Foundation (OSRF) [44] en abril. La OSRF recibió inmediatamente un contrato de software de la Defense Advanced Research Projects Agency (DARPA). [45] Más tarde ese año, se celebró la primera ROSCon en St. Paul, Minnesota, [46] se publicó el primer libro sobre ROS, ROS By Example , [47] y Baxter , el primer robot comercial en ejecutar ROS, fue anunciado por Rethink Robotics . [48] Poco después de pasar su quinto aniversario en noviembre, ROS comenzó a funcionar en todos los continentes el 3 de diciembre de 2012. [49]
En febrero de 2013, la OSRF se convirtió en el principal mantenedor del software de ROS, [50] anticipando el anuncio en agosto de que Willow Garage sería absorbida por sus fundadores, Suitable Technologies. [51] En ese momento, ROS había lanzado siete versiones principales (hasta ROS Groovy), [52] y tenía usuarios en todo el mundo. Este capítulo del desarrollo de ROS finalizaría cuando Clearpath Robotics asumió las responsabilidades de soporte para el PR2 a principios de 2014. [53]
En los años transcurridos desde que OSRF se hizo cargo del desarrollo primario de ROS, se ha lanzado una nueva versión cada año, [52] mientras que el interés en ROS sigue creciendo. ROSCons se ha celebrado cada año desde 2012, en el mismo lugar que ICRA o IROS , dos conferencias emblemáticas sobre robótica. Se han organizado reuniones de desarrolladores de ROS en una variedad de países, [54] [55] [56] se han publicado varios libros sobre ROS, [57] y se han iniciado muchos programas educativos. [58] [59] El 1 de septiembre de 2014, la NASA anunció el primer robot que ejecuta ROS en el espacio: Robotnaut 2 , en la Estación Espacial Internacional . [60] En 2017, la OSRF cambió su nombre a Open Robotics . Los gigantes tecnológicos Amazon y Microsoft comenzaron a interesarse en ROS durante este tiempo, y Microsoft trasladó el núcleo de ROS a Windows en septiembre de 2018, [61] seguido por Amazon Web Services lanzando RoboMaker en noviembre de 2018. [62]
Tal vez el desarrollo más importante de los años de OSRF/Open Robotics hasta ahora (sin descontar la explosión de plataformas de robots que comenzaron a soportar ROS o las enormes mejoras en cada versión de ROS) fue la propuesta de ROS 2, un cambio significativo de API para ROS que pretende soportar programación en tiempo real , una variedad más amplia de entornos informáticos y tecnología más moderna. [63] ROS 2 se anunció en ROSCon 2014, [64] las primeras confirmaciones en el repositorio ros2 se realizaron en febrero de 2015, seguidas de lanzamientos alfa en agosto de 2015. [65] La primera versión de distribución de ROS 2, Ardent Apalone, se lanzó el 8 de diciembre de 2017, [65] marcando el comienzo de una nueva era de desarrollo de ROS de próxima generación.
ROS fue diseñado para ser de código abierto, con la intención de que los usuarios pudieran elegir la configuración de las herramientas y bibliotecas que interactuaban con el núcleo de ROS, de modo que los usuarios pudieran cambiar sus pilas de software para que se adaptaran a su robot y área de aplicación. Como tal, hay muy poco que sea fundamental para ROS, más allá de la estructura general dentro de la cual los programas deben existir y comunicarse. En cierto sentido, ROS es la tubería subyacente detrás de los nodos y el paso de mensajes. Sin embargo, en realidad, ROS no es solo esa tubería, sino un conjunto rico y maduro de herramientas, un amplio conjunto de capacidades independientes de los robots proporcionadas por paquetes y un ecosistema más grande de adiciones a ROS.
Los procesos ROS se representan como nodos en una estructura gráfica, conectados por aristas llamadas temas. [66] Los nodos ROS pueden pasarse 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 común llamada servidor de parámetros. Un proceso llamado ROS Master [66] hace posible todo esto al registrar nodos en sí mismo, establecer la comunicación de nodo a nodo para temas y controlar las actualizaciones del servidor de parámetros. Los mensajes y las llamadas de servicio no pasan a través del maestro, sino que el maestro establece una comunicación de igual a igual entre todos los procesos de nodo después de que se registren con el maestro. Esta arquitectura descentralizada se presta bien a los robots, que a menudo consisten en un subconjunto de hardware de computadora en red, y pueden comunicarse con computadoras externas para realizar cálculos o comandos pesados.
Un nodo representa un proceso que ejecuta el gráfico ROS. Cada nodo tiene un nombre, que registra con el maestro ROS antes de poder realizar cualquier otra acción. Pueden existir múltiples nodos con diferentes nombres bajo diferentes espacios de nombres , o un nodo puede definirse como anónimo, en cuyo caso generará aleatoriamente un identificador adicional para agregar a su nombre dado. Los nodos son el centro de la programación ROS, ya que la mayoría del código de cliente ROS tiene la forma de un nodo ROS que realiza acciones en función de la información recibida de otros nodos, envía información a otros nodos o envía y recibe solicitudes de acciones hacia y desde otros nodos.
Los temas son buses con nombre a través de los cuales los nodos envían y reciben mensajes. [67] Los nombres de los temas también deben ser únicos dentro de su espacio de nombres. Para enviar mensajes a un tema, un nodo debe publicar en dicho tema, mientras que para recibir mensajes debe suscribirse. El modelo de publicación/suscripción es anónimo: ningún nodo sabe qué nodos están enviando o recibiendo en un tema, solo que está enviando/recibiendo en ese tema. Los tipos de mensajes que se pasan en un tema varían ampliamente y pueden ser definidos por el usuario. El contenido de estos mensajes puede ser datos de sensores, comandos de control de motores, información de estado, comandos de actuadores o cualquier otra cosa.
Un nodo también puede anunciar servicios. [68] Un servicio representa una acción que un nodo puede realizar y que tendrá un único resultado. Como tal, los servicios se utilizan a menudo para acciones que tienen un inicio y un final definidos, como capturar una imagen de un fotograma, en lugar de procesar comandos de velocidad para un motor de rueda o datos del odómetro de un codificador de rueda. Los nodos anuncian servicios y llaman a servicios de otros.
El servidor de parámetros [68] es una base de datos compartida entre nodos que permite el acceso común a información estática o semiestática. Los datos que no cambian con frecuencia y, por lo tanto, se accede a ellos con poca frecuencia, como la distancia entre dos puntos fijos del entorno o el peso del robot, son buenos candidatos para el almacenamiento en el servidor de parámetros.
La funcionalidad principal de ROS se ve aumentada por una variedad de herramientas que permiten a los desarrolladores visualizar y registrar datos, navegar fácilmente por las estructuras de paquetes de ROS y crear scripts que automatizan procesos complejos de configuración e instalación. La incorporación de estas herramientas aumenta en gran medida las capacidades de los sistemas que utilizan ROS al simplificar y brindar soluciones a una serie de problemas comunes de desarrollo de robótica. Estas herramientas se proporcionan en paquetes como cualquier otro algoritmo, pero en lugar de proporcionar implementaciones de controladores de hardware o algoritmos para varias tareas robóticas, estos paquetes proporcionan herramientas independientes de tareas y robots que vienen con el núcleo de la mayoría de las instalaciones modernas de ROS.
rviz [69] (Robot Visualization tool) es un visualizador tridimensional que se utiliza para visualizar robots, los entornos en los que trabajan y los datos de los sensores. Es una herramienta altamente configurable, con muchos tipos diferentes de visualizaciones y complementos. Unified Robot Description Format ( URDF ) es un formato de archivo XML para la descripción de modelos de robots.
rosbag [70] es una herramienta de línea de comandos que se utiliza para grabar y reproducir datos de mensajes de ROS. rosbag utiliza un formato de archivo llamado bolsas [71] , que registra los mensajes de ROS escuchando temas y grabando los mensajes a medida que llegan. Reproducir mensajes desde una bolsa es en gran medida lo mismo que tener los nodos originales que produjeron los datos en el gráfico de cálculo de ROS, lo que hace que las bolsas sean una herramienta útil para registrar datos que se utilizarán en el desarrollo posterior. Si bien rosbag es una herramienta solo de línea de comandos, rqt_bag [72] proporciona una interfaz gráfica de usuario para rosbag.
catkin [73] es el sistema de construcción de ROS, que reemplazó a rosbuild [74] a partir de ROS Groovy. catkin se basa en CMake y es igualmente multiplataforma, de código abierto e independiente del lenguaje.
El paquete rosbash [75] proporciona un conjunto de herramientas que aumentan la funcionalidad del shell bash . Estas herramientas incluyen rosls, roscd y roscp, que replican las funcionalidades de ls , cd y cp respectivamente. Las versiones ROS de estas herramientas permiten a los usuarios utilizar nombres de paquetes ros en lugar de la ruta del archivo donde se encuentra el paquete. El paquete también agrega la función de completar tabulaciones a la mayoría de las utilidades ROS e incluye rosed, que edita un archivo determinado con el editor de texto predeterminado elegido, así como rosrun, que ejecuta ejecutables en paquetes ROS. rosbash admite las mismas funcionalidades para zsh y tcsh , en menor medida.
roslaunch [76] es una herramienta utilizada para lanzar múltiples nodos ROS tanto local como remotamente, así como para configurar parámetros en el servidor de parámetros ROS. Los archivos de configuración de roslaunch, que se escriben usando XML , pueden automatizar fácilmente un proceso complejo de inicio y configuración en un solo comando. Los scripts de roslaunch pueden incluir otros scripts de roslaunch, lanzar nodos en máquinas específicas e incluso reiniciar procesos que mueren durante la ejecución.
ROS contiene muchas implementaciones de código abierto de algoritmos y funciones robóticas comunes. Estas implementaciones de código abierto están organizadas en paquetes. Muchos paquetes se incluyen como parte de las distribuciones de ROS, mientras que otros pueden ser desarrollados por personas y distribuidos a través de sitios de intercambio de código como GitHub. Algunos paquetes destacados incluyen:
Las versiones de ROS pueden ser incompatibles con otras versiones y, a menudo, se hace referencia a ellas por su nombre en código en lugar de por el número de versión. Actualmente, ROS lanza una versión cada año en mayo, tras el lanzamiento de las versiones LTS de Ubuntu. [92] Actualmente, ROS 2 lanza una nueva versión cada seis meses (en diciembre y julio). Estas versiones tienen soporte durante un solo año. Actualmente hay dos versiones principales activas que se están lanzando: ROS 1 y ROS 2. Además de esto, existe el proyecto ROS-Industrial o derivado de ROS-I desde al menos 2012.
ROS-Industrial [108] es un proyecto de código abierto (licencia BSD (legacy)/Apache 2.0 (preferred)) que extiende las capacidades avanzadas de ROS a la automatización de la fabricación y la robótica. En el entorno industrial, existen dos enfoques diferentes para programar un robot: ya sea a través de un controlador propietario externo, generalmente implementado utilizando ROS, o a través del lenguaje de programación nativo respectivo del robot. Por lo tanto, ROS puede verse como el enfoque basado en software para programar robots industriales en lugar del enfoque clásico basado en el controlador del robot.
El repositorio ROS-Industrial incluye interfaces para manipuladores industriales, pinzas, sensores y redes de dispositivos comunes. También proporciona bibliotecas de software para calibración automática de sensores 2D/3D, planificación de trayectorias de procesos/movimiento, aplicaciones como Scan-N-Plan, herramientas para desarrolladores como el complemento ROS de Qt Creator y un plan de estudios de capacitación específico para las necesidades de los fabricantes. ROS-I cuenta con el apoyo de un consorcio internacional de miembros de la industria y la investigación. El proyecto comenzó como un esfuerzo colaborativo entre Yaskawa Motoman Robotics, Southwest Research Institute y Willow Garage para respaldar el uso de ROS para la automatización de la fabricación, y el repositorio de GitHub fue fundado en enero de 2012 por Shaun Edwards (SwRI). Actualmente, el consorcio está dividido en tres grupos; el Consorcio Industrial ROS de las Américas (dirigido por SwRI y ubicado en San Antonio, Texas), el Consorcio Industrial ROS de Europa (dirigido por Fraunhofer IPA y ubicado en Stuttgart, Alemania) y el Consorcio Industrial ROS de Asia y el Pacífico (dirigido por el Centro de Tecnología y Remanufactura Avanzada (ARTC) y la Universidad Tecnológica de Nanyang (NTU) y ubicado en Singapur).
Los consorcios apoyan a la comunidad industrial global de ROS realizando capacitaciones sobre ROS-I, brindando apoyo técnico y estableciendo la hoja de ruta futura para ROS-I, así como realizando proyectos industriales conjuntos precompetitivos para desarrollar nuevas capacidades de ROS-I. [109]