Robot Operating System ROS Fundamentos de Robótica Integrantes:
Ronald Campoverde. Roger Granda. Diana Panchana. Henry Suarez Avilés.
Paralelo: 05
26/06/2013
200531135 200834711 200713907 201015740
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
INDICE
Índice Introducción Historia Misión ¿Que es ROS? Objetivos de ROS Nomenclatura de ROS Plataformas para ROS Arquitectura del sistema ROS Aplicaciones Versiones Proceso de instalación ¿Quiénes están por detrás de todo esto? ¿Cuál está siendo la clave de su éxito? La ventaja de un sistema operativo para robots Definición del Experimento Experimento Problemas encontrados. Conclusiones y recomendaciones. Bibliografía
2
2 3 4 5 5 7 8 10 11 12 13 14 16 17 18 19 25 25 26
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Introducción
El desarrollar un software para cualquier robot no es tarea fácil, sino todo lo contrario su complejidad aumenta ya que los avances que la robótica ha tenido sigue aumentado cada vez más. Cada robot es distinto a otro sea en su infraestructura hardware y software; por lo que la reutilización de código es no trivial. La robótica hoy en día es difícil de describir debido a que siempre existen nuevas maneras de crearla y programarla; es por todo esto que se ha desarrollado el proyecto ROS que está basado en librerías que interactúan con el robot. ROS también nos facilita la interacción con los mensajes externos. ROS corre el riesgo de convertirse en el estándar de factor en el desarrollo de sistemas robóticos. Los chicos de Willow Garage no paran de sorprender a todo el mundo y convierten en oro todo lo que tocan. Lo impresionante de la historia es que la SpinOff de Stanford pública como software libre todo el código que desarrolla, está más que abiertos a la colaboración y documenta todo de manera excelente realizando grandes esfuerzos de divulgación. Todo un ejemplo. Sigo a este grupo desde hace un año (casi desde su nacimiento) y sinceramente, los admiro profundamente. Para quien no este enterado en que consiste esto de ROS, intentaré hacer una breve introducción (aunque es muy complicado porque tiene un gran número de cosas) de toda su amplia capacidad.
3
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Historia ROS se desarrolla y es mantenido por una compañía de california, Willow Garage, fundada en 2006 por Scott Hassan, quien fue uno de los primeros empleados de Google que estuvo involucrado en el desarrollo de la tecnología del motor de búsqueda y que también estaba detrás de Yahoo! Grupos (eGroups, de hecho, que se convirtió en Yahoo! Grupos). El presidente y consejero delegado de Willow Garage es Primos Steeve, anteriormente en IBM.
ROS se desarrolló originalmente en 2007 bajo el nombre de switchyard por el Laboratorio para dar soporte al proyecto del Robot con Inteligencia Artificial de Stanford (STAIR ). Desde 2008, el desarrollo es continuo 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 inició como un proyecto de inteligencia artificial en Stanford. Después pasó a ser parte de un proyecto abierto, el cual sigue desarrollándose colaborativamente. La versión actual de ROS, llamada Fuerte, no solamente ofrece un sistema operativo completo, sino un conjunto de paquetes que extienden las funcionalidades del sistema. ROS está disponible para correr bajo Ubuntu Linux, entre un rango de sistemas operativos disponibles, de forma experimental. Se puede programar en C++ o Python, a través de una serie de módulos. 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) es el sistema soportado 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').
4
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Actualmente es un proyecto en marcha, que pretende ser alimentado por la comunidad robótica. El proyecto está vivo y es accesible vía su página web: http://www.ros.org/
Misión La intención de ROS es ser un sistema que una diversos componentes útiles al momento de hacer que un computador sea el corazón de un robot o el asistente, tales como drivers cámaras u otros dispositivos, algoritmos, por ejemplo de navegación, de control de brazos robóticos, etc.
¿Qué es ROS? ROS es un framework de código abierto para el desarrollo de software para robots, y un sistema meta-operativo para robots. Proporciona los servicios que se esperan de un sistema operativo, incluyendo abstracción de hardware, control de dispositivos de bajo nivel, la implementación de funcionalidades de uso común, paso de mensajes entre procesos, y gestión de paquetes. También proporciona herramientas y bibliotecas para obtener, construir, escribir y ejecutar código en varios equipos. 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. ROS es similar en algunos aspectos a los "robotframework”', como Player, YARP, Or ocos,
CARMEN, Orca, Moos, y Microsoft Robotics Studio. El tiempo de ejecución "graph" de ROS es una red peer-to-peer de procesos que están débilmente acoplados utilizando la infraestructura de comunicación ROS. ROS implementa diferentes estilos de comunicación, incluida la comunicación sincrónica de estilo RPC a través de los servicios, streaming asíncronas de datos a través de los temas y el almacenamiento de datos en un servidor de parámetros. Estos se explican en mayor detalle en nuestra Conceptos Generales.
5
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
ROS no es un marco de tiempo real, a pesar de que es posible la integración de ROS con el código de tiempo real. El Willow Garaje PR2 robot utiliza un sistema llamado pr2_etherCAT, que transporta mensajes de ROS en y fuera de un proceso en tiempo real. ROS también cuenta con una perfecta integración con el kit de herramientas en tiempo real Orocos. 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 e n conjuntos llamados pilas o en inglés stacks) que implementan la funcionalidades tales como localización y mapeo simultáneo, planificación, percepción, simulación, etc. Incluye:
Abstracción de hardware.
Control de dispositivo de bajo nivel.
Funcionalidades comunes
El paso de mensajes entre procesos.
El sitio oficial de ROS indica que: Hay 175 organizaciones o individuos que han escrito software en ROS. Cincuenta solamente en el año 2009. Hay aproximadamente unos 40 robots personales en el mundo, que corren ROS. Más de 90 tipos de robot usan ROS. Veintiocho de ellos contienen instrucciones de instalación detalladas para sus plataformas en particular. Hay 3699 paquetes públicos para ROS, contra los 1600 que había hace tres años. De seguir así las cosas, en cinco años más no sería descabellado pensar tener en casa un robot ROS y podría ser la tercera plataforma de desarrollo. A pesar de que los robots nos parecen lejanos, no lo están tanto y sin duda es una tecnología a la cual habría que pensar en apostarle. Evidentemente muchos de los robots que pudiesen estar disponibles para dentro de cinco años no serían a imagen y semejanza humana, pues para muchísimas tareas esto no es indispensable. ROS pretende dar una solución integral al problema de desarrollo de robots aportando soluciones a las áreas de:
6
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
reutilización e integración de robots y dispositivos encapsulando estos tras interfaces estables y manteniendo las diferencias en archivos de configuración. Algoritmos de robótica con bajo acoplamiento: desde algoritmos de bajo nivel de control, cinemática, SLAM, etc. Hasta algoritmos de alto nivel como planificación o aprendizaje. También otros muchos más específicos como: cómo lograr que el robot X coja un objeto o el robot Y se auto enchufe a la red eléctrica. ROS provee de un mecanismo comunicaciones (middleware) distribuido entre nodos del sistema robótico. Un nodo es cualquier pieza de software del sistema (desde un algoritmo SLAM hasta un driver para el manejo de un motor). El objetivo de este sistema es doble: 1encapsulado/abstracción/reutilización de software e 2- ubicuidad, es decir, independencia de donde este nodo está localizado (un sistema robótico puede tener muchos procesadores). Estos nodos se comunican entre ellos mediante mecanismos de paso de mensajes RPC o Publish/Subscribe, Service lookup, etc. Permite crear arquitecturas P2P de componentes robóticos distribuidos. Simulación de sistemas robóticos en mundos virtuales con dinámicas de sólidos rígidos. Herramientas de desarrollo, despliegue y monitorización de sistemas robóticos.
Abstracción de Hardware (HAL) y
Objetivos de ROS El objetivo principal de ROS es apoyar la reutilización de código en la investigación y el desarrollo de robótica. ROS es una estructura distribuida de procesos (Nodos aka) que permite a los ejecutables para ser diseñadas de forma individual y de acoplamiento flexible en tiempo de ejecución. Estos procesos se pueden agrupar en paquetes y pilas, que pueden ser fácilmente compartidos y distribuidos. ROS también es compatible con un sistema federado de repositorios de código que permiten la colaboración a distribuir también. Este diseño, desde el nivel del sistema de archivos a nivel de la comunidad, permite tomar decisiones independientes sobre el desarrollo e implementación, pero todo puede ser llevado junto con herramientas de infraestructura ROS. En apoyo de este objetivo principal de compartir y colaborar, hay varios otros objetivos del marco de ROS: ROS está diseñado para ser tan delgado como sea posible, no vamos a envolver su main (), de modo que el código escrito para ROS se puede utilizar con otros frameworks
Delgado:
7
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
de software robot. Un corolario de esto es que los ROS es fácil de integrar con otros marcos de software robot: ROS ya ha sido integrada con OpenRAVE, Orocos y jugador. Bibliotecas ROS-agnóstico: el modelo de desarrollo preferido es escribir bibliotecas ROS-agnóstico con interfaces funcionales y limpias. Independencia de idiomas: el marco ROS es fácil de implementar en cualquier lenguaje de programación moderno. Ya hemos implementado en Python, C + +, y Lisp, y tenemos bibliotecas experimentales en Java y Lua. Prueba fácil: ROS tiene un marco de prueba de unidad / integración incorporada llamada ROSTEST que hace que sea fácil de llevar y derribar accesorios de prueba. Escala: ROS es apropiado para sistemas grandes de tiempo de ejecución y para los procesos de desarrollo de gran tamaño.
Nomenclatura de ROS El principio básico de un sistema operativo de robot es ejecutar un gran número de ejecutables en paralelo que tiene que ser capaz de intercambiar datos de forma sincrónica o asincrónica. Por ejemplo, un sistema operativo robótica necesita consultar sensores de robot a una frecuencia conjunto (ultrasonido o sensor de distancia de infrarrojos, sensor de presión, sensor de temperatura, giroscopio, acelerómetro, cámaras, micrófono, etc), recuperar estos datos, procesarla (llevar lo que se conoce como una fusión de datos), pasarlo a algoritmos de procesamiento (procesamiento del habla, la visión artificial, SLAM - localización y mapeo simultáneo, etc) y, por último, el control de los motores a cambio. Todo este proceso se lleva a cabo de forma continua y en paralelo. Por otra parte, el sistema operativo robótico tiene que administrar la contención para garantizar un acceso eficaz a los recursos del robot. Los conceptos reunidos en ROS bajo el nombre de "ROS Computación Gráfica", lo que permite que estos objetivos se alcanzaron, se describen a continuación. Estos conceptos son utilizados por el sistema, ya que se está ejecutando, mientras que el sistema de archivos de ROS se describe en la sección anterior es un concepto estático. Nodos ROS trata todo este asunto con algunas nociones básicas sencillas. El primero de ellos es la noción del nodo. En ROS, un nodo es una instancia de un ejecutable. Un nodo puede equiparar a un sensor, el motor, el procesamiento o algoritmo de seguimiento, y así sucesivamente. Cada nodo que
8
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
empieza a correr en sí declara al Maestro. Esto viene de nuevo a la arquitectura micro núcleo, en el que cada recurso es un nodo independiente. Maestro El Maestro es una declaración de nodo y servicio de registro, lo que hace posible que los nodos para encontrar e intercambiar datos. El Máster se realiza a través de XMLRPC. El Máster incluye un componente fuertemente utilizada denomina servidor de parámetros, también aplicado en forma de XMLRPC, y que es, como su nombre lo indica, una especie de base de datos centralizada en el que los nodos pueden almacenar datos y, de este modo, el sistema de acciones parámetros de ancho. Temas Los datos se intercambian de forma asíncrona por medio de un tema y de forma sincrónica a través de un servicio. Un tema es un sistema de transporte de datos sobre la base de un sistema de suscripción / publicación. Uno o más nodos son capaces de publicar datos en un tema, y uno o más nodos pueden leer datos sobre ese tema. Un tema es, en cierto modo, un bus de mensajes asíncrono, un poco como un feed RSS. Esta noción de un asíncrono, muchos-a-muchos autobuses es esencial en una situación de sistema distribuido. Se escribe un tema, lo que significa que el tipo de los datos publicados (el mensaje) siempre está estructurado de la misma manera. Nodos de enviar y recibir mensajes de temas. Mensajes Un mensaje es una estructura de datos compuesto. Un mensaje comprende una combinación de tipos primitivos (cadenas de caracteres, booleanos, enteros, punto flotante, etc) y mensajes (un mensaje es una estructura recursiva). Por ejemplo, un nodo que representa un servomotor robot ciertamente publicar su estado en un tema (dependiendo de cómo se programó) con un mensaje que contiene, por ejemplo, un entero que representa la posición del motor, un punto flotante por su temperatura, otro punto flotante por su velocidad, y así sucesivamente. La descripción del mensaje se almacena en nombre_paquete / msg / myMessageType.msg. Este archivo describe la estructura del mensaje
9
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Servicios Un tema es un método de comunicación asíncrona utiliza para muchos-a-muchos la comunicación. Un servicio se encuentra con un tipo diferente de necesidad; que para la comunicación síncrona entre dos nodos. La idea es similar a la de una llamada a procedimiento remoto. La descripción del servicio se almacena en nombre_paquete / srv / myServiceType.srv. Este archivo describe las estructuras de datos de solicitudes y respuestas. Packages Las packages son formatos para almacenar y reproducir datos de mensajes. Este mecanismo hace que sea posible, por ejemplo, para recoger los datos medidos por los sensores y posteriormente jugar de nuevo tantas veces como se desee para simular los datos reales. También es un sistema muy útil para la depuración de un sistema después del evento. La herramienta rxbag se puede utilizar para mostrar los datos guardados en los archivos del bolso en forma gráfica Invocación de Servicio
Nodo
Nodo
Tópico Publicación
Subscripción
Plataformas para ROS ROS (Robot Operating System) ofrece librerías y herramientas para crear aplicaciones de robótica. Está disponible para diferentes sistemas operativos, pero se recomienda utilizar Ubuntu ya que es el único que ofrece soporte. La instalación de este software se realiza por medio de la terminal y con la ayuda de repositorios (en Linux). La integración de ROS con el NXT se ha llevado a cabo gracias a la colaboración con el proyecto NXT-Python. El bloque NXT es una versión mejorada del Lego Mindstorms
10
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
RCX, este ofrece diferentes motores y sensores (sensor de color, de intensidad, de ultrasonido, on and off). ROS ofrece una interesante aplicación llamada Rviz esta nos permite observar el robot y el entorno que este visualiza en 3D. El software en sí, no es una distribución de Linux como se proponía en un principio del proyecto. Es más bien un paquete software que se instala sobre otras distribuciones u otros sistemas operativos. Actualmente está preparado para ser instalado sobre Ubuntu 8.04, Mint 5, Fedora 11 y Arch Linux. Y de manera experimental en Gentoo Linux, MAC OS, OpenSUSE, Rasbian, Debian y Windows. Si bien es posible que un puerto Microsoft Windows para ROS, que todavía no se ha explorado a fondo.
Arquitectura del sistema ROS
aplicaciones capacidades librerias herramientas middleware
La filosofía de ROS se puede resumir en los siguientes ítems:
Punto a Punto
11
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Basado en herramientas Multilenguaje Modular De código abierto
Por ejemplo, en grandes robots para los cuales ROS fue diseñado, normalmente hay varios Ordenadores de a bordo conectados a través de Ethernet. Este segmento de la Red es interconectado a través de una LAN inalámbrica de alta potencia a las máquinas (de Escritorio o servidores) que están ejecutando las tareas de computación intensiva (informática, Visión, reconocimiento de voz, etc.)
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. Multiplicació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
12
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
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
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:
Groovy Galapagos
31/Diciem bre/2012
•
13
Fuerte
23/Abril/2 012
•
Electric Emys
30/agosto/ 2011
•
Diamondback
02/Marzo/ 2011
•
C Turtle
03/Agosto/ 2010
•
ROS 1.0
22/Enero/ 2010
•
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Proceso de instalación: Soporta UBUNTU 11.10 Oneiric Linux:
Configure los repositorios de Ubuntu
Configure su Sources.list (Para este caso Ubuntu 11.10 Oneiric)
14
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
sudo sh-c 'echo "deb http://packages.ros.org/ros/ubuntu onírico principal"> / etc / apt / sources.list.d / ros-latest.list'
Configuración de sus claves
Para comenzar con la instalación en primer lugar, asegúrese de que su índice de paquetes Debían está al día.
http://packages.ros.org/ros.key wget-O - | sudo apt-key add -
Para
el
nuestro
caso
el
proyecto
usa
el
ROS
sudo apt-get install ros-electric-desktop-full
15
ELECTRIC
EMY
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Para prácticas, solo se necesita tener instalado ROS, al igual que las librerías del NXT en Python. Procedimiento de implementación de un ejemplo práctico básico de cambio de dirección y giro usando ROS: El robot irá hasta el final de la línea negra y posteriormente realizará un giro de 180 grados. Es necesario saber algo de Linux, más que nada los comandos por consola, ROS se maneja por consola, y sus comandos son similares a los típicos de Linux
¿Quiénes están por detrás de todo esto? 16
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Se trata de un proyecto de Software Libre con el apoyo de una empresa llamada Willow Garage. Sabemos por experiencia que el apoyo de empresas en proyectos de software libre fomenta la promoción del mismo, dos ejemplos claros son Eclipse y Ubuntu. Además WillowGarage es una SpinOff de Stanford y cuenta con el apoyo y contacto con grupos de investigación como STAIR y profesores reconocidos como Gary Bradsky (principal responsable del famoso proyecto de visión artificial OpenCV). Todos estos factores son una garantía, Stanford es una de las cunas de la informática y la robótica, allí han nacido empresas tan importantes como Apple o Google. En cualquier caso su uso y apoyo se está extendiendo fuera de estas fronteras, muchas universidades de todo el mundo están comenzando a desarrollar sus investigaciones con ROS, desde América a Japón, pasando por Europa. También a muchos, le sonará Brian Gerkey, uno de los principales responsables del proyecto Player(probablemente el RSF mas reconocido hasta la fecha), él actualmente forma parte del equipo de ROS, ahí lo dejo.
¿Cuál está siendo la clave de su éxito? Son muchas las razones, pero desde mi punto de vista la clave de su éxito es su filosofía: científica, divulgativa, abierta e integradora.
Científica.
Muchos de los paquetes más importantes desarrollados van acompañados de artículos
científicos. Además como ya he comentado, están respaldados por universidades, grupos de investigación e investigadores reconocidos.
Divulgativa.
Se nota la influencia de jóvenes investigadores y desarrolladores de la generación
web2.0 porque hacen uso de estos medios de forma masiva. ROS es un proyecto que puede considerarse una ametralladora de conocimiento: RSS, Vídeos en Youtube, Blogs, Wikis, Tweeters, Cursos online, etc. Todo lo que saben lo enseñan y lo comparten en Internet. En ocasiones es tanto lo que hacen y comparten que es difícil para una persona que no se dedique a la investigación seguir día a día sus progresos. Es sorprendente el volumen y la organización de la documentación, más aún sabiendo que se trata uno de los clásicos puntos débiles de los proyectos de software libre.
Abierta.
El software que hacen es libre, el software que utilizan es libre. La mayor parte de
paquetes desarrollados ofrecen una rica documentación (una de las mayores lacras en el mundo del software libre), tutoriales, etc.
Integradora.
Su filosofía es no reinventar la rueda. Sería insensato, mas en un área como la
robótica donde es necesario una infraestructura basada en un sólido ecosistemas software. Exitosos proyectos de software libre de diversa índole son utilizados: cmake, Boost, Yaml, Opencv, Python,
17
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Ogre, Gazebo, Stage, etc. Además también reutiliza o es compatible parcialmente con otros RSFs como OpenRave, Player o YARP.
La ventaja de un sistema operativo para robots Antes de que los sistemas operativos de robots, cada diseñador de robots e investigador de robótica pasaran una cantidad considerable de tiempo en el diseño del software integrado en un robot, así como el propio hardware. Esto requirió habilidades en ingeniería mecánica, electrónica y programación embebida. Por lo general, los programas de ingeniería de esta manera se asemejan más a la programación integrada, similar a la electrónica, de lo que eran a la robótica en el sentido más estricto, como podemos encontrar hoy en día en la robótica de servicios. Hubo una considerable re-uso de los programas, ya que estaban estrechamente relacionadas con el hardware subyacente. La idea principal de un sistema operativo de la robótica es evitar la continua reinvención de la rueda, y ofrecer funcionalidades estandarizadas que realizan abstracción de hardware, al igual que un sistema operativo convencional para PC, de ahí el nombre análogo. Otro de los beneficios de los sistemas operativos de robots como ROS es la de combinar la experiencia de diferentes disciplinas. De hecho, el diseño y la programación de un robot significan: Administrar el hardware al escribir controladores. Administración de la memoria y los procesos. Gestión de concurrencia, paralelismo y fusión de datos. ROS es desarrollado y mantenido por una compañía californiana, Willow Garage, formada en 2006 por Scott Hassan, uno de los primeros empleados de Google que estuvo involucrado en el desarrollo de la tecnología de motor de búsqueda y que también estaba detrás de Yahoo! Grupos (eGroups, de hecho, que se convirtió enYahoo! Grupos). El presidente y consejero delegado de Willow Garage es PrimosSteeve, anteriormente en IBM. Proporcionar algoritmos de razonamiento abstracto, haciendo un gran uso de la inteligencia artificial. Por lo tanto, Robótica requiere muy diferentes conjuntos de habilidades, típicamente más allá de la gama de un solo individuo.
18
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Descripción del Experimento El propósito de esta sección es mostrar un ejemplo práctico de una aplicación de ROS en un robot Real. Para esta sección explicaremos el trabajo realizado con el robot Mindstorm de Lego. Con el fin de aprender a utilizar el framework de ROS y el api de NXT para robots Lego.
Diseño
El diseño básicamente tiene 2 secciones: 1. Diseño del nodo de comunicación ros con lego mindstorm 2. Diseño del nodo de control ROS 1.
Diseño del nodo de comunicación Ros con lego mindstorm
Este nodo es el que servirá de vínculo con el robot lego. Utilizará el API de nxt; llamado nxt_ros. Nxt_ros es un api diseñado para controlar a lego mindstorm de forma remota, este utiliza librerías python que sirven de enlace. Estas librerías proporcionan los suscriptores para la lectura de los parámetros deseados por algún determinado nodo de ROS. Y también proveen publicadores de tópicos para que un determinado nodo suscriptor tenga lectura de los sensores de Lego mindstorm.
A continuación se describe la creación de este nodo, que será implementado dentro de un package de ros.
a.
Creación del Workspace
Primero lugar necesitamos definir workspace de ROS para poder generar los paquetes. Esto se logra de la siguiente manera: En consola de comandos ingresar:
rosws init ~/lego_workspace /opt/ros/electric/
19
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Lo que hemos hecho con este comando es definir el workspace con un localoverlay para poder generar un nuevo paquete.
b.
Creación del paquete
A continuación definiremos el paquete que utilizará nxt_ros API de la siguiente forma. roscd nxt roscreate-pkg robot_nxt rospy nxt_ros rosmake cd robot_nxt
c.
Definición de las interfaces del robot
Como podemos intuir, se necesita especificar las interfaces del robot en algún lugar para especirficar a ROS como enviaremos o recibiremos las órdenes. Esto se logra creando un archivo yaml donde se especifican dichas interfaces.
A continuación una descripción de el archivo robot.yaml que se encuentra ubicado en el directorio raíz del paquete.
nxt_robot: - type: motor name: r_wheel_joint port: PORT_A desired_frequency: 20.0 - type: motor name: l_wheel_joint port: PORT_B desired_frequency: 20.0 - type: intensity frame_id: l_intensity_link name: intensity_sensor port: PORT_1 color_r: 1.0 color_g: 0.0 color_b: 0.0 desired_frequency: 20.0
Es aquí, donde se especifican las interfaces del robot.
20
Equipo: Ronald Campoverde. Henry Suarez Avilés.
d.
Roger Granda. Diana Panchana.
Definición del archivo de ejecución
Como es de intuir, debemos vincular la hoja anterior de especificación de interfaces a ROS, para que realice la vincualación. Esto se logra a través de el archivo de ejecución .lauch propio de ROS. A continuación la descripción de como luce este archivo:
Una descripción del archivo robot.launch que necesita ROS para especificar las interfaces.
e.
Construcción del paquete
Antes de poder ejecutar el nodo, necesitamos contruir mediante la consola de ros, para esto utilizamos los siguientes comandos
rosmake robot_nxt cd robot_nxt
21
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
f.Ejecución del paquete
Para poder ejecutar el nodo, en primer lugar debemos inicializar el modo de operación de ROS con la siguiente instrucción: roscore
Luego, para continuar con la ejecución del nodo, utilizamos los siguientes comandos:
roslaunch robot.launch
2.
Diseño del nodo de control ROS
Este nodo se lo despliega con el fin de almacenar la lógica de la operación del robot. Este accede a los tópicos publicados por en nodo anterior. Para el control del flujo, en este nodo se utilizarán algoritmos codificados en python. A continuación la descripción del proceso de creación:
a. Creación del paquete
A continuación definiremos el paquete que utilizará nxt_ros API de la siguiente forma. roscreate-pkg legocontroller std_msgs rospy ros profile rosmake legocontroller
b.Creación del controlador
22
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Una vez creado el paquete procedemos a escribir la codificación de control en python. Ubicando los archivos Python dentro de la carpeta scripsts ubicada dentro de la carperta del paquete.
#!/usr/bin/env python import roslib; roslib.load_manifest('beginner_tutorials') import rospy from std_msgs.msg import String
def talker(): llantaR = rospy.Publisher('r_wheel_joint', float64) llantaI = rospy.Publisher('l_wheel_joint', float64) rospy.init_node('talker') while not rospy.is_shutdown(): while (lectura sensor<20) #str = "hello world %s" % rospy.get_time() #rospy.loginfo(str) pub.publish(String(50)) pu2.publish(String(50)) rospy.sleep(1.0)
pub.publish(String(50)) pu2.publish(String(0)) pub.publish(String(50)) pu2.publish(String(0)) pub.publish(String(50)) pu2.publish(String(0)) rospy.sleep(1.0)
if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass
Sin olvidarnos de asignar permisos de ejecución.
23
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
c. Ejecución del controlador
En la consola ejecutamos para poder iniciar el nodo controlador:
rosrun legocontroller listener.py
24
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Problemas encontrados.
Debido a la dificultad para hallar en el mercado los robots mindstorm, no se pudieron completar las pruebas de manera correct a. Por lo que se recomienda trabajar con algún emulador si existe una versión que esté e n derarrollo.
La documentación de Electric está depreciada, por lo que se recomienda trabajar con un framework actual.
Conclusiones y recomendaciones. Crear una robótica que sea accesible a todos creando librerías para la reutilización de código. ROS es la plataforma de desarrollo robótica que ofrece el suficiente potencial, escalabilidad y aceptación para el avance de robótica a un ritmo mayor. Es una fuente totalmente abierta, libre para usar el sistema operativo para que la gente meta de mejorar, modificar y revender. Su mensaje principal objetivo es permitir la reutilización de los escritores de código en el campo de la investigación y el desarrollo de la robótica, por lo que los servicios que se esperan de un sistema operativo Cuando hablamos de sistemas operativos de código abierto, pensamos en Linux, en BSD, en sistemas de esta naturaleza. Pero si hablamos de robots, debemos pensar en ROS (Robot Operating System), que se lanzó como un proyecto de investigación más y que ahora cumple 5 años.
25
Equipo: Ronald Campoverde. Henry Suarez Avilés.
Roger Granda. Diana Panchana.
Bibliografía:
GeuS' Blog: Robotics, Computer Science and More( 2007,Marzo,7).
Interesting Survey about different Robotic Software Frameworks for Distributed Robotics[ blog log post].Recuperado de:http://geus.wordpress.com/2010/04/17/ros-%C2%BFelnuevo-estandar-de-facto-en-robotica/ National Instruments(2012): Enlace NI LabVIEW con Redes de Sistema Operativo de Robot (ROS).Recuperado de : http://sine.ni.com/nips/cds/view/p/lang/es/nid/210716
Robot parts(2013,Febrero,21): ROS, el sistema operativo del robot Willow Garage[ blog log post].Recuperado de:http://roboticspart.blogspot.com/2013/02/ros-el-sistema-operativodel-robot.html
Linux Droids Blog(2010,febrero,19)ROS: Robotic Operative System[ blog log post].Recuperado de:http://linuxdroids.wordpress.com/2010/02/19/ros-roboticoperating-system/
Generation Robots(2008):ROS - Robot Operating System[ blog log post].Recuperado de:http://www.generationrobots.com/ros-robot-operating-system,us,8,74.cfm
26