Sistema Operativo Robótico (en inglés Robot Operating System, ROS) es un framework para el desarrollo de software para robots que provee la funcionalidad de un sistema operativo en un clúster heterogéneo. ROS se desarrolló originalmente en 2007 bajo el nombre de switchyard por el Laboratorio de Inteligencia Artificial de Stanford para dar soporte al proyecto del Robot con inteligencia artificial de Stanford (STAIR). Desde 2008, el desarrollo continúa primordialmente en Willow Garage, un instituto de investigación robótico con más de veinte instituciones colaborando en un modelo de desarrollo federado.

ROS provee los servicios estándar de un sistema operativo tales como abstracción del hardware, control de dispositivos de bajo nivel, implementación de funcionalidad de uso común, paso de mensajes entre procesos y mantenimiento de paquetes. Está basado en una arquitectura de grafos donde el procesamiento toma lugar en los nodos que pueden recibir, mandar y multiplexar mensajes de sensores, control, estados, planificaciones y actuadores, entre otros. La librería está orientada para un sistema UNIX (Ubuntu (Linux)) aunque también se está adaptando a otros sistemas operativos como Fedora, Mac OS X, Arch, Gentoo, OpenSUSE, Slackware, Debian o Microsoft Windows, considerados como 'experimentales'.

ROS tiene dos partes básicas: la parte del sistema operativo, ros, como se ha descrito anteriormente y ros-pkg, una suite de paquetes aportados por la contribución de usuarios (organizados en conjuntos llamados pilas o en inglés stacks) que implementan las funcionalidades tales como localización y mapeo simultáneo, planificación, percepción, simulación, etc.

ROS es software libre bajo términos de licencia BSD. Esta licencia permite libertad para uso comercial e investigador. Las contribuciones de los paquetes en ros-pkg están bajo una gran variedad de licencias diferentes.

Historia

En algún momento a principios de 2007, las primeras piezas de lo que eventualmente se convertiría en ROS comenzaban a nacer en la Universidad de Stanford. Eric Berger y Keenan Wyrobek, estudiantes de doctorado que trabajan en el laboratorio de robótica de Kenneth Sailsbury en Stanford, dirigían el Programa de robótica personal. Mientras trabajaban en robots para realizar tareas de manipulación en entornos humanos, los dos estudiantes notaron que muchos de sus colegas se encontraban alejados por diversas circunstancias de la robótica. En un intento por remediar esta situación, los dos estudiantes se propusieron hacer un sistema base que proporcionaría un punto de partida y estructuras básicas para que otros en la academia lo construyeran.

Diseño

Filosofía

ROS fue diseñado pensando en el Código abierto con la intención de que los usuarios pudieran elegir la configuración de las herramientas y bibliotecas que interactuaran con el núcleo de ROS y para que de esta forma sus usuarios pudieran cambiar sus desarrollos de software para adaptarse a su robot y área de aplicación. Como tal, hay muy poco que sea realmente esencial 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 es mucho más que plomería. ROS es un conjunto rico y maduro de herramientas en un amplio conjunto de capacidades proporcionadas por paquetes y como resultado de lo anterior un ecosistema en constante crecimiento.

Modelo computacional gráfico Los procesos ROS se representan como nodos (ROS NODES) en una estructura gráfica, conectados por bordes llamados ROS topics. Los ROS NODES pueden pasar mensajes entre sí a través de los ROS topics, realizar 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 (paramter server). Un proceso llamado ROS Master hace que todo esto sea posible al registrar nodos para sí mismo, configurar la comunicación de nodo a nodo para los temas y controlar las actualizaciones del servidor de parámetros. Los mensajes y las llamadas de servicio no pasan por el MASTER, sino que el MASTER establece la comunicación entre pares y entre todos los procesos de nodo y después de que estos se registren con el MASTER. Esta arquitectura descentralizada se presta bien a los robots, que a menudo consisten en un subconjunto de hardware informático en red, y pueden comunicarse con computadoras externas para realizar cálculos pesados.

Herramientas La funcionalidad del núcleo ROS se expande con una variedad de herramientas que permiten a los desarrolladores: visualizar y recopilar información, navegar de manera sencilla la estructura de paquetes y crear código para automatizar tareas complejas y otros procesos de configuración. La suma de estas herramientas aumentan las posibilidades de los sistemas que utilizan ROS, proveyendo a estos de soluciones simples a tareas comunes en el desarrollo dentro de la robótica. Estas herramientas son provistas por medio de paquetes como otro algoritmo, pero a diferencia de brindar implementaciones de hardware o algoritmos para tareas del robot, estos paquetes proveen tareas y herramientas separadas que las incluidas por el núcleo de la mayoritaria de las instalaciones modernas de ROS.

rviz rviz es una herramienta de simulación y visualización 3d para robots, el ambiente en el que estos se desempeñan y la información de sensores que estos generan dentro de este. Es altamente configurable y posee distintos tipos de plugins y formatos de visualización. Algunas de las aplicaciones comunes de RViz incluyen la visualización de datos de sensores como cámaras, LIDAR (Light Detection and Ranging), IMU (Inertial Measurement Unit) y otros sensores utilizados en robótica. También se utiliza para mostrar información sobre la posición y orientación de los robots, planificación de trayectorias, mapeo en 2D y 3D, y la visualización de datos de simulaciones robóticas.

rosbag rosbag es una herramienta de línea de comandos para grabar y reproducir datos de mensajes y comunicaciones dentro de ROS. rosbag utiliza un formato de archivo llamado bags, que registra los mensajes de ROS mediante escuchar los ROS topic y grabando los mensajes en la medida que son emitidos. Reproducir los mensajes desde bag es mayormente lo mismo que tener los ROS nodes originales reproduciendo esta. Esto hace de bags una herramienta muy útil para capturar la información que posteriormente se puede usar analizar y posteriormente ser usada para el desarrollo de paquetes ROS por ejemplo. Mientas rosbag es una herramienta puramente de línea de comando, también posee una implementación rqt llamada rqt_bag que brinda una interfaz gráfica.

catkin Catkin es la herramienta de compilación de ROS actual, habiendo reemplazado a rosbuild. Catkin está basada en CMake, es multiplataforma, de código abierto e independiente del lenguaje de programación. Catkin proporciona una estructura de directorios estándar en la que se organizan las dependencias y los archivos fuente del proyecto. Además, proporciona herramientas para compilar, vincular y crear bibliotecas y ejecutables de ROS. También ayuda a administrar las dependencias entre los paquetes de ROS y permite crear paquetes independientes que se pueden usar y compartir entre diferentes proyectos.

rosbash El paquete rosbash package provee un conjunto de herramientas que aumentan la funcionalidad del Bash. Estas herramientas incluyen rosls, roscd y roscp, que replican las funcionalidades de ls, cd, y cp respectivamente. La versión de ROS de estas herramientas de línea de comando permiten a los usuarios usar el nombre de los paquetes ROS en vez de los nombres de los archivos, abreviando de esta forma la extensión de los mismos. Es paquete incluye el auto completado por medio de tab en la mayoría de las utilidades ROS, y también rosed que permite la edición de los archivos seleccionados en el editor de código preferido y también rosrun que permite la ejecución de archivos mediante paquetes ROS. Rosbash brinda soporte a las mismas funcionalidades para zsh y tcsh, en una menor cuantía.

roslaunch roslaunch es una herramienta usada para ejecutar múltiples nodos ROS de forma local o remota, de igual forma es usado para configurar parámetros en un servidor de parámetros ROS. Los archivos de configuración roslaunch, cuyo código está escrito usando XML pueden de forma sencilla automatizar complejos procesos de arranque y configuraciones con un solo comando. Las secuencias de comandos dentro de archivos roslaunch pueden anidar dentro de ellas llamadas a otras secuencias de comandos roslaunch, inicio de nodos ROS en máquinas específicas y hasta reiniciar procesos que han caído durante esta.

Aplicaciones

Las áreas que incluye ROS son:

Un nodo principal de coordinación. Publicación o subscripción de flujos de datos: imágenes, estéreo, láser, control, actuador, contacto, etc. Multiplexación de la información. Creación y destrucción de nodos. Los nodos están perfectamente distribuidos, permitiendo procesamiento distribuido en múltiples núcleos, multiprocesamiento, GPUs y clústeres. Login. Parámetros de servidor. Testeo de sistemas.

Las áreas que incluirán las aplicaciones de los paquetes de ROS son:

Percepción Identificación de Objetos Segmentación y reconocimiento Reconocimiento facial Reconocimiento de gestos Seguimiento de objetos Egomoción Comprensión de movimiento Estructura de movimientos (SFM) Visión estéreo: percepción de profundidad mediante el uso de dos cámaras Movimientos Robots móviles Control Planificación Agarre de objetos

Historial de versiones

Una versión de ROS puede ser incompatible con otra. Normalmente están referidas por un sobrenombre en vez de por una versión numérica. Las versiones, desde la más actual a la primera versión, son:

Distribución Fecha de Lanzamiento Póster Fecha EOLMelodic Morenia23 de mayo de 2018 Lunar Loggerhead23 de mayo de 201775pxKinetic Kame23 de mayo de 2016 Jade Turtle23 de mayo de 201575pxIndigo Igloo22 de julio de 201475pxHydro Medusa4 de septiembre de 201375pxGroovy Galapagos31 de diciembre de 201275pxFuerte Turtle23 de abril de 201275pxElectric Emys30 de agosto de 201175pxDiamondback2 de marzo de 201175pxC Turtle2 de agosto de 201075pxBox Turtle2 de marzo de 201075px

Robots y hardware soportado

Entre los robots y hardware soportado por ROS se pueden encontrar:Willow Garage, Supported robots and hardware. Link:

Willow Garage PR2 : robot personal que está siendo desarrollado por Willow Garage. Donaxi: robot de servicio desarrollado en el laboratorio de Control y Robótica de UPAEP PR1: robot personal desarrollado en el laboratorio de Ken Salisbury en Stanford. Robotnik: Empresa española de ingeniería especializada en robots móviles, brazos robóticos y soluciones industriales con arquitectura sobre ROS. Robot de Shadow : mano robótica diestra motorizada desarrollada por la empresa Shadow y la cual se está desarrollando mediante el consorcio de un proyecto europeo dentro del marco europeo (FP7).HANDLE Project, Official web page of the project. Link: Entre los participantes de este proyecto se pueden encontrar la empresa Shadow Robot, la Université Pierre et Marie Curie-Paris (Francia) o la Universidad Carlos III de Madrid (España). HERB: desarrollado en CMU dentro del programa de robótica personal de Intel. STAIR I y II : robots desarrollados en el laboratorio de Andrew Ng en la Universidad de Stanford. Koen Buys (Embedded Sensor Lab): el laboratorio de robótica de la Katholieke Universiteit Leuven (Bélgica), donde han desarrollado la Beagleboard. Aldebaran Nao: el Humanoid Robots Lab de la University of Freiburg desarrolló una integración en ROS para el Humanoide Nao. Husky A200: robot desarrollado (e integrado en ROS).

ROS-Industrial