En esta entrada del blog vamos a hablar sobre los fundamentos de ROS. vamos a comentar qué es, y porqué deberíamos usarlo. Citaremos además las fuentes que tenemos que tener siempre presentes a la hora de aprender ROS o la hora de realizar un proyecto
ROS es un middleware que nos permite …. para, para. Un middleware? no dijimos que esto iba a ser sencillo?
Empecemos de nuevo, ROS es un conjunto de paquetes, herramientas y librerías que nos van a permitir controlar un robot o realizar una tarea.
ROS surge en 2007 y es de código abierto, lo que quiere decir que la gente puede colaborar con el desarrollo del programa. Es mantenido por la Open Source Robotics Foundation (OSRF).
El robot está formado por un controlador que hace de cerebro, motores y unos drivers cuya función es transformar la señal digital que le damos con el controlador en una señal analógica que harán funcionar los motores.
Además imaginemos que el robot cuenta con una cámara de vídeo capaz de obtener la profundidad de los objetos que observa.
ROS iría instalado en el controlador, este controlador estaría corriendo una aplicación de ROS que por ejemplo sería la encargada de mover los motores (ya sea los que hay en un brazo articulado de un robot industrial o en las ruedas en un robot móvil) en función de las imágenes obtenidas mediante la cámara.
Dentro de la aplicación ROS existiría un paquete encargado de obtener imágenes de la cámara y enviarlas al controlador, podría haber otro paquete encargado de transformar las imágenes obtenidas, para por ejemplo, filtrar estas imágenes y quedarse sólo con los objetos redondos de color amarillo.
Otro paquete decidiría las coordenadas del “objeto redondo amarillo” seleccionado y mandaría la orden a los actuadores para acercarse a los objetos. Así obtendríamos una aplicación modular formada por múltiples paquetes.
Cada paquete estará formado a su vez por nodos, estos nodos son la base de una aplicación creada en ROS.
Primero de todo por que esa modularidad que le hemos dado al programa va a permitirnos que en caso de añadir o quitar otro tipo de sensores no tendré que cambiar prácticamente nada mi programa. Sólamente tendré que añadir o quitar el paquete correspondiente a esos sensores.
Una cosa interesante es que este es capaz de combinar paquetes aunque estos estén escritos en diferentes idiomas, ya sea Python o C++.
Existe una cantidad de paquetes de todo tipo disponibles en la red abrumadora.
Incluye herramientas de simulación como pueden ser Rviz o Gazebo. Que nos van a permitir tener una simulación real del robot.
Cuenta con el apoyo de todos los fabricantes de robots, ya sean pensados para un entorno casero o de ocio o incluso industriales. En el ROS Industrial Consortium se juntan los mejores y más conocidos fabricantes de robots industriales y de automatización industrial para dar soporte con paquetes que permiten simular y controlar sus robots o sensores.
Poco o nada puede haber, que nos de tanta confianza como el apoyo, por lo tanto inversión económica, de estas marcas en este software.
Versiones de ROS
Las versiones de ROS van en orden alfabético y ahora mismo vamos por la N, la última es: Neoetic Ninjemys. Estás versiones suelen estar orientadas a un sistema operativo en particular, dependiendo de la versión de Linux o Windows de la que dispongamos necesitaríamos una u otra.
En este enlace puedes ver las diferentes versiones con su logo actual:
Enlaces de interes
Ros wiki: El punto central de nuestras consultas debe ser esta wiki, lo tiene todo
Ros Industrial: Web del consorcio al que apoyan las marcas para implantar ROS en ambientes industriales. Mención especial a sus tutoriales
Robot Ignite Academy: Unos maestros, les debo mucho de mi conocimiento, plataforma de cursos de todo tipo relacionados con ROS, te permiten aprender ROS sin tenerlo instalado.
En la próxima entrada del blog hablaremos de como trabajaremos con ROS y comentaremos cual es nuestro entorno de trabajo. Además introduciremos nuestra rueda de aprendizaje, que no es más mas que la hoja de ruta que marcará nuestro aprendizaje. Hasta entonces!!