0% encontró este documento útil (0 votos)
142 vistas64 páginas

Introducción a ROS y su instalación

El documento presenta una visión general del Robot Operating System (ROS), su historia, funcionamiento y aplicaciones en robótica. Se detalla la instalación en diferentes sistemas operativos y se ofrecen primeros pasos para trabajar con ROS, así como sus ventajas y desventajas en comparación con otros sistemas. Además, se menciona la importancia de la comunidad de desarrollo y el soporte para diversos lenguajes de programación y hardware.

Cargado por

David Sandoval
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
142 vistas64 páginas

Introducción a ROS y su instalación

El documento presenta una visión general del Robot Operating System (ROS), su historia, funcionamiento y aplicaciones en robótica. Se detalla la instalación en diferentes sistemas operativos y se ofrecen primeros pasos para trabajar con ROS, así como sus ventajas y desventajas en comparación con otros sistemas. Además, se menciona la importancia de la comunidad de desarrollo y el soporte para diversos lenguajes de programación y hardware.

Cargado por

David Sandoval
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

ROS: Robot Operating System

Titulacin:I.T.I Electrnica Industrial


Intensificacin:
Alumno/a:Alvaro Garca Cazorla
Director/a/s:Jose Luis Muoz Lozano

Cartagena, 7 de Septiembre de 2013

1. Memoria de proyecto !

2. ROS!

2.1 Introduccin a ROS!

2.1.1 Los robots de antes y los de ahora!

2.1.2 Qu es ROS!

11

2.1.3 Objetivos de ROS!

12

2.1.4 Sistemas operativos admitidos!

12

2.1.5 Nuevas bibliotecas!

12

2.1.6 Contribuyendo!

13

2.2 Funcionamiento del sistema!

13

2.2.1 Sistema de archivos!

13

2.2.2 Computacin a nivel Grfico!

13

2.2.3 La comunidad y ROS!

14

[Link] del sistema!

14

3.1 Sistemas Linux!

15

3.2 Sistemas MAC OS X!

21

3.3 Sistemas Windows!

22

4. Primeros pasos con ROS!


4.1 Iniciar/configurar el programa!

5. ROS en profundidad!

22
22

27

5.1 Estructura!

27

5.1.1 Repositorio!

27

5.1.2 Pila (Stack)!

27

5.1.3 Paquete!

27

5.1.4 Nodo!

27

5.2 Computacin en ROS!

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

6.1 Espacio de trabajo!

29

6.2 Sistema de archivos!

30

6.3 Packages y Stacks!

31

6.3.1 Rospack!

32

6.3.2 Rosstack!

32

6.4 Motor de ejecucin!

32

6.5 Obtener datos!

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

6.6 Sistema de depuracin!

43

6.7 Trabajar con datos!

44

6.8 Visualizando los datos!

46

7. Virtualizando ROS!

47

7.1 Rviz!

47

7.2 Gazebo!

48

8. ROS y la docencia!

49

8.1. Aplicaciones docentes!

49

8.2. Sensores soportados!

50

9. Aplicacin!
9.1 Creando nuestra aplicacin!

52
52
3

9.2 Preparando el sistema!

52

9.3 Creando nuestro paquete!

55

9.4 Preparando nuestro programa!

57

9.5 Construyendo nuestro programa!

59

9.6 Arrancando nuestro programa!

61

10. Conclusin y proyectos futuros!

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.

2.1 Introduccin a ROS!


!
!
2.1.1 Los robots de antes y los de ahora
Un robot es una mquina controlada por ordenador y programada para moverse,
manipular objetos y realizar trabajos a la vez que interacciona con su entorno. Su objetivo
principal es el de sustituir al ser humano en tareas repetitivas, difciles, desagradables e
incluso peligrosas de una forma ms segura, rpida y precisa. Algunas definiciones
aceptadas son las siguientes:
"Dispositivo multifuncional reprogramable diseado para manipular y/o transportar
material a travs de movimientos programados para la realizacin de tareas
variadas." (Robot Institute of America, 1979).
Mquina o ingenio electrnico programable, capaz de manipular objetos y realizar
operaciones antes reservadas solo a las personas. (Diccionario de la lengua espaola,
2013).
Los robots exhiben tres elementos claves segn la definicin adoptada:
!
!

- Programable, lo que significa disponer de capacidades computacionales y de


manipulacin de smbolos (el robot es un computador).

!
!

- Capacidad mecnica, que lo capacita para realizar acciones en su entorno y no


ser un mero procesador de datos (el robot es una mquina).

!
!

- Flexibilidad, puesto que el robot puede operar segn un amplio rango de


programas y manipular material de formas distintas.
5

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.

robot Unimate 2000 (1967)


[Link]

En 1968 se publica el desarrollo de un computador con "manos", "ojos" y


"odos" (manipuladores, cmaras de TV y micrfonos) por parte de McCarthy en el
Stanford Artificial Intelligence Laboratory. En el mismo ao, Pieper estudia el problema
cinemtico de un manipulador controlado por un computador. Tambin este ao, la
compaa japonesa Kawasaki Heavy Industries negocia con Unimation la licencia de sus
robots. Este momento marca el inicio de la investigacin y difusin de los robots
industriales en Japn.

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.

Evolucin de los robots humanoides (2013)


[Link]
10

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.

2.1.3 Objetivos de ROS


El objetivo de ROS no es ser un sistema pionero en la robtica, el objetivo principal de
ROS es apoyar el cdigo reutilizable en la investigacin robtica y el desarrollo. El
sistema es una estructura distribuida en procesos (tambin conocidos como nodos o
clases ) que permite a los ejecutables ser diseados de forma individual y utilizarse de
forma flexible en tiempo real. Estos procesos se pueden agrupar en paquetes y pilas , que
pueden ser fcilmente compartidos y distribuidos. ROS tambin es compatible con el
sistema de repositorios, que permiten la colaboracin a nivel internacional permitiendo
tomar decisiones independientes sobre el desarrollo y la ejecucin, pero con la ventaja de
poder ayudarse de las herramientas o archivos creados por otros en sus proyectos.
El objetivo principal de este proyecto es el de compartir y colaborar, pero hay varios
objetivos mas dentro del marco ROS:

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.

2.1.4 Sistemas operativos admitidos


ROS en la actualidad slo se ejecuta de forma totalmente funcional en plataformas
basadas en UNIX. el Software de ROS est principalmente probado en Ubuntu y Mac OS
X, aunque la comunidad ROS ha contribuido al apoyo a Fedora, Gentoo, Arch Linux y
adems de otras plataformas Linux.
Respecto a Microsoft Windows, es un sistema en el que podremos instalar nuestro
sistema ROS, aunque todava existen algunos pequeos errores que se estn intentando
solucionar.

2.1.5 Nuevas bibliotecas


Tanto el ncleo del sistema ROS, como los tiles, herramientas y bibliotecas son creados
y actualizados regularmente como una distribucin de ROS . Esta distribucin es similar a
12

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.

2.2 Funcionamiento del sistema


ROS tiene tres niveles de conceptos: el nivel del sistema de archivos, el nivel de
Computacin Grfica, y el nivel comunitario. Estos niveles y conceptos se resumen a
continuacin

2.2.1 Sistema de archivos


Son recursos que se encuentran en el propio programa:

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.

2.2.2 Computacin a nivel Grfico


La computacin a nivel grfico es la red ROS que se encarga de procesar todos los datos.
Los conceptos bsicos son nodos , maestro , mensajes y temas, los cuales proporcionan
los datos de diferentes maneras:

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

Maestro: El Maestro proporciona registro de nombres y la bsqueda para el resto


de la Computacin Grfica. Sin el Maestro, los nodos no seran capaces de
encontrar mensajes entre s, intercambiar, o invocar los servicios.
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).
Temas : Los mensajes se enrutan a travs de un sistema de transporte de
publicacin / suscripcin semntica. Un nodo enva un mensaje por publicar a un
determinado tema. El tema es un nombre que se utiliza para identificar el contenido
del mensaje. 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.

2.2.3 La comunidad y ROS


Los conceptos comunitarios ROS Nivel ROS son recursos que permiten a las
comunidades el intercambio del software y del conocimiento. Estos recursos incluyen:

Distribucin: Son colecciones de versionadas en pilas que se pueden instalar. Las


distribuciones juegan un papel similar al de las distribuciones de Linux: hacen que
sea ms fcil para instalar un conjunto de programas informticos, y tambin
mantener versiones consistentes a travs de un conjunto de software.
Repositorios: ROS se basa en una red federada de repositorios de cdigo, donde
diferentes instituciones pueden desarrollar y lanzar sus propios componentes de
software del robot.
El wiki de ROS 6: La comunidad Wiki es el foro principal para documentar la
informacin sobre ROS. Cualquier persona puede inscribirse con una cuenta y
contribuir con su propia documentacin, facilitar las correcciones o actualizaciones,
escribir tutoriales y ms.
Respuestas de ROS: un sitio de preguntas y respuestas para contestar a las
preguntas relacionadas con ROS.
Blog: El blog de Willow Garage(creador de ROS) ofrece actualizaciones peridicas,
incluyendo fotos y videos.

[Link] del sistema


En este captulo vamos a comenzar con la toma de contacto con el programa, y para ello
vamos a enumerar los pasos necesarios para poder usarlo en algunos de los sistemas
operativos soportados, aunque en nuestro caso se detallar ms Ubuntu ya que es con el
que se ha realizado este documento.

[Link]
14

3.1 Sistemas Linux


Vamos a proceder a instalar ROS en Linux, en nuestro caso se ha escogido Ubuntu 12.04
ya que es la ultima actualizacin estable disponible en el momento de realizar este
documento.
Primero comprobamos que tengamos actualizado nuestro sistema, en esta versin
podemos encontrar en la parte izquierda de la pantalla principal el programa llamado
update manager.

Vista principal de Ubuntu 12.04

Para comenzar abrimos la utilidad de Terminal.

15

Vista de uno de los accesos a terminal.

A continuacin preparamos el sistema para que acepte los paquetes de informacin de la


pagina del repositorio [Link], para ello usamos la funcin correspondiente a
nuestro sistema.
$ sudo sh -c 'echo "deb [Link] precise main" > /etc/apt/
[Link].d/[Link]'
Tras introducir la funcin anterior, nos pedir la contrasea de usuario para confirmar que
queremos aceptar esta funcin, y terminal volver a modo espera.

Ventana de terminal tras preparar el sistema.


16

Lo siguiente es descargarte el fichero correspondiente a tu teclado, para ello usamos la


funcin:
$ wget [Link] -O - | sudo apt-key add -

Ventana de terminal tras instalar el teclado de ROS.

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

Ventana de ejemplo del uso de update.

y luego usamos la funcin:


$ sudo apt-get install ros-groovy-desktop-full
y nada mas pulsar la tecla intro el programa se pondr a funcionar descargando todo lo
necesario para que el sistema funcione.
Durante la instalacin podremos configurar varios aspectos que tendr nuestro sistema,
como por ejemplo si solo va a trabajar en modo local, o se podr utilizar tambin en
remoto.
Cuando termine de descargar e instalar todos los paquetes deberemos ver algo parecido
a esto:

18

Ventana de terminal tras la instalacin de ROS.

A continuacin iniciamos el programa rosdep y comprobamos que est actualizado, para


ello usamos primero la funcin:
$ sudo rosdep init

Ventana de terminal tras inicializar Rosdep.


19

Y luego la funcin:
$ rosdep update

Ventana de terminal tras actualizar Rosdep.

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

3.2 Sistemas MAC OS X


Para proceder a instalar ROS en MAC OS X, primero deberemos descargarnos un
programa denominado Homebrew que nos permitir y ayudar a instalar todo lo necesario
para poder trabajar con l.
La aplicacin hombrew de instala escribiendo en el terminal de MAC OS X el siguiente
cdigo:
ruby -e $(curl -fsSL [Link]
tras indicarle al programa que estamos seguros que queremos instalar el programa, se
descargar e instalar todo los componentes del programa
De forma adicional podemos ejecutar desde terminal el codigo
brew doctor
Y el programa comprobar los archivos que va a necesitar, si estn instalados o
desactualizados.
Lo siguiente que debemos hacer es instalar el software adicional necesario
$ brew update
$ brew install cmake
y ahora comenzamos a descargar los primeros ficheros necesarios para ROS, en este
caso la distribucin Hydro.
$ brew tap ros/hydro
$ brew tap Homebrew/science
Ahora necesitaremos aadia a nuestro fichero /.bashrc lo necesario para que hombrew
trabaje de forma conjunta con terminal
export PATH=/usr/local/bin:/usr/local/share/python:$PATH
export PYTHONPATH= /usr/local/python2.7 /site-packages:$PYTHONPATH
Y ahora configuramos el terminal para que cada vez que lo abramos no tengamos que
reintroducir esta ultima parte del cdigo.
$ brew untap ros/DISTRO
Ahora prepararemos nuestro sistema para poder descargar los ultimos ficheros
necesarios para usar ROS
$ sudo easy_install pip
21

$ sudo pip install -U wstool rosdep rosinstall rosinstall_generator rospkg catkin-pkg


Distribute
$ sudo rosdep init
$ rosdep update
Ahora vamos a crear un espacio de trabajo para catkin.
$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws
Y ahora vamos a a instalar las librerias o complementos necesarios para ROS
$ rosinstall_generator desktop-full --rosdistro hydro --deps --wer-only > [Link]
$ wstool init -j8 src [Link]
Tambin podemos descargar lo basico para el uso usando los dos codigos anteriores,
pero solo poniendo desktop en lugar de desktop-full.
Ahora procedemos a comprobar que tenemos todas las dependencias requeridas.
$ rosdep install --from-paths src --ignore-src --rosdistro hydro -y
Y ya tendremos nuestro sistema preparado para poder usar ROS.

3.3 Sistemas Windows


Este es posiblemente el mas sencillo de todos los sistemas para instalar ROS, aunque no
se debe olvidar que los ficheros para trabajar con Windows estn en fase Beta, y no estn
exentos de fallos de programacin, y desde la propia pgina de Willow Garage nos invitan
a ayudar a mejorarlo.
Para proceder a la instalacin solo deberemos ir a la pgina
[Link]
descargarnos y ejecutar los ficheros necesarios para su correcto funcionamiento.

4. Primeros pasos con ROS


4.1 Iniciar/configurar el programa
Una vez que tenemos el sistema en nuestro ordenador, vamos a proceder a mostrar el
funcionamiento bsico de ROS para mas adelante poder comprender mas a fondo el
sistema a nivel jerrquico.
22

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:

Ventana de terminal mientras se instala los tutoriales.

Cuando llegue al 100% terminal volver al modo de espera y ya tendremos instalado


nuestro ejemplo.

4.2 Ejecutar un programa


Para ejecutar nuestro programa de prueba tendremos que abrir una nueva ventana de
terminal y teclear
$ rosmake turtlesim
tras lo que el programa nos generar todo el directorio turtlesim con todo lo necesario
para trabajar con l

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.

Ventana de terminal de ROS generando el paquete turtlesim.

Luego solo tendremos que teclear


$ rosrun turtlesim turtlesim_node
y con esto veremos algo parecido a esto:

24

Ventana de terminal con turtlesim ejecutndose.

4.3 Ejecutar un subprograma


Ahora vamos a proceder a interactuar con nuestro programa, para ello vamos a activar un
subprograma que nos va a permitir manejar con el teclado la tortuga que vemos en
nuestra pantalla.
Para ello abrimos una nueva ventana de terminal e introducimos:
$ rosrun turtlesim turtle_teleop_key

25

Ventana de terminal que muestra la pantalla de teleoperacin con teclado.

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.2 Pila (Stack)


Es una coleccin de paquetes que comparten una misma funcionalidad, seria el
equivalente a una librera en otros sistemas de programacin, y dentro de estos podemos
encontrar unos ficheros con metadatos que nos proporcionan la informacin para que
estos funcionen de forma correcta (dependencias, compilacin...)

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.

Imagen esquemtica de la jerarquizacin de ROS.


27

5.2 Computacin en ROS


5.2.1 Servicios
Es el tipo de arquitectura encargada de realizar la comunicacin entre nodos, utilizan dos
tipos de mensajes, uno para la solicitud, y otro que es la respuesta dada por el otro nodo
a esa peticin.
En los programas podremos encontrar nodos servidor y nodos clientes.
Tras realizar la solicitud, el nodo servidor se queda en modo espera hasta recibir
respuesta por parte del nodo cliente, y en el caso de que sea el cliente el que realiza una
peticin, el nodo servidor la procesar y responder al cliente con la informacin requerida

Mecanismo de comunicacin entre nodos.

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

Muestra de como crea la carpeta en nuestro sistema de ficheros.

6.2 Sistema de archivos


!
Utilizando el comando rosws visto en el punto anterior, todos los paquetes sern incluidos
de forma automtica dentro de la variable ROS_PACKAGE_PATH cada vez que llamamos
al archivo [Link] del espacio de trabajo necesario.
Por ejemplo, para poder crear una subcarpeta dentro de nuestro espacio de trabajo,
utilizaremos la funcin mkdir y aadiremos la carpeta paquete_prueba, y esto se hara de
la siguiente forma
$ mkdir prueba_UPCT/paquete_prueba

30

Muestra de la subcarpeta creada.

A continuacin lo que haremos es seleccionar nuestro espacio de trabajo, para que de


forma automtica todos los paquetes se incluyan en el directorio anterior.
$ rosws set home/Nombre_de_usuario/prueba_UPCT/paquete_prueba
$ source /prueba_UPCT/[Link]
si queremos tambin se puede configurar el programa para dejar configurado el entorno
de forma automtica para cada vez que se abra un nuevo terminal, para ello utilizaremos
las siguientes funciones
$ echo"source/opt/ros/fuerte/[Link]">>~/.bashrc
$ echo"exportROS_PACKAGE_PATH=~/miworkspace:$ROS_PACKAGE_PATH">>
~/.bashrc
$ echo"exportROS_WORKSPACE=~/miworkspace">>~/.bashrc
$ echo"exportROS_HOSTNAME=localhost">>~/.bashrc
$ echo"exportROS_MASTER_URI=[Link]

6.3 Packages y Stacks


Los Packages y los Stacks son los que anteriormente denominbamos paquetes y pilas,
pero le hemos dejado su nombre original para una mayor facilidad a la hora de
familiarizarnos en esta parte del documento.
Para ir a una ubicacin especfica dentro de un package o stack usaremos la funcin
roscd, que se usa de la forma:
31

$ 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

6.4 Motor de ejecucin


32

El motor de ejecucin es una coleccin de nodos y programas bsicos necesarios para


poder trabajar con ROS, y es esencial para que todos los nodos se puedan comunicar
entre si.
Entre los nodos y programas bsicos que se inician con el motor de ejecucin podemos
encontrar el master, el servidor de parmetros y el nodo rosout que es el encargado de
trabajar con toda la informacin del registro de ROS.
Este motor de ejecuta abriendo un terminal exclusivamente para l e introduciendo:
$ roscore
Una vez introducido dicho comando, deberamos ver algo parecido a esto:

Muestra de roscore ejecutandose.

6.5 Obtener datos


6.5.1 Nodos
Un nodo es como si fuera un ejecutable dentro del paquete de ROS, usa la librera cliente
de ROS para comunicarse con otros nodos, y estos pueden publicar o subscribirse a un
tpico, adems de usar cualquier servicio.
ROS nos permitir usar nodos creados con otros lenguajes de programacin (phyton y c+
+)
Para poder acceder, modificar y crear cualquier nodo necesitaremos los paquetes:
roscode, rosnode y rosrun.
33

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:

Muestra de los nodos activos.

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

Informacin del nodo rosout.

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

$ rosrun turtlesim sensor_temperatura __name:=sensor_interno


Por lo que si volvemos a poner en el terminal rosnode list, veremos como el nombre de
nuestro sensor se ha cambiado por /sensor_interno

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

Muestra de rqt_graph con los nodos en uso.

Si pasas el cursor por encima de turtle1/command_velocity/ te mostrar en diversos


colores los nodos y los tpicos de los que hace uso. Tal y como se puede observar, los
nodos /turtlesim y /teleop_turtle, se comunican mediante el tpico turtle1/
command_velocity/

Muestra de los nodos en uso colocando el cursor encima.

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.

Comando de ayuda de rostopic.

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 echo [topico]


!
Donde lo nico que hay que hacer es sustituir donde pone tpico, por el tema que
quieres ver los datos. Por ejemplo, si queremos ver los datos del tpico
command_velocity, deberemos introducir la siguiente funcin
!
$ rostopic echo /turtle1/command_velocity
Es posible que no aparezca nada en la pantalla, en el caso de que ocurra esto
posiblemente es que no hay nada guardado en el tpico, para solucionar este
38

problema solo debemos ir al terminal donde tenemos activo turtle_teleop_key, y


pulsar alguna direccin, por ejemplo la flecha hacia arriba, y ahora veremos como en
el terminal de rostopic echo, empiezan a escribir datos.
Si en este momento miramos el terminal de rqt_graph, podremos ver grficamente
como rostopic echo, se ha subscrito al tpico /turtle1/command_velocity.

Muestra de como el nuevo nodo se ha subscrito al principal.

- 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

Tpicos a los que est subscrito y en los que publica.

Donde podemos ver claramente el numero de publicaciones y subscriptores, as


como su tipo.
- rostopic type
La comunicacin entre los diferentes nodos que estn relacionados entre si, se debe
hacer mediante el mismo tipo de mensaje.

La funcin se usa de la forma:


!
$ rostopic type [topic]
En el caso de nuestro ejemplo con el fichero de prueba turtle quedara:

$ rostopic type /turtle/comand_velocity


a lo que el programa nos responder:
!

turtlesim/velocity

puedes ver los detalles de los mensajes usando rosmsg


!

$ rosmsg show /turtlesim1/Velocity


Y vers una respuesta del sistema parecida a esta:
!
!

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 pub [topico] [tipo_de_mensaje] [argumentos]


Un ejemplo de uso de este comando en nuestro ejemplo del archivo turtle sera:

$ rostopic pub /turtle1/command_velocity turtlesim/velocity -- 2.0 1.8


Como se puede ver, el ejemplo anterior indica a el archivo encargado del movimiento
en el tpico turtle1/command_velocity, que se mueva con velocidad linear 2 y
angular 1,8.
en este caso la tortuga realizar un pequeo movimiento, y enseguida se parar,
esto es debido a que el programa requiere un flujo constante de comandos a 1HZ
para seguir moviendose, pero esto se puede solucionar aadiendo el comando
rostopic pub -r:

$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 1.8


esto lo que hace es publicar este comando cada 1Hz.

- 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

min: 0.004s max: 0.030s std dev: 0.00380s window: 290


Aqu podemos ver que nuestro ejemplo est funcionando a 60 Hz.
Para decirle al programa que deje de enviarnos informacin, lo deberemos hacer al
igual que para cerrar otros, pulsando CTRL + C.

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

$ rosservice call clear

- 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.

6.6 Sistema de depuracin


Dentro de ROS podemos encontrar un sistema de depuracin mediante el cual podemos
ver el funcionamiento de cada uno de los nodos y sus interacciones con otros para poder
comprobar que el programa se comporte de la forma esperada.
Para activar dicho sistema utilizaremos el cdigo:
$ rqt_console

43

Sistema de depuracin.

6.7 Trabajar con datos


Para trabajar con los datos que nos devuelve el programa mediante sus nodos,
utilizaremos la funcin rosbag, lo primero que vamos a ver es como guardar estos datos
para poder procesarlos en el momento que queramos.
$ mkdir bagfiles // esto nos genera un directorio denominado bagfiles en nuestro sistema
$ cd bagfiles //accedemos a la carpeta bagfiles
$ rosbag record -a //comenzamos la grabacin de datos
Podemos probarlo con nuestro programa de prueba de la tortuga que hemos utilizado en
el apartado de primeros pasos con ROS, para ello primero inicializamos el programa, y
probamos a mover la tortuga, tras varios movimientos podemos cerrar la aplicacin
rosbag y ver el archivo generado (el fichero lo podemos encontrar dentro de nuestra
carpeta /home/bagfiles, y como nombre tendr la fecha y hora de creacin del fichero).

44

Imagen del fichero generado.

Para visualizar los datos guardados, solo tendremos que usar la funcin:
$ rosbag info Nombre_del_fichero
En nuestro caso quedara:
$ rosbag info [Link]

Imagen de la informacin extrada del fichero generado.


45

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]

6.8 Visualizando los datos


ROS tiene una funcin que nos puede ayudar mucho a la hora de saber como trabaja
nuestro sistema, y de si lo est haciendo de forma correcta, esta funcin es rqt_graph, y
nos mostrar de forma grfica los nodos que estn en funcionamiento, sus dependencias
y su forma de trabajar.
Para utlizar esta funcin solo tenemos que introducir en un terminal nuevo la funcin
$ rqt_graph
En la imagen que podemos ver a continuacin podemos ver un ejemplo de su
funcionamiento con el programa turtle

Representacin grfica de los nodos activos.

Podemos ver de forma grfica como el nodo /teleop_turtle se encarga de enviar la


informacin mediante mensajes al nodo /turtlesim

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

$ rosrun rviz rviz


Cuando terminemos de trabajar con el programa, para cerrarlo simplemente tendremos
que ir a la ventana de terminal donde lo activamos y pulsar la combinacin de teclas Ctrl +
C.

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.

Ventana de Gazebo con un mundo vaco.

[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.

Cuando terminemos de trabajar con el programa, para cerrarlo simplemente tendremos


que ir a la ventana de terminal donde lo activamos y pulsar la combinacin de teclas Ctrl +
C.

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

En Espaa podemos encontrar universidades como Sevilla, Zaragoza, y Barcelona.


A nivel global encontramos una gran variedad de instituciones docentes como pueden ser:
Stanford, Instituto Tecnolgico de Massachusetts (MIT) y la universidad de estudios
aeroespaciales de Toronto entre otras.
A continuacin podemos ver un mapa que se encuentra en la pgina de ROS, donde se incluye
los lugares de donde se han publicado repositorios para el programa.

Mapa de repositorios8 de ROS

8.2. Sensores soportados


Ros soporta una gran cantidad de sensores de diferentes marcas y funcionalidades, y
todos ellos tienen un apartado especfico en la pagina web del sistema, y en el caso de
que el sensor que tu necesitas usar no est soportado, tienes la opcin de generar tu la
documentacin necesaria para su uso, o bien pedir ayuda en la pagina de soporte de
ROS, donde la comunidad seguro que te puede guiar o incluso realizar la documentacin
necesaria.
Sensores de 1 dimensin
- Sharp IR range finder (via ArbotiX RoboController)
Sensores 2D
- Hokuyo Scanning range finder
8

[Link]

50

- SICK LMS2xx lasers


- SICK LMS1xx lasers
- Sick(R) S300 Professional
- Leuze rotoScan laser rangefinder driver (ROD-4, RS4)
- Neato XV-11 Laser Driver
- Sick LD-MRS Laser Driver
- SICK TiM3xx lasers
Sensores 3D
- Mesa Imaging SwissRanger devices (3000/4000)
- OpenNI driver for Kinect and PrimeSense 3D sensors
- Velodyne HDL-64E 3D LIDAR
- Forecast 3D Laser with SICK LIDAR
- PMD Camcube 3.0
Reconocimiento de audio y habla
- hark
- pocketsphinx
Cmaras
- canon_gphoto
- cmucam_png
- dynamic_uvc_cam
- gencam_cu
- GeViCAM stereo camera
- gstreamer camera driver
- gPhoto Driver
- IEEE 1394 Digital Camera
- MatrixVision BlueFOX
- PointGrey Cameras (with FlyCapture2)
- Prosilica Camera
- usb_cam
- uvc_camera
- videre_stereo_cam
- WGE100 camera
Sensores ambientales
- Gill Instruments Windsonic ultrasonic wind sensor
- ce_environment
Sensores de fuerza / par / tctiles
- Schunk LWA 3 Force Torque Controller based on ATI Mini 45
- Nano17 6-axis force/torque sensors
- skin_driver
- Interface to ATI NetFT sensor adapter
- ATI nano 25 and AMTI HE6x6 force plate
Sensores de captura de movimiento
- OptiTrack Motion Capture system using NatNet and VRPN.
- Phase Space optical motion capture system
- VICON motion capture system
- Motion Analysis motion capture system
51

Sensores de estimacin de la posicin (GPS/IMU)


- Applanix Position and Orientation System for Land Vehicles
- Bosch Sensortec BMA180 3-axis accelerometer
- Bosch SMI530/540 3-axis sensor
- CH Robotics UM6 IMU
- gpsd_client
- microstrain_3dmgx2_imu
- Xsens MTi node
- Xsens MTI Measurement Unit
- Xsens MTx/MTi/MTi-G devices
- Razor's IMU 9 DOF (Degree of Freedom) board
Fuentes de alimentacin
- Carnetix CNX-P2140 DC-DC power supply
- Mini-Box M4-ATX power supply
- Ocean Server Technology Intelligent Battery and Power System
RFID
- UHF RFID Reader
Interfaces de sensores
- Arduino Sensor Interface Module
- ArbotiX RoboController
- Lego NXT Sensors
- Phidgets sensor interface
- Phidgets sensor interface with differential drive
- Phidgets Interface
- libphidgets21
- pmad
- roboard_sensors
- rosserial_arduino
- serializer
- Sensoray 626 analog and digital I/O
- Shadow RoNeX

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.

9.2 Preparando el sistema

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

Primeros pasos para generar nuestro espacio de trabajo.

Para crear nuestro directorio utilizaremos el comando mkdir, de la forma:


$ mkdir [espacio/de/trabajo]
En nuestro ejemplo hemos decidido crear nuestro espacio de trabajo dentro de una
carpeta llamada UPCT en el directorio groovy_workspace.
$ mkdir ~/groovy_workspace/UPCT

53

Imagen de la carpeta generada.

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

imagen del cdigo introducido

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:

Imagen confirmando que detecta el espacio de trabajo recin generado.

9.3 Creando nuestro paquete


Ahora vamos a crear nuestro paquete, que ser capaz de contener nuestro programa.
Lo primero que vamos a hacer es acceder al espacio que hemos creado, para ellos
usamos en nuestro caso la funcin:
$ cd ~/groovy_workspace/UPCT
Y ahora procedemos a crear el paquete que contendr nuestro futuro programa.
$ roscreate-pkg UPCT_PFC std_msgs rospy roscpp
55

Mediante esta funcin generamos un paquete llamado UPCT_PFC que depende de


std_msgs, rospy y roscpp.

Imagen del sistema generando el paquete.

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

Imagen de ROS creando el paquete.

9.4 Preparando nuestro programa


Ahora vamos a hacer unos pasos opcionales pero altamente recomendables antes de
empezar a crear nuestro programa, que es modificar los ficheros [Link] y
[Link]
En este caso Linux trae su propia funcin para editar estos documentos llamado gedit
Primero accedemos a la carpeta contenedora
$ cd UPCT_PFC
y ahora usamos la funcin descrita antes para modificar nuestro fichero
$ gedit [Link]

57

Imagen del contenido de [Link] modificado.

$ gedit [Link]

Imagen del contenido de [Link] modificado.

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.

9.5 Construyendo nuestro programa


Ahora que ya tenemos todo listo procedemos a crear nuestro fichero ejecutable, para ello
vamos a nuestro sistema de ficheros a /UPCT_PFC / src, y le damos al botn derecho y
pulsamos en crear un nuevo documento, documento en blanco.
El siguiente paso es poner el nombre a nuestro fichero en este caso lo llamaremos
[Link]

Imagen creando nuestro fichero .cpp

A continuacin abrimos el fichero que acabamos de crear con un programa de edicin de


texto, o bien usando gedit tal y como lo hemos usado en el apartado anterior, y copiamos
el siguiente cdigo:
#include <ros/ros.h>
int main (int argc, char** argv)
{
ros::init(argc, argv, "nodo_hola_mundo");//nombre del nodo
ros::NodeHandle nh;
//muestra por pantalla lo que hay dentro de las comillas
59

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

Imagen de ROS compilando nuestro programa

Y ya tenemos nuestro programa creado y listo para ser usado.


60

9.6 Arrancando nuestro programa


Una vez ya tenemos nuestro programa creado vamos a proceder a probarlo, para ello lo
que hacemos es llamar a nuestro nodo tal y como hemos enseado dentro del apartado
correspondiente
Lo primero que hay que hacer es llamar a nuestro nodo master, es decir, abrimos un
nuevo terminal y ejecutamos
$ roscore
Y ahora volvemos a nuestro terminal primero en introducimos la funcin
$ rosrun UPCT_PFC hola_mundo
Tras lo que veremos una salida por pantalla parecida a esta

Imagen de nuestro programa funcionando.

En el caso que no se inicie el programa, comprueba que tienes en una pantalla de


terminal diferente activado roscore, y que en la pantalla con la que estas trabajando has
ejecutado con anterioridad la funcin
$ source ~/groovy_workspace/[Link]
Ahora vamos a comprobar de forma grfica que nuestro nodo est en funcionamiento,
para ello abrimos una nueva pantalla de terminal y ejecutamos
$ rqt_graph
61

Representacin grfica de nuestro nodo.

10. Conclusin y proyectos futuros


Como hemos podido ver a lo largo de todo el documento, el sistema ROS es un sistema
robtico muy completo que nos permite utilizar tanto el cdigo antiguo de otros proyectos,
como uno nuevo generado directamente para nuestro sistema, adems de contar con
soporte para una gran multitud de robots y sensores existentes en el mercado, y otra de
las ventajas de las que se ha hablado es de una gran comunidad que se est dedicando a
mejorar da a da el sistema, as como de ampliar las compatibilidades tanto con sistemas
nuevos (como puede ser Raspberry Pi), como con los ltimos sensores y actuadores
disponibles en el mercado.
ROS es un sistema que en la actualidad cuenta con una gran cantidad de personas a
nivel mundial que se dedican al mantenimiento y creacin de nuevos repositorios, as
como a la mejora del propio sistema, provocando una rpida adaptacin a cualquier
cambio.
Respecto a la compatibilidad, ROS es casi totalmente compatible con repositorios
antiguos, lo que nos permite utilizar la programacin que ya tenemos de otros sistemas y
portarlos a este, permitindonos mover esta programacin a casi cualquier mquina, y
aqu es donde podemos encontrar un el primer pero, ya que aunque la comunidad est
trabajando fuertemente que se pueda utilizar en cualquier ordenador, a da de hoy solo
pueden asegurar el correcto funcionamiento de ROS en sistemas GNU (Linux) y MAC OS
X, y se estn encontrando con algunos fallos de programacin en sistemas Windows y
62

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

También podría gustarte