Introducción a ROS y su instalación
Introducción a ROS y su instalación
1. Memoria de proyecto !
2. ROS!
2.1.2 Qu es ROS!
11
12
12
12
2.1.6 Contribuyendo!
13
13
13
13
14
14
15
21
22
5. ROS en profundidad!
22
22
27
5.1 Estructura!
27
5.1.1 Repositorio!
27
27
5.1.3 Paquete!
27
5.1.4 Nodo!
27
28
5.2.1 Servicios!
28
2
5.2.2 Tpicos!
28
5.2.3 Mensajes!
28
5.2.4 Maestro!
29
5.2.5 Bags!
29
6. El desarrollo de un programa!
29
29
30
31
6.3.1 Rospack!
32
6.3.2 Rosstack!
32
32
33
6.5.1 Nodos!
33
6.5.2 Tpicos!
36
6.5.3 Mensajes!
42
6.5.4 Servicios!
42
6.5.5 Parmetros!
43
43
44
46
7. Virtualizando ROS!
47
7.1 Rviz!
47
7.2 Gazebo!
48
8. ROS y la docencia!
49
49
50
9. Aplicacin!
9.1 Creando nuestra aplicacin!
52
52
3
52
55
57
59
61
62
11. Bibliografa !
63
1. Memoria de proyecto
El objetivo de este proyecto fin de carrera es el de presentar una visin general de ROS,
sin entrar en detalle dentro de lo que es su programacin, pero mostrando todos los
pasos necesarios a realizar para poder trabajar con el sistema en los equipos
compatibles, adems de mostrar como funciona su estructura y unos primeros pasos
necesarios para la correcta comprensin de ROS, adems se dar una visin objetiva de
sus ventajas e inconvenientes respecto a los dems sistemas existentes en la actualidad,
y de sus posibilidades de futuro.
Todas las imgenes que se pueden ver en este documento son propias a excepcin de
las que se indique lo contrario.
2. ROS
Para poder sacar el mximo rendimiento a ROS, primero tenemos que comprender en
que consiste el sistema, y cuales son sus principales ventajas respecto al resto de
sistemas que se pueden encontrar hoy en da.
!
!
!
!
Con todo, se puede considerar un robot como una mquina complementada con un
computador o como un computador con dispositivos de entrada y salida sofisticados.
La idea ms ampliamente aceptada de robot est asociada a la existencia de un
dispositivo de control digital que, mediante la ejecucin de un programa almacenado en
memoria, va dirigiendo los movimientos de un brazo o sistema mecnico. El cambio de
tarea a realizar se verifica ordenando el cambio de programa.
El concepto de mquinas automatizadas se remonta a la antigedad, con mitos de seres
mecnicos vivientes. Los autmatas, o mquinas semejantes a personas, ya aparecan en
los relojes de las iglesias medievales, y los relojeros del siglo XVIII eran famosos por sus
ingeniosas criaturas mecnicas.
El control por realimentacin, el desarrollo de herramientas especializadas y la divisin del
trabajo en tareas ms pequeas que pudieran realizar obreros o mquinas fueron
ingredientes esenciales en la automatizacin de las fbricas en el siglo XVIII. A medida
que mejoraba la tecnologa se desarrollaron mquinas especializadas para tareas como
poner tapones a las botellas o verter caucho lquido en moldes para neumticos. Sin
embargo, ninguna de estas mquinas tena la versatilidad del brazo humano, y no podan
alcanzar objetos alejados y colocarlos en la posicin deseada.
En la dcada de 1890 el cientfico Nikola Tesla, inventor, entre muchos otros dispositivos,
de los motores de induccin, ya construa vehculos controlados a distancia por radio.
Las mquinas ms prximas a lo que hoy en da se entiende como robots fueron los
"teleoperadores", utilizados en la industria nuclear para la manipulacin de sustancias
radiactivas. Bsicamente se trataba de servomecanismos que, mediante sistemas
mecnicos, repetan las operaciones que simultneamente estaba realizando un
operador.
Inmediatamente despus de la Segunda Guerra Mundial comienzan los primeros trabajos
que llevan a los robots industriales. A finales de los 40 se inician programas de
investigacin en los laboratorios de Oak Ridge y Argonne National Laboratories para
desarrollar manipuladores mecnicos para elementos radiactivos. Estos manipuladores
eran del tipo "maestro-esclavo", diseados para que reprodujeran fielmente los
movimientos de brazos y manos realizados por un operario.
El inventor estadounidense George C. Devol desarroll en 1954 un dispositivo de
transferencia programada articulada (segn su propia definicin); un brazo primitivo que
se poda programar para realizar tareas especficas.
En 1958, Devol se uni a Joseph F. Engelberger y, en el garaje de este ltimo,
construyeron un robot al que llamaron Unimate. Era un dispositivo que utilizaba un
computador junto con un manipulador que conformaban una "mquina" que poda ser
"enseada" para la realizacin de tareas variadas de forma automtica. En 1962, el primer
Unimate fue instalado a modo de prueba en una planta de la General Motors para
funciones de manipulacin de piezas y ensamblaje, con lo que pas a convertirse en el
primer robot industrial. Devol y Engelberger fundaran ms tarde la primera compaa
dedicada expresamente a fabricar robots, Unimation, Inc., abreviacin de Universal
Automation
6
Se puede considerar este punto como el inicio de la era de la Robtica tal como la
conocemos, mediante la utilizacin de los robots programados, una nueva y potente
herramienta de fabricacin.
Durante la dcada de los 60, un nuevo concepto surge en relacin con los anteriores
avances. En vistas a una mayor flexibilidad, se hace necesaria la realimentacin
sensorial. En 1962, Tomovic y Boni desarrollan una mano con un sensor de presin para
la deteccin del objeto que proporcionaba una seal de realimentacin al motor.
En 1963 se introduce el robot comercial VERSATRAN por la American Machine and
Foundry Company (AMF). Y ese mismo ao se desarrollan otros brazos manipuladores
como el Roehampton y el Edinburgh.
En 1967 y 1968 Unimation recibe sus primeros pedidos para instalar varios robots de la
serie Unimate 2000 en las cadenas de montaje de la General Motors. Al ao siguiente los
robots ensamblaban todos los coches Chevrolet Vega de esta compaa.
El brazo Stanford(1969).
Wikipedia
Las primeras aplicaciones industriales en Europa, aplicaciones de robots industriales en
cadenas de fabricacin de automviles, datan de los aos 1970 y 1971. En este ltimo
ao, Kahn y Roth analizan el comportamiento dinmico y el control de un brazo
manipulador.
Durante la dcada de los 70, la investigacin en robtica se centra en gran parte en el uso
de sensores externos para su utilizacin en tareas de manipulacin. Es tambin en estos
aos cuando se consolida definitivamente la presencia de robots en las cadenas de
montaje y plantas industriales en el mbito mundial.
En 1972 se desarroll en la universidad de Nottingham, Inglaterra, el SIRCH, un robot
capaz de reconocer y orientar objetos en dos dimensiones. Este mismo ao, la empresa
japonesa Kawasaki instala su primera cadena de montaje automatizada en Nissan,
Japn, usando robots suministrados por Unimation, Inc.
En 1973, Bolles y Paul utilizan realimentacin visual en el brazo Stanford para el montaje
de bombas de agua de automvil. Tambin este mismo ao, la compaa sueca ASEA
(futura ABB), lanza al mercado su familia de robots IRB 6 e IRB 60, para funciones de
perforacin de piezas, y la empresa KUKA Robot Group lanz al mercado su robot
Famulus, que era el primer robot con seis ejes electromecnicos.
Shakey, (1970)
Wikipedia
Tambin este mismo ao, la empresa Cincinatti Milacron introduce el T3 (The Tomorrow
Tool), su primer robot industrial controlado por computador. Este manipulador poda
levantar ms de 100 libras y seguir objetos mviles en una lnea de montaje.
En 1975, Will y Grossman, en IBM, desarrollaron un manipulador controlado por
computador con sensores de contacto y fuerza para montajes mecnicos. Este mismo
ao, el ingeniero mecnico estadounidense Victor Scheinman, cuando estudiaba la
carrera en la Universidad de Stanford, California, desarroll un manipulador polivalente
realmente flexible conocido como Brazo Manipulador Universal Programable (PUMA,
siglas en ingls). El PUMA era capaz de mover un objeto y colocarlo en cualquier
orientacin en un lugar deseado que estuviera a su alcance. El concepto bsico
multiarticulado del PUMA es la base de la mayora de los robots actuales.
En 1976, estudios sobre el control dinmico llevados a cabo en los laboratorios Draper,
Cambridge, permiten a los robots alinear piezas con movimientos laterales y rotacionales
a la vez.
9
En 1979 Japn introduce el robot SCARA (Selective Compliance Assembly Robot Arm), y
la compaa italiana DEA (Digital Electric Automation), desarrolla el robot PRAGMA para
la General Motors.
El robot PUMA.
En 1982, el robot Pedesco, se usa para limpiar un derrame de combustible en una central
nuclear. Tambin se pone un gran nfasis en los campos de visin artificial, sensorizacin
tctil y lenguajes de programacin. Gracias a los primeros pasos dados por compaas
como IBM o Intelledex Corporation, que introdujo en 1984 el modelo ligero de ensamblaje
695, basado en el microprocesador Intel 8087 y con software Robot Basic, una
modificacin del Microsoft Basic, actualmente se tiende al uso de una interfaz (el
ordenador) y diversos lenguajes de programacin especialmente diseados, que evitan el
"cuello de botella" que se produca con la programacin "clsica". Esta puede ser ahora
on-line u off-line, con interfaces grficas (user-friendly interfaces) que facilitan la
programacin, y un soporte SW+HW que tiende a ser cada vez ms verstil.
En el ao 2000 se presenta en sociedad al robot ASIMO un robot humanoide capaz de
desplazarse de forma bpeda e interactuar con las personas, creado por la empresa
Honda Motor Co. Ltd, que tras varias actualizaciones en al ao 2011 consigui funcionar a
una velocidad de 9 km/h, diferenciar entre 3 personas hablando a la vez y completar
funciones tales como coger un vaso de papel y llenarlo de agua sin derramar ni una sola
gota.
2.1.2 Qu es ROS
ROS (Robot Operating System) es una plataforma de desarrollo open source para
sistemas robticos. Proporciona toda una serie de servicios y libreras que simplifican
considerablemente la creacin de aplicaciones complejas para robots.
Es similar a otras plataformas de desarrollo para robots existentes en la actualidad, y su
mayor virtud, es la de haber sabido aunar lo mejor de cada uno de estos sistema,
juntando todo en un solo sistema capaz de comunicarse tanto con los robots mas
modernos, como con los ya existentes en el mercado.
Desde su creacin, ROS se ha diseado para facilitar el intercambio de software entre los
aficionados y los profesionales de la robtica en todo el mundo debido a su enfoque
didctico y abierto, lo que ha permitido la construccin de una gran comunidad de
colaboradores a lo largo de todo el mundo.
A la hora de desarrollar, ROS permite el uso de distintos lenguajes de programacin. De
forma oficial soportan Python, C++ y Lisp adems de muchas otras como java (todava
en fase experimental pero apoyada por google), Lua, etc.
ROS puede ser ejecutado sobre maquinas tipo Unix, principalmente Ubuntu y Mac OS X
aunque por parte de la comunidad puede encontrarse soporte para otras plataformas
como Fedora, Gentoo, etc
ROS cuenta con una enorme comunidad de desarrollo, que se compone de
investigadores, aficionados, fabricantes de hardware y empresas que le dan soporte como
Willow Garage, o incluso Google.
De esa forma ROS ya dispone de soporte nativo para un gran nmero de hardware como
Nao1, Lego Mindstorms2 , las aspiradoras Roomba3 , o incluso robots de investigacin
valorados en miles de dolares como el PR-2 4
Robot PR-2
Willow Garage
1
[Link]
[Link]
[Link]
[Link]
11
Todo esto, sumado a la gran cantidad de ejemplos, librerias listas para funcionar (con
algoritmos de navegacin, visin artificial, etc) y la creciente comunidad ROS es un gran
punto de partida para iniciar el camino en el apasionante mundo de la Robotica.
Sencillez: ROS est diseado para ser tan sencillo como sea posible de modo que
el cdigo escrito para ROS se pueda utilizar con otros marcos robot de software.
ROS es fcil de integrar con otros sistemas operativos de robots y ya ha sido
integrado con OpenRAVE, Orocos y Player.
Modelo de bibliotecas: es el modelo de desarrollo preferido, consiste en escribir
una serie de programas con interfaces funcionales y limpias que permitan una
rpida modificacin.
Independencia de idiomas: el marco ROS es fcil de implementar en cualquier
lenguaje de programacin moderno. Se ha implementado en Python, C++, y LISP;
y actualmente existen bibliotecas experimentales en Java y Lua.
Modo test: ROS tiene una orden llamada ROSTEST que hace que sea fcil
acceder a un modo prueba de sistema.
Escala: ROS es adecuada para sistemas grandes y ejecucin de los procesos de
gran tamao.
una distribucin de Linux y ofrece un conjunto de software compatible para que todo el
mundo pueda usarla, adems de que por su naturaleza Open Source te permite modificar
cualquier distribucin para poder adaptarla a tus necesidades.
2.1.6 Contribuyendo
Como ROS es un sistema de cdigo abierto, cualquier persona puede contribuir tanto con
el sistema como con las bibliotecas que son compatibles disponiendo para ello de una
seccin especfica dentro de la propia pagina web del software 5.
Paquetes: Los paquetes son la unidad principal para organizar software en ROS.
Un paquete puede contener procesos ejecutables (nodos), una biblioteca
dependiente, conjuntos de datos, archivos de configuracin, o cualquier otra cosa
que sea til para una organizacin conjunta.
Manifiestos: proporcionan metadatos sobre un paquete, incluyendo su informacin
de licencia y dependencias, as como informacin especfica del compilador.
Pilas: Es una coleccin de paquetes que tienen una misma funcin.
Manifiestos de pilas: proporcionan datos sobre una pila, incluyendo su informacin
de licencia y sus dependencias en otras pilas.
Mensajes: definen las estructuras de datos para los mensajes enviados en ROS.
Servicios: definen la solicitud y estructuras de datos de respuesta de los servicios
requeridos por ROS.
Nodos: Los nodos son procesos que llevan a cabo clculos. ROS est diseado
para ser modular en una escala bsica. Un sistema de control de robot
comprender usualmente muchos nodos. Por ejemplo, un nodo controla un
telmetro lser, un nodo controla los motores de las ruedas, un nodo realiza
localizacin, un nodo realiza la planificacin de ruta, un nodo proporciona una vista
grfica del sistema, y as sucesivamente.
[Link]
13
[Link]
14
15
Una vez preparado nuestro sistema para instalar ROS procedemos a la instalacin del
sistema operativo, para ello usamos la funcin que nos descargar el sistema por
completo (en el caso de tener algun tipo de problema con la instalacin de alguna fase se
puede instalar uno por uno todos los componentes necesarios).
Primero comprobamos que est todo actualizado con la funcin
$ sudo apt-get update
17
18
Y luego la funcin:
$ rosdep update
Ya tenemos ROS instalado en nuestro sistema Ubuntu, y ahora solo nos quedara aadir
un par de configuraciones mas que son recomendables.
La primera es para que las variables de entorno que creemos se aadan
automaticamente a nuestra sesin, para ello usamos la funcin:
$ echo source /opt/ros/groovy/[Link] >> ~/.bashrc
Y luego:
$ source ~/.bashrc
Tambin es conveniente instalar rosinstall, que es un aadido que nos permitir
descargarnos facilmente el codigo fuente de muchos aadidos con solo un comando, para
ello usamos el comando:
$ sudo apt-get install python-rosinstall
Tras esto ya tendremos nuestro sistema listo para trabajar con el.
20
En este caso para probar que la configuracin del programa sea la correcta vamos a
utilizar uno de los programas ya creados y que podemos encontrar dentro de la pagina de
ROS, hablamos de turtlesim, que es un sencillo programa que utilizaremos de aqui en
adelante para nuestro ejemplos.
Para descargarnos esta distribucin a nuestro sistema utilizaremos el comando
$ sudo apt-get install ros-fuerte-ros-tutorials
Y tras introducir nuestra contrasea de administrador nos debera aparecer una pantalla
como esta:
23
Tambin sealar que este paso solo es necesario la primera vez que ejecutamos el
programa, las dems veces podremos obviar este paso ya que en nuestro sistema ya
tendremos todos los ficheros generados y solo habr que activarlos.
24
25
Ahora ya puedes mover con las teclas de direccin la tortuga del ejemplo
Ventana que muestra el funcionamiento de turtlesim tras pulsar las teclas de direccin.
26
5. ROS en profundidad
Tras una breve explicacin vamos a proceder a una explicacin mas en profundidad de
como funciona ROS, su jerarqua y su forma de trabajar.
5.1 Estructura
Lo primero que vamos a ver es la estructura del sistema operativo, de lo mas global
(repositorio) a lo mas especifico (nodo).
5.1.1 Repositorio
!
!
Son ficheros compuestos por uno o mas paquetes y pilas, y que nos permiten
descargarnos los ficheros necesarios de forma mas cmoda.
5.1.3 Paquete
Es la unidad principal de organizacin en ROS, contiene todo lo necesario para hacer ser
funcional y es anlogo a un paquete en C.
5.1.4 Nodo
Son los procesos ejecutable que estn incluidos dentro de los paquetes.
Normalmente de utilizan varios nodos en los programas.
5.2.2 Tpicos
Tpicos o temas, son los nombres que identifican el contenido de un mensaje; y estos se
enrutan de dos formas, una publicador y otra suscriptor.
Un nodo que est interesado en un determinado tipo de datos se suscribe al tema
correspondiente.
Puede haber varios editores y suscriptores concurrentes a un mismo tema, y un nico
nodo puede publicar y / o suscribirse a mltiples temas. En general, los editores y
suscriptores no son conscientes de la existencia de los dems.
Se puede pensar en un tema como un Bus de mensajes. Cada Bus tiene un nombre, y
cualquier persona puede conectarse al bus para enviar o recibir mensajes, siempre y
cuando sean del tipo correcto.
5.2.3 Mensajes
Los nodos se comunican entre s pasando mensajes. Un mensaje es simplemente una
estructura de datos, que comprende los tipos de campos. Los mensajes pueden incluir
estructuras arbitrariamente anidadas y matrices (al igual que las estructuras de C).
28
5.2.4 Maestro
El Maestro proporciona registro de nombres y la bsqueda para el resto de los nodos. Sin
el Maestro, estos no seran capaces de encontrar mensajes entre s, intercambiar, o
invocar los servicios, lo que hace que sea totalmente indispensable a la hora de ejecutar
cualquier tipo de programa.
5.2.5 Bags
Las bolsas son un formato para guardar y reproducir datos de un mensaje de ROS,
permitindonos almacenar una serie de ordenes y despus repetirlas secuencialmente.
Las bolsas son un mecanismo importante para el almacenamiento de datos, tales como
datos de un sensor, que puede ser difcil de recoger, pero es necesaria para desarrollar y
probar algoritmos.
6. El desarrollo de un programa
6.1 Espacio de trabajo
!
Como en cualquier otro programa, en nuestro sistema necesitaremos un lugar donde
trabajar, en este caso se requiere de un rea para crear nuestras pilas y paquetes, y su
posterior modificacin en caso de ser necesario.
Para crear un nuevo espacio de trabajo utilizaremos el comando rosws, que se utiliza de
la forma:
$ rosws init [nombre del espacio de trabajo] [localizacin de los ficheros de ros]
Por ejemplo, para crear un espacio de trabajo llamado prueba_UPCT lo haremos de la
forma:
$ rosws init prueba_UPCT /opt/ros/fuerte
Al ejecutar este comando, automaticamente se crearan una serie de archivos necesarios
dentro de una carpeta localizada en home/nombre_de_usuario/prueba_UPCT, en este
caso nos crear [Link], [Link], [Link] adems de un archivo oculto
denominado .rosinstall dentro de esta carpeta.
29
30
$ roscd Localizacion_del_fichero
Si utilizamos esta funcin sin argumentos, nos llevar directamente al espacio de trabajo
Para ver una lista con los ficheros contenidos dentro de un package o stack teclearemos
el cdigo rosls
$ rosls Localizacion_del_fichero
Para esta ltima funcin existe una pequea herramienta ya incorporada que nos ayudar
en nuestro trabajo, ya que podemos empezar a escribir el nombre de los paquetes o las
pilas y cuando tengamos mas de dos letras escritas, si pulsamos la tecla tabulador, l nos
completar el nombre de forma automtica.
6.3.1 Rospack
Rospack es una herramienta que sirve para recuperar informacin en los paquetes de
ROS, de forma parecida a como se hara bajo el entorno Linux con los comandos cd o ls.
Podemos encontrar una amplia variedad de comandos que van desde la localizacin de
paquetes de ROS en el sistema de archivos, a un listado de pilas disponibles.
Una funcin que nos puede ayudar mucho sera:
$ rospack help
Donde nos mostrar todos lo comandos disponibles bajo esta funcin.
Un ejemplo de uno de los comandos disponibles sera, en el caso de querer encontrar un
paquete, y se utilizara de la forma:
$ rospack find Nombre_del_paquete
6.3.2 Rosstack
Rosstack es una herramienta de lnea de comandos que nos permite recuperar
informacin sobre las pilas en ROS. Implementa una amplia variedad de comandos que
van desde la localizacin de las pilas de ROS en el sistema de archivos, a la lista de pilas
disponibles para el clculo del rbol de dependencia de las [Link] se utiliza en
ROS para el clculo de la informacin y para construir las pilas.
Su uso es muy parecido al descrito en el apartado anterior con los packages, solo habra
que sustituir pack por stack, es decir usar el comando:
$ rosstack
El primer paso ser activar roscore tal y como hemos visto en el punto anterior.
Justo despus activaremos nuestro programa de prueba turtle y el nodo teleop_turtle para
poder ver su funcionamiento.
Ahora vamos a verificar qu nodos estn activos, para ello utilizaremos rosnode,
introduciendo en el terminal:
$ rosnode list
y se debera ver una respuesta:
Esto significa que en este caso est activo el nodo rosout (es un nodo que siempre tiene
que estar activo, y es el encargado de recoger y registrar todos los nodos de depuracin),
y los nodos turtlesim (nos muestra la tortuga por pantalla) y teleop_turtle (encargada de
mover la tortuga cuando pulsemos las teclas de direccin de nuestro equipo).
Para ver la informacin de cualquier nodo, podemos usar el comando:
$ rosnode info /rosout
En este ejemplo, lo que se ha pedido es al paquete rosnode que nos proporcione
informacin sobre el nodo rosout, y obtendremos una pantalla parecida a esta
34
como podemos ver en el ejemplo, nos da toda la informacin relativa a las publicaciones,
sus subscripciones, servicios, y la forma de comunicarse con este.
Para activar cualquier nodo, usaremos el comando rosrun, escribindolo en el terminal de
la forma:
$ rosrun [nombre_paquete] [nombre_nodo]
Por ejemplo si tenemos un nodo llamado sensor_temperatura, y est dentro del paquete
turtlesim, para activarlo se hara del modo que sigue:
$ rosrun turtlesim sensor_temperatura
y si en un nuevo terminal introducimos:
$ rosnode list
Veremos como a nuestra lista de nodos se ha aadido un nuevo nodo que tendra por
nombre /sensor_temperatura
Tambin podemos cambiar el nombre a un nodo en cualquier momento, el nico requisito
es que no est en uso, por ejemplo, vamos a cambiar el nombre de sensor_temperatura a
sensor_interno, para ellos usamos el comando:
$ rosrun [nombre_paquete] [nombre_nodo] __name:=[nuevo_nombre]
En nuestro ejemplo nos quedara:
35
6.5.2 Tpicos
Los tpicos, o tambin llamados temas, es el sistema usado por los nodos para
comunicarse entre ellos.
Lo primero que debemos hacer para poder comprender los tpicos, es activar los nodos
que queramos usar, para ello usamos la funcin del apartado anterior:
$ rosrun [nombre_paquete] [nombre_nodo]
Por facilidad de comprensin y usabilidad, al igual que en los ejemplos anteriores, vamos
a hacer uso de los archivos de prueba llamados turtlesim, y turtle_teleop.
Ahora podremos usar las flechas del teclado para describir una trayectoria (en caso que
no puedas usar las flechas para dirigirla, prueba a tener activa la pantalla de terminal
correspondiente al nodo turtle_teleop_key).
Para poder ver ms a fondo su funcionamiento, usaremos el paquete rqt_graph, cuya
funcin es la de crear grficos dinmicos del sistema sobre lo que va a suceder en tiempo
real.
Para asegurarnos de que tenemos este paquete instalado usamos la siguiente funcin de
terminal:
$ sudo apt-get install ros-<distribucion-usada>-rqt
Sustituyendo distribucion-usada, por tu distribucin de ROS (Fuerte, Groovy, etc.)
Una vez verificado, o en su caso instalado el paquete, procedemos a usarlo, tecleando en
un nuevo terminal:
$ rosrun rqt_graph rqt_graph
y el programa debera mostrar una pantalla parecida a la siguiente:
36
37
Una vez realizada una introduccin general sobre los tpicos, procedemos a realizar una
visin mas a fondo del comando rostopic.
El comando rostopic nos proporciona informacin acerca de los tpicos, y podemos
acceder a las diferentes opciones que nos ofrece esta funcin con el comando:
$ rostopic -h
Donde nos mostrar la ayuda de esta funcin.
Vamos a ver mas en detalle que es lo que hace la mayora de estos comandos.
- rostopic echo
Esta funcin nos muestra en pantalla los datos publicados en un tpico.
La funcin se usa de la forma:
!
- rostopic list
Este comando nos devuelve una lista de todos los tpicos a los que est subscrito y
publicando, este comando tambin tiene su propia ayuda, para acceder a ella solo
tenemos que introducir en un terminal nuevo:
!
$ rostopic list -h
En este caso vamos a ver un ejemplo del modo verboso del sistema
$ rostopic list -v
Si seguimos con el ejemplo del fichero turtle, nos devolver una respuesta como
esta:
39
turtlesim/velocity
float32 linear
float32 angular
40
-rostopic pub
Este comando es el encargado de publicar datos en un tpico que est publicado en
ese momento.
El comando se usa de la forma:
!
- rostopic hz
Es el encargado de mandar la informacin a la frecuencia requerida
El comando tiene la forma:
$ rostopic hz [topic]
Vemos ahora como funciona en nuestro ejemplo:
$rostopic hz /turtle1/pose
y veremos:
!
!
!
!
!
!
!
subscribed to [/turtle1/pose]
average rate: 59.354
! !
min: 0.005s max: 0.027s std dev: 0.00284s window: 58
average rate:! 59.459
! !
min: 0.005s max: 0.027s std dev: 0.00271s window: 118
average rate: 59.539
min: 0.004s max: 0.030s std dev: 0.00339s window: 177
average rate: 59.492
! !
min: 0.004s max: 0.030s std dev: 0.00380s window: 237
average rate: 59.463
41
6.5.3 Mensajes
Un mensaje es una estructura de datos simples que sirven para que los nodos se
comuniquen entre si.
Los mensajes soportan las mayora de estructuras de datos usados en la actualidad
(enteros, decimales, booleanos, etc.), as como las estructuras anidadas.
Los mensajes son guardados en un fichero msg en un subdirectorio del paquete, y usan
el nombre estndar de ROS, por ejemplo std_msgs/msg/[Link]; como medida de
seguridad adicional, los mensajes usan MD5, lo que nos permite saber en todo momento
si hay alguna parte del mensaje o del nodo que no est funcionando correctamente, esto
nos permite por ejemplo que cuando un nodo se comunica con otro mediante un mensaje,
si este est incompleto, el sistema lo puede detectar al momento y no tener en cuenta
este mensaje, realizando una peticin de que se vuelva a enviar.
Un mensaje puede incluir un tipo especial de mensaje llamado encabezamiento, que
incluye algunos metadatos comunes para este tipo de ficheros (numero de identificacin,
marcas de tiempo, etc.).
6.5.4 Servicios
Los servicios son los encargados de permitir que los nodos enven peticiones y reciban
respuestas.
Tal y como sucede con los tpicos, aqu disponemos de diversas funciones que nos
pueden ayudar a comprender y actuar con nuestro sistema.
El comando para acceder a estas funciones funciona de la forma:
$ rosservice [argumento]
Los diferentes argumentos que existen para esta funcin son:
- list
Muestra la informacin acerca de un servicio activo.
- call
!
Llama a un servicio con los argumentos seleccionados, por ejemplo para vaciar un
servicio, utilizaremos el argumento clear, lo que har que se borren todos los datos
introducidos con anterioridad.
!
42
- type
!
Imprime un servicio.
- find
!
Encuentra servicios.
6.5.5 Parmetros
Los parmetros nos permiten guardar y manipular los datos introducidos en ROS, hay que
tener en cuenta dentro de estos datos se pueden usar datos de tipo integers (enteros),
floats (decimales) , boolean (verdadero o falso), dictionaries (diccionarios) y list (listas).
El uso de esta funcin es de la forma:
$ rosparam [argumento]
los argumentos existentes para esta funcin son:
- set
!
establece un parmetro.
- get
!
obtiene un parmetro.
- load
!
carga un parmetro desde un archivo.
- dump
!
manda el parmetro a un archivo.
- delete
!
borra un parmetro.
- list
!
proporciona los nombres de los parmetros en forma de lista.
43
Sistema de depuracin.
44
Para visualizar los datos guardados, solo tendremos que usar la funcin:
$ rosbag info Nombre_del_fichero
En nuestro caso quedara:
$ rosbag info [Link]
Para volver a recuperar los datos guardados, para que el programa siga por donde se
qued solo tenemos que aadir play tras el comando rosbag
$ rosbag play Nombre_del_fichero
Que en nuestro ejemplo sera asi:
$ rosbag play [Link]
46
7. Virtualizando ROS
7.1 Rviz
ROS dispone de una herramienta de visualizacin en 3D llamada RVIZ que posibilita que
nuestro robot Qbo, o prcticamente cualquier otra plataforma robtica, pueda ser
representada en imagen 3D, respondiendo en tiempo real a lo que le ocurre en el mundo
real.
RVIZ se puede usar para mostrar lecturas de sensores, datos devueltos por la visin
estereoscpica (Cloud Point), hacer SLAM (localizacin y mapeo simultneo) evitando
obstculos, etc. Esta herramienta dispone as mismo, de muchsimas opciones de
configuracin.
Para generar cada modelo de robot en particular, se tiene que editar en un archivo XML y
escribir en URDF (Unified Robot Description Format) donde se especifican las
dimensiones del robot, los movimientos de las articulaciones, parmetros fsicos como
masa e inercia, etc. En el caso de robots con muchas articulaciones ROS dispone de otra
herramienta llamada TF que es una biblioteca que facilita la elaboracin en estos casos.
De todas formas ROS tiene modelos ya creados para probar con RVIZ.
Lo primero que tenemos que hacer es inicializar ROS, abriendo una ventana desde la
terminal y escribiendo en ella:
$ roscore
Luego abrimos otra ventana desde terminal y escribimos:
47
7.2 Gazebo
Gazebo7 es un simulador grfico de cdigo abierto que se integra perfectamente con ROS
y nos permite virtualizar nuestro robot, as como el entorno sobre el que va a funcionar,
permitindonos probar el funcionamiento de este en un entorno controlado antes de
llevarlo a la realidad, ayudndonos a ahorrar dinero y esfuerzos a la hora de crear un
sistema desde cero o reutilizar un sistema ya generado con anterioridad.
Primero procedemos a instalarlo en nuestro sistema.
$ sudo apt-get install ros-groovy-simulator-gazebo
Y ahora procedemos a instalar el robot de prueba
$ sudo apt-get install ros-groovy-pr2-simulator
Tenemos multitud de opciones a la hora de utilizar Gazebo, en este caso vamos a
inicializar el programa con un mundo virtual vaco sobre el que pondremos un robot de
ejemplo creado por los programadores de ROS (Willow Garage), para ello abrimos una
ventana de terminal y ponemos la funcin:
$ roslaunch gazebo_worlds empty_world.launch
Esto nos abrir una ventana parecida a esta.
[Link]
48
Y ahora vamos a aadir el robot citado anteriormente, en este caso el robot PR2
$ rosmake pr2_gazebo
$ roslaunch pr2_gazebo [Link]
Una vez que tengamos el robot en nuestro mundo virtual, ya podremos utilizarlo como si
estuviramos en la vida real, o bien mediante nodos automatizados, o bien aadiendo
nodos que nos permitan moverlo de forma manual.
8. ROS y la docencia
8.1. Aplicaciones docentes
El sistema ROS es un sistema que permite ir desde la base mas simple de la robtica
hasta el apartado mas complejo, ya que nos permite utilizar la mayora de robots que se
usan en la actualidad en los centros de enseanza e investigacin, y tambin nos permite
el crear nuestro propio robot desde cero.
En el mes de Septiembre de 2013, hay mas de 65 instituciones docentes de todo el
mundo trabajando e investigando con el sistema operativo de ROS,.
49
[Link]
50
9. Aplicacin
9.1 Creando nuestra aplicacin
Ahora que ya conocemos el sistema de ROS en profundidad vamos a proceder a crear
nuestro propio programa, y que mejor para mostrar su funcionamiento que crear el primer
programa tpico en todos los sistemas, el denominado Hola Mundo, para ello vamos a
generar nuestro espacio de trabajo. el paquete que contendr nuestro programa y un
nodo que muestre por pantalla esta frase.
52
Lo primero que vamos a hacer es crear nuestro espacio de trabajo, esto nos permitir
tener un lugar donde guardar nuestro programa y poder trabajar tanto con el que vamos a
crear ahora como con proyectos personales futuros.
Vamos a crear nuestro espacio de trabajo, indicndole a nuestro sistema que genere todo
lo necesario para utilizarlo como un paquete de ROS, al igual que lo tiene en el directorio
opt/ROS
rosws init ~/groovy_workspace /opt/ros/groovy
53
Y ahora procedemos a indicarle a nuestro sistema que este directorio recin creado va a
ser un espacio de trabajo de ROS.
$ rosws set ~/groovy_workspace/UPCT
54
Y ahora lo que hay que hacer es configurar el archivo .bash para indicarle a cada terminal
donde debe trabajar.
$ source ~/groovy_workspace/[Link]
Hay que destacar que deberemos de utilizar este ultimo comando en cada uno de los
terminales abiertos que queramos trabajar con nuestro sistema, o bien configurarlo dentro
del repositorio general para que lo seleccione de forma automtica.
Para confirmar que nuestro directorio lo reconoce ROS como un directorio vlido de
trabajo utilizaremos la funcin:
$ echo $ROS_PACKAGE_PATH
A lo que veremos una pantalla parecida a esta:
Ahora lo que vamos a hacer es comprobar que ROS es capaz de encontrar este nuevo
paquete
$ rospack find UPCT_PFC
A lo que veremos en pantalla una respuesta como esta:
!
/home/parallels/groovy_workspace/UPCT/UPCT_PFC
Ahora procedemos a construir nuestro paquete y para ellos solo tenemos que introducir
en nuestro terminal
$ rosmake UPCT_PFC
56
57
$ gedit [Link]
58
Estos ficheros nos ayudan a tener una idea general del proyecto, de su autor y de su
forma de funcionar, y puede ayudar a cualquier persona a saber si lo que busca lo va a
encontrar en este paquete o no, as como mantener una forma de jerarquizar los
paquetes iguales para todo el mundo.
puts("HOLA MUNDO");
puts("---------------------------");
puts("PFC Alvaro Garcia");
ros::spin();
return 0;
//espera en funcionamiento hasta que se lo indiquemos por teclado
}
Tras introducir el cdigo, lo guardamos y lo cerramos, y ahora procedemos a editar el
fichero [Link] y aadimos al final de todo el cdigo:
rosbuild_add_executable(hola_mundo src/[Link])
Esto hace que cuando generemos nuestro programa el sistema generar un ejecutable
con el nombre hola_mundo, y cuyo cdigo estar en la carpeta src/[Link]
Una vez realizado esto, debemos generar nuestro programa, para ello introducimos en
nuestro terminal:
$ make
Lo que nos tras unos segundos nos devolver una salida por pantalla parecida a esta
Raspberry Pi, este ltimo debido a que es un sistema totalmente nuevo y an poco
extendido.
Cabe destacar que un sistema que esta soportado por una gran comunidad tiene infinidad
de cosas positivas, pero tambin tiene varios apartados negativos, el primero de ellos es
que al existir gran cantidad de repositorios, no todos tienen por que funcionar totalmente,
y la solucin a los errores de estos dependen tambin de la comunidad, lo que puede
hacer que si es un repositorio que no sea usado normalmente, el fallo no sea descubierto
de inmediato, y la correccin tarde en llegar; y otro de los principales problemas que
puede suceder, es que hoy en da cualquier fundacin o sistema de este tipo necesita
unos recursos bastante abundantes que son muy difciles de cubrir con donaciones, y con
pequeas contribuciones por parte de empresas privadas, lo que puede llevar a que en
pocas de crisis o con una competencia fuerte las empresas y socios prefieran invertir ese
dinero en otros sistemas, pudiendo llegar a la descontinuacin de ROS provocando la
migracin obligatoria a otros sistemas.
Como futuros proyectos propuestos se podra dividir en dos vertientes, una mas terica,
en la cual se pueden desarrollar robots en los entornos virtuales descritos en este
documento, e incluso generar un Robot de los disponibles en los laboratorios, para
comprobar que todo el programa funcionan de forma correcta,y una vertiente real, donde
se vaya utilizando ROS para generar el cdigo necesario para mover un robot real, al que
se le pueden ir aadiendo mas funciones con el paso del tiempo. Por supuesto estas dos
vertientes pueden ser complementaria, ya que lo ideal sera generar un robot en el
sistema virtual, probar que todo el cdigo es completamente funcional, y luego cargarlo en
nuestro robot real.
11. Bibliografa
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
78002/
[Link]
[Link]
[Link]
63
[Link]
[Link]
[Link]
[Link]
ROS By Example GROOVY - Volume 1 Autor: R. Patrick Goebel
[Link]
64