Logo Passei Direto
Buscar

Habilidades_de_navegacion_para_el_robot

User badge image
Ana Liz

em

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

1
2
3
4
Índice general
Índice general 5
Índice de figuras 9
Nomenclatura 11
Glosario 13
1. Introducción 17
1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2. La importancia de la navegación . . . . . . . . . . . . . . . . . 18
1.3. Real vs Simulado . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4. Por qué ROS . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2. Objetivos 21
3. Herramientas 23
3.1. ROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1. Que es ROS . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.2. Conceptos Básicos . . . . . . . . . . . . . . . . . . . . 24
3.1.3. Diferencia entre los servicios, tópicos y acciones. . . . . 28
3.1.4. Comunicación en ROS . . . . . . . . . . . . . . . . . . 29
3.1.5. Como se instala ROS . . . . . . . . . . . . . . . . . . . 34
3.2. Gazebo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.1. Que es Gazebo . . . . . . . . . . . . . . . . . . . . . . 34
3.2.2. Caracteŕısticas . . . . . . . . . . . . . . . . . . . . . . 35
3.2.3. Como movemos un robot en Gazebo? . . . . . . . . . . 36
3.2.4. Como se conecta ROS con Gazebo? . . . . . . . . . . . 37
5
6 ÍNDICE GENERAL
3.2.5. Problemas con Gazebo . . . . . . . . . . . . . . . . . . 39
3.3. RVIZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3.1. Que es RVIZ . . . . . . . . . . . . . . . . . . . . . . . 40
3.3.2. Como trabaja RVIZ . . . . . . . . . . . . . . . . . . . . 41
3.4. OMPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4.1. Que es OMPL . . . . . . . . . . . . . . . . . . . . . . . 41
3.4.2. Como se conecta OMPL con ROS . . . . . . . . . . . . 42
4. Ciclo de vida y Lenguajes de Programación 43
4.1. Ciclo de vida del Software . . . . . . . . . . . . . . . . . . . . 43
4.2. Lenguajes de Programación . . . . . . . . . . . . . . . . . . . 46
4.2.1. URDF . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.2. XACRO . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.3. YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2.4. C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2.5. LISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2.6. XML-RPC . . . . . . . . . . . . . . . . . . . . . . . . 49
5. Planificación, Costos y Licencias 51
5.1. Planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1.1. Planificación WAM ARM . . . . . . . . . . . . . . . . 51
5.1.2. Planificación para IRI WAM . . . . . . . . . . . . . . . 52
5.2. Costos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2.1. Costos for WAM ARM . . . . . . . . . . . . . . . . . . 52
5.2.2. Costos para IRI WAM . . . . . . . . . . . . . . . . . . 54
5.2.3. Costo para el Robot . . . . . . . . . . . . . . . . . . . 55
5.2.4. Costos por la Memoria . . . . . . . . . . . . . . . . . . 55
5.3. Licencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.3.1. Licencia BSD . . . . . . . . . . . . . . . . . . . . . . . 56
5.3.2. Licencia LGPL . . . . . . . . . . . . . . . . . . . . . . 56
6. Especificación y Diseño 59
6.1. Especificación . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.2. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7. Stack WAM ARM: Primer Contacto 63
7.1. Códigos Gúıa: Wubble Robot y PR2 robot . . . . . . . . . . . 63
7.2. Licencia para WAM ARM . . . . . . . . . . . . . . . . . . . . 63
ÍNDICE GENERAL 7
7.3. Especificación y Diseño para WAM ARM . . . . . . . . . . . . 64
7.3.1. Análisis de Requerimientos . . . . . . . . . . . . . . . . 65
7.4. Diagramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.4.1. Diagrama de Despliegue . . . . . . . . . . . . . . . . . 67
7.4.2. Diagramas de Componentes . . . . . . . . . . . . . . . 68
7.5. Descripción de los Packages . . . . . . . . . . . . . . . . . . . 70
7.5.1. wam arm gazebo . . . . . . . . . . . . . . . . . . . . . 70
7.5.2. wam arm kinemtaics . . . . . . . . . . . . . . . . . . . 71
7.5.3. wam arm teleop . . . . . . . . . . . . . . . . . . . . . 72
7.5.4. wam arm interface . . . . . . . . . . . . . . . . . . . . 72
7.5.5. wam arm action . . . . . . . . . . . . . . . . . . . . . 72
7.6. Efectos de una inadecuada documentación . . . . . . . . . . . 73
7.7. Conclusión para WAM ARM . . . . . . . . . . . . . . . . . . . 73
8. Stack IRI WAM: Luz al final del Tunel 77
8.1. Por que cambiar el WAM ARM por IRI WAM? . . . . . . . . 77
8.2. Licencia para IRI WAM . . . . . . . . . . . . . . . . . . . . . 78
8.3. Especificación y Diseño para IRI WAM . . . . . . . . . . . . . 78
8.3.1. Análisis de Requerimientos . . . . . . . . . . . . . . . . 78
8.4. Diagrama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
8.5. Package Description . . . . . . . . . . . . . . . . . . . . . . . . 80
8.5.1. iri wam arm navigation . . . . . . . . . . . . . . . . . 80
8.5.2. iri wam bringup . . . . . . . . . . . . . . . . . . . . . 86
8.5.3. iri wam controllers . . . . . . . . . . . . . . . . . . . . 86
8.5.4. iri wam description . . . . . . . . . . . . . . . . . . . 90
8.5.5. iri wam gazebo . . . . . . . . . . . . . . . . . . . . . . 92
8.5.6. iri wam wrapper . . . . . . . . . . . . . . . . . . . . . 93
8.6. Conclusion for IRI WAM . . . . . . . . . . . . . . . . . . . . . 93
9. Experimentos 95
9.1. Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
9.1.1. Experimentos con Gazebo . . . . . . . . . . . . . . . . 95
9.1.2. Experimentos con el robot WAM ARM . . . . . . . . . 97
9.2. Conclusiones de los Experimentos . . . . . . . . . . . . . . . . 98
10.Conclusión 99
11.Trabajo Futuro 101
8 ÍNDICE GENERAL
Agradecimientos 103
Bibliograf́ıa 105
Índice de figuras
3.1. Interacción Cliente/Servidor de las Acciones . . . . . . . . . . 27
3.2. Diagrama de estados de las Acciones . . . . . . . . . . . . . . 29
3.3. Ejemplo Comunicación TCPROS . . . . . . . . . . . . . . . . 30
3.4. Ejemplos de modelos en Gazebo . . . . . . . . . . . . . . . . . 35
3.5. Plugin Estático Gazebo . . . . . . . . . . . . . . . . . . . . . . 37
3.6. Plugin Dinámico Gazebo . . . . . . . . . . . . . . . . . . . . . 37
3.7. Ejemplo de uso de RVIZ . . . . . . . . . . . . . . . . . . . . . 40
3.8. Ejemplo de solución a un problema con OMPL . . . . . . . . . 41
4.1. Modelo de Cascada . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2. Modelo de Prototipaje . . . . . . . . . . . . . . . . . . . . . . 44
4.3. ROS Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4. Oren Ben-Kiki . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.5. Bjarne Stroustrup . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.6. John McCarthy . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.7. Dave Winer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.1. Wuuble Robot . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.2. Ejemplo Diagrama de Despliegue . . . . . . . . . . . . . . . . 67
7.3. Diagrama de Despligue para WAM ARM . . . . . . . . . . . . 69
7.4. Diagrama de Componentes y sus Dependencias paraWAM ARM 70
8.1. Diagrama de Despligue para IRI WAM . . . . . . . . . . . . . 80
8.2. Código Fuente de iri wam planning description.yaml . . . . . . 81
8.3. Extracto de código fuente de joint limits.yaml . . . . . . . . . 82
8.4. Extracto de código fuente de ompl planning.yaml . . . . . . . 82
8.5. Extracto código fuente de ompl planning.yaml . . . . . . . . . 82
8.6. Extracto código fuente de ompl planning.yaml . . . . . . . . . 83
9
10 ÍNDICE DE FIGURAS
8.7. Extracto de código fuente de iri wam pr2 controller.yaml . . . 87
8.8. Extracto de código fuente de iri wam pr2 controller.yaml . . . 87
8.9. Extracto de código fuente de wam1.urdf.xacro . . . . . . . . . 88
8.10. Extracto de código fuente de wam1.urdf.xacro . . . . . . . . . 88
8.11. Extracto de código fuente de wam1.urdf.xacrorequerimientos, a con-
tinuación muestro resultados:
Con respecto a la cinemática fue conseguido la separación de
tareas, tambien, el intercambio se ha medianamente conseguido
ya que a pesar que el cambio es reemplazar una linea,este no
sigue la filosofia de ROS.
La interfaz de usuario es bastante amigable, no es necesario la
aapertura de varias terminales.
Los objetivos para el simulador, no se consiguieron, el detalle a
continuación:
1. Si bien es cierto, el robot se mueve como se le indica, pero
no esta simulando la realiadad, ya que el moviemiento de
un robot se genera en los joints, en cambio , en el simulador
lo que se hacie era reposicionar el link involucrado.
2. He creado una gran dependencia entre package, ya que el
simulador utiliza la cinemática directa para posicionar el
robot.En otras palabras,utilizo ¡t,q̂¿para mover el robot,
pero en realidad lo debiera mover el robot es[θ1 θ2 θ3 θ4 θ5
θ5 θ7]
3. Solo genera moviemientos simples, sin evitación de obstacu-
los
7.7. CONCLUSIÓN PARA WAM ARM 75
Además, nunca se llego a probar en el robot real. En difinitiva,
nunca se publicaron.
76 CAPÍTULO 7. STACK WAM ARM: PRIMER CONTACTO
Caṕıtulo 8
Stack IRI WAM: Luz al final
del Tunel
8.1. Por que cambiar el WAM ARM por IRI WAM?
Este cambio se debio a diversos factores, que detallo a conti-
nuación:
1. Los errores conceptuales en WAM ARM, provocaron que
este se convirtiera en un stack de aprendizaje
2. El stack WAM ARM, era un desarrollo independiente de
los stack del IRI
3. El Instituto decidió hacer publico sus repositorios de ROS,
hecho que obligó toda una reestructuración de los reposito-
rios
4. el stack WAM ARM fue creado en la versión diamondback
de ROS, Pero en Septiembre del 2011, ROS lanza su nueva
versión Electric
77
78 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
8.2. Licencia para IRI WAM
Todos los repositorios de ROS creados por el laboratorio de
robotica y por el laboratorio de manipulación y percepción, am-
bos pertenecientes al IRI, se les han otorgado la licencia LGPL
5.3.2 para el nuevo stack IRI WAM. Sin embargo, mi deseo que
los códigos estén abiertos para todos, y le he asignado la licen-
cia BSD 5.3.1, lo cual permite al Instituto,a la copia que tengan
ellos relicenciarla a LGPL 5.3.2 Actualemente, los códigos son
accesibles desde internet, para quién quiera utilizarlos. Ver las
referencias 5.3.2 5.3.1
8.3. Especificación y Diseño para IRI WAM
En este apartado mostrate la especificación y el diseño del
stack IRI WAM.
8.3.1. Análisis de Requerimientos
El Análisis se devide en 2 partes: Análisis de requerimientos
funcionales y Análisis de requerimientos no funcionales. ver el
significado en 7.3.1
Requerimientos Funcionales
1. Cada package debe contener el código necesario para llevar
a cabo la tarea asignada
2. Cada nodo creado debe representar una acción espećıfica
en robot
8.3. ESPECIFICACIÓN Y DISEÑO PARA IRI WAM 79
3. Cada package debe ser capaz de leer un mensaje deter-
minado con los datos necesarios para completar la tarea
asignada
4. El sistema debe ser capaz de calcular la cinemática inversa
de robots con diferentes grados de libertad
5. Los package deben ser fácilmente reemplazables
6. El sistema debe generar trayectorias consistentes
7. El sistema debe conectarse correctamente con ROS
8. Los códigos deben ser eficientes
9. El sistema debe conocer las limitaciones mecánicas del ro-
bot
10. Las trajectorias deben estar dentro de los limites del robot
11. La navegación debe ser capaz de sortear obstáculos
12. El sistema debe reutilizar codigo del PR2
13. El sistema debe mantener la arquitectura y filosofia de ROS
14. El simulador debe comportarse de la misma manera que el
robot real
15. El simulador debe tener el maximo de propiedades simula-
das posibles.
Requirimientos No Funcionales
1. Debe ser bastante amigable de cara al usuario.
2. El usuario debe conocer lo justo para ejecutar el sistema
3. Evitar el uso de demasiadas consolas
80 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
8.4. Diagrama
Figura 8.1: Diagrama de Despligue para IRI WAM
Diagrama de Despligue final para los package en IRI WAM
8.5. Package Description
8.5.1. iri wam arm navigation
Este package contiene 2 directorios
1. Config
2. Launch
8.5. PACKAGE DESCRIPTION 81
Estos directorios contienen la configuración necesaria para que
el stack de navegación funcione con la configuración del WAM
ARM
Config
En este directorio estan almacenados los ficheros de configu-
ración , escritos en YAML o VCG, Los ficheros tiene la reponsa-
bilidad de cargar los datos en el servidor de parametros para que
los nodos ROS puedan utilizarlos,tambien se pueden modifcar y
eliminar A continuación detallo los ficheros:
Figura 8.2: Código Fuente de iri wam planning description.yaml
iri wam planning description.yaml En este fichero se defi-
nen el grupo de joints a utilizar,las operaciones a seguir si
82 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
Figura 8.3: Extracto de código fuente de joint limits.yaml
Figura 8.4: Extracto de código fuente de ompl planning.yaml
Figura 8.5: Extracto código fuente de ompl planning.yaml
hay colisión, como conectarse a otro grupo de joints.En la
figura 8.2muestro el codigo fuente de este fichero.
lineas 1 hasta 5,Aqui defino como se conecta un grupo
de joints con el mundo o con otro grupo de joints
de lineas 6 hasta 9, Aqui defino el nombre para el grupo
de joints y cual de los links es la base y cual es la punta
de lineas 10 hasta el final, Aqui defino las operaciones
a seguirn en caso de colisión
8.5. PACKAGE DESCRIPTION 83
Figura 8.6: Extracto código fuente de ompl planning.yaml
joint limits.yaml En este fichero defino los limites de veolcia-
dad, posición y aceleración , para cada joint que conforma
la cadena cinemática,y también inicializo los flags que indi-
can la existencia de estos limites,En la figura8.3 Un extracto
del codigo que he implementado
planning components visualizer.vcg Este fichero es gene-
raco automaticamente al guardar un escenario de RVIZ,
guarda toda la configuración generada para ese escenario.
84 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
ompl planning.yaml Este fichero carga todas las variables ne-
cesarias po rle planificador OMPL
Al planificador se le especifica una configuración de
planificación. Una configuración especifica planificación
particular del uso y los parámetros de configuración
asociados con el uso de la misma. En el extracto en la
figura 8.4 , se muestra cómo se configura un planificador
mediante el uso de SBL y el otro para un planificador
con LBKPIECE.
El segundo paso consiste en especificar los grupos ,a los
cuales desea planificar la trayectoria. En la figura 8.4,
se muestra como se definen dos grupos para el planifi-
cador.
iri wam Para este grupo ,en la figura 8.5, se define
qué tipo de planificador (en este caso JointPlan-
ner) , también, las configuraciones permitidas, fi-
nalmente, definir la proyjection evaluator, En otras
palabras, donde leer la posición del robot, para esto
se utiliza el tópico joint state
iri wam cartesian Para este grupo,en la figura 8.6,se
define qué tipo de planificador (para este caso Car-
tesian Planner), se define el espacio ,como se mues-
tra en la figura 8.6,donde se define los ejes X,Y,Z y
los ejes de rotación r̂,p̂,ŷ. Y por ultimo se especifica
el tipo de plugin cinemático a usar para el calculo
de la cinemática inversa. Para este caso
arm kinematics constraint aware/KDLArmKinematicsPlugin
8.5. PACKAGE DESCRIPTION 85
Launch
Estos son los ficheros que crean los nodos, pero que también
pueden crear/modificar variables del servidor de parámetros
trajectory filter server.launch En este fichero,se cargan las
variables necesarias para ser utilizadas por el package tra-
jectory filter
ompl planning.launch En este fichero, Se crea el nodo de
OMPL, se cargan las variables que necesita este para fun-
cionar , y se inicializanvalores por defecto del planificador
move groups.launch Este fichero, llama a otro fichero launch
(move iri wam.launch). La eexplicación es muy sencilla, ya
que en vez, de modificar el fichero en cuestion, lo dejamos
intacto, y solo es neesario cambiar el nombre del fichero que
se llama.
move iri wam.launch Este fichero crea el nodo de move arm,es
este quien coencta el stack de navegación y con el robot(caulquier
tipo real o simulado)
iri wam planning environment.launch Este fichero no crea
ningun tipo de nodo, solo carga los datos contenidos en el
fichero iri wam planning description.yaml en el servidor de
parametros.
constraint aware kinematics.launch Este fichero carga e ini-
cializa las variables que utiliza el nodo de cinemática.
en ellos se especifica que plugin utilizo ycual link es la base
y cual es elink punta.
iri wam arm nagigation.launch Este es el fichero principal,
llama a todos los ficheros launch explicado anteriormente.
86 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
y este a su vez es llamado desde el fichero de launch de los
robots (package iri wam bringup)
8.5.2. iri wam bringup
Este paquete contiene los archivos para crear los nodos de
los robots y todo su sistema de comunicación con el stack de
navegación.
contiene un directorio launch, con 2 ficheros:
iri wam sim bringup.launch Este lanza el robot simulado ,
emprende varias acciones
1. Llama a iri wam description.launch
2. Carga la variable controller action name,que es la que
se utiliza para conectarse con el nodo de move iri wam
3. Llama a iri wam gazebo.launch
4. Carga el plugin dinamico de Gazebo para poder mover
los joints del robot,este esta encapsulado en el package
pr2 controller.
5. Finalmente se llama iri wam arm navigation.launch.
iri wam real bringup.launch Este fichero crea el nodo que
hace que se comuniquen el robot real y el stack de navega-
ción. Como este se debe adaptar a la interficie ya creada del
WAM , se utiliza la herramienta ”dynamic reconfigure”que
permite cambiar nombres en tiempo de ejecución.
8.5.3. iri wam controllers
Este package contiene un directorio llamado config y dentro
de este un fichero llamado iri wam pr2 controller.yaml,con to-
8.5. PACKAGE DESCRIPTION 87
Figura 8.7: Extracto de código fuente de iri wam pr2 controller.yaml
Figura 8.8: Extracto de código fuente de iri wam pr2 controller.yaml
dos los valores necesarios para que el plugin dinámico de ROS
para Gazebo funcione con el WAM simulado Cabe destacar, que
un controller equivale a un actuador en la realidad.Y por este
88 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
Figura 8.9: Extracto de código fuente de wam1.urdf.xacro
Figura 8.10: Extracto de código fuente de wam1.urdf.xacro
Figura 8.11: Extracto de código fuente de wam1.urdf.xacro
motivo, es que debo definir valores de PID para cada joints.La
creacion de estos controladores es automatica ya que ROS ob-
tiene esa información de las variables cargadas desde este mismo
8.5. PACKAGE DESCRIPTION 89
Figura 8.12: Extracto de código fuente de wam1.urdf.xacro
yaml, ver 8.7 y 8.8. En la figura 8.7 cargamos los datos al con-
trolador.
Linea 1 es el nombre del nodo para el controlador
Linea 2 es el nombre del package a utilizar y el nombre del
controlador a utilizar.Cabe destacar que robot mechanism controllers
es un paquete perteneciente al pr2 controllers. Sin este, el
primer package no puede funcionar.
Linea 3 hasta la 10 listo todos los joint que usarán este
controlador
Linea 11 hasta la 18 se configura la PID para cada actuador.
En la figura 8.8 cargo las variable de tiempos para cada joint.
Los controladores se ejecutan en background, el usuario solo in-
dica cual se debe utilizar. Cabe destacar que basandome en esto
controladores, propuese el crear un controlador para el wam que
a su vez, utilizara la API del WAM. pero despues de un tiempo
evaluando y programando, se desechó esta idea.ya que el con-
trolador, exige que sea transparetne al usuario en cambio, el
controlador del WAM, por razones de seguridad, exige la inter-
acción humano-maquina para arrancar el sistema.
90 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
8.5.4. iri wam description
Este package, junto con iri wam gazebo, fueron los package
que sufrieron mayor cantidad de cambios durante la ejecución
del proyecto.
Este package se divide en 4 directorios
Launch Este subdirectorio contiene los ficheros launch, en la
actualidad existen 2
cylinder.launch este fichero crea una vara como obstaculo en Gazebo
iri wam description.launch Carga la definición del robot en la variable robot description.
Mesh En este subdirectorio se almacenan todos los ficheros
MESH utilizados en la simulación (.stl), cada fichero MESH
describe una pieza del robot
Urdf Este subdirectorio contiene el fichero URDF(.urdf) con
todas las piezas y el plugin en un unico fichero, se auto-
genera desde xacro.
Xacro Este subdirectorio contiene los ficheros XACRO(.xacro)que
definen el robot. Existen tantos ficheros xacro como DOF
tenga el robot. El fichero wam.urdf.xacro es el fichero princi-
pal con el cual se construye el robot. En las figuras 8.9,8.10,8.11,8.12,
se muestra un extraacto de estos ficheros
En la figura[8.9], defino un link con nombre wam fk/wam1. No-
tar, que dentro del tag , 3 importantes.
inertial Aqui defino los valores necesarios para generar iner-
cia, por ejemplo, la masa de la pieza o los valores de los
momentos de inercia.
8.5. PACKAGE DESCRIPTION 91
visual Aqui se definen los parametros para la parte visual ,por
ejemplo que fichero mesh se utiliza, y el punto de origen de
la pieza.
collision Aqui se definen los valores para la colisión con objetos,
por ejemplo, el coeficionte de friccion,que fichero mesh se
utiliza en caso de colision.
En la figura [8.10], es para cambiar el color de las piezas
del robot en simulación. En general, se puede cambiar color,
coeficiente de fricción,agregar sensores,etc.
En la figura [8.11], se define un joint con nombre j1 joint.
Existen diversos tipos de joints, que a continuación detallo.
de revolución
fijos
flotantes
continuos
prismaticos
planar
Para este caso, se define un joint de revolución.
Luego defino que link es el padre del joint, que link es el hijo
del joint, los limites del mismo, las propiedades dinamicas del
robot,
En la figura 8.12, defino una transmisión simple de nombre
j1 transmission para el joint j1 joint. una transmisión es pa-
so de moviemiento desde un actuador hacia un joint. También,
defino constantes mecánicas.
Cabe destacar, que xacro y urdf , aunque se ven muy similares,
92 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
no tienen el mismo comportamiento. El fichero urdf define un
robot pero todo lo que sea externo al mismo, por ejemplo los
ficheros mesh, deben estar en el mismo package.
Por otra parte, XACRO , genera el fichero urdf, pero su cualidad
mas clara, es que permite unir distintos fragmentos de codigos
(en xacro por supuesto) ubicados en distintos package. Lo cual
es basstante útil, a la hora de poner herramientas al robot.
8.5.5. iri wam gazebo
En este package contiene la codificación necesaria para juntar
el plugin dinámico de ROS y el robot simulado, entre otras cosas.
Este se subdivide en 3 directorios:
launch: Este subdirectorio, contiene los siguientes ficheros launch:
iri wam gazebo.launch: Inicializa el simulador Gazebo,
y carga la definición del robot contenida en robot description
,en el simulador.
spawn vertical stick.launch: Este introduce obstaculos
en Gazebo.
src: En este subdirectorio se encuentra el codigo, que mediante
el tópico , le comunica al stack de na-
vegación la posición de un obstaculo y las dimensiones de
este.
xacro: Este subdirectorio contiene el fragmento de codigo, me-
diante la cual, introduzco en el urdf final la definición del
controlador de ROS
8.6. CONCLUSION FOR IRI WAM 93
Figura 8.13: Codigo fuente de tipo launch de iri wam wrapper
8.5.6. iri wam wrapper
Este packageya exist́ıa en el stack de IRI WAM, es respon-
sable de comunicar el robot fisico con ROS. También publica
información sobre el estado del mismo Internamente, se comuni-
ca con el robot mediante ethernet, The internally communicates
with the robot through both ethernet.Por lo tanto es necesario
saber la ip.
La ejecución se realiza en 2 pasos
1. En un terminal se ejecuta roscore.
2. En otro terminal se ejecuta el fichero compilado iri wam wrapper
Esto no es eficiente, ya que , cada vez que deseaba cambiar de
robot, debia recompilar el codigo. El trabajo que realicé en este
paquete, fue la creación de un fichero launch que me permitiera
intermcambiar los robots sin necesidad de recompialr el codigo.
En la figura 8.13, se puede observar este fichero.
8.6. Conclusion for IRI WAM
Como conclusión de este desarrollo, podemos decir que los
requisitos se cumplieron ampliamente. Por ejemplo, el stack de
94 CAPÍTULO 8. STACK IRI WAM: LUZ AL FINAL DEL TUNEL
navegación solo es necesario definir una unica variable para co-
nectarse con algun robot, por ende,el intercambio entre el robot
reale y simulado es transparente, ya el package es iri wam brinup
se encarga de actualizar esta variable.El robot se mueve con pre-
cisión, además de los ĺımites establecidos para cada articulación.
En la simulación se han agregado tantas propiedades del ro-
bot real, que funciona y se mueve con mucha similitud al real.
Como conclusión personal, debo decir que este desarrollo, ha
puesto en práctica ,y mejorar, todos los conocimientos obtenidos
durante el primer desarrollo de este proyecto. Fueron también
más seguidas las reuniones,debates,donde pude dar opiniones,
dar ideas, y con un conocimiento más firme de los temas. Tam-
bién debo señalar , que las decisiones fueron mucho más exitosas
que la primera vez.
Caṕıtulo 9
Experimentos
9.1. Experimentos
En esta sección explicaremos, los experimentos a que fueron
sometidos los códigos
9.1.1. Experimentos con Gazebo
El primer experimento con el robot simulado era muy sim-
ple, ya que el propósito de este es para comprobar la conexión
entre los nodos de ROS.En este experimento, hemos creado un
nodo cliente, que recibió el estado del robot desde gazebo y lo
imprimió en la pantalla.
Después de pasar el primer experimento,la segunda prueba se
realizó para mover el robot en una trayectoria simple,sin evita-
ción de obstaculos, desde un punto de partida (posición actual),
a un punto B. Este experimento se repitió varias veces hasta
conseguir un movimiento correcto de los joints. Después de que
el robot se moviera correctamente, se repitió el segundo experi-
mento muchas veces,con la diferencia de cada nueva ejecución se
95
96 CAPÍTULO 9. EXPERIMENTOS
trató de simular una nueva propiedad, hasta conseguir simular
el maximo de propiedades.
El tercer experimento se hace mover el robot simulado en di-
ferentes puntos (de A a B, B a C, etc) y en este se le agrega el
factor tiempo
A continuación, el cuarto experimento consistió en mover el
robot a un punto cualquiera pero violando los limites de los
joint, asi comprobar el comportamiento del simulador. Después
de esto, dentro de una trayectoria se colocaba posiciones inal-
canzables y puntos alcanzables.
Cabe destacar, todos los experimentos mencionados anterior-
mente fueron realizados sin evitación de obstaculos y sin conec-
tar el stack de navegación.
En el primer experimento con el stack de navegación, es muy
simple, es pasar de su posición actual hasta un punto A.Me gus-
taria recordar que el stack de navegación entrega una serie de
puntos que el robot debe tratar de seguir.
El segundo experimento fue similar al anterior, excepto que los
puntos de destino fueron los puntos inalcanzables para el ro-
bot, de esta manera, hemos podido probar y verificar el correcto
funcionamiento del planificador. El tercer experimento trata de
evitar obstáculos de un tamaño considerable en la mitad tra-
yectoria, al final, esta obstáculos se ubican en diferentes lugares
dentro de la trayectoria del robot. El cuarto experimento es que
el robot se mueva en un entorno con varios obstáculos en el
camino.
9.1. EXPERIMENTOS 97
9.1.2. Experimentos con el robot WAM ARM
El primer experimento fue obtener datos de robot real para
verificar la correcta conexión entre los nodos de ROS.
Luego vino el segundo experimento, que fue mover el robot des-
de su posición actual hasta un punto B, a continuación, una
trayectoria simple.
Cabe destacar lo siguiente:
Para la comunicación con el robot real, es utilizada la in-
terfaz para la comunicación con el hardware creada por el
IRI.
No se hizo la prueba de ir mas alla de los limites, ya que,
el robot contine su propio sistema de seguridad
Los experimentos anteriores wam real fueron trayectorias
simples.
Por último, he probado robot WAM real con el stack de na-
vegación. La primera prueba fue simple, era ir al punto B, desde
su posición actual. Aqúı me encontré con un problema, ya que
la interfaz de comunicación del IRI, no aceptar la trayectoria
(como una colección de puntos), por el contrario, aceptaba uni-
camente puntos muy separados.Esto obligó al IRI implementar
una nueva interfaz de comunicación al robot, para que pudiese
trabajar con trayectorias( colección de puntos)
Más tarde, al volver a ejecutar la prueba usando las nuevas in-
terfaces, nos hemos encontrado con otro problema, ya estaba
relacionado con el numero de puntos entregados por el planifi-
cador. El robot tiene un ciclo de procesamiento de 500 [Hz], en
otras palabras, 500 posiciones en 1 segundo, y el stack solo pro-
porciona 89 puntos. El IRI tuvo que implementar una interfaz
98 CAPÍTULO 9. EXPERIMENTOS
con spline para poder generar los puntos restantes.
Al final se ha puesto a prueba la trayectoria del robot, pero con
la generación de un obstáculo en el camino Y para terminar los
experimentos se generó a partir de un escenario con múltiples
obstáculos.
9.2. Conclusiones de los Experimentos
Como conclusión de los experimentos de simulación, se puede
decir que fueron muy útiles para ver > el compor-
tamiento del robot, afinar detalles, ajustar los valores de alguna
propiedad,para que el simulador actuara de la misma manera
que el robot verdadero.
Utilizado para los experimentos con el robot real fueron muy
útiles por varias razones.
Primero se demostró que los códigos se pudo conectar con el
robot real, sin mayores complicaciones. También muestran que
el robot de cambio es transparente para el stack de navegación.
También gracias a estos experimentos, los códigos se puede me-
jorar el IRI, que ofrece nuevas interfaces de comunicación.
Sin olvidar el objetivo centrar de todos estos experimen-
tos,que es demostrar que el stack de navegación funciona con
el WAM ARM
Caṕıtulo 10
Conclusión
Antes de dar la conclusión final para el proyecto, primero me
gustaŕıa repasar y contrarestar los objetivos con los resultados
obtenidos.
1. Para el primer objetivo, simular el robot en Gazebo,los re-
sultados fueron muy satisfactorios. ya que el alcanze final
sobrepaso al objetivo en si, al lograr unir los ficheros de
definición del robto real y el simulado en un unico fichero
2. Para el segundo objetivo,conectar el stack de navegación,
los resultados son satisfactorios. A pesar de la densa docu-
mentación se logro conectar y modificar las variables nece-
sarias para conectar el stack de navegación
3. Para el tercer objetivo,conectar el simulador Gazebo con
el stack de navegación y generación trayectorias simples,
Los resultados son satisfactorios, el robot simulado sigue la
trajectoria respetando sus limites.
4. Para el cuarto objetivo,conectar el robot real con el stack
de navegación y generación trayectorias simples, Los resul-
99
100 CAPÍTULO 10. CONCLUSIÓN
tados son satisfactorios, el robot sigue la trajectoria respe-
tando sus limites.
5. Para el quinto objetivo,conectar el simulador Gazebo con
el stack de navegacióny generación trayectorias evitando
obstáculos, Los resultados son satisfactorios, el sigue la tra-
jectoria respetando sus limites y evitando los obstaculos sin
problemas.
6. Para el sexto objetivo,conectar el robot real con el stack
de navegación y generación trayectorias evitando obstácu-
los, Los resultados son satisfactorios, el sigue la trajectoria
respetando sus limites y evitando los obstaculos sin proble-
mas.
7. Para el séptimo objetivo,crear un mecanismo de intercam-
bio sin obstáculos, los resultados fueron bastante acepta-
bles, ya que, si cambiamos en tiempo de ejecución el tipo
de robot, debe hacer uso del ”dynamic reconfigure”para co-
nectar el stack de navegación con el nuevo robot.
8. Para el octavo objetivo,crear un mecanismo de intercambio
con obstáculos, los resultados fueron bastante aceptables,
ya que, si cambiamos en tiempo de ejecución el tipo de ro-
bot, debe hacer uso del ”dynamic reconfigure”para conectar
el stack de navegación con el nuevo robot.
Después de comparar los resultados obtenidos, puedo concluir
que los objetivos fueron alcanzados, algunos mas alla del pro-
pio objetivos, y otros a un nivel aceptable. De hecho, en estos
momentos, mis codigos ya se encuentran publicados junto al re-
positorio del IRI,
Caṕıtulo 11
Trabajo Futuro
Tal cual como han quedado los packages en la actualidad,se
abre un sinfin de posibilidades, sobre todo al simulador.
por ejemplo se puede simular una camara TOF (por ejempo
swissranger) o una depht camara (como PMD o Kinect) para
coger lecturas del entorno del robot. Esto ayudaria mucho en
proyectos como .Estirabot”, al poder simular todo.
Con el tiempo, se puede simular las camaras NIR que ayudarian
al Proyecto ”Garnics”
Por otro lado, la simulación, nos permite tener 2 o mas robots
dentro de un mismo entorno, creando un escenario preciso para
trabajos colaborativos, También, seŕıa posible, simular un robot
Tambien en un tiempo mas cercano, es posible simular las
distintas herramientas que utiliza el WAM, asi se pueden hacer
prubas con el simulador.
101
102 CAPÍTULO 11. TRABAJO FUTURO
Agradecimientos
En las siguientes lineas, es de mi agrado plasmar agradecimien-
tos a todas aquellas personas, que de una manera u otra, han
contribuido en la realización de este proyecto
A mi hermano Oskar, por ser mi fuerza en tiempo de desanimo,
por ser una persona muy especial,que siempre da amor y cariño
de forma silenciosa espontanea.
A mi madre Roxanna, a Juan Carlos, y en general, a toda mi
familia, por su inestimable e incondicional apoyo tanto en la
alegria y en la adversidad, me dieron ánimos cuando deprimia y
dieron fuerzas cuando flaqueba .
A mi director de proyecto Guillem Alenya por permitirme tra-
bajar en este proyecto, y ser guia ante mis dudas
A mis copañeros y amigos del I.R.I. que soportaron intensas y
extensas jornadas de preguntas,ayudandome a profundizar en
temas de robotica, como son Sergi Foix, Edgar Simó, José Luis
Riveros y Diego Pardo, y sin olvidar a mi director.
A mis compañeros y amigos David Perez, Manel Peirato, y a mi
amiga Paola Sanchez, por darme fuerzas y animos para seguir
adelante.
103
104 Agradecimientos
Bibliograf́ıa
[1] Institute of Robotics and Industrial Informatics
(IRI), www.iri.upc.edu/
[2] Robot Operating System(ROS ), www.ros.org
[3] Answer List Of ROS, answers.ros.org/questions/
[4] Mail List Of ROS,
code.ros.org/lurker/list/ros-users.html/
[5] Help Ubuntu home page, help.ubuntu.com/
[6] Yet Another Robot Platform(YARP),
eris.liralab.it/yarp/
[7] Open Robot Control Software(OROCOS ),
www.orocos.org/
[8] Carnegie Mellon Robot Navigation
Toolkit(CARMEN ), carmen.sourceforge.net/
[9] Orca:Components for Robotics(ORCA),
orca-robotics.sourceforge.net/
[10] Cross Platform Software for Robotics
Research(MOOS ),
www.robots.ox.ac.uk/ mobile/MOOS/wiki/pmwiki.php/
105
106 BIBLIOGRAFÍA
[11] Microsoft Robot Studio,
msdn.microsoft.com/en-us/robotics/default.aspx/
[12] Player Project, playerstage.sourceforge.net/
[13] PR2 Robot,
www.willowgarage.com/pages/pr2/overview/
[14] PR2 Robot EtherCAT devices,
www.ros.org/wiki/pr2 etherCAT/
[15] PR2 Robot ,
www.willowgarage.com/blog/2009/06/10/orocos-rtt-and-
ros-integrated/
[16] Install ROS
,www.ros.org/wiki/electric/Installation/Ubuntu/
[17] Gazebo simulator,
playerstage.sourceforge.net/doc/Gazebo-manual-svn-html/
[18] Willow Garage, www.willowgarage.com/
[19] Unified Robot Description Format(URDF ),
www.ros.org/wiki/urdf/
[20] Dynamic Plugin fro Gazebo of PR2,
www.ros.org/wiki/pr2 simulator/
[21] Xacro, www.ros.org/wiki/xacro/
[22] Yet Another Markup Language(YAML),
www.yaml.org/
[23] Yet Another Markup Language(in ROS),
www.ros.org/wiki/YAML Overview/
BIBLIOGRAFÍA 107
[24] Yet Another Markup Language(in Wikipedia),
www.wikipedia.org/wiki/YAML/
[25] C++(in Wikipedia), www.wikipedia.org/wiki/C++/
[26] C++(in ROS), www.ros.org/wiki/roscpp/
[27] C++(in ROS(Overview)),
www.ros.org/wiki/roscpp/Overview/
[28] List Processing(LISP)in Wikipedia,
www.wikipedia.org/wiki/LISP/
[29] List Processing(LISP)in ROS(Overview),
www.ros.org/wiki/roslisp/Overview/
[30] List Processing(LISP)in ROS ,
www.ros.org/wiki/roslisp/
[31] Remote Procedure Call,RPC ,in ROS(Overview),
http://www.ros.org/wiki/ROS/Technical Overview/
[32] Remote Procedure Call,RPC ,Home Page,
xmlrpc.scripting.com/default.html/
[33] Remote Procedure Call,RPC ,in Wikipedia,
en.wikipedia.org/wiki/XMLRPC/
[34] Software LifeCycle,
en.wikipedia.org/wiki/Software development process/
[35] RVIZ, www.ros.org/wiki/rviz/
[36] Actions(actionlib), www.ros.org/wiki/actionlib/
[37] TCPROS, www.ros.org/wiki/ROS/TCPROS/
108 BIBLIOGRAFÍA
[38] UDPROS, www.ros.org/wiki/ROS/UDPROS/
[39] Latex Home Page, www.latex-project.org/
[40] Geany Home Page, www.geany.org/
[41] Dia Home Page, dia-installer.de/
[42] ArgoUML, argouml.tigris.org/
[43] BSD, en.wikipedia.org/wiki/BSD licenses/
[44] LGPL, en.wikipedia.org/wiki/LGPL/
[45] FSF(Free Software Foundation), www.fsf.org/
[46] Tutotial Wubble,
www.ros.org/wiki/arm navigation/Tutorials/Running arm
navigation on non-PR2 arm/
[47] IRI Repositories in ROS, ros.org/wiki/iri wam/
[48] IRI Repositories in WIKIRI,
wikiri.upc.es/index.php/IRI ROS Stacks/
[49] Tutotial of ROS for Written Contro-
ller.www.ros.org/wiki/pr2 mechanism/Tutorials/Writing a
realtime joint controller/
[50] Quaternion’s Definition,
en.wikipedia.org/wiki/Quaternion/
[51] Degree of Freedom,
en.wikipedia.org/wiki/Degrees of freedom (mechanics)
[52] Inverse Kinematics,
en.wikipedia.org/wiki/Inverse kinematics
BIBLIOGRAFÍA 109
[53] Forward Kinematics,
en.wikipedia.org/wiki/Forward kinematics
[54] Spline, en.wikipedia.org/wiki/Spline (mathematics)
[55] Gazebo Dynamic Plugin, wiki-
ri.upc.es/index.php/Creating a robot simulator for GAZEBO/
[56] Gazebo Static Plugin, wiki-
ri.upc.es/index.php/Creating a robot simulator for GAZEBO/
[57] Actions(actionlib
detailed),www.ros.org/wiki/actionlib/DetailedDescription/
[58] Joint State Message,
www.ros.org/doc/api/sensor msgs/html/msg/JointState.html/
[59] Tabla de Amortización Simplificada,
www.gabilos.com/webcontable/amortizacion/estimacion directa simplificada.htm/
[60] Designing Concurrent,Distributed, and Real-Time
Applications with UML.
Hassan Gomaa,Addison-Wesley Editorial, Sixth printing
,2006. . . . . . . . . 88
8.12. Extracto de código fuente de wam1.urdf.xacro . . . . . . . . . 89
8.13. Codigo fuente de tipo launch de iri wam wrapper . . . . . . . 93
Nomenclatura
t Es una Traslación
q̂ Es un Quaternion
r̂ Rotación de tipo Roll
p̂ Rotación de tipo Pitch
ŷ Rotación de tipo Yaw
θx Angulo de movimiento,en radianes, para el jointX
DOF Grados de Libertad
11
12 Nomenclatura
Glosario
Translación
Es la posición de un cuerpo respecto a los ejes del mundo (o del
entorno)
Cuaternión
Los cuaterniones[50], son una extensión de los números reales bastante
similar a la de los números complejos. Estos son muy utilizados en el campo
de matemáticas, robótica, f́ısica, y por extensión al campo de los videojuegos,
ya que son útiles para representar rotaciones.
La complejidad que presentan las rotaciones en el espacio tridimensional se
debe a su no conmutatividad. Los cuaterniones unitarios, tienen la capaci-
dad de capturar toda la geometŕıa, topoloǵıa, y estructura de las rotaciones
tridimensionales, en la forma más sencilla posible.
Roll
Se define como la rotación de un cuerpo sobre el eje x, del sistema de
coordenadas del cuerpo (ejes relativos) y no al sistema de coordenadas del
entorno (ejes absolutos)
Pitch
Se define como la rotación de un cuerpo sobre el eje y, del sistema de
coordenadas del cuerpo (ejes relativos) y no al sistema de coordenadas del
13
14 Glosario
entorno (ejes absolutos)
Yaw
Se define como la rotación de un cuerpo sobre el eje z, del sistema de
coordenadas del cuerpo (ejes relativos) y no al sistema de coordenadas del
entorno (ejes absolutos)
Spline
Spline [54], Es una curva diferenciable definida en porciones mediante po-
linomios.
En los problemas de interpolación, se utiliza a menudo la interpolación me-
diante splines porque da lugar a resultados similares requiriendo solamente el
uso de polinomios de bajo grado, evitando aśı las oscilaciones, indeseables en
la mayoŕıa de las aplicaciones, encontradas al interpolar mediante polinomios
de grado elevado.
Cinemática Inversa
Dada la posición del efector final representa la posición del end-
effector(tcp), La cinemática inversa [52] calcula las correspondientes coorde-
nadas articulares, es decir, el ángulo para cada uno de los actuadores rota-
cionales
Cinemática Directa
Dada las coordenadas articulares:[θ1,θ2,θ3,....,θn] que son los ángulos de
cada uno de los actuadores rotacionales, La cinemática directa [53] calcula
la posición del end-effector.
Grados de Libertad
Los grados de libertad (del ingles, degree of freedom)[51]: es el número de
parámetros que definen la configuración de un sistema mecánico. Los grados
Glosario 15
de libertad de un cuerpo son el número de parámetros independientes que
definen el desplazamiento y deformación de la cuerpo. Este es un concepto
fundamental en relación con los sistemas de cuerpos en movimiento en la in-
genieŕıa mecánica, ingenieŕıa aeronáutica, robótica y a ingenieŕıa estructural.
Link
Es el elemento fundamental , que combinados, forman la cadena cinemáti-
ca del robot
Joint
Es la unión entre 2 links y es capaz de generar movimiento para cambiar
la posición y orientación de los mismos.
16 Glosario
Caṕıtulo 1
Introducción
1.1. Motivación
En mi mente pasaba un proyecto final de carrera (PFC) en el cual mos-
traba todos, o gran parte, de los conocimientos que he adquirido durante
la carrera, a demás queŕıa realizar un proyecto en el cual pudiera aprender
nuevos métodos, técnicas, conocimientos, etc. Para demostrar no solo a los
miembros del tribunal sino a mi mismo lo capacitado que estoy para reali-
zar las tareas de un ingeniero informático Personalmente, apasiona mucho el
tema de robótica y espero en un futuro, trabajar como investigador de este
campo.
Gracias al curso de introducción a la robótica humanoide pude tomar contac-
to con el instituto de robótica e informática industrial (IRI) [1], espećıfica-
mente quien seŕıa mi director de proyecto sr. Guillem Alenya. En un primer
contacto, le he explicado la idea que tenia para mi PFC (estaba orientado
a la aplicación de un robot en un entorno social). Me comento que en el
IRI, no teńıan esa ĺınea de investigación, pero me ofreció un proyecto en el
cual trabajaba con navegación de un robot WAM Arm y percepción con una
depth cámara.
Sin embargo, durante el transcurso de este, por requerimientos del mismo
instituto, se procedió a modificar el proyecto, a tal punto, de centrarme úni-
camente con la navegación pero también de crear un simulador del robot con
el mismo comportamiento del robot real.
Durante las 2 fases del proyecto, yo me he sentido muy contento por trabajar
en el IRI, y agradezco enormemente la oportunidad que me han dado.
17
18 CAPÍTULO 1. INTRODUCCIÓN
1.2. La importancia de la navegación
Algunos robots son plataformas móviles, llamados robots cartesianos,
otros pueden volar, otros rotar sobre algún eje, y muchos tienen la capa-
cidad de simular el brazo humano, y otros son humanoides.
Independiente del tipo de robot, y de su configuración, este requiere de las ne-
cesidades de navegación, para realizar un movimiento.
La navegación proporciona unas trayectorias para que el robot pueda seguir-
las. Pero para calcular estas trayectorias, se debe tener toda la información
necesaria tanto del robot como del entorno(o área de trabajo), como por
ejemplo, la posición de los obstáculos, posición del robot en el entorno, la
odometria del robot, limites de cada actuador del robot, etc.
Con toda esta información, la navegación debe ser capaz de crear trayecto-
rias para transportar al robot, desde un punto A a un punto B, evitando los
obstáculos y respetando los ĺımites del robot.
1.3. Real vs Simulado
Si bien es cierto que el simulador, como dice su nombre, simula las ca-
racteŕısticas y comportamientos de un objeto, este nunca llegara a actuar
idénticamente. Por ejemplo, si imaginamos el siguiente escenario, podemos
tener una plataforma cuadriculada de 10 x 10 [cm] y un robot humanoide
cualquiera. Si programamos al robot real a que se detenga en el centro del
3 recuadro, la probabilidad de detenerse es minima, por factores como la el
roce de los pies con la mesa, la porosidad de la mesa, etc. En cambio, si pro-
gramamos la misma tarea en un robot simulado, la probabilidad de acertar es
muy alta , ya uqe por mucho simulemos el roce, este nunca actuara como tal.
Sin embargo, la caracteŕıstica más destacable de un simulador es que la de
proteger al robot real. Ya que en el simulador podemos probar códigos y li-
breŕıas experimentales, que ejecutadas directamente en el robot real, pueden
crear estragos en el mismo. Aśı, por mucho que destroce un robot simulado,
lo único que debemos hacer es reiniciar el simulador. También es posible con
un único modelo de robot, podemos crear toda una población del mismo.
1.4. POR QUÉ ROS 19
1.4. Por qué ROS
Uno de los mayores problemas de la robótica, es que cada proveedor crea
sus controladores para sus robots. Como tal, se crea un escenario de depen-
dencia e incompatibilidad. Por ejemplo, si hacemos una llamada al contro-
lador de un robot, este código totalmente incompatible con otros robots, e
inclusive, puede ser incompatible con el mismo robot en una versión mas
moderna. En este punto, entra ROS. Este sistema, con su estructura de pac-
kages y su arquitectura de cliente / servidor, el código que usa al controlador,
estará al final del toda la cadena de dependencias de packages(en las nodo-
hojas, si lo miramos como árbol). Por lo tanto, es posible separar el código
de comunicación con el robot y con el código, digamos, de cálculo, lo que
permite, entre otras cosas, el intercambio de robot s y la reutilización de
código.
20 CAPÍTULO 1. INTRODUCCIÓN
Caṕıtulo 2
Objetivos
A continuación detallare los objetivos generales a este pro-
yecto:
1. Mi primer objetivo para este proyecto,es simular el bra-
zo robótico WAM, utilizando los ficheros mesh entregados
(*.stl) para cada pieza del robot. Además , este tiene que
simular la mayor cantidad de propiedades del robot real.
2. El segundo objetivo es conectar todo el stack de navegación
reutilizando los códigos del PR2 para su correcto funciona-
miento con el robot WAM ARM.
3. El tercer objetivo es conectar el simulador Gazebo con el
stack de navegación , de tal manera, poder generar las tra-
yectorias simples obtenidas desde el stack de navegación en
el ,y además se mueva de forma coherente dentro de sus
limitaciones.
4. El cuarto objetivo es conectar el robot real con el stack
de navegación , de tal manera, poder generar las trayec-
torias simples obtenidas desde el stack de navegación en
21
22 CAPÍTULO 2. OBJETIVOS
el ,y además se mueva de forma coherente dentro de sus
limitaciones.
5. El quinto objetivo es conectar el robot simulado con el stack
de navegación , de tal manera poder generar las trayecto-
rias, evitando obstáculos, obtenidas desde el stack de nave-
gación en el ,y además se mueva de forma coherente dentro
de sus limitaciones.
6. El sexto objetivo es conectar el robot real con el stack de
navegación , de tal manera poder generar las trayectorias,
evitando obstáculos, obtenidas desde el stack de navegación
en el , y además se mueva de forma coherente dentro de sus
limitaciones.
7. El séptimo objetivo es lograr crea un mecanismo, que per-
mita al stack de navegación calcular la trayectoria simple,
sin necesidad de saber el tipo de robot al cual esta conec-
tado.
8. El octavo objetivo es lograr crea un mecanismo, que permi-
ta al stack de navegación calcular la trayectoria con evita-
ción de obstáculos, sin necesidad de saber el tipo de robot
al cual esta conectado.
Caṕıtulo 3
Herramientas
3.1. ROS
3.1.1. Que es ROS
ROS , es un meta- sistema operativo ,de código abierto que
es utilizado en robótica. Ofrece los servicios que se esperaŕıa
de un sistema operativo, como abstracción de hardware, control
de dispositivos de bajo nivel, paso de mensajes entre los proce-
sos y la gestión de paquetes. También proporciona herramien-
tas y bibliotecas para la obtención, construcción, escritura y la
ejecución de código en varios equipos. ROS es similar en algu-
nos aspectos,a otro robot frameworks”, como Player [12], Yarp
[6], Orocos [7], CARMEN [8], Orca [9], Moos [10] y Microsof-
tRobotics Studio [11].
El grafo en tiempo de ejecución de ROS, es una red peer-to-
peer, de procesos que están débilmente acoplados, utilizando la
infraestructura de comunicación ROS. ROS implementa diferen-
tes estilos de comunicación, incluyendo sincronizada RPC-style
, utilizada por los servicios, la transmisión aśıncrona de datos,
utilizada por los tópicos y almacenamiento de datos en un ser-
23
24 CAPÍTULO 3. HERRAMIENTAS
vidor de parámetros.
ROS no es un framework de tiempo real, a pesar de que es po-
sible la integración de ROS con el código de tiempo real. El ro-
bot PR2 [13] de Willow Garage [18],utiliza un sistema llama-
do pr2 etherCAT [14], que transporta los mensajes ROS dentro
y fuera de un proceso en tiempo real. ROS también tiene una
integración perfecta con el Orocos Real-Time Toolkit [7].
3.1.2. Conceptos Básicos
Package
Es el elemento mas fundamental en la organización de los
ficheros de ROS. Un paquete puede contener nodos de ROS,
bibliotecas externas , un conjunto de datos, archivos de configu-
ración, fragmentos de códigos, o cualquier otra cosa que lógica-
mente constituye un módulo útil. El objetivo de estos paquetes
es proporcionar esta funcionalidad útil en un formato fácil de
utilizar, y además, que el software pueda reutilizar esta misma.
En general, los paquetes de ROS siguen el principio de ”Goldi-
locks”: Debe tener la suficiente funcionalidad para ser útil, pero
no demasiado al punto de que el paquete sea pesado y dif́ıcil de
utilizar.
Los packages tienden a seguir una estructura común. Éstos son
algunos de los directorios y archivos que se pueden nombrar:
bin/ : donde se almacenan los ficheros binarios.
include/package name/ : directorio donde se alamcenan los
ficheros cabeceras (.h, .hh,.hpp,etc) de C++
msg/ : donde se definen los tipos propios de mensajes
3.1. ROS 25
src/package name/ : codigos fuente del package, especialmen-
te codigos fuentes de Python que se exportan a otros pa-
quetes.
srv/ : donde se definen los tipos propios de servicios
scripts/ : donde se almacenan los scripts
CMakeLists.txt : fichero de construcción de CMake
manifest.xml : Manifiesto del Package, muestra la dependen-
cias que tiene el package de otros package.
mainpage.dox : Fichero de configuración de Doxygen para crear
documentación automática sobre el package
Un package de ROS es un directorio mas, en el árbol de depen-
dencias desde ROS ROOT o ROS PACKAGE PATH. Es posi-
ble agrupar muchos paquetes en stacks
Stack
Cuando se crean una colección de package que comparten una
temática en común, por ejemplo: diversos paquetes que calculan
de distintas maneras las cinemáticas, se pueden agrupar en un
stack. Un stack , es una colección de packages que comparten
una misma funcionalidad, por ejemplo cálculos cinemáticos, y
como consecuencia de esto, es mas fácil la distribución de los
paquetes
Además, otra funcionalidad muy importante de estos, es que a
diferencia de las libreŕıas tradicionales que vinculan en tiempo
de compilación, los stack pueden ofertar estas funcionalidades
en tiempo de ejecución mediante servicios y topicos. Los stacks
también contienen un fichero llamado stack.xml, que muestra la
26 CAPÍTULO 3. HERRAMIENTAS
dependencia de un stack con otros. Además todo lo que dentro
de un stack, se considera parte de el
Topicos
Es uno de los métodos de intercambio de mensajes entre los
nodos. Tiene una semántica anónima de publicador/subscriptor,
que provoca la separación de la producción de la información.
En otras palabras, los nodos no tienen conocimiento de quien se
conecta con quien, solo sabe de la información que recibe o de
que env́ıa.
Se puede definir a un publicador, como un nodo que publica
información en un tópico determinado, en cambio, un subscrip-
tor es quien recibe la información de un tópico determinado. Es
posible la existencia de múltiples publicadores y múltiples subs-
criptores hacia un tópico.
El tópico tiene una comunicación unidireccional y una comuni-
cación en streaming y Además, no puede recibir/publicar otro
tipo de datos que no sea para el cual fue creado
Servicios
El modelo de publicador/subscriptor es un paradigma de
comunicación muy flexible, pero su cardinalidad de muchos-a-
muchos y su transporte unidireccional no es el mas apropiado
para interacciones petición/respuesta ,de tipo RPC, que a me-
nudo son necesarios en un sistema distribuido.
Para las interacciones petición/respuesta, se utiliza otro tipo de
comunicación de ROS, llamado servicios.Este utiliza un par de
mensajes determinados: uno para la solicitud y otro para la res-
puesta.
3.1. ROS 27
(a) Interacción de las Acciones (b) Interfaces de las Acciones
Figura 3.1: Interacción Cliente/Servidor de las Acciones
ROS proporciona un nodo que ofrece un servicio con un nom-
bre determinado, y el cliente llama al servicio por su nombre
enviando el mensaje de solicitud, y queda en espera del mensaje
de respuesta.
Un cliente puede hacer una conexión persistente a un servicio, lo
que permite un mayor rendimiento a costa de la menor robustez
a los cambios de proveedor de servicios.
Acciones
La acción [36], es un concepto implementado por la libreŕıa
actionlib y tiene una arquitectura cliente/servidor. El cliente y el
servidor se comunican mediante un protocolo denominado ROS
action protocol, y cada uno de ellos proveen de una API sencilla
para que el usuario solicite una referencia (en el lado del cliente)
o o ejecute dicha referencia (en el lado del servidor) mediantes
callbacks.
Para llevara cabo esta comunicación entre cliente y servidor, es
necesario definir unos mensajes , que a continuación especifico:
28 CAPÍTULO 3. HERRAMIENTAS
Goal Para realizar las tareas con las acciones, se introduce una
referencia “meta”. Si estamos trabajando con una platafor-
ma móvil, la referencia “meta” seria el punto al cual que-
remos que se mueva, si estamos trabajando con un láser, la
referencia puede ser el ángulo de este.
Feedback Feedback es un mensaje que tiene el servidor. Este
se utiliza para indicar al cliente como va el progreso incre-
mental de la tarea respecto a la referencia “meta”.
Result Este mensaje lo env́ıa el servidor hacia el cliente una
vez que ha alcanzado la referencia “meta”. Se diferencia li-
geramente al feedback, ya que este ultimo se env́ıa durante
la ejecución que lleva al robot a la referencia “meta”, en
cambio, el result se env́ıa únicamente al finalizar la ejecu-
ción
3.1.3. Diferencia entre los servicios, tópicos y acciones.
La diferencia entre estos 3 formas de comunicación de ROS
es muy marcada.
Los servicios requieren 2 nodos para crear la comunicación. Cuan-
do el nodo cliente env́ıa la solicitud al nodo servidor,debe dejar
en espera su ejecución hasta que reciba la respuesta, hecho que
marca el reinicio de su ejecución. Por el contrario, los tópicos
no es necesario la existencia de los nodos involucrados, en otras
palabras, pueden existir publicadores sin subscriptores, y vice-
versa, pueden existir subscriptores pero no publicadores. Los
acciones funcionan a base de callback, y en palabras simples es
un fragmento de código que se ejecuta respondiendo a un evento
determinado.
3.1. ROS 29
(a) Diagrama de estados para el cliente (b) Diagrama de estados para el servidor
Figura 3.2: Diagrama de estados de las Acciones
Esto son los diagramas de estado para el cliente y el servidor de las acciones
[?].
3.1.4. Comunicación en ROS
ROS , actualmente soporta el env́ıo de mensajes a través
de los protocolos de transportes TCP/IP y UDP. Para el caso
de TCP/IP, se usa con conexiones persistentes, y en ROS se
30 CAPÍTULO 3. HERRAMIENTAS
Figura 3.3: Ejemplo Comunicación TCPROS
Ejemplo simple de comunicación entre 2 nodos
utiliza por defecto bajo el nombre de TCPROS. UDP,llamado
UDPROS, solo es soportado por la libreŕıa roscpp y aun sigue
en fase de desarrollo.
Los nodos de ROS, son capaces de negociar el transporte en
tiempo de ejecución, basándose en las funcionalidades ofrecidas.
Por ejemplo, Si un nodo que utiliza UDP intenta conectarse con
un nodo que solo acepta TCP, puede cambiar su protocolo de
transporte durante la ejecución
TCPROS
TCPROS [37],es el protocolo ,por defecto, de transporte para
los mensajes y servicios de ROS. Se utiliza TCP / IP estándar
para el transporte de datos. Las conexiones entrantes son reci-
bidas a través de un socket de servidor TCP, desde donde serán
3.1. ROS 31
enrutados según la información de las cabeceras.
Cabeceras TCPROS
Las conexiones entrantes al socket del servidor TCPROS, se
redirigue ,o encaminan, por la información contenida en las ca-
beceras de los paquetes de transporte. Por ejemplo si el paquete
entrante dice “topic” se enviara a una conexión de publicación
de tópicos. Un suscriptor TCPROS debe enviar los siguientes
campos:
callerid: nombre del subscriptor
topic: nombre del tópico al cual se subscribe
md5sum: checksum del tipo de mensaje
type: tipo de mensaje
Un publicador TCPROS está obligado a responder con los si-
guientes campos en una conexión correcta:
md5sum: checksum del tipo de mensaje
type: tipo de mensaje
Un cliente de un servicio TCPROS debe enviar los siguientes
campos:
callerid: nombre del nodo cliente
service: nombre del servicio al cual se conecta
md5sum: checksum del tipo de mensaje
type: tipo de servicio
32 CAPÍTULO 3. HERRAMIENTAS
Un suscriptor TCPROS opcionalmente puede enviar los siguien-
tes campos:
tcp nodelay: Si es ’1’, indica que el publicador marca TCP NODELAY
en el socket( si es posible)
Un publicador TCPROS opcionalmente puede enviar los siguien-
tes campos:
callerid: nombre del publicador,Aunque este campo no es obli-
gatorio, es muy recomendable para fines de depuración.
latching: Si es ’1’,el publicador indica que el env́ıo de mensajes
esta asegurado. El protocolo para el intercambio de men-
sajes y el latching es idéntico, pero los suscriptores tal vez
desee tomar nota del enlace cerrado.
Un cliente de servicio TCPROS opcionalmente puede enviar los
siguientes campos:
persistent: Si es ’1’, indica que la conexión debe mantenerse
abierta para multiples solicitudes del servicio
TCPROS tiene los siguientes campos opcionales:
message definition: texto completo de la definición de men-
sajes
error: un mensaje explicativo de por que fallo la conexión
UDPROS
UDPROS [38], es un protocolo de transporte (en desarrollo)
para los mensajes y servicios de ROS. Se utiliza los paquetes
UDP estándar para el transporte de datagramas de datos . El
3.1. ROS 33
transporte UDPROS es útil cuando la latencia es más importan-
te que el transporte fiable. Ejemplos en el ámbito de la robótica
son teleoperación, aśı como el streaming de audio. UDPROS in-
tercambia las cabeceras de los mensajes en la fase de negociación
XML-RPC[31][32][33](See 4.2.6)
UDPROS Header
Los mensajes ROS son enviados a través de la red como una
serie de datagramas UDPROS. El tamaño máximo de los data-
gramas UDPROS se negocia en la conexión de XML-RPC 4.2.6.
Cada datagrama UDP contiene un encabezado UDPROS, se-
guido por los datos del mensaje. El formato de la cabecera es el
siguiente:
Connection ID Este valor de 32 bits se determina durante la
negociación de la conexión y se utiliza para denotar la co-
nexión al cual el datagrama está destinado.
Opcode UDPROS soporta múltiples tipos de datagramas. El
código de operación especifica el tipo de datagramas. Este
campo de 8 bits puede tener los siguientes valores :
-DATA0 (0) Este código de operación lo env́ıa el primer datagrama del
mensaje ROS
-DATAN (1) Todos los datagramas posteriores de un mensaje ROS utili-
zan este código de operación
-PING (2) Este paquete se env́ıa de forma periódica para saber si la co-
nexión todav́ıa está activa
-ERR (3) Este paquete de error se utiliza para indicar que una conexión
se ha cerrado inesperadamente
Message ID Este valor de 8 bits se incrementa por cada men-
saje nuevo y se utiliza para determinar si los datagramas si
los datagramas llegan en orden
34 CAPÍTULO 3. HERRAMIENTAS
Block # Cuando el código de operación es DATA0, este campo
contiene el número total de datagramas . Cuando el código
de operación es DATAn, este campo contiene el número
actual de datagramas.
Mensajes ROS se env́ıan a los suscriptores en uno o más da-
tagramas UDPROS. El primer datagrama contiene el número
total de datagramas a esperar. Cada datagrama contiene una
cabecera seguida de los datos serializados . La cantidad máxima
de datos por mensaje datagrama se determina durante la ne-
gociación de la conexión. Sólo ultimo de los datagramas de un
mensaje contiene menos que el número máximo de bytes.
3.1.5. Como se instala ROS
ROS es bastante fácil de instalar, ya que se puede descargar a
través del Synaptic de linux la versión ros-electric-desktop-full,o
también es posible instalar manualmente esto se puede ver en el
Anexo ??.
3.2. Gazebo
3.2.1. Que es Gazebo
Gazebo es un simulador multi-robot para entornos al aire li-
bre. Es capaz de simular una población de robots, sensores y
objetos, todo esto lo hace en un mundo tridimensional. Genera
tanto una retroalimentación realistas del sensor como interac-
ciones entre los objetos f́ısicamente plausible (que incluye una
simulación exacta de la f́ısica de cuerpos ŕıgidos). Fue creado
por Nate y Howard Andrew Koenig en 2003
3.2. GAZEBO 35
(a) Modelos sin piel (b) Modelos con piel
Figura 3.4: Ejemplos de modelos en Gazebo
3.2.2. Caracteŕısticas
El simulador Gazebo tienelas siguientes caracteŕısticas:
1. Simulación de sensores estándar de robots, incluyendo so-
nar, láser de barrido telémetros, GPS y IMU, monocular y
cámaras estéreo.
2. Modelos de robots de uso común como el Pioneer2DX, Pio-
neer2AT y SegwayRMP.
3. Simulación realista de la f́ısica de cuerpos ŕıgidos: los ro-
bots pueden empujar las cosas, recoger cosas, y, en general
interactuar con el mundo de una manera plausible.
4. Independiente de la operación: los programas pueden inter-
actuar directamente con el simulador con libgazebo (inclui-
do en la distribución).
5. Modelo de la cámara estéreo: genera pares estéreo de imáge-
nes, la disparidad y mapas de profundidad.
36 CAPÍTULO 3. HERRAMIENTAS
6. Plugins de Modelos: los usuarios pueden desarrollar sus pro-
pios modelos de robots / sensores, y que estos modelos se
carguen en tiempo de ejecución.
7. “Pieles”: modelos simples geométricos pueden ser aumen-
tados en realismo mediante pieles de los programas de mo-
delado 3D.(ficheros mesh).
8. Gazebo es un software libre, publicado bajo la Licencia
Pública GNU(en la distribución ROS.
3.2.3. Como movemos un robot en Gazebo?
En Gazebo es posible mover los robots mediante plugins. Par-
ticularmente en ROS, existen 2 tipos de plugins
Plugin Estático Como vemos en la figura 3.5,Este enfoque
consiste en escribir un nodo genérico ROS que será ca-
paz de comunicarse con Gazebo a través del tópico gaze-
bo/model state. Por ejemplo, en este nodo recibe el mensa-
je de velocidad, y odometŕıa simulada ,y finalmente, genera
y env́ıa el mensaje adecuado a gazebo/model state con el
fin deque el robot se mueva.
Plugin Dinámico Como vemos en la figura3.6,Esto es un en-
foque muy diferente al anterior (y probablemente más com-
plicado), pero algunas personas tienen mejores resultados
cuando se utiliza este método que el plugin estático. Este
método consiste en escribir un plugin dinámico que se pue-
de integrar en el archivo URDF del robot para ofrecer el
simulador de la capacidad de control. El plugin utiliza el
Gazebo y el código de ROS para realizar las acciones de
simulación.
3.2. GAZEBO 37
Figura 3.5: Plugin Estático Gazebo
Este es el esquema del ejemplo utilizado para plugin estático [56]
Figura 3.6: Plugin Dinámico Gazebo
Este es el esquema para un plugin dinámico [55]
En este proyecto, solo se utilizo el segundo tipo de plugin. La di-
ferencia es que en wam arm fue una creación propia, en cambio,
en iri wam, utilice el propio de ROS. Encapsulados en los pac-
kages wam arm gazebo(ver 7.5.1) y iri wam gazebo(ver 8.5.5)
respectivamente.
3.2.4. Como se conecta ROS con Gazebo?
Gazebo es parte del package llamado simulator gazebo. En
este paquete,se almacena un código ✭✭wrapper✮✮, en el cual se
38 CAPÍTULO 3. HERRAMIENTAS
implementa las interficies necesarias para comunicarse con el
simulador a través de servicios.
gazebo/spawn urdf model Este servicio introduce el robot
en el simulador, la definición del robot esta escrita en URDF
gazebo/spawn gazebo model Este servicio introduce el ro-
bot en el simulador, la definición del robot esta escrita en
una extensión xml propia del Gazebo
gazebo/delete model Este servicio elimina de la silumación
el modelo especificado
gazebo/get model properties Este servicio retorna las pro-
piedades del robot en simulación
gazebo/get model state Este servicio retorna el estado del
robot en simulación
gazebo/get world properties Este servicio retorna las pro-
piedades del entorno simulado
gazebo/get joint properties Este servicio retorna las propie-
dades de un joint en simulación
gazebo/get link properties Este servicio retorna las propie-
dades de un link en simulación
gazebo/get link state Este servicio retorna el estado de un
link en simulación.
gazebo/get physics properties Este servicio retorna las pro-
piedades f́ısicas usadas en la simulación
gazebo/set link properties Este servicio permite cambiar las
propiedades de los links en simulación
3.2. GAZEBO 39
gazebo/set physics properties Este servicio permite cambiar
las propiedades f́ısicas usadas simulación
gazebo/set model state Este servicio permite cambiar la po-
sición del modelo en simulación, en coordenadas cartesianas
gazebo/set model configuration Este servicio permite cam-
biar la posición del modelo en simulación, en coordenadas
joints,quitando la dinámica de los mismos.
gazebo/set joint properties Este servicio permite cambiar
la posición del modelo en simulación, en joints
gazebo/set link state Este servicio permite cambiar el estado
de un linko en simulación.
gazebo/pause physics Pone pausa a la f́ısica simulada
gazebo/unpause physics Reactiva a la f́ısica simulada
gazebo/apply joint effort Aplica esfuerzo al joint en simula-
ción.
gazebo/clear joint forces Limpia el esfuerzo aplicado al joint
en simulación.
Sin embargo desde la versión diamondback de ROS, se recomien-
da no usar estos servicios, por la aparición de las acciones, ver
3.1.3
3.2.5. Problemas con Gazebo
El primer problema al que me he enfrentado en este proyecto,
fue con Gazebo. Durante la primera ejecución del simulador en
mi portátil aparecio un problema de blinking.
40 CAPÍTULO 3. HERRAMIENTAS
Figura 3.7: Ejemplo de uso de RVIZ
El robot genera mensajes de posiciones, y RVIZ las interpreta.
Investigando entre el mail-list de ROS [4], answer-list de ROS
[3] y ubuntu help [5],pude esclarecer el problema. Este ocurre
por que Gazebo crea conflictos con las tarjetas gráficas ATI y el
gestor de efectos de ubuntu (compiz).
La solución es deshabilitar el gestor compiz con esta instrucción,
antes de ejecutar Gazebo
metacity –replace
Luego se puede restaurar con esta otra instrucción:
compiz –replace
En la actualidad, hay distribuciones de Ubuntu que permiten
desactivar el compiz desde el inicio. Como es el caso de la versión
11.04 , que en la pantalla de login permite activar/desactivar el
compiz.
3.3. RVIZ
3.3.1. Que es RVIZ
RVIZ [35], es una herramienta muy útil de ROS. Este es un
visualizador 3D,y es capaz de mostrar todo lo que ve, piensa y
hace el robot
3.4. OMPL 41
(a) Problema Cubicles (b) Solución Cubicles
Figura 3.8: Ejemplo de solución a un problema con OMPL
3.3.2. Como trabaja RVIZ
RVIZ [35], trabaja leyendo e interpretando los diferentes da-
tos contenidos en los mensajes ROS. Por tanto, es necesario
tener un generador externo de estos mensajes(como un robot
real o simulado) Por ejemplo, en la figura 3.7, RVIZ interpreta
el mensaje joitn state[58] enviado por el robot.
3.4. OMPL
3.4.1. Que es OMPL
El Open Motion Planning Library (OMPL),se compone de
muchos algoritmos de planificación de muestreo basado en el
movimiento. OMPL en śı no contiene ningún código relacionado
con, por ejemplo, control de colisión o de la visualización. Esta
es una opción de diseño deliberada, de modo que OMPL no
está vinculada a un corrector de colisión frontal en particular
o la visualización, solo entrega una trayectoria a seguir. OMPL
está destinada a ser eficiente, seguro para subprocesos, fácil de
42 CAPÍTULO 3. HERRAMIENTAS
usar, fácilmente extensible y de libre acceso.
3.4.2. Como se conecta OMPL con ROS
ompl ros interface es el package que tiene la interficie nece-
saria para conectar el OMPL con ROS.
Este paquete me permitie crear y configurar fácilmente un con-
junto de movimiento para el robot. La mayoŕıa de configuración
es automática, sin embargo, se tiene que especificar las partes
del robot para el que desea crear un planificador de movimiento.
Caṕıtulo 4
Ciclo de vida y Lenguajes de
Programación
4.1. Ciclo de vida del Software
Figura 4.1: Modelo de Cascada
Modelo inicial de desarrollo de este software
43
44CAPÍTULO 4. CICLO DE VIDA Y LENGUAJES DE PROGRAMACIÓN
Figura 4.2: Modelo de Prototipaje
Modelo utilizado en el desarrollo del PFC
El término ciclo de vida del software[34] describe el desarrollo
de software, desde la fase inicial hasta la fase final. El propósito
deeste, es definir las distintas fases intermedias que se requieren
para validar el desarrollo de la aplicación, es decir, para garan-
tizar que el software cumpla los requisitos para la aplicación y
verificación de los procedimientos de desarrollo: se asegura de
que los métodos utilizados son apropiados. Existen varios ti-
pos de modelos de ciclos de vida, como por ejemplo:modelo en
cascada,modelo de prototipaje,modelo en espiral,desarrollo in-
teractivo e incremental, etc..
Inicialmente para este proyecto, hab́ıa pensado en un desarrollo
basado el modelo en cascada(figura 4.1). Su funcionamiento es
4.1. CICLO DE VIDA DEL SOFTWARE 45
aśı: después de cada etapa se realiza una o varias revisiones para
comprobar si se puede pasar a la etapa siguiente, tal como se
muestra en la imagen, hasta que no se termina una etapa no se
inicia la siguiente, se le conoce como un modelo ŕıgido, es de-
cir, poco flexible y con muchas restricciones como por ejemplo
la necesidad de contar con todos los requerimientos al comienzo
del proyecto. Si se detectan errores y no se detectan en la etapa
inmediata siguiente, es muy costoso y dif́ıcil volver atrás para
realizar la corrección. Otra de las restricciones que nos ofrece
éste ciclo de vida es que no vemos los resultados hasta que no
lleguemos a las etapas finales del ciclo, por lo tanto, cualquier
error detectado nos repercute un aumento de tiempo considera-
ble en detectar la etapa y su solución.
Después de un estudio consensuado,finalmente, he decidido usar
el modelo de prototipaje 4.2, El ciclo de vida se empieza en la
fase de análisis de requerimientos, sigue en la fase de diseño,
prototipaje, evaluación de resultados y refinamiento del proto-
tipo, una vez en ésta fase se evalúa si cumple con los requisitos
preestablecidos, en caso contrario volvemos a la fase de diseño,
volvemos a pasar por las fases siguientes, una vez llegados a la
fase refinamiento del prototipo el proyecto cumple con los re-
querimientos se le entrega al cliente, en nuestro caso, se da por
finalizado el proyecto.
El motivo por el cual me he decantado por éste ciclo de vida ,es
porque nos permite tener fácilmente una estructura de la apli-
cación, que no siendo completa, nos ayuda a definir con mejor
exactitud los puntos importantes, y por otra parte poder mos-
trar al cliente, que en éste caso es el tutor del proyecto, como
va evolucionando y aśı poder redefinir o añadir si fuese preciso
46CAPÍTULO 4. CICLO DE VIDA Y LENGUAJES DE PROGRAMACIÓN
los requerimientos iniciales. Además la arquitectura de ROS nos
permite plenamente este modelo de desarrollo.
4.2. Lenguajes de Programación
En esta sección, daré una pequeña reseña a los lenguajes que
he utilizado y/o nombrado durante la memoria
4.2.1. URDF
,
Figura 4.3:
ROS Logo
Unified Robot Description Format [19] , es una
extensión del lenguaje XML, adoptado por Wi-
llow Garage[18] como de facto , formato de defi-
nición de los robots para Robot Operating System
(ROS)[2].Tiene etiquetas muy simple e intuitivas y
fácilmente identificables con términos de robótica.
En este lenguaje, he tenido que definir todo el ro-
bot (sobre todo en WAM ARM), También, se pue-
de auto-generar desde xacro( como ocurre con IRI WAM).
4.2.2. XACRO
Xacro [21], es un macro-lenguaje de XML. Con el, se pueden
construir más rapudo y es más fácil de leer archivos XML me-
diante el uso de macros, que a su vez, se expanden a expresiones
mas grandes en XML
Este package es muy útil cuando se trabaja documentos XML
de gran envergadura , tales como descripciones de robots. Es
muy utilizado ya que tiene la facilidad de auto-generar urdf.
4.2. LENGUAJES DE PROGRAMACIÓN 47
4.2.3. YAML
Figura 4.4:
Oren Ben-
Kiki
YAML [22][23][24],es un formato de serializa-
ción de datos legible por humanos inspirado en len-
guajes como XML, C, Python, Perl, aśı como el for-
mato para correos electrónicos especificado por el
RFC 2822. YAML fue propuesto por Clark Evans
en 2001, quien lo diseñó junto a Ingy döt Net y
Oren Ben-Kiki.
YAML es un acrónimo recursivo que significa
”YAML Ain’t Another Markup Language (en es-
pañol, ”YAML no es otro lenguaje de marcado”).
A comienzos de su desarrollo, YAML significaba
”Yet Another Markup Language”(.Otro lenguaje de
marcado más”) para distinguir su propósito centrado en los da-
tos en lugar del marcado de documentos. Sin embargo, dado
que se usa frecuentemente XML para serializar datos y XML es
un auténtico lenguaje de marcado de documentos, es razonable
considerar YAML como un lenguaje de marcado ligero.
En este lenguaje lo he utilizado para crear, actualizar,modificar,
y eliminar, datos y variables desde el servidor de parametros
4.2.4. C++
Figura 4.5:
Bjarne
Stroustrup
C++ [25][26][27], es un lenguaje de programa-
ción diseñado a mediados de los años 1980 por
Bjarne Stroustrup. La intención de su creación fue
el extender al exitoso lenguaje de programación C
con mecanismos que permitan la manipulación de
objetos. En ese sentido, desde el punto de vista de
los lenguajes orientados a objetos, el C++ es un
48CAPÍTULO 4. CICLO DE VIDA Y LENGUAJES DE PROGRAMACIÓN
lenguaje h́ıbrido.
Posteriormente se añadieron facilidades de progra-
mación genérica, que se sumó a los otros dos pa-
radigmas que ya estaban admitidos (programación
estructurada y la programación orientada a obje-
tos). Por esto se suele decir que el C++ es un lenguaje de progra-
mación multiparadigma. ROS[2],tiene una implementación de
C++ llamado roscpp.Este proporciona una biblioteca de cliente
que permite a los programadores de C++ de forma rápida, crear
y comunicarse con la interfaz de tópicos,servicios y parametros.
Este es el más utilizada la biblioteca de cliente ROS y está di-
señado para ser la biblioteca de alto rendimiento para ROS.
En este lenguaje, he creado por ejemplo, el nodo que le entrega al
stack de navegación las posiciones de los obstaculos. También he
creado ordenes para mover el robot. Además WAM ARM,existe
una implementación inicial del plugin de Gazebo.
4.2.5. LISP
Figura 4.6:
John Mc-
Carthy
LISP [28][29][30], o LISt Processing,es una fa-
milia de lenguajes de programación de computado-
ra de tipo multiparadigma con una larga historia y
una sintaxis completamente entre paréntesis. Espe-
cificado originalmente en 1958 por John McCarthy
y sus colaboradores en el Instituto Tecnológico de
Massachusetts, el Lisp es el segundo más viejo len-
guaje de programación de alto nivel de extenso uso
hoy en d́ıa; solamente el FORTRAN es más vie-
jo. Al igual que el FORTRAN, el Lisp ha cambia-
do mucho desde sus comienzos, y han existido un
número de dialectos en su historia. Hoy, los dia-
4.2. LENGUAJES DE PROGRAMACIÓN 49
lectos Lisp de propósito general más ampliamente
conocidos son el Common Lisp y el Scheme.
El Lisp fue creado originalmente como una notación matemáti-
ca práctica para los programas de computadora, basada en el
cálculo lambda de Alonzo Church. Se convirtió rápidamente en
el lenguaje de programación favorito en la investigación de la
inteligencia artificial (AI). Como uno de los primeros lenguajes
de programación, el Lisp fue pionero en muchas ideas en ciencias
de la computación, incluyendo las estructuras de datos de árbol,
el manejo de almacenamiento automático, tipos dinámicos, y el
compilador auto contenido.
En ROS, exite una implementación llamada roslip, y se utili-
za en la generación automática de la estructura (en C++) de
mensajes y servicios.
4.2.6. XML-RPC
Figura 4.7:
Dave Winer
XML-Remote Procedure Call [31][32][33],es un
protocolo de llamada a procedimiento remoto que
usa XML para codificar los datos y HTTP como
protocolo de transmisión de mensajes. Es un pro-
tocolo muy simple ya que solo define unos cuantos
tipos de datos y comandos útiles, además de una
descripción completa de corta extensión. La sim-
plicidad del XML-RPC está en contraste con la
mayoŕıa de protocolos RPC que tiene una docu-
mentación extensay requiere considerable soporte
de software para su uso.
Fue creado por Dave Winer de la empresa User-
Land Software en asociación con Microsoft en el año 1998. Al
considerar Microsoft que era muy simple decidió añadirle funcio-
50CAPÍTULO 4. CICLO DE VIDA Y LENGUAJES DE PROGRAMACIÓN
nalidades, tras las cuales, después de varias etapas de desarrollo,
el estándar dejó de ser sencillo y se convirtió en lo que es actual-
mente conocido como SOAP.
Caṕıtulo 5
Planificación, Costos y
Licencias
5.1. Planificación
5.1.1. Planificación WAM ARM
Planificación para WAM ARM
Este proyecto comienza el 21 de Febrero del 2011 y de acuerdo
con el estudio de planning, debió acabarse el 19 de Julio del
mismo año. Se trabajó en el proyecto de lunes a viernes, 4 horas
diarias, a lo largo de 105 d́ıas, sumando un total de 420 horas
de trabajo para completar el proyecto.
Extensión Planificación para WAM ARM
Debido a los problemas que tuve durante el desarrollo del
proyecto inicial, principalmente debido a la inadecuada docu-
mentación, éste sufre una extensión de tiempo, que continuación
detallo:
La extensión comienza desde el 20 de Julio del 2011 hasta el 12
de Agosto del 2011. con una dedicación diaria de 5 horas, que
51
52 CAPÍTULO 5. PLANIFICACIÓN, COSTOS Y LICENCIAS
en total hace unas 75 horas. Por lo tanto, el tiempo total para
WAM ARM es de 495 horas.
En el anexo ?? se muestra el diagrama de Gantt paraWAM ARM.
5.1.2. Planificación para IRI WAM
El desarrollo de los packages para IRI WAM, comienzan el
29 de Agosto del 2011 y deben terminar el 5 de Enero del 2012,
La dedicación para este nuevo desarrollo es de 6 horas diarias,
durante un periodo de 90 dias, el genera 540 horas totales de
trabajo.
En el anexo ?? se muestr el diagrama de Gantt para IRI WAM
5.2. Costos
En esta sección, realizo un estudio de costos para este PFC.
Cabe destacar, que este es un proyecto universitario que no ge-
nera costos, y aqui asumo un escenario ficticio , donde los desa-
rrollos se llevan a cabo en la empresa privada.
5.2.1. Costos for WAM ARM
Costos por Software
A continuación detallo los costos generados por la utilización
de software
ROS ROS [2] es un sistema de codigo abierto y licencia BSD
[43], Por tanto, el costo es 0 euros
UBUNTU La versión recomendada de ROS require el uso de
UBUNTU,Por tanto, el costo es 0euros
5.2. COSTOS 53
Geany [40] Editor de texto para programación, es Free Softwa-
re, Por tanto, el costo es 0euros
SVN Gestor de Versiones, con licencia Apache/BSD, Por tanto,
el costo es 0euros
En total el costo por software es 0 euros
Costos por Personal
El personal requerido para el desarrollo de este proyecto es el
siguiente:
Analista de Proyectos con un costo de 27 euros/hrs
Diseñador de Proyectos con un costo de 22 euros/hrs
Programador con un costo de 18 euros/hrs
Tomando en cuenta, que la jornada laboral es de 8 hrs diarias
Los costos para este proyecto son (En este calculo esta incluida
la extensión)
Analista de Proyectos 35 dias * 8 hrs/dia * 27 euros/hrs =
7560euros
Diseñador de Proyectos 29 dias * 8 hrs/dia * 22 euros/hrs
= 5104euros
Programador 37 dias * 8 hrs/dia * 18 euros/hrs = 5328euros
El total por el concepto de personal para WAM ARM es 17992
euros.
54 CAPÍTULO 5. PLANIFICACIÓN, COSTOS Y LICENCIAS
5.2.2. Costos para IRI WAM
Costos por Software
A continuación detallo los costos generados por la utilización
de software
ROS ROS [2] es un sistema de codigo abierto y licencia BSD
[43], Por tanto, el costo es 0euros
UBUNTU La versión recomendada de ROS require el uso de
UBUNTU,Por tanto, el costo es 0euros
Geany [40] Editor de texto para programación, es Free Softwa-
re, Por tanto, el costo es 0euros
SVN Gestor de Versiones, con licencia Apache/BSD, Por tanto,
el costo es 0euros
En total el costo por software es 0euros
Costos por Personal
El personal requerido para el desarrollo de este proyecto es el
siguiente:
Analista de Proyectos con un costo de 27 euros/hrs
Diseñador de Proyectos con un costo de 22 euros/hrs
Programador con un costo de 18 euros/hrs
Tomando en cuenta, que la jornada laboral es de 8 hrs diarias
Analista de Proyectos 40 dias * 8 hrs/dia * 27 euros/hrs =
8640euros
5.2. COSTOS 55
Diseñador de Proyectos 25 dias * 8 hrs/dia * 22 euros/hrs
= 4400euros
Programador 30 dias * 8 hrs/dia * 18 euros/hrs = 4320euros
El total por el concepto de personal para IRI WAM es 17360
euros.
5.2.3. Costo para el Robot
A continuación calcularemos el coste por el concepto de ma-
quinaria. Para el cálculo de la amortización utilizaremos el me-
todo de tablas [59], el cual nos dice que al acabo de un año, la
amortización es del 12%.
Asumiremos que el robot fue comprado el dia anterior al inicio
de WAM ARM, con un valor de 140000 euros. Por tanto, si apli-
camos la amortización, veremos que el robot se desvalúa un total
de 16800 euros/año, quedando el robot valorizado en 123200 eu-
ros.
5.2.4. Costos por la Memoria
Aqui calculo, el costo que supondŕıa la realización de la me-
moria. A continuación detallo:
Latex [39]Procesador de texto,es free software, su costo es 0
euros
Geany [40] Editor de Texto ,es free software, su costo es 0 euros
ArgoUML [42] Software usado para diagramas UML, su costo
es 0 euros
Dia [41] Software usado para diagramas UML,su costo es 0 eu-
ros
56 CAPÍTULO 5. PLANIFICACIÓN, COSTOS Y LICENCIAS
El costo total creado por la memoria es de 0 euros
5.3. Licencias
En esta sección mostraré una pequeña explicación sobre las
licencias utilizdas en este proyecto
5.3.1. Licencia BSD
BSD [43],es la licencia de software otorgada principalmente
para los sistemas BSD (Berkeley Software Distribution). Es una
licencia de software libre permisiva como la licencia de OpenSSL
o la MIT License. Esta licencia tiene menos restricciones en com-
paración con otras como la GPL estando muy cercana al dominio
público. La licencia BSD al contrario que la GPL permite el uso
del código fuente en software no libre.
La primera versión de licencia BSD (de 4 cláusulas) fue revisada
poco tiempo después de ser creada, existiendo dos variantes de
ella: La nueva licencia BSD (o licencia BSD modificada) y la
licencia BSD simplificada (o licencia de FreeBSD)
5.3.2. Licencia LGPL
The GNU Lesser General Public License,es una licencia de
software creada por la Free Software Foundation. Los contratos
de licencia de la mayor parte del software están diseñados para
jugar con su libertad de compartir y modificar dicho software.
En contraste, la GNU General Public License pretende garan-
tizar su libertad de compartir y modificar el software ”libre”,
esto es para asegurar que el software es libre para todos sus
usuarios. Esta licencia pública general se aplica a la mayoŕıa del
5.3. LICENCIAS 57
software de la FSF o Free Software Foundation (Fundación para
el software libre) y a cualquier otro programa de software cuyos
autores aśı lo establecen. Algunos otros programas de software
de la Free Software Foundation están cubiertos por la ”LGPL
Lesser General Public License”(Licencia pública general reduci-
da), la cual puede aplicar a sus programas también.
Esta licencia permisiva se aplica a cualquier programa o trabajo
que contenga una nota puesta por el propietario de los derechos
del trabajo estableciendo que su trabajo puede ser distribuido
bajo los términos de esta ”GPL General Public License”. El
”Programa”, utilizado en lo subsecuente, se refiere a cualquier
programa o trabajo original, y el ”trabajo basado en el Progra-
ma”significa ya sea el programa o cualquier trabajo derivado del
mismo bajo la ley de derechos de autor: es decir, un trabajo que
contenga el Programa o alguna porción de él, ya sea ı́ntegra o
con modificaciones o traducciones a otros idiomas.
Otras actividades que no sean copia, distribución o modificación
si están cubiertas en esta licencia y están fuera de su alcance.
El acto de ejecutar el programa no está restringido, y la salida
de informacióndel programa está cubierta sólo si su contenido
constituye un trabajo basado en el Programa (es independiente
de si fue resultado de ejecutar el programa). Si esto es cierto o
no depende de la función del programa.
58 CAPÍTULO 5. PLANIFICACIÓN, COSTOS Y LICENCIAS
Caṕıtulo 6
Especificación y Diseño
6.1. Especificación
En esta etapa de la Ingenieŕıa del software es donde se ob-
tiene una especificación básica del sistema propuesto, y por lo
tanto, un prototipo inicial, éste prototipo inicial es equivalente a
una demostración (conocido como demo) del software final. En
ésta etapa se adquieren, reúnen y se especifican las caracteŕısti-
cas funcionales y no funcionales que deberá cumplir el software
final. Cabe remarcar que esta etapa es muy importante, ya que
el software final, el entorno y los parámetros no funcionales de-
penden del desarrollo de esta etapa. A demás en ésta etapa no
interviene únicamente el analista de proyectos, ya que se inter-
actúa con el cliente/usuario que utilizará el software final, por
lo tanto el analista debe ser capaz de extraer la mayor informa-
ción posible de lo que espera el cliente/usuario del software a
realizar. Después de aceptar este proyecto, como analista deb́ıa
de interiorizar en los temas y conceptos de la robótica, como
la odometŕıa, cinemática inversa, cinemática directa, etc. Todo
este proceso a sido muy interesante. Como resultado de esta tra-
bajo se generó un stack llamado ”WAM ARM”7 y luego en un
59
60 CAPÍTULO 6. ESPECIFICACIÓN Y DISEÑO
segundo desarrollo, se generaron una serie de package incluiudos
en el stack ÏRI WAM”8, por ese mitivo separo la especificación
en 2 partes.
6.2. Diseño
La etapa de diseño consiste en la toma de diversas decisiones,
que permitan desarrollar un sistema capaz de resolver satisfacto-
riamente todas las necesidades identificadas en la etapa de espe-
cificación. Si el objetivo de la etapa de especificación es detectar
que ha de hacer el sistema a desarrollar, entonces el objetivo de
la etapa de diseño es intentar responder a la pregunta ¿cómo
se tiene que hacer? Una vez identificado el problema, hay que
pensar como se relacionan las diferentes clases entre śı, es decir,
como se pasa la información de una a otra, quién crea un deter-
minado objeto, quién se encarga de guardar dicho objeto, etc.
Es en ésta etapa dónde nos preguntamos: ¿Qué componentes,
de los identificados en la etapa anterior, se tienen que modelizar
como componentes en la etapa de diseño?, ¿Qué asociaciones
del modelo conceptual tiene que aparecer en nuestro modelo de
componentes? Para responder a éstas preguntas en dónde en-
tran decisiones de diseño que dependiendo de las respuestas, el
diseño será más o menos robusto.
Éste es un capitulo importante, ya que es la base del proyecto,
ya que es muy importante la toma de decisiones que se toman
en esta etapa, y dependiendo de éstas decisiones, la evolución
del mismo será más o menos compleja, a demás de la etapa de
implementación que está bastante relacionada.
Durante la carrera de Ingenieŕıa Técnica en informática de ges-
tión, se realizó una asignatura que trataba sobre éste capitulo:
6.2. DISEÑO 61
Ingenieŕıa del Software I (ESO1), en esa asignatura se estudian
los diferentes métodos para poder realizar un buen diseño, du-
rante la realización de ésta etapa he visto como los conocimientos
adquiridos me han ayudado enormemente, aunque como es evi-
dente, en cuatro meses no se puede aprender todo y he tenido
que investigar libros porque mis conocimientos eran limitados a
lo que requeŕıa el proyecto. Las tareas que se desarrollan en la
etapa de diseño son las siguientes:
Asignación: Asignar las responsabilidades citadas a los com-
ponentes que creamos oportuno y cumpla con los requisitos
para realizar la tarea.
Descomposición: Descomponer las tareas a realizar en respon-
sabilidades
Recomposición colaborativa: Una vez hemos tratado los com-
ponentes individualmente tenemos que realizar un sistema
tal que colaboren los componentes entre si.
62 CAPÍTULO 6. ESPECIFICACIÓN Y DISEÑO
Caṕıtulo 7
Stack WAM ARM: Primer
Contacto
7.1. Códigos Gúıa: Wubble Robot y PR2 ro-
bot
El stack fue creado bajo la influencia de los siguientes stacks:
Wubble Code,[46]: Los creadores de este robot, han creado
un tutorial donde se pueden utilizar los códigos del brazo
del PR2 en un brazo no-PR2
PR2 Code[2]: Son todos los stack diponible desde la distribu-
ción ROS
A continuación explico los resultados
7.2. Licencia para WAM ARM
Al final este stack se convirtió en un stack de parendizaje
de los conceptos, tanto generales como mas avanzados, de ROS.
Por lo tanto no han sido publicados oficialmente, sin embargo,
63
64 CAPÍTULO 7. STACK WAM ARM: PRIMER CONTACTO
(a) Wubble Real (b) Wubble Simulado
Figura 7.1: Wuuble Robot
la licencia de este era BSD 5.3.1 De esta manera, permito que
alguien pueda mejorar estos código y los relicencie al tipo de que
le sea mas conveniente
7.3. Especificación y Diseño para WAM ARM
En esta sección, hablare sobre la especificación y desarrollo
para el WAM ARM.
Cabe destacar que debido a la arquitectura de ROS (cliente/servidor)
y la organización en package del mismo,y de acuerdo a las ne-
cesidades, Comencé en plantearme el diseño desde el modelo de
implementación(especificamente Diagramas de despliegue y dia-
gramas de Componentes). Otro punto que me gustaŕıa señalar
que en ROS, solo conozco la interficie de comunicación del pac-
7.3. ESPECIFICACIÓN Y DISEÑO PARA WAM ARM 65
kage, pero no conozco nada mas allá de esto, por tanto , los
paquetes de ROS son cajas negras.
7.3.1. Análisis de Requerimientos
Tenemos dos tipos de requisitos, conocidos como los requeri-
mientos funcionales y requerimientos no funcionales.
Los requisitos funcionales son aquellos que describen el com-
portamiento de las entradas del sistema, la funcionalidad y las
salidas del sistema, aśı como la relación entre ellos.
Los requisitos no funcionales son las que definen las cualidades
generales que cuando se tiene el sistema funciona.
Requerimientos Funcionales
1. Cada package debe contener el código necesario para llevar
a cabo la tarea asignada
2. Cada nodo creado debe representar una acción espećıfica
en robot
3. Cada package debe ser capaz de leer un mensaje deter-
minado con los datos necesarios para completar la tarea
asignada
4. El sistema debe ser capaz de calcular la cinemática inversa
de robots con diferentes grados de libertad
5. Los package deben ser fácilmente reemplazables
6. El sistema debe generar trayectorias consistentes
66 CAPÍTULO 7. STACK WAM ARM: PRIMER CONTACTO
7. El sistema debe conectarse correctamente con ROS
8. Los códigos deben ser eficientes
9. El sistema debe conocer las limitaciones mecánicas del ro-
bot
10. Las trajectorias deben estar dentro de los limites del robot
11. La navegación debe ser capaz de sortear obstáculos
Requirimientos No Funcionales
1. Debe ser bastante amigable de cara al usuario.
2. El usuario debe conocer lo justo para ejecutar el sistema
3. Evitar el uso de demasiadas consolas
7.4. Diagramas
En esta sección mostrare y explicare los esquemas utilizados
para este proyecto .Para esto, me han sido muy útiles los cono-
cimientos adquiridos en las asignaturas de ESOE y ESO1. La
dificultad que encontré fue en el modelo de la arquitectura de
cliente/servidor ROS, ya que en las asignaturas anteriormente
señaladas se centraron en el diseño mono-puesto. Este esfuer-
zo me exigió la forma de modelar esta situación, que me pare-
ció bastante bueno el apoyo en el libro ”Designing Concurrent,
Distributed and Real-Time Applications with UML”[60]
7.4. DIAGRAMAS 67
Figura 7.2: Ejemplo Diagrama de Despliegue
7.4.1. Diagrama de Despliegue
Diagramas de Despliegue ,Fig.7.2,corresponden al UML 2.0
estándar y muestran la disposición f́ısica de las diferentes nodos
que componen un sistema y la distribuciónde los componentes
de estos nodos. Los nodos del diagrama, representan a un ele-
mento f́ısico que existe en tiempo de ejecución o representan un
recurso computacional. Hay dos tipos de nodos:
Procesadores: Nodos con capacidad de procesamiento, puede
ejecutar un componente
Dispositivos: Nodos sin capacidad de procesamiento
Los nodos están conectados a través de conexiones bidirecciona-
les que a su vez puede estereotipadas. Estas conexione modelan
las asociaciones entre los nodos. Gráficamente un nodo está re-
presentado por un cubo en 3D.
En este proyecto hay un nodo servidor, que ejecuta el núcleo de
ROS. Todos los package,al ejecutar un launch,generaran un nodo
68 CAPÍTULO 7. STACK WAM ARM: PRIMER CONTACTO
de este diagrama, sea o no nodos de ROS. En otras palabras, ca-
da nodo contendrá el componente de cliente creado, que genera
la ejecución de un paquete de ROS. ROS por defecto, está co-
nectado a través de TCP, la conexión (o asociación) entre el
nodo cliente y el nodo de servidor es el tipo de >.
El diagrama resultante se muestra en la figura 7.3
7.4.2. Diagramas de Componentes
Diagramas de componentes ,Fig. 7.4, se describen los elemen-
tos f́ısicos del sistema, sus relaciones, sus dependencias, la co-
municación y otras condiciones. Estos componentes representan
todos los tipos de elementos de software que entran en la creación
de aplicaciones informáticas (por ejemplo, pueden ser archivos,
paquetes, bibliotecas, etc.) Un componente puede consistir en
un paquete, en muchas clases o un grupo de componentes más
pequeños. En un componente también puede tener, interfaces
y subsistemas. Destaco en esto, porque es el medio por el cual
ROS comunica sus mensajes .
Interfaces
Son los puntos de entrada/salida que el componente pone a
disposición del resto para generar comunicación entre ellos.
Subsistemas
Un subsistema es una agrupación en paquetes, de diferentes
componentes en un sentido lógico y para una simplificación de
la aplicación. Concluyo que, cada paquete ROS que he creado
es un componente por las siguientes razones
1. Cada paquete contiene una colección las clases y/o librerias.
7.4. DIAGRAMAS 69
Figura 7.3: Diagrama de Despligue para WAM ARM
Diagram de Despligue final para el stack wam arm
2. Cada uno de los paquetes de Ros tiene su propia interfaz.
3. La existencia de los package, se justifica paraa la simpli-
ficación del sistema. Un package, crea un nodo en tiempo
ejecución, que a su vez tiene una tarea única.
Visto desde este punto de vista, puedo concluir que: Un package
de ROS es un subsistema perteneciente a un stack de ROS, y
esto a su vez es un subsistema de ROS
70 CAPÍTULO 7. STACK WAM ARM: PRIMER CONTACTO
Figura 7.4: Diagrama de Componentes y sus Dependencias para WAM ARM
En este modelo podemos ver los servicios ofrecidos por los componentes y
las dependencias entre ellos. Hay que tener en cuenta, que el concepto de
servicio es de comunicación entre componentes y no pertenece al concepto
de los servicios de ROS
7.5. Descripción de los Packages
7.5.1. wam arm gazebo
Es el último package en unirse. Contiene un prototipo de plu-
gin dinámico, que no funciona del todo bien, debido a la escasa
documentación de Gazebo dificulto el trabajo y exigió mucho
más tiempo por el mismo problema.Este plugin mueve el robot
de forma lineal, en otras palabras,genera trayectorias lineales
para mover el robot visualmente, utilizando la cinemática direc-
ta También contiene un directorio urdf, donde se almacena toda
7.5. DESCRIPCIÓN DE LOS PACKAGES 71
la definición del robot y los ficheros mesh.
7.5.2. wam arm kinemtaics
He creado este package con la tarea de encargarse de todo lo
referente a la cinemática del robot Este paquete contiene varios
ficheros, que a continuación detallo
wam arm kinematics: Este es el que contiene toda la interfi-
cie de comunicación de ROS
wam arm ik solver: Contiene toda la información necesaria
para realizar los calculos de cinemática (por ejemplo, nom-
bre de links, nombre de joints)
wam arm ik: Contiene la codificación necesaria para convertir
los datos provenientes de ROS, al tipo que necesita una
libreria externa para calcular la cinemática inversa( Matriz
Homogénea)
wamik: Esta es la libreria externa que calcula la cinemática
inversa, se llama Kaijen
wam arm constant: Contiene variables que se mantienen cons-
tante durante toda la ejecución, por ejemplo los DOF.
wam arm utils: Es una clase auxiliar, contiene metodos de ve-
rificación, de transformación, etc.
A pesar de que funciona a la perfección, este package tiene un
pequeño detalle sobre la cinemática directa. Desde el punto de
vista conceptual de la cinemática directa, es la posición cartesia-
na del TCP (tool cental point), pero en este código, proporciona
una cinemática directa para cada joint del robot.
72 CAPÍTULO 7. STACK WAM ARM: PRIMER CONTACTO
7.5.3. wam arm teleop
Este package que he creado,es bastante simple, y es para co-
municar al nucleo el punto destino Este package tiene un codigo,
en from keyboard.cpp , que lee desde teclado la posición final
que deseo La manera de introducir los datos es bastante simple
y se muestra a continuación: L[x x x x x x x]
Si L es una J, x son los angulos al cual el robot debe moverse
(en radianes) para cada joint, Por lo tanto,queda asi: j[θ1 θ2 θ3
θ4 θ5 θ5 θ7]
Si L es una C, las x son las coordenadas cartesianas del punto
final: c[t,q̂],t es la traslación y q̂ es un cuaternión
Se comunica con wam arm interface mediante servicios, y las
clases internas lo hacen mediante topicos.
7.5.4. wam arm interface
Este paquete lo he crado con la idea, de generar un punto
neuralgico , que fuese capaz de conectar todos los paquetes del
WAM ARM. También que creado un servicio propio, llamado
SetPosition, que es por donde se recibe el punto de destino del
robot desde wam arm teleop. Se comunica con wam arm action
con acciones y con el resto mediante servicios
7.5.5. wam arm action
Este package es quien envia las posiciones [θ1 θ2 θ3 θ4 θ5 θ5 θ7]
para mover el robot en iri wam gazebo. Este se comunica con el
wam arm gazebo con tópicos y con wam arm interface mediante
acciones
7.6. EFECTOS DE UNA INADECUADA DOCUMENTACIÓN 73
7.6. Efectos de una inadecuada documenta-
ción
El problema mas grande que me encontre en este proyecto,
es la documentación de ROS y de Gazebo
En Gazebo, tla documentación es paupérrima,las explicaciones
de los metodos son bastante ambiguos, las cabeceras de las clases
mostradas en el website no coinciden conlas encontradas en el
package de ROS. La precariedad de la documentación de Gazebo
me ha causado una perdida de tiempo enomre.
En ROS,en cambio,la cantidad de información estan grande y en
ocasiones es tan densa, que me perdia y tenia que volver a releer
todo.De hecho, muchos conceptos adquiridos en WAM ARM,
los tuve que reaprender en IRI WAM, ya que estaban erróneos
7.7. Conclusión para WAM ARM
Como conclusión personal a este trabajo, puedo destacar:
1. He aprendido lo importante que es tener una buena docu-
mentación sobre los proyectos, códigos, etc métodos
2. He aprendido y refinado terminoloǵıa de robótica y termi-
noloǵıa de cinemática
3. Aprendido otra forma de implementar aplicaciones clien-
te/servidor
4. También tuve que aprender a tomar decisiones sobre el
desarrollo del sistema,Obviamente basandome en las lec-
ciones aprendidas durante la carrera ,Pero debido a mi po-
ca experiencia , muchas de estas desiciones no fueron las
acertadas.
74 CAPÍTULO 7. STACK WAM ARM: PRIMER CONTACTO
5. He aprendido a trabajar en grupos de trabajo, como resulta-
do de esto, aprend́ı a trabajar con brainstroming, aprend́ı a
debatir sobre que opciones era las mas acertada y también
aprend́ı a defender la validesa de mis ideas con argumentos
solidos
6. También he aprendido algo muy imoprtante, si algo funcio-
na no quiere decir que lo haga de forma correcta
Como conclusión al trabajo respecto a los

Mais conteúdos dessa disciplina