Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad de Ingenierı́a
Departamento de Electrónica
29 de mayo de 2013
Índice general
Abreviaturas V
1. Introducción 1
2. Marco Teórico 3
2.1. Motor de Fı́sica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1. Estado del Arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1.1. Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1.2. APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2. Selección de la Biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. Motor Gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1. DirectX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2. OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2.1. Proceso de renderización . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.3. OpenSceneGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
i
Contents
6. Integración - validación 28
6.1. Descripción general de los bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.2. Flujo del Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3. Interfaces Gráficas de Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.4. Validación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.4.1. Experimentos con el robot real . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.4.2. Experimentos con el robot simulado . . . . . . . . . . . . . . . . . . . . . . . 32
6.4.3. Análisis de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7. Conclusiones 39
A. Nota de Publicaciones 41
D. Registro de Cambios 53
Bibliografı́a 56
ii
Índice de figuras
iii
Lista de Figuras
iv
Abreviaturas
v
Capı́tulo 1
Introducción
Un Modular Snake Robot [1] tiene el potencial de moverse en terrenos difı́ciles [2][3]. Sin embargo,
es necesario diseñar varias estrategias de movimiento y la transición entre ellas para darle usos
prácticos [4]. El flujo de diseño para el planeamiento de movimiento exige la verificación constante
de los métodos de locomoción, y las pruebas con el robot acarrean los problemas propios de todo
experimento: son costosas, consumen tiempo y, a pesar de la versatilidad y robustez de la plataforma,
deterioran el robot. Adicionalmente, de acuerdo con el protocolo de mantenimiento establecido, tras
una hora continua de operación es necesario ejecutar ajustes que consumen aún más tiempo. Surge
entonces la necesidad de verificar las estrategias de locomoción de una forma diferente.
Otra manera de conseguir esta verificación es mediante la creación de un modelo que permita la
predicción del comportamiento del robot. Un modelado matemático busca solucionar de manera
analı́tica las ecuaciones que gobiernan un fenómeno, pero dada la complejidad del robot [5][4], una
solución de este tipo es inapropiada [6].
Una alternativa formal es la simulación por computadora, que mediante métodos numéricos [7] re-
suelve las ecuaciones mencionadas y muestra el efecto que tiene la variación de múltiples parámetros
como el momento de fuerza de los motores, la gravedad y el ambiente, en el estado del robot.
1
Capı́tulo 1. Introducción
El desarrollo de un modelo simulado del Modular Snake Robot (MSR) lola-OP TM [12][13][14] y de
escenarios virtuales, ası́ como la emulación de las entradas y salidas del robot existente, facilitará la
investigación del grupo, especialmente en la generación de estrategias de movimiento.
El objetivo principal de este trabajo es entonces proveer a la comunidad de robótica de una herra-
mienta computacional, para facilitar el proceso de generación de estrategias de movimiento de un
Modular Snake Robot. Como objetivos especı́ficos se tiene:
1. Representar la estructura mecánica del Modular Snake Robot (MSR) lola-OPTM , mediante el
uso de una herramienta computacional.
2. Representar las señales de los sensores internos de los servomotores del MSR, de acuerdo al
comportamiento dinámico de su representación computacional.
4. Integrar las representaciones (robot, sensor, ambiente), validando los resultados usando un
robot y ambientes reales.
El libro esta organizado, de acuerdo a los objetivos planteados, de la siguiente forma: En el capı́tulo 2,
Marco Teórico, se presenta la teorı́a de operación y el estado del arte de las partes que constituyen el
simulador, en el capı́tulo 3, Estructura Fı́sica y Representación Virtual, se describe el tipo de robots
objeto del simulador y se presentan los modelos para su emulación, en el capı́tulo 4, Representación
de las señales de los motores, se estudian los actuadores del robot y se presentan los detalles de
la implementación de sus equivalentes virtuales, en el capı́tulo 5, Geometrı́a y Caracterı́sticas de
Contacto, se discute la implementación de estructuras para representar el ambiente y su interacción
con el robot, en el capı́tulo 6, Integración y Validación, se condensa la estructura del programa y su
funcionamiento, y se comparan los resultados del robot simulado y el real, finalmente en el capitulo
7 se presentan las conclusiones.
2
Capı́tulo 2
Marco Teórico
El simulador se construye alrededor de dos bloques: el motor de fı́sica y el motor gráfico, ensamblados
a partir de librerı́as para C++. En este capitulo se discute la función y teorı́a de operación de cada
uno ası́ como la selección de las librerı́as.
Una simulación basada en fı́sica se reduce a resolver ecuaciones diferenciales. Estas ecuaciones
diferenciales pueden representar varios sistemas, como agrupaciones de resortes o una esfera en
caı́da libre. El conjunto de reglas que rigen a esos elementos simulados, ası́ como la capacidad de
traducir el problema a ecuaciones diferenciales y resolverlas conforma un motor de fı́sica.
Para resolver ecuaciones diferenciales mediante un computador se utilizan métodos numéricos, que
trabajan con pasos de tiempo definidos y utilizan métodos como el de Euler o mejoras del mismo,
como el método del punto medio. La relación entre la precisión de la respuesta y el tiempo de
cómputo es importante a la hora de escoger un método de resolución de ecuaciones diferenciales.
Una precisión alta permite la selección de pasos de tiempo grandes, sin embargo, si el tiempo de
cómputo es elevado entonces puede ser preferible elegir un método más rápido con pasos de tiempo
pequeños.
Es posible obtener ese tipo de modularidad dado que para resolver ecuaciones diferenciales de forma
numérica es necesario efectuar un conjunto de operaciones claras sobre el sistema que se quiere
3
Capı́tulo 2. Marco Teórico
resolver [15]. Estas funciones se limitan a: conocer el número de variables del sistema, obtener los
valores presentes de esas variables y calcularlos a medida que se ejecutan los pasos para la solución.
Para llegar a una estructura que represente al sistema y que permita efectuar dichas operaciones,
se debe modelar de alguna forma el fenómeno para reducirlo a variables y ecuaciones diferenciales.
Es precisamente el modelado el que define la clase del motor de fı́sica y puede estar basado en
dinámica de cuerpo rı́gido, de cuerpo flexible, de partı́culas, de fluidos, o una combinación de ellos.
Las matemáticas detrás de cada sistema fı́sico mencionado no solo proporcionan las ecuaciones
diferenciales que rigen al fenómeno sino también un conjunto de restricciones [16].
Por ejemplo, en el caso de la dinámica de cuerpo rı́gido, se definen cuerpos con propiedades como
la posición de su punto de referencia, velocidad del punto de referencia, orientación del cuerpo,
velocidad angular, masa, posición del centro de masa respecto al punto de referencia y tensor
de inercia, entre otros. Adicionalmente los cuerpos pueden estar unidos entre sı́ por junturas con
diferentes grados de libertad y pasivas (si sólo restringen la posición relativa de los cuerpos que
unen) o actuadas (si producen fuerza sobre los cuerpos).
La estructura final, que involucra a las ecuaciones diferenciales, se debe crear dinámicamente a
medida que el usuario del motor de fı́sica crea objetos para ser simulados. Estos objetos pueden ser
las partes que conforman al robot y el escenario en el que se moverá.
A parte de las restricciones y ecuaciones que rigen a la simulación, una caracterı́stica de los motores
de fı́sica es la detección de colisiones. Cuando dos cuerpos colisionan el programa se detiene, evalúa
las velocidades de los cuerpos y las altera de acuerdo a las caracterı́sticas de los mismos y a la
voluntad del usuario. Las velocidades de los cuerpos pueden cambiar de dirección abruptamente,
hacer un cambio paulatino de magnitud o incluso los cuerpos pueden penetrar uno al otro.
Una posibilidad es utilizar un motor gráfico para mostrar al usuario el resultado de la simulación
después de cada paso o de un número determinado de pasos. En este caso, y con la intención de
hacer más rápida la simulación se usan prácticas como definir dominios de colisión diferentes a los
cuerpos reales, de manera que a una persona la puede representar un cilindro y el procesamiento
es menor. De la misma forma es posible manipular el tamaño de los pasos de tiempo, el método
de resolución de las ecuaciones diferenciales, el algoritmo de detección de colisiones (por ejemplo
para ignorar objetos lejanos), los coeficientes de fricción entre cuerpos y las caracterı́sticas de las
colisiones para alcanzar una simulación rápida o, por el contrario, precisa y cercana a la realidad.
Actualmente, se han desarrollado varios simuladores de fı́sica con diferentes caracterı́sticas. Algu-
nos muy similares entre sı́ y otros enfocados a mejorar algún aspecto del proceso de simulación.
Encontramos dos grupos diferentes de software. El primero, los frameworks, en el que el programa
tiene su propio ambiente de trabajo, cuenta con un conjunto de espacios definidos, algunos gráficos
4
Capı́tulo 2. Marco Teórico
y otros de texto, con opciones de edición de ambientes y objetos y las funciones y lı́mites están
muy bien definidos por las restricciones del programador y no pueden ser expandidos fácilmente.
El segundo, las Application Programming Interface (API), en las que se encuentran un conjunto
de funciones genéricas y que pueden ser utilizadas a manera de biblioteca en programación, bus-
cando resolver problemas bastante especı́ficos. Normalmente, se encuentran en diferentes lenguajes,
y están pensadas para desarrollar aplicaciones o frameworks más grandes. En simuladores para
robótica encontramos opciones de software en ambas presentaciones, a continuación se describirán
las más significativas.
2.1.1.1. Frameworks
Empezando por los frameworks, CARMEN (Carnegie Mellon Robot Navigation Toolkit) [17] [18],
escrito en C y diseñado para resolver problemas de navegación de robótica en 2D. Es un conjun-
to de programas con una función independiente entre las que se encuentran, comunicación entre
procesos, especificaciones del robot, definición y planeamiento de rutas, localización, simulación,
interfaces gráficas, entre otros. Para que se comuniquen se usa Inter-Process Communication (IPC)
y existe un encargado de organizar esta comunicación. Esto permite que el simulador corra en 1 o
varios computadores a la vez, distribuyendo la carga. Las plataformas que soporta están definidas
en la documentación; algunas de ellas son: IRobot ATRV, ActivMedia Pioneer I y II, Normadic
Technologies Scout y Segway.
Stage y Gazebo [9] [17] [11]son simuladores de multiagentes, permite modelar sus interacciones y las
del ambiente con cada uno de ellos. Cuenta también con diferentes sensores y cámaras que pueden
ser adaptados a las plataformas. Stage [9] trabaja en 2D y se centra en simular muchos agentes con
poca fidelidad, siendo bastante útil para analizar algoritmos de interacción. Gazebo [9], está diseñado
para 3D y, aunque permite simular varios robots, cuenta con un mecanismo para cuerpos rı́gidos,
haciéndolo más preciso y reduciendo la cantidad de agentes posibles. Ambos cuentan con modelos
preestablecidos de sensores y actuadores disponibles en el mercado o en investigaciones.
SimTwo [19] fue realizado por Paulo José Cerqueira de la Universidade do Porto, en Portugal, es el
más reciente y tiene un multiple document interface (MDI), un conjunto de aplicaciones corriendo
sobre un mismo ambiente llamado “world view”. Permite visualizar el robot, configurar las cámaras
del mundo, ver información del robot como posición, velocidad y datos de los sensores. El robot y
escenario están diseñados en archivos con formato XML donde se definen por etiquetas los obstáculos
y objetos, los sensores externos e internos y las partes del robot y sus junturas.
Existen también opciones privativas como V-rep [8] y Microsoft Robotics Developer Studio [20]. El
primero fue desarrollado por Mark Freeze [8], es comercializado por HiBot [21] y cuenta con todas
las herramientas necesarias para simular, probar y evaluar todo un sistema robótico. El segundo,
desarrollado por Microsoft y, aunque su descarga es gratuita, es necesario contar con Microsoft Visual
Studio para utilizarlo. Cuenta con muchas funciones entre las cuales se encuentra el simulador.
5
Capı́tulo 2. Marco Teórico
2.1.1.2. APIs
Por otra parte, tenemos las API’s de fı́sica. Todas son funciones que resuelven numéricamente las
interacciones y no cuentan con gráficos en la mayorı́a de los casos. Bullet [22], Open Dynamics
Engine (ODE) [7] y PhysX [23] son algunos de los más conocidos y utilizados. Fueron pensados
para ser utilizados en videojuegos y pelı́culas, por esto es necesario ser cuidadoso con la metodologı́a
utilizada para obtener los resultados. Aunque resolver la colisión e interacción entre cuerpos rı́gidos
es el objetivo de todos, cada uno define sus funciones y resuelve las ecuaciones diferenciales ordinarias
de manera diferente y es allı́ donde radica la precisión y la velocidad de cada uno.
ODE [7], Bullet [22] y PhysX [23], permiten la creación de cuerpos geométricos rı́gidos, definir sus
uniones y ubicarlos en un ambiente con una gravedad definida y unas caracterı́sticas de colisión y
error. El primero fue creado por Rusell Smith. Utiliza un solucionador de problema complementa-
riamente linear (LCP) llamado projected-Gauss-Seidel (PGS) para poder resolver el estado de los
cuerpos paso a paso en el tiempo. Sus resultados son precisos siempre y cuando se utilice un paso
incremental lo suficientemente pequeño para garantizar la estabilidad de la solución. El segundo,
creado principalmente por Erwin Coumans mientras trabajaba para Sony Computer Entertainment,
utiliza una adaptación de PGS que reduce la precisión de los resultados y aumenta la velocidad de
cómputo. por último, PhysX, creado por Novodex AG en 2004 bajo el nombre de Novodex y luego
adquirido, modificado y renombrado por Nvidia Corporation en 2008; cuenta con licenciamiento
privativo y múltiples solucionadores tanto para cuerpos rı́gidos como para partı́culas.
6
Capı́tulo 2. Marco Teórico
Se ha mostrado en diferentes estudios [24] cómo se debe adaptar ODE para que cumpla requeri-
mientos de una buena simulación. Además, se ha comparado su funcionamiento con Carmen y Stage
y Gazebo [25] recalcando su superioridad en resultados, complejidad de instalación y velocidad de
ejecución. Por esto, existen razones de peso para seleccionar a Open Dynamics Engine como un
buen Motor de fı́sica para el proyecto.
Una vez seleccionado ODE como motor de fı́sica es necesario plantear mecanismos para la visuali-
zación y análisis de los resultados. Un recurso fundamental para este fin es la presentación de una
realidad virtual que imite visualmente lo que se observarı́a en caso de trabajar con el robot real. Este
entorno permite al usuario tener una idea general de los resultados e incluso añadir nuevas funcio-
nalidades difı́ciles de tener en la vida real; sin embargo, algunos datos como velocidades, momentos
de fuerzas y fuerzas, no generan resultados visuales interesantes, pero contienen información funda-
mental para el análisis final. Para estos se debe generar archivos con formato definido que permitan
utilizar los datos en herramientas de generación de gráficas o como fuente para otros procesos.
Para la programación del motor visual se debe seleccionar un API de gráficos en tiempo real en
3D, que nos permita representar la escena a partir de los datos generados por el motor de fı́sica.
Actualmente, los lı́deres en la industria en cuanto a APIs gráficos de bajo nivel son OpenGL y
Direct3D (DirectX). Se clasifican como bajo nivel porque se comunican directamente con la tarjeta
gráfica y genera imágenes a partir de la transformación de vértices y su información, de un marco
de referencia hacia la pantalla. Estas librerı́as no están diseñadas para especificar objetos concretos
como cubos o cilindros, y permiten el control total de el resultado visual final [26]. Por ejemplo,
para dibujar un cubo es necesario decir la posición de cada uno de los vértices, la forma en que se
conectan y especificar que se están dibujando caras sólidas.
Para poder representar la escena, los vértices atraviesan un proceso junto con la información de
ubicación, color y datos adicionales necesarios para interpretarlos. A estos se les realiza transfor-
maciones lineales para pasar de un sistema de referencia tridimensional (R3 ), a una posición en
la pantalla plana (R2 ). Luego, los vértices son pasados por una rasterización que completa la in-
formación de los pı́xeles entre vértices para dibujar una cara o arista de un color, o aplicar una
textura. Para darle realismo a la escena, y si está especificado, se lleva a cabo un sombreado, reflejos
y algunas veces, mezcla de resultados.
7
Capı́tulo 2. Marco Teórico
2.2.1. DirectX
DirectX es una colección de API’s que tiene funciones para el manejo de multimedia para la plata-
forma Microsoft Windows. Entre ellas se encuentra Direct3D dedicada a los gráficos. Direct3D fue
lanzado en las versiones de DirectX2.0 en 1995, adquirido por Microsoft al comprar RenderMorp-
hics. Desde entonces ha estado compitiendo directamente contra OpenGL y hoy en dı́a es utilizado
ampliamente en la creación de juegos, en especial para la plataforma de Microsoft. Su implemen-
tación permite un control directo sobre el manejo de los recursos del hardware para gráficos y su
programación se realiza con los lenguajes compatibles con .NET Framework de microsoft. Debido
a su naturaleza, el licenciamiento de DirectX es privativo, aunque la descarga del SDK es gratuita,
convirtiéndolo en un freeware compatible con Microsoft Visual Studio.
2.2.2. OpenGL
OpenGL es una librerı́a para C++ desarrollada por Sillicon Graphics (SGI) en 1992 y administrado
actualmente por el grupo Khronos y su objetivo fue convertirse en un estándar para los generadores
de hardware y que pudiera ser construido por estos mismos. El licenciamiento de OpenGL es libre
para desarrolladores de software y existen librerı́as con implementaciones del estándar y nuevas
funcionalidades, como GLUT y GLEW, variantes entre un sistema operativo y otro, que facilitan
su uso. Para desarrolladores de hardware existe un licenciamiento diferente. Debido a su licencia y
su uso en múltiples plataformas, principalmente en linux, se convierte en la opción principal para
este proyecto.
OpenGL funciona como una máquina de estados que lleva la información desde los vértices a una
renderización. Existen dos actores en este proceso, el cliente, normalmente interpretado por la
CPU; y el servidor, quién usualmente es la unidad de procesamientos gráficos (GPU). El cliente,
programado en c, organiza los vértices y la información necesaria para graficarlos en elementos
llamados primitivas; además, texturas, iluminación, transformaciones y variables que modifiquen
la renderización final. Esta información es enviada al servidor, programado en GLSL (Lengujae
de sompreado de OpenGL) y que cuenta con 2 tareas: la primera, el Vertex Shader, se encarga
de calcular las transformaciones de forma, posición y color de los vértices individuales sin tener en
cuenta las uniones entre ellos. la segunda, el Fragment Shader, lleva a cabo la rasterización, asignando
los valores de color a cada uno de los pı́xeles, de acuerdo a la forma en que se unen los vértices,
las texturas que se requieras, la iluminación, el sombreado y las demás opciones especificadas por
el programador.
8
Capı́tulo 2. Marco Teórico
Programar a este nivel es complejo y requiere mucho tiempo. Los resultados son completamente
flexibles y adaptables a cualquier necesidad y se pueden llegar a optimizar si se tienen los conoci-
mientos adecuados. Sin embargo, se puede facilitar el proceso utilizando librerı́as de más alto nivel
como OpenSceneGraph.
2.2.3. OpenSceneGraph
OpenSceneGraph(OSG) es una API que se ubica como Middleware entre OpenGL y otro software.
Esta librerı́a genera el código del cliente organizando los datos de la escena en grafos que son
almacenados en buffers y procesados para tener el mejor rendimiento en el proceso de renderizado
del servidor o GPU. OSG sacrifica parte de la flexibilidad que OpenGL ofrece, sin generar pérdidas
en el rendimiento. Además OSG puede ser escalado a la necesidad de cualquier software, portado
entre diferentes plataformas y cuenta con licenciamiento de software libre fundamental para este
proyecto.
Los grafos de escena (Scene Graph) son estructuras de datos definidas por nodos, en forma de árbol,
que contienen los vértices, transformaciones y demás información necesaria para la escena gráfica.
Su intención es generar una abstracción de la escena real. Todo elemento de OSG es un nodo que
puede ser añadido al grafo de escena.
En un ejemplo, se tiene una habitación, con una mesa café y encima un libro y unas llaves. Se podrı́a
decir que la raı́z del grafo de escena serı́a la habitación, la cual tiene su propio marco de referencia y
sus valores de iluminación y color descritos en los nodos hijos. Luego se agrega una transformación
de posición y rotación para ubicar la mesa por medio de un nodo hijo, a esta transformación,
que funciona como nuevo marco referencial, se le agrega la mesa en un nodo que describe cómo
está construida la mesa en vértices y como debe ser renderizada. A esta mesa se le pueden definir
también los valores de color especı́fico y comportamientos deseados uniendo a ella màs hijos con
dichas caracterı́sticas. Por último a esta mesa se agregan un par de nodos de transformación de
posición y rotación donde irán, por separado, las llaves y el libro. la descripción de las llaves y el
libro pueden ser importadas de otro archivo. Este ejemplo puede ser observado en la figura 2.1.
9
Capı́tulo 2. Marco Teórico
Existen entonces nodos de diferente tipo en el árbol, cada uno con una función propia tales como
transformaciones lineales, estados de OpenGL, definiciones de vértices, cámaras, luces, animaciones o
nodos predefinidos que permiten crear objetos geométricos sencillos como cubos, esferas y cilindros,
sin necesidad de definir todos los vértices manualmente, especificando solamente su posición y
dimensiones. OpenSceneGraph está organizado en clases donde cada una de ellas representa uno de
estos nodos.
Una vez construido el grafo, es graficado y proyectado por un visualizador. En OSG un objeto que
se encarga de interpretarlo, optimizarlo y enviarlo al servidor para esta tarea. Se pueden definir
varios visualizadores en un mismo programa, cada uno con cámaras diferentes o con algunas de las
ramas del grafo de escena omitiendo el resto del grafo.
10
Capı́tulo 3
Para completar la simulación del robot con el motor de dinámica de cuerpo rı́gido es necesario definir
a partir de cuerpos y articulaciones la estructura del robot. Para hacer esto se estudian la estructura
y las caracterı́sticas del robot real y se proponen modelos de simulación cuya complejidad permite
balancear el tiempo de computación y la precisión de los resultados. En cuanto a la visualización,
es necesario definir las diferentes representaciones visuales de los modelos y como se integran a la
escena. En la sección 3.1 se muestran las caracterı́sticas de este tipo de robot, en la sección 3.2 se
estudian las caracterı́sticas de los componentes con que se construyó el robot real, en la sección 3.3
se proponen algunos modelos para la simulación, en la sección 3.4 se hace una introducción a la
construcción del robot en el simulador y finalmente en la sección 3.5 se presentan los modelos para
la visualización y su importación.
Los MSR comparten la misma estructura, independientemente de los actuadores y materiales con que
se construyan. Se trata de una cadena cinemática abierta en donde los eslabones están conectados
entre si por junturas rotacionales. Una juntura rotacional mantiene constante la distancia entre los
eslabones que conecta y hace variar el ángulo que forman dichos eslabones alrededor del eje que
define la juntura.
Con excepción de los eslabones de los extremos, en un MSR las junturas siempre unen dos eslabones
y los eslabones, que son todos iguales, siempre están conectados a dos junturas. Para hacer una
descripción completa de la estructura se utilizará la convención de Denavit-Hartenberg [27][28].
11
Capı́tulo 3. Estructura Fı́sica y Representación Virtual
Se ubican los marcos de referencia sobre los ejes de las junturas, de manera que el eje Z coincida
con el eje de rotación y el eje X se encuentre en la dirección que une una juntura y la siguiente. De
esta manera los parámetros de Denavit-Hartenberg son:
θ Este parámetro coincide con el ángulo de la juntura y el conjunto de todos ellos constituyen la
configuración del robot para cada instante de tiempo.
α En este parámetro radica la diferencia entre un MSR planar y uno que se mueve en todo el espacio.
Para el caso de MSRs planares los ejes de rotación correspondientes a todas las junturas son
paralelos, mientras que en el otro caso hay una rotación de 90◦ respecto a la juntura anterior.
Como convención, al eslabón del extremo se le denomina eslabón 0, al siguiente eslabón se le deno-
mina eslabón 1 y a la juntura rotacional que los une se la denomina juntura 1.
El MSR en particular que se simula en este trabajo (lola-OPTM ) es el de la Fig. 3.2. Existen dos
versiones del robot, la primera es una plataforma básica que se ensambla a partir de tres piezas,
como se ve en la Fig. 3.3, además de los tornillos y tuercas. Todas las piezas hacen parte del kit de
robótica Bioloid, fabricado por la empresa sur coreana Robotis.
12
Capı́tulo 3. Estructura Fı́sica y Representación Virtual
Los actuadores son servomotores Dynamixel AX-12, mientras que las piezas utilizadas para com-
pletar la estructura son los marcos plásticos FP04-F2 y FP04-F3. Las medidas relevantes de estas
piezas están detalladas en el anexo B.
La segunda versión del robot esta basada en la plataforma básica, a la cual se le agregan unos
cilindros de elastómero. Estos cilindros protegen las partes del robot durante el funcionamiento al
tiempo que aumentan la superficie de contacto y el coeficiente de fricción con el suelo. Hay un
cilindro por cada eslabón, de 35 mm de longitud y 75 mm de diámetro.
Las dos versiones del robot están compuestas por 17 eslabones y 16 junturas rotacionales. Al conjunto
base de construcción, conformado por un actuador y dos marcos plásticos como se ve en el centro
de la Fig. 3.3, se le llama módulo. Siguiendo esta denominación y la convención de la sección 3.1,
el eslabón i y la juntura i hacen parte del módulo i. En el caso del eslabón 0, se utiliza otro marco
plástico en lugar de un actuador.
Como caracterı́stica de diseño, y para proteger la integridad fı́sica del robot, el ángulo máximo que
puede rotar cada actuador desde la posición inicial (cuando los módulos están alineados) y en ambos
sentidos es 60◦ [28].
13
Capı́tulo 3. Estructura Fı́sica y Representación Virtual
Para llevar a cabo la simulación es necesario definir los cuerpos rı́gidos, que hacen el papel de
eslabones en el motor de fı́sica. Las caracterı́sticas de estos cuerpos incluyen: la geometrı́a, necesaria
para evaluar las colisiones, y la distribución de la masa, necesaria para evaluar la dinámica de cuerpo
rı́gido y el efecto de la gravedad. En 3.3.1 y 3.3.2 se proponen modelos de simulación para cada una
de las versiones del robot. Se tienen en cuenta la velocidad de simulación ası́ como los primitivos de
colisión implementados en el motor de fı́sica y la estabilidad de la solución matemática al momento
de proponer la representación de los módulos.
Para representar la geometrı́a de cada uno de los módulos se escoge un paralelepı́pedo que encierra
al actuador AX-12. En la Fig. 3.4 se resalta el modelo sobre una imagen del robot real y se muestran
las medidas correspondientes a los lados de la caja, la posición del eje de rotación y la distancia
entre módulos. En este caso el centro geométrico del paralelepı́pedo y el centro de masa del cuerpo
están en el mismo punto.
1, 8792E − 5 0 0
T = 0 1, 2027E − 5 0 (3.1)
0 0 1, 6152E − 5
14
Capı́tulo 3. Estructura Fı́sica y Representación Virtual
En el segundo modelo propuesto para la simulación se representa la geometrı́a de cada uno de los
módulos como la composición de un paralelepı́pedo y un cilindro. En la Fig. 3.5 se resalta el modelo
sobre la imagen real de un módulo y se muestran las medidas correspondientes a los lados de la
caja, el radio y longitud del cilindro, la posición del eje de rotación y la distancia entre módulos.
En este caso el cilindro coincide con el cilindro de elastómero y la caja con la parte del actuador
que sobresale del mismo. El centro geométrico del cilindro está desplazado 0,0215 m del centro de
masa del cuerpo; el centro geométrico de la caja está desplazado 0,0105 m del centro de masa del
cuerpo.
Como se aprecia en Fig. 3.5 la caja de un módulo y el cilindro del módulo adyacente presentan
puntos de colisión a lo largo del rango de rotación. Esto no sucede en el robot real dado que el
cilindro de elastómero es hueco. Para completar la simulación utilizando las geometrı́as propuestas
es necesario permitir que los módulos adyacentes se penetren entre si, al ignorar las colisiones (en
el motor de fı́sica) entre módulos adyacentes.
4, 0849E − 5 0 0
T = 0 3, 0173E − 5 0 (3.2)
0 0 2, 186E − 5
15
Capı́tulo 3. Estructura Fı́sica y Representación Virtual
Una vez ubicados los módulos se unen mediante articulaciones rotacionales, estas limitan el movi-
miento relativo entre módulos de la misma forma que las junturas rotacionales pero son pasivas. Las
junturas rotacionales y modelos de motor se discutirán en el capitulo 4. Para definir una articulación
rotacional se debe especificar un punto sobre el eje de rotación y la dirección del eje. De nuevo se
debe tener en cuenta la rotación de 90◦ para satisfacer la estructura mencionada en la sección 3.1.
Para emular al robot real se impone la misma limitación de 60◦ en el rango de rotación de los
módulos. Como medida adicional se agrega un espacio muy pequeño (0,0001 m) entre la caja y el
cilindro, en el modelo 2, para evitar la detección de colisiones entre los componentes del módulo por
parte del motor de fı́sica.
Ası́ como existen dos versiones del MSR, la visualización se divide en una plataforma básica y en
su extensión con cilindros de elastómero. Para cada uno se genera una representación simple y una
compleja. La primera busca representar el modelo utilizado en el motor de fı́sica y la segunda tener
el mayor parecido posible a los servomotores AX12 y las piezas usadas para la construcción de la
serpiente.
Los CAD (Computer Aided-design) son herramientas que permiten el diseño de modelos visuales
complejos tanto en 2D como en 3D. Según la necesidad se debe seleccionar un Software y formato de
archivo CAD especı́fico debido a que cada uno tiene diferentes formas de representar los objetos en
la escena y sus caracterı́sticas; por ejemplo representaciones en figuras geométricas básicas (Cubos,
esferas, cilindros, etc), definición de aristas o enmallado en triángulos o cuadrados de vértices.
Información de ubicación y orientación espacial, dimensiones, texturas, colores y movimiento, entre
otras, también pueden ser encontradas en el CAD y son utilizadas en la renderización.
Para las representaciones simples se crean modelos iguales a los planteados para ODE de para-
lelepı́pedos en la plataforma básica, y cilindros unidos a paralelepı́pedos en la plataforma con
elastómero; creados como nodos del grafo de escena especificando en la creación las dimensiones
configuradas de acuerdo a los valores reales del robot. Estos nodos son del tipo osg::shape y deben
ser agregados a nodos osg::shapeDrawable que a su vez deben ser agregados a osg::Geodes. Estas
estructuras son necesarias para el visualizador a la hora de interpretar los datos, pues contiene la
información adicional indispensable para el proceso de renderizado.
16
Capı́tulo 3. Estructura Fı́sica y Representación Virtual
Para la representación compleja se utilizan archivos CAD importados y soportados por la librerı́a
OSG. Se importan archivos en formato .3ds que representa el módulo en un enmallado de vértices,
y cuentan con la descripción del material y colores blanco y negro usados por la estructura original.
Las dimensiones se ajustan de acuerdo a las reales y los CAD tanto del motor AX-12 como de
las partes FP04-F2 y FP04-F3 son entregados por la empresa Robotis en archivos individuales y
pueden ser descargados de la página oficial. Los datos del archivo son interpretados por OSG, quien
entrega en nodos la información necesaria para el visualizador. Una transformación de posición y
orientación es agregada para acoplar el sistema de referencia del archivo CAD con el de la escena
gráfica.
En la figura 3.6 se muestran ambas representaciones para cada uno de los eslabones que componen
las diferentes plataformas.
Estas representaciones son agregados como nodos hijos a un objeto tipo interruptor llamado osg::Switch.
Este permite asignar valores booleanos a sus hijos, quienes son graficados o no de acuerdo al valor
global que tenga el interruptor. De esta manera, se puede intercambiar de un modelo a otro con
facilidad.
Para cambiar la posición y orientación de los módulos de acuerdo a los valores arrojados por el motor
de fı́sica, y sincronizar los tiempos reales de la simulación con la visualización OpenSceneGraph ofrece
la clase osg::AnimationPath que modifica una matriz de transformación en donde se encuentra el
nodo interruptor.
17
Capı́tulo 3. Estructura Fı́sica y Representación Virtual
Una ruta de animación almacena los valores de transformación y el instante de tiempo en que
ocurre en estructuras llamadas puntos de control, agregados como nodos. Luego, estos valores son
interpolados linealmente para completar la animación y reproducidos en el instante preciso, por
medio de un nodo de control que contiene a el osg::AnimationPath, conservando el sincronismo.
Todo estos elemetos son creados en cada uno de los módulos. Por lo tanto, es necesario agrupar esta
información en grupos de nodos (osg::group) que permitan ordenar los datos a la hora de agregarlos
a la raiz del arbol que representa el grafo de la escena.
18
Capı́tulo 4
En este capı́tulo se consideran las caracterı́sticas de los actuadores del robot para construir un
modelo apropiado en el simulador. Cada uno de los servomotores dynamixel AX-12 esta compuesto,
principalmente, por un motor DC, un conjunto de sensores y un microcontrolador que cumple tres
funciones:
3. Lee los datos de los sensores para enviarlos al controlador de alto nivel.
En la sección 4.1 se trata el mecanismo de control de alto nivel del servomotor, en la sección 4.2 se
considera el control del motor DC, finalmente en la sección 4.3 se enumeran los datos de sensores
disponibles y se discute su emulación.
4.1.1. Comunicaciones
Los 16 actuadores que componen el robot y la unidad controladora se interconectan bajo un esquema
de conexión daisy chain. El bus de comunicaciones ası́ como la distribución de potencia del robot
esta conformada por tres cables, que se conectan en serie de modulo a modulo como se ve en la Fig.
4.1. El hardware de comunicaciones se compone de la unidad UART del microcontrolador a bordo,
compuertas tri-state como buffer en cada actuador (74HC126) y un circuito integrado FT232RL
que emula un puerto serial en uno de los puertos USB del computador controlador.
Entre los dos cables de DATA de cada actuador solo está un buffer tri-state, por lo que todos los
actuadores comparten el mismo bus serial. La comunicación es serial ası́ncrona, Half Duplex, con
niveles TTL. La trama de red tiene un bit de parada, se transmite el bit menos significativo primero
y no hay paridad. La velocidad de transmisión se puede variar, siendo 1 MBPS la máxima.
El control de trafico se hace mediante Polling. El paquete de red tiene en la cabecera el ID del
actuador hacia el que el paquete va dirigido, la longitud del paquete y el tipo de instrucción. El ID
de actuador es un numero entre 0 y 253 siendo 254 el ID para difusión. Entre los tipos de instrucción
se encuentran Ping, lectura y escritura de registro. El cuerpo del paquete incluye los datos relevantes
según la instrucción y finalmente se agrega un Checksum.
Durante la operación del robot real se utiliza la velocidad de transmisión de 1 MBPS y solo se
envı́an instrucciones para cambiar la posición de los actuadores y recibir el paquete de estado de
cada uno. Teniendo en cuenta el tamaño de los paquetes de red correspondientes y el número de
actuadores, la frecuencia máxima a la que se puede controlar cada actuador es 11,7 Hz. Se utiliza
una frecuencia de 10 Hz.
4.1.2. Registros
Los dynamixel AX-12 cuentan con un total de 50 registros de 8 bits para el control y comunicación
con la unidad controladora. Para algunas de las instrucciones y datos de los sensores es necesario
utilizar más de 8 bits en la codificación, ası́ que varios registros funcionan como la parte alta ó baja
20
Capı́tulo 4. Representación señales Motores
de un registro de 16 bits. Teniendo en cuenta esto hay un total de 32 registros operacionales en cada
actuador.
La ubicación de los registros en una memoria u otra esta relacionado con su función. Los registros
que corresponden a información están en la memoria no volátil, y en algunos casos se utilizan los
valores almacenados allı́ para inicializar los registros de configuración.
La lista completa de los registros y su descripción se encuentra en el anexo [29]. Los registros
relacionados con control y configuración se presentan con más detalle en la sección 4.2, de manera
similar se tratan los registros relacionados con los sensores en la sección 4.3.
Durante la operación del robot y para producir el movimiento deseado, se extraen los ángulos
correspondientes a cada actuador (configuración) de un archivo de control. Este archivo de control
se puede generar a partir de 7 parámetros [4] o programar paso por paso mediante las interfaces
creadas para tal fin [14]. Adicionalmente durante la operación se almacena el estado de cada actuador
en otro archivo, diseñado por el grupo, para su inspección luego del experimento. Otros parámetros
de configuración no se alteran durante el movimiento y solo son configurados antes de comenzar los
experimentos. Más información sobre la generación de ángulos para el movimiento del robot y el
marco de software para su uso se puede consultar en [14][30].
En el simulador se emulan los registros de cada actuador como posiciones de memoria. La configu-
ración del robot se toma de los mismos archivos de control generados por las mismas interfaces que
usa el robot real y se lee a las mismas frecuencia de 10 Hz. Durante la simulación se generan gran
cantidad de datos que son almacenados en archivos compatibles con los archivos que genera el uso del
robot real. De manera congruente con el robot real, solo las posiciones de memoria correspondientes
a la posición objetivo pueden ser editados durante el movimiento del robot simulado.
El motor DC en los actuadores dynamixel AX-12 está conectado al eje de rotación a través de
una reducción de engranajes con una relación de transmisión de 254. Como sensor de posición el
actuador esta equipado con un muRata sv01, que es un potenciómetro lineal de 10 kΩ y un rango
21
Capı́tulo 4. Representación señales Motores
Como configuración del usuario se pueden variar los parámetros en la curva de la Fig. 4.2 (en donde
B y C corresponden al margen de error que puede existir en la posición angular antes de que el
actuador corrija la posición, y A y D corresponden a la pendiente que regula el momento de fuerza
cuando se está cerca a la posición objetivo) de manera que el momento de fuerza producido por el
actuador se ajuste de acuerdo a la distancia entre la posición angular actual y la posición angular
objetivo. También existe un parámetro de configuración adicional a los de la Fig. 4.2 para ajustar
la velocidad angular máxima de movimiento del actuador.
Todos los parámetros mencionados en este capı́tulo son configurables por el usuario del robot. Sin
embargo, el fabricante no especifica la codificación utilizada para el valor de la pendiente en la
curva de la figura 4.2, que toma uno de siete valores [29]. Adicionalmente, este valor cambia con la
polarización que utiliza el usuario, que puede variar entre 7 y 15 V [29].
Es posible aplicar fuerzas directamente a los cuerpos en el simulador de Fı́sica para emular el
momento de fuerza que ejercen los actuadores. Sin embargo esta es una practica no recomendada ya
que puede llevar a la simulación a inestabilidades, en especial cuando se simulan sistemas complejos
22
Capı́tulo 4. Representación señales Motores
como el robot. Como alternativa, para emular el efecto de motores, la biblioteca de fı́sica ofrece un
modelo de motor angular. Se trata de un actuador con control de velocidad angular (ω) y limitación
de momento de fuerza (T). En cada paso de simulación, se aplica la fuerza adecuada (calculada por
la biblioteca) para alcanzar la velocidad final especificada (ω), siempre y cuando el momento de
fuerza indicado (T) no se exceda.
A cada una de las junturas del robot simulado se le asigna un motor angular, y en cada paso
de la simulación se calcula la diferencia entre la posición angular actual (α) y la posición angular
deseada (β). En base a esta información se establecen la velocidad final y el momento de fuerza de la
siguiente forma: para la velocidad se utiliza la misma magnitud que se especifica para los actuadores
dynamixel AX-12 (Vmax ) y el signo depende de la dirección en que se debe corregir la posición; el
momento de fuerza se evalúa en la función de la Fig. 4.2 proporcionada por el fabricante.
4.3. Sensores
Los actuadores dynamixel AX-12 ofrecen realimentación de posición, velocidad, carga, voltaje y
temperatura. Como se mencionó en la sección 4.2 la posición se obtiene de un potenciómetro y la
resolución de 1024 valores esta dada por el conversor A/D del microcontrolador. La velocidad y la
carga son medidas indirectas y mantienen una relación lineal entre si.
Los valores de posición y velocidad en cada juntura se obtienen directamente durante la operación
del simulador y son almacenados en un archivo para su análisis posterior a una frecuencia de 10 Hz.
En cuanto al valor de carga entregado por los actuadores reales se almacena el momento de fuerza
en su lugar. Los datos de temperatura y voltaje no se obtienen directamente de la simulación y dada
su relevancia no se emularan.
Un beneficio de la simulación es la existencia de datos adicionales para los que no existen sensores
implementados en el robot. La posición y orientación de cada modulo con respecto al marco de
referencia del mundo y los puntos de contacto son registrados en el archivo de datos.
23
Capı́tulo 5
Geometrı́a y Caracterı́sticas de
Contacto
En este capitulo se discute el ambiente de simulación. En la sección 5.1 se introduce a los mapas
de elevación, su uso, formato e implementación en el simulador, para representar la geometrı́a de la
superficie del ambiente simulado. En la sección 5.2 se discuten los modelos fı́sicos que influyen en la
interacción entre el robot y el suelo.
En áreas como topologı́a y computación gráfica se utilizan mapas de elevación para representar
terrenos. Un mapa de elevación es un campo escalar de R2 → R, en donde se almacena la altura
correspondiente, en un terreno dado, para cada coordenada en el espacio (plano).
Otros nombres con los que se conoce a los mapas de elevación son Mapa Digital de elevación (DEM
por sus siglas en ingles), HeightMap y HeightField y de la misma forma en que no existe consenso
en cuanto al termino a utilizar tampoco existe un formato que se destaque por sobre los demás.
En las secciones 5.1.1 y 5.1.2 se discute el tema de los formatos, ası́ como otras caracterı́sticas
propias de los mapas de elevación, y su implementación en el simulador.
Una forma de almacenar el mapa de elevación es mediante una imagen en escala de grises en donde
el valor de cada pixel representa la altura almacenada. Si se utiliza un solo canal en una imagen
RGB de 8 bits, se pueden codificar hasta 256 alturas diferentes, mientras que el uso combinado de
24
Capı́tulo 5. Geometrı́a y Caracterı́sticas de Contacto
los 3 canales permite tener 16’777.216 valores diferentes e incluso 4294’967.296 si se utiliza el canal
alpha.
Como con cualquier fenómeno que es codificado de forma digital, existe perdida de información y es
posible que sea necesario hacer una interpolación para utilizar los datos. En aplicaciones geofı́sicas
es común el uso de algoritmos probabilı́sticos como el Monte Carlo para la reconstrucción, sin em-
bargo, en modelado fı́sico y generación de gráficos por computador, el uso de interpolaciones lineales
conformando una red de poliedros es más extendido ya que los requerimientos computacionales son
inferiores.
Para construir la red de poliedros a partir de los datos almacenados en el mapa de alturas se
construyen polı́gonos usando los puntos almacenados como vértices. La figura más utilizada es el
triangulo, siguiendo patrones como los de la Fig. 5.1.
Entre las ventajas que tiene el uso de Mapas de altura esta el tamaño pequeño de los archivos,
comparado con otros métodos y formatos, su implementación sencilla y el uso óptimo de memoria.
Adicionalmente existen funciones para la implementación de mapas de altura tanto en la librerı́a
gráfica como en el motor de fı́sica. Como desventaja, los mapas de altura no hacen ninguna optimi-
zación cuando se codifican grandes regiones con valores constantes y no permiten describir terrenos
en donde mas de un punto tiene la misma proyección sobre el plano, como en la pared escarpada
de una cueva.
Para almacenar los terrenos en el simulador se emplea una imagen en escala de grises. Se utiliza el
formato bmp, es decir, un canal RGB de 8 bits para un total de 256 valores posibles. Adicionalmente
25
Capı́tulo 5. Geometrı́a y Caracterı́sticas de Contacto
a la imagen se especifica el tamaño que cubre el mapa de altura (Tamaño X y Tamaño Z), el numero
de muestras que incluye (c y r), el escalamiento vertical que se debe usar y la distancia al suelo que
se debe sumar a todas las muestras (offset). Estas medidas se ven sobre el mapa de alturas de la
Fig. 5.2. Para evaluar la interacción entre el robot y el terreno se crea un plano temporal cuando se
detecta la colisión, siguiendo el primer patrón presentado en la Fig. 5.1.
5.2. Contactos
Si bien se ha escogido una simulación basada en dinámica de cuerpo rı́gido, donde no se tiene en
cuenta la elasticidad ni la dinámica de los impactos entre cuerpos, para modelar la interacción entre
el robot y el suelo se tienen en cuenta dos fenómenos: el rebote y la fricción.
Para que se considere el rebote, los cuerpos que colisionan se deben estar acercando entre si con
una velocidad relativa superior a la constante de rebote. En caso de ser ası́, se cambia la dirección
de movimiento de los cuerpos que colisionan ajustando la rapidez de acuerdo a una constante de
restitución. Actualmente no existe ninguna aplicación o uso que haga rebotar al robot. Se imple-
menta el modelo de rebote en el simulador en caso de que el usuario quiera utilizarlo y se deja la
calibración de las constantes de rebote y restitución a el mismo.
La aproximación de Coulomb se puede ver de manera gráfica en la Fig. 5.3 donde se muestra el
cono de Coulomb. Si la fuerza resultante está por fuera del cono, existirá movimiento relativo. En
el simulador, por motivos de eficiencia, se utiliza la siguiente aproximación: se descompone la fuerza
tangencial en dos componentes paralelas a la superficie de contacto y ortogonales entre si. Si una
de las dos componentes es mayor que la fuerza normal a la superficie de contacto multiplicada por
µ entonces hay movimiento relativo entre los cuerpos. El resultado es el de aproximar el cono de
Coulomb a una pirámide como se muestra en la Fig. 5.4.
No se proveen valores para el coeficiente de fricción µ dado que varı́a para cada entorno de trabajo.
En la sección 6.4 se muestra la influencia de este parámetro sobre los resultados de la simulación.
Es importante recordarle al usuario que la aproximación de coulomb va a influenciar directamente
sobre sus resultados y el valor del coeficiente puede variar en la superficie donde se está moviendo el
robot por factores de desgaste o suciedad, humedad relativa del aire, tiempo que llevan unidas las
superficies de contacto, la deformación de los materiales, entre otros. Esto, sin embargo, no afecta la
función principal del simulador como apoyo al investigador en una etapa especı́fica del desarrollo.
27
Capı́tulo 6
Integración - validación
Dada la magnitud del programa, el simulador ha sido dividido en 6 bloques funcionales buscando
los beneficios del encapsulamiento y permitiendo el trabajo colaborativo. Cada uno de los bloques
tiene definidas sus funciones, entradas y salidas, de manera que el simulador es una unión de los 6
bloques a un nivel donde los detalles de la implementación de cada uno no son relevantes sino la
forma en que se interconectan y como se usan. De esta forma, una vez definidos los bloques y su
conexión es posible intercambiar entre versiones de un mismo bloque a medida que se trabaja en el.
Gracias a la adaptabilidad del diseño del programa fue posible el trabajo colaborativo durante
el desarrollo del código. Cada vez que se hacia un cambio importante en uno o mas bloques se
generó una versión diferente del programa, los detalles de cada versión y los cambios se pueden ver
en el anexo D.
Adicionalmente para facilitar la interacción del usuario final del simulador se han implementado
varias interfaces gráficas en QT.
En la sección 6.1 se hace una descripción general de los 6 bloques funcionales, en la sección 6.2
se presenta el flujo del programa, finalmente en la sección 6.3 se presentan las interfaces gráficas
desarrolladas.
Director Maneja el flujo del programa, organiza a los demás bloques, es la fuente de todas las
acciones en el simulador. Se encarga de manejar el tiempo de simulación.
28
Capı́tulo 6. Integración - Validación
simSerpiente Contiene un robot virtual, permite crearlo de acuerdo a los modelos existentes y
sus valores configurables. También permite cambiar la configuración del robot mediante los
actuadores.
simOSG Se encarga de todo lo relacionado con los gráficos. Inicializa los SceneGraphs del ambiente
y robot virtuales y controla las entradas de ratón y teclado dentro de la ventana de simulación.
simDatos Maneja el flujo de archivos hacia y desde el simulador. Lee las lineas en los archivos de
ángulos y escribe el archivo con los resultados de la simulación. También lee los archivos que
contienen el mapa de alturas y la textura que se le puede aplicar.
Desde el punto de vista de los 6 bloques funcionales y su conexión, el siguiente es el flujo del
programa que administra el bloque director:
Para comenzar el director inicializa los bloques motorODE y motorOSG utilizando los parámetros
globales de ODE y los parámetros de escena de OSG.
En el siguiente paso el director agrega el robot tanto en el motor de fı́sica como en el motor de
gráficos. Lo primero implica crear las geometrı́as de colisión, junturas rotacionales y distribuciones
29
Capı́tulo 6. Integración - Validación
de masa como se discutió en la sección 3.4. Lo segundo implica crear los nodos de visualización, los
transformadores de posición y los controladores de animación como se discutió en la sección 3.5.
Luego de crear el robot, el director agrega el mapa de alturas, también a ambos motores, si es que se
especificó alguno, en caso contrarı́o se crea un plano horizontal como suelo. Para ODE esto implica
cargar la estructura del mapa de alturas como se discutió en la sección 5.1.2, para OSG se agrega
el nodo correspondiente teniendo en cuenta las transformaciones de posición y atitud.
Una vez que están inicializados el ambiente y el robot, el director inicia el reloj de simulación y
se repite el siguiente ciclo hasta completar el tiempo de simulación solicitado por el usuario en el
archivo de ángulos de entrada:
A la frecuencia especificada en la sección 4.1.1 para enviar nuevas posiciones objetivo a los actuadores
se actualizan los registros correspondientes, para lo que se utilizan los bloques simDatos para leer
una nueva linea del archivo de ángulos y simSerpiente que contiene los registros que emulan a los
del actuador AX-12 como se mencionó en la sección 4.1.3.
A la frecuencia especificada para almacenar datos en el archivo de registro (Log File) se utiliza
el bloque simDatos para escribir una linea nueva en el archivo correspondiente con los datos de
posición y orientación de cada modulo, y posición angular, velocidad angular y momento de fuerza
en cada juntura rotacional.
Para facilitar la interacción del usuario final con el simulador se han implementado varias interfaces
gráficas en QT. Estas permiten seleccionar los archivos de ángulos, mapas de alturas y texturas,
definir los parámetros de configuración de los modelos, motores y superficies, y alternar las funciones
de realidad aumentada. El uso de las interfaces se describe de manera mas detallada en el anexo C.
30
Capı́tulo 6. Integración - Validación
6.4. Validación
En esta sección se validarán los resultados del simulador mediante experimentos con el robot real y
el simulador.
En los experimentos se utilizó la versión del robot LoLa-OPTM con elastómero sobre un piso plano
de madera laminada. Se llevaron a cabo experimentos para tres core gaits [28]; Linear Progression,
Lateral Rolling y Side Winding. En los tres casos se comenzó con todos los módulos del robot en la
posición cero grados, se dividió la posición en dos tramos, se ejecutó el gait durante 4 segundos, se
detuvo en la posición alcanzada para realizar medidas y se ejecutó el gait en la dirección contraria
durante otros 4 segundos. Esto con la intención de conocer el resultado en dos escenarios: cuando el
robot inicia con todos los actuadores en 0◦ y cuando el robot parte de una configuración que hace
parte del gait. Se midió el desplazamiento relativo de los módulos 1, 8 y 17 en diez ocasiones luego
de ejecutar el gait en ambas direcciones.
31
Capı́tulo 6. Integración - Validación
En las tablas 6.1 se muestran los parámetros utilizados para generar los gaits y en las tablas 6.2 y
6.3 los resultados del experimento. Las imágenes de la Fig. 6.3 corresponden al montaje descrito.
El montaje experimental se replicó en el simulador utilizando los modelos expuestos a lo largo del
libro para el robot Lola-OPTM con elastómero. Para los parámetros, que por su naturaleza, no se
especificaron a lo largo del trabajo (k y µ) se hizo un barrido en donde se evidencia la influencia de
cada uno en el resultado de manera que el usuario pueda seleccionar valores para su caso puntual.
El robot fue ubicado sobre el eje X, al igual que el robot real.
32
Capı́tulo 6. Integración - Validación
En las gráficas 6.5, 6.7 y 6.8 se muestra el resultado de las simulaciones. Los tiempos son consecutivos
entre ellos debido a que ası́ estaban organizados en el archivo resultante de la simulación. Las gráficas
muestran los valores de posición de los módulos 1 y 8 para diferentes valores de µ. En la columna de
la izquierda, los valores de X y en la columna de la derecha los de Z. Las 2 primeras filas son para
k=2, y las 2 últimas para k=3. En lı́neas horizontales se encuentran la mediana de los experimentos
reales, entre 2 lı́neas calculadas con la desviación estándar de los experimentos.
En un Linear Progression el robot se mueve en la dirección del eje longitudinal de si mismo, propa-
gando una onda vertical que lo impulsa hacia adelante. Una curvatura en el plano perpendicular a
esta onda permite cambiar de dirección. [13][4] La forma de onda puede ser observada tanto en el
simulador como en el robot real en las Fig. 6.3(a) y 6.4(a). Las gráficas de la figura 6.5 muestran el
desplazamiento del robot en el eje X, paralelo al eje longitudinal de la serpiente, con una velocidad
constante. Por otra parte, los cambios sobre el otro eje mostrado en la gráfica son correspondientes
a el aporte de la curvatura para girar descrita anteriormente.
Para el Linear Progression se observa que la rapidez sobre el eje X es de 4.5 cm/s. Este valor no
se ve afectado ni por K ni por µ a excepción de u=0.2 donde hay una pequeña diferencia que es
debida a un deslizamiento. La distancia de el primer tramo y el segundo no son las mismas, debido
a la posición inicial del robot antes de empezar el tramo. El desplazamiento lateral mostrado en las
gráficas de la segunda columna no es tan significativo pero tiene una gran influencia de k y de la
curvatura que tenga el robot.
33
Capı́tulo 6. Integración - Validación
0.16
0.2 0.14
Desplazamiento (m)
0.15
0.1
0.08
0.1
0.06
0.04
0.05
0.02
0 20 40 60 80 0 20 40 60 80
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 8 K=2 Desplazamiento X Modulo 8 K=2 Desplazamiento Z
0.02
0.65
0
Desplazamiento (m)
Desplazamiento (m)
0.6
-0.02
0.55
-0.04
0.5
-0.06
0.45
0 20 40 60 80 0 20 40 60 80
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 1 K=3 Desplazamiento X Modulo 1 K=3 Desplazamiento Z
0.25
0.2
0.2
Desplazamiento (m)
Desplazamiento (m)
0.15
0.15
0.1
0.1
0.05
0.05
0 20 40 60 80 0 20 40 60 80
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 8 K=3 Desplazamiento X Modulo 8 K=3 Desplazamiento Z
0.65
0.05
Desplazamiento (m)
Desplazamieno (m)
0.6
0.55 0
0.5
-0.05
0.45
0 20 40 60 80 0 20 40 60 80
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
En un Later Rolling el robot se configura tomando la forma de un arco que se conserva durante todo
el movimiento como se muestra en las Fig. 6.3(b) y 6.4(b) mientras gira sobre la superficie [13][4].
La velocidad de desplazamiento es constante y la dirección es perpendicular al eje longitudinal y
depende de la dirección de giro. Este comportamiento es evidenciado en las gráficas de la figura
6.8 donde, luego de salir del estado cero entre los tiempos t=10 s y t=10.5 s, la gráfica crece
en dirección del eje Z positivo, con velocidad constante, y luego regresa hacia el origen con el
34
Capı́tulo 6. Integración - Validación
mismo comportamiento. Los desplazamientos netos de los dos módulos simulados, la velocidad a
la que se ejecutó y su distancia constante en ambos ejes demuestra que la forma del robot se
conservó constante.
Para k=2 y µ mayor a 0.8 se observa una deformación en la curva trazada en el desplazamiento
en Z, eje que se encuentra paralelo al suelo. Lo que ocurre es una deformación del arco que el gait
deberı́a conservar. En la Fig. 6.6 se evidencia como hay una cambio en el gait durante su recorrido.
Sobresalen las posiciones iniciales y finales. Para k=3 y µ=0.2. Ambos módulos tienen un cambio
de pendiente entre ambos trayectos. En el segundo trayecto, esta pendiente corresponde a la misma
de otros valores de µ. Estos dos elementos muestran evidencia de una gran influencia de la fricción
en el gait cuando los valores son o muy grandes o muy pequeños. Además, al avanzar con un arco
en contra de la dirección del movimiento, esta influencia varia.
Para los demás casos, la velocidad alcanzada por el robot fue aproximadamente de 20 cm/s en
dirección del eje Z. Se aprecia una influencia pequeña de la fricción en este valor, en especial para
k=3. En X el desplazamiento es despreciable.
En un Side Winding el movimiento es más complejo e imita el movimiento de las serpientes reales
en el desierto, donde se propaga una onda horizontal de gran amplitud desde la cola a la cabeza
ubicando algunos módulos sobre el suelo mientras otros avanzan por el aire, gracias a la propagación
de una onda vertical de poca amplitud. En las imágenes de las Fig. 6.3(c) y 6.4(c) se aprecia la onda
de gran amplitud que describe el robot. El movimiento resultante es ortogonal al eje longitudinal
de la serpiente cuando se encontraba estirada [13][4], comportamiento que puede ser observado en
las gráficas que se encuentran en la figura 6.8.
Para este tipo de Gait la velocidad no es constante como se aprecia en los valores de las gráficas
de la figura 6.8. Sobre las curvas de posición del eje Z se aprecia una señal sinusoidal dominante.
Al calcular en la gráfica la frecuencia de esta onda y el desfase entre módulos 1 y 8 se obtiene: 1)
La frecuencia es de πrad/s, correspondiente al valor de ω en los parámetros utilizados para generar
el gait. 2) el desfase entre el módulo 1 y 8 es de 9,11rad según las gráficas, mientras que el desfase
obtenido de la ecuación es de 9,163rad, representando un error de 0,57 %.
35
Capı́tulo 6. Integración - Validación
0.15
0.6
Desplazamiento (m)
Desplazamiento (m)
0.1 0.4
0.2
0.05
0 -0.2
100 120 140 160 180 100 120 140 160 180
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 8 K=2 Desplazamiento X Modulo 8 K=2 Desplazamiento Z
0.8
0.56
0.54 0.6
Desplazamiento (m)
Desplazamiento (m)
0.52
0.4
0.5
0.2
0.48
0
0.46
0.44
100 120 140 160 180 100 120 140 160 180
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 1 K=3 Desplazamiento X Modulo 1 K=3 Desplazamiento Z
0.16 0.6
0.14
0.4
0.12
Desplazamiento (m)
Desplazamiento (m)
0.1
0.2
0.08
0.06 0
0.04
-0.2
0.02
100 120 140 160 180 100 120 140 160 180
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 8 K=3 Desplazamiento X Modulo 8 K=3 Desplazamiento Z
0.8
0.56
0.54 0.6
Desplazamiento (m)
Desplazamieno (m)
0.52
0.4
0.5
0.48 0.2
0.46
0
0.44
100 120 140 160 180 100 120 140 160 180
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
En las gráficas de las figuras 6.5, 6.7 y 6.8 se ve como la variación de µ y la pendiente de la curva de
control del momento de fuerza de los actuadores 4.2 (k) influye en el desplazamiento total del robot
pero no en la forma de onda de los desplazamientos de los módulos, exceptuando casos extremos
como los de la Fig. 6.7 que corresponde al Gait Lateral Rolling en donde valores altos de fricción
producen deformaciones en el arco.
36
Capı́tulo 6. Integración - Validación
0
0.25
0.2 -0.2
Desplazamiento (m)
Desplazamiento (m)
0.15
-0.4
0.1
0.05
-0.6
-0.05 -0.8
200 220 240 260 280 200 220 240 260 280
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 8 K=2 Desplazamiento X Modulo 8 K=2 Desplazamiento Z
0.65 0
0.6
Desplazamiento (m)
Desplazamiento (m)
0.55 -0.2
0.5
0.45 -0.4
0.4
0.35 -0.6
0.3
0.25 -0.8
200 220 240 260 280 200 220 240 260 280
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 1 K=3 Desplazamiento X Modulo 1 K=3 Desplazamiento Z
0
0.25
0.2
-0.2
Desplazamiento (m)
Desplazamiento (m)
0.15
0.1 -0.4
0.05
-0.6
-0.05 -0.8
200 220 240 260 280 200 220 240 260 280
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Modulo 8 K=3 Desplazamiento X Modulo 8 K=3 Desplazamiento Z
0.65 0
0.6
Desplazamiento (m)
Desplazamieno (m)
0.55 -0.2
0.5
0.45 -0.4
0.4
0.35 -0.6
0.3
0.25 -0.8
200 220 240 260 280 200 220 240 260 280
Tiempo ( 0.1 s ) Tiempo ( 0.1 s )
Al inicio del movimiento se puede evidenciar el efecto del modelo de fricción. Como se observa en
la Fig. 6.9 el módulo 17 toma caminos diferentes dependiendo del valor de µ. Para valores de µ
mayores a 0.65 las curvas siguen un camino, mientras que para valores menores siguen otro.
Para realizar comparaciones entre los resultados medidos con el robot real y los simulados se selec-
ciona un valor de k y µ donde se evidencie menor diferencia para el linear progression. Luego, con
37
Capı́tulo 6. Integración - Validación
estos mismos valores se calcula el error para todos los gaits. Este error es respecto a la distancia
mı́nima para estar dentro de la desviación estándar. Los resultados se presentan la tabla 6.4.
Modulo 1 Modulo 8
Tramo 1 Tramo 2 Tramo 1 Tramo 2
X Z X Z X Z X Z
LP Simulador 0.223 0.025 0.064 0.118 0.672 -0.015 0.49 -0.005
Error 31.18 % -44.44 % -10.29 % -15.25 % 8.76 % -76.92 % 0.27 % -87.91 %
LR Simulador -0.0049 0.7 0.04 -0.165 0.4512 0.7949 0.4707 0.0013
Error -85.68 % 13.54 % -59.78 % -16.28 % -0.03 % 0.71 % -11.06 % 0.00 %
SW Simulador 0.148 -0.568 0.084 -0.25 0.538 -0.621 0.489 -0.13
Error -41.96 % -22.18 % 380.00 % -42.21 % -16.10 % -15.91 % 60.15 % -18.75 %
Los valores de K y µ que replican los experimentos efectuados con el robot real no son evidentes
a partir de las curvas de X y Z. Medir los resultados del experimento llevado a cabo con un robot
complejo como este, a partir de solo una salida, la posición, da un panorama parcial de lo que ocurre.
Se requiere un trabajo más extenso, que tenga en cuenta más salidas del sistema y defina métricas
que representen mejor el comportamiento del robot.
38
Capı́tulo 7
Conclusiones
En este trabajo se desarrolló un simulador del Modular Snake Robot (MSR) Lola-OPTM que facilita
los procesos de investigación en estrategias de movimiento y control. El simulador forma parte del
Framework de trabajo en desarrollo de la plataforma[32][33].
Para completar el simulador se hizo una descripción general de la cinemática del tipo de robots
objeto del simulador (MSR) siguiendo la convención de Denavit-Hartenberg. También se especificó la
estructura mecánica y los componentes electrónicos del robot Lola-OPTM en particular.
Fue necesario hacer un planeamiento del software que permitiere el trabajo colaborativo, aprovechara
los beneficios del encapsulamiento mientras se producı́a una pieza de software compatible con el
framework y dejara las puertas abiertas a desarrollos futuros, tanto en el simulador como adiciones
al framework. El balance adecuado en la forma en que se dividió el código no solo permite a los
usuarios del simulador entender fácilmente la programación de la herramienta en caso de tener
que editarla, si no que facilitó el trabajo colaborativo entre desarrolladores y la implementación de
versiones básicas de cada bloque, que a su vez ayudaron a entender los resultados a medida que se
desarrollaba el simulador.
Se implementaron modelos para la dinámica de cuerpo rı́gido del robot, para las interacciones del
robot con el ambiente y para los actuadores. Como resultado el simulador arroja gran cantidad de
datos a los que no se tiene acceso en el robot real. Sin embargo queda pendiente un trabajo adicional
en donde se tomen medidas de varias salidas del sistema, de manera que se encuentren patrones
que permitan calibrar el simulador para replicar un entorno de trabajo especı́fico. Esto no afecta
el objetivo principal del simulador, que si bien permite al usuario una calibración precisa como la
descrita para trabajos que lo requieran, también se puede utilizar con los parámetros ofrecidos en
etapas de la investigación que no requieran emular un ambiente real especifico y sean conscientes
de las limitaciones de la simulación.
Se desarrollo un conjunto de herramientas de realidad aumentada que permiten al usuario final tener
una mejor compresión de lo que ocurre con el sistema. Estas incluyen la visualización del marco
39
Capı́tulo 7. Conclusiones
de referencia de cada módulo, la visualización de los puntos de contacto entre el robot y el suelo,
y la visualización de las trayectorias de cada modulo a través del tiempo. Adicionalmente el simu-
lador incluye controles de reproducción que permiten manipular la presentación de los resultados
a voluntad del usuario final, quien puede cambiar la velocidad de reproducción, el ángulo desde el
que observa el robot e incluso hacerlo hacia atrás. El potencial del simulador para desarrollar la
intuición y comprensión del fenómeno en el usuario final se evidenciará en trabajos futuros que se
beneficien del mismo.
El simulador es una herramienta que facilita el trabajo con MSR y abre el camino para varios
trabajos futuros, como la creación de herramientas de control de alto nivel en lazo cerrado, la
optimización de los parámetros de generación de gaits y apoya investigaciones en curso como la
determinación de métricas para la estabilidad del robot y la creación de configuraciones nuevas.
La modularidad del simulador permite la implementación de otros MSR al permitir cambiar los mo-
delos de cada módulo e implementar funciones que emulen actuadores diferentes. Las descripciones
aquı́ expuestas marcan un camino para quien complete dicha tarea en el futuro.
Se crearon piezas adicionales de software (plugins) para completar tareas repetitivas producto del
trabajo con el robot. Entre los plugins desarrollados están el angleFile generator, que permite generar
el archivo de control que utilizan las interfaces existentes además del simulador y un generador de
mapas de altura, pipeFile generator, que produce las imágenes en escala de grises correspondientes a
tubos del diámetro especificado por el usuario. Estas pequeñas herramientas de software se pueden
crear con facilidad en el futuro para resolver problemas puntuales y aumentar las funciones del
simulador.
40
Apéndice A
Nota de Publicaciones
A continuación se presenta la lista de publicaciones a los que este proyecto, a la fecha, ha contribuido:
J. Leon, L. Paez, and K. Melo. Modular Snake ROS. In ROS Developer Conference (ROS-
Con2013), 2013
J. Leon, J. Monsalve, A. DiZeo, L. Paez, and K. Melo. Open Modular Snake Robot Software
Architecture. In VIII Workshop on Software Development and Integration in Robotics (SDIR
VIII), IEEE International Conference on Robotics and Automation (ICRA), 2013, pages 84–
86, may 2013
K. Melo, J. Leon, J. Monsalve, A. DiZeo, and L. Paez. Modular Snake Robots. Research on
Locomotion and Low Cost Open Hard/Software Platforms Development and Integration. In
Robotics for Risky Environments - Extreme Robotics (RISE-ER), 2013, International Works-
hop on, 2013. Acepted
41
Apéndice B
A4
42
Apéndice B. Medidas de las partes constitutivas del Módulo
A4
A4
43
Apéndice C
En este apéndice se describe el uso del simulador y se le da un recorrido al usuario a través de sus
diferentes opciones.
Al ejecutar el simulador se abre una ventana principal como se aprecia en la Figura C.1. Mediante
esta ventana el usuario controla todas las opciones posibles. La mayorı́a de los botones se encuentran
deshabilitados debido a que no se encuentra aún ningún archivo en simulación.
44
Apéndice C. Manual de Uso
las siguientes lı́neas contienen las configuración del robot, donde cada lı́nea cuenta con igual
columnas como número de actuadores y es leı́da pasado el periodo establecido en el encabezado.
Se aclara que en caso de tener más columnas que actuadores, el software asignará sólo las
primeras columnas hasta completar el número de actuadores; en caso de tener menos, los
demás motores conservarán la posición inicial de ángulo cero.
El final del archivo es una lı́nea en blanco y hay lectura hasta el EOF.
Un contenido de ejemplo para un archivo que represente una serpiente de 3 módulos, con un muestreo
por lı́nea de 1 segundo, los valores en grados y un tiempo de simulación de 3 segundos. se observa
a continuación:
3 1 g
90 0 60
90 90 90
19 40 40
Se puede modificar el archivo y continuar con la simulación desde el punto en que se iba. Sin embargo
no es posible borrar lı́neas o devolver la simulación a un punto anterior.
Una vez el usuario haya agregado el archivo, la ruta es mostrada en la barra de texto del medio de
la ventana y nuevos botones son habilitados como se muestra en la figura C.2. En este punto se da
la opción de modificar los parámetros de simulación explicados a continuación.
45
Apéndice C. Manual de Uso
Al presionar se abre una ventana que nos permite cambiar los parámetros de la serpiente como
se muestra en la figura C.3.
La ventana cuenta con un selector de versión de la serpiente. El primero para el módulo sin elastóme-
ro, el segundo para el módulo con elastómero. Cada uno de los modelos tiene sus valores y son
explicados en una imágen que muestra a qué se refiere el valor.
Además una segunda pestaña permite establecer los valores que caracterizan al motor y la posición
inicial del primer módulo. Luego el robot se irá extendiendo hacia el eje X.
46
Apéndice C. Manual de Uso
A la izquierda, la ventana de configuración de los parámetros Globales que utiliza ODE, con una
reducida explicación de su significado; a la derecha, la ventana de configuración de los parámetros
de la superficie de contacto, sea suelo o heightfield.
Antes de describir esta opción se debe mencionar que en caso de no especificar un heightfield, se
establece un plano constante en el plano XZ y visualmente unas paredes en los planos X=20, X=-20,
Z=20 y Z=-20 que no generan colisiones en el motor fı́sico.
47
Apéndice C. Manual de Uso
La posición está dada en el marco de referencia del simulador, con unidades de metros y
respecto a la esquina superior izquierda de la imagen utilizada.
La escala habla de cuanto será el valor máximo de altura, teniendo en cuenta que es repre-
sentado por el color blanco (255 en 8 bits), a partir de este valor se pueden calcular cuánta es
la altura para las otras tonalidades de gris. Se debe tener en cuenta que entre mayor sea este
valor, más agresivos son los cambios de altura entre dos valores consecutivos de gris.
C.3. En simulación
Para arrancar la simulación se debe presionar el botón simular ubicado a la derecha de la ventana
principal.
Inmediatamente se abrirá una ventana con una barra de carga como se observa en la figura C.6.
Durante este tiempo se puede cancelar la simulación, sin embargo, los datos que se hayan analizado
del archivo y el resultado de simulación alcanzados se conservarán.
48
Apéndice C. Manual de Uso
Una vez finalice la simulación, los resultados se empezarán a visualizar. En este punto se puede
hacer uso de los botones de control de la visualización. mostrados en la figura C.8.
Los controles de simulación son similares a los de un reproductor de vı́deo. A la derecha, el número
precedido a la X es la velocidad de reproducción. Los botones de existe la posibilidad de acelerar
la reproducción con y o hacerla más lenta y pausada dejando presionado los botones de
y . La velocidad de reproducción normal se obtiene con el botón y en cualquier momento se
pueden hacer pausas con . Por último el botón refrescar retoma el archivo de ángulos desde la
última posición leı́da y continua con el proceso de simulación, lanzando nuevamente una barra de
carga.
49
Apéndice C. Manual de Uso
Figura C.10: FOG Activado (No disponible en todos las tarjetas gráficas)
50
Apéndice C. Manual de Uso
51
Apéndice C. Manual de Uso
52
Apéndice D
Registro de Cambios
Versión 0.001
Se creó el primer diagrama de clases y el primer acercamiento al código. se partió del reto
juanse y se dividió el código en carpetas ordenado.
Versión 0.002
Se mejoró el GL, se agregó cámara en perspectiva, se experimentó con colores, planos y los
diferentes valores del experimento
Versión 0.003
Se mejoró el GL, se agregó movimiento a la cámara con las flechas, las teclas W,A,S,D y
SHIFT + W,S. Se cambiaron los colores, se mejoró problemas de orientación de los objetos
entendiendo mejor la ubicación cartesiana de OpenGL.
Versión 0.010
Apareció la necesidad de 2 geoms para los módulos. Restauramos dimx , dimy , dimz para poder
hacer la escalización, y los offsets en GL. Termina con muchos errores de visualización. hay
un bug con el manejo del quaternion
Versión 0.011
Se arreglaron los problemas de visualización. La gravedad se puso en el eje Y hacia abajo, se
reorganizaron las posiciones de los objetos para dimensiones más pequeñas queda pendiente
velocidad de la cámara y posición inicial coherentes. Aún se tienen cubos para los módulos.
Versión 0.020
Reestructuración de el modelo de clases que se utilizó en todo el simulador. Desaparece la
clase Módulo y aparece la clase serpiente. Se le deja en control de tiempos a Simulador en vez
de a SimGL simODE recibe nuevas tareas al ser quién tenga una serpiente. Se plantea la clase
datos pero no se implementa. La nueva clase serpiente se encarga de los módulos, las junturas,
los motores y las junturas de datos.
53
Apéndice D. Registro de Cambios
Versión 0.021
Intento por utilizar CAD’s en el simulador.
Versión 0.022
Creación del primer modelo para ajustar el ángulo de los motores. Se agrega una variable
configuración a serpiente donde se almacenan los ángulos destino. Se arregló un problema con
el sistema coordenado de los ángulos de los motores.
versión 0.023
Creación de la clase datos.
Versión 0.024
Unión de las Versiónes 0.022 y 0.023. Se cambia la implementación de la rotación, ya no es
con quaterniones sino con matriz de transformación, se arma manualmente. Esto debido a un
error de pruebas en otros computadores.
Versión 0.025
Se quiere agregar luz y sombras
Versión 0.025a
Recuperación del movimiento de la serpiente luego de una desconfiguración de los valores de
ODE
Versión 0.026
Segundo intento por utilizar CADS. Con la versión 0.025 como base
Versión 0.030
Se hace necesario hacer primero el procesamiento de ode antes de mostrar. Implementación de
nuevas funciones en clase dato para crear un archivo binario con la información del movimiento
de la serpiente. Sincronización de los datos de entrada con el simulador y los datos de salida.
Versiion 0.031
Se hace para la presentación del simulador en SII2012 Fukuoka, japón.
Versión 0.032
versión para pruebas generales sin funcionalidad objetivas. Cambio de CADS, movimiento de
parámetros, implementación de vertex buffer.
Versión 0.033
Implementaciòn de la estructura de feedback en los joints: como el eedback utiliza el tipo de
dato djointFeedBack, cambié la definición del vector en la clase simserpiente, y en el getter
corresopndiendte.
Versión 0.040
Cambio en la clase SimGL. Se desea cambiar OpenGL por Open Scene Graph (OSG) debido
a la facilidad de uso y lo complejo que se hacı̀a utilizar OpenGL con GLSL y con Buffers.
54
Apéndice D. Registro de Cambios
Versión 0.041
Una vez realizada la implementaciòn en OSG, intentaremos utilizar texturas y agregar com-
ponentes que le den realidad a la simulaciòn. Jugando con Heightfields
Versión 0.042
Creación de la nueva clase simEscenario, donde se agregará el escenario de heighfield. Se crea
un plano como scenario por defecto. Se agrega a datos la posibilidad de leer heighfields en
formato BMP utilizando OSGDB.
Versión 0.044
implementadas las estructuras para (desde 0.033): feedback de junturas puntos de contacto
implementadas las clases para cargar el heightfield: motorODE-¿crearHeightfield simEscena-
rio() se crearon las constantes para completar los parametros correspondientes
por discutir: el data del heightfield de double a algo mas elegante? hacer un struct para los
parametros de las funciones que crean los heightfields? las clases para montar el heightfield en
OSG?
Versión 0.050
Adaptaciòn de todo el còdigo a qt. Cambio de IDE a QtCreator.
Versión 0.051
Más pruebas en Qt. Versión con errores
Versión 0.060
Creación de la primera versión en Qt. NO FUNCIONAL!
Versión 0.061
Reimplementaciòn de Qt, problemas de funcionalidad resueltos!
Versión 0.062
Se cambió la interfaz de usuario a todo el qt botones de play pause y demàs estàn pero no
funcionan, se agregò la parte gràfica a la ventana principal como un QWidget generado por
OsgQT
Versión 0.063
Correcciones mayores sobre la versiòn de qt, implementaciòn de la mayorı̀a de las funcionali-
dades
Versión 0.064
Correcciones menores
55
Bibliografı́a
[1] K. Melo, L. Paez, and C. Parra. Indoor and outdoor parametrized gait execution with modular
snake robots. In Robotics and Automation (ICRA), 2012 IEEE International Conference on,
pages 3525–3526, may 2012. doi: 10.1109/ICRA.2012.6224768.
[3] K. Melo, L. Paez, M. Hernandez, A. Velasco, F. Calderon, and C. Parra. Preliminary studies on
modular snake robots applied on de-mining tasks. In Robotics Symposium, 2011 IEEE IX Latin
American and IEEE Colombian Conference on Automatic Control and Industry Applications
(LARC), pages 1–6, oct. 2011. doi: 10.1109/LARC.2011.6086814.
[4] Matthew Tesch, Kevin Lipkin, Isaac Brown, Ross L. Hatton, Aaron Peck, Justine Rembisz,
and Howie Choset. Parameterized and Scripted Gaits for Modular Snake Robots. Advanced
Robotics, 23(9):1131–1158, 2009.
[5] Matthew Tesch, Jeff Schneider, and Howie Choset. Adapting control policies for expensive
systems to changing environments. In Intelligent Robots and Systems (IROS), 2011 IEEE/RSJ
International Conference on, pages 357–364, sept. 2011. doi: 10.1109/IROS.2011.6095039.
[6] A. Trujillo, J. Igua, K. Melo, and C. Parra. Dinámica Pasiva para una Cadena Articulada Co-
planar de 6 DOF. In Proc. IEEE IX Latin American Robotics Symposium and IEEE Colombian
Conference on Automatic Control, October 2011.
[7] Russel L. Smith. Open Dynamics Engine, September 2012. URL http://www.ode.org.
[8] Marc Andreas Freese. V-Rep (Virtual Robot Experimentation Platform), September 2012.
URL http://www.coppeliarobotics.com.
[9] Free Software for robots and sensor applications, March 2012. URL http://playerstage.
sourceforge.net.
56
Bibliography
[12] Kamilo Melo, Laura Paez, Andrea Polo, and Carlos Parra. Gait Programming and Data
Acquisition User Interfaces, for Modular Snake Robots. In Dehuai Yang, editor, Informatics
in Control, Automation and Robotics, volume 133 of Lecture Notes in Electrical Engineering,
pages 113–117. Springer Berlin Heidelberg, 2012. ISBN 978-3-642-25992-0. 10.1007/978-3-642-
25992-0 15.
[13] K. Melo and L. Paez. Modular snake robot gaits on horizontal pipes. In Intelligent Robots and
Systems (IROS), 2012 IEEE/RSJ International Conference on, pages 3099–3104, 2012. doi:
10.1109/IROS.2012.6385980.
[14] K. Melo, J. Leon, J. Monsalve, V. Fernandez, and D. Gonzalez. Simulation and control integra-
ted framework for modular snake robots locomotion research. In System Integration (SII), 2012
IEEE/SICE International Symposium on, pages 523–528, 2012. doi: 10.1109/SII.2012.6427341.
[15] A. Witkin and D. Baraff. Physically Based Modeling: Principles and Practice. Technical report,
Carnegie Mellon University. Robotics Institute, 1997.
[17] James Kramer and Matthias Scheutz. Development environments for autonomous mobi-
le robots: A survey. Auton. Robots, 22(2):101–132, February 2007. ISSN 0929-5593. doi:
10.1007/s10514-006-9013-8. URL http://dx.doi.org/10.1007/s10514-006-9013-8.
[18] Carnegie Mellon University. Robotics Institute. CARMEN, Robot navigation Toolkit, June
2012. URL http://carmen.surceforge.net.
[19] Costa Paulo, Gonçalves José, Lima José, and Malheiros Paulo. Simtwo realistic simulator:
A tool for the development and validation of robot software. Theory and Applications of
Mathematics & Computer Science, 1(1), 2011. ISSN 2247 – 6202. URL http://www.uav.ro/
stiinte_exacte/journal/index.php/TAMCS/article/view/3.
[22] Erwin Coumans. Bullet Continuous Collision Detection and Physics Library, September 2012.
URL http://www.bulletphysics.org.
[23] Nvidia. Physx, Scalable Multi-Platform Game Physics Solution, September 2012. URL http:
//developer.nvidia.com/physx.
[24] Evan Drumwright, John Hsu, Nathan Koenig, and Dylan Shell. Extending open dyna-
mics engine for robotics simulation. In Proceedings of the Second international conference
on Simulation, modeling, and programming for autonomous robots, SIMPAR’10, pages 38–
50, Berlin, Heidelberg, 2010. Springer-Verlag. ISBN 3-642-17318-7, 978-3-642-17318-9. URL
http://dl.acm.org/citation.cfm?id=1947545.1947554.
57
Bibliography
[26] Richard S. Wright, Nicholas Haemel, Graham Sellers, and Benjamin Lipchak. OpenGL Su-
perBible: Comprehensive Tutorial and Reference (5th Edition). Addison-Wesley Professional,
5 edition, August 2010. ISBN 0321712617. URL http://www.amazon.com/exec/obidos/
redirect?tag=citeulike07-20&path=ASIN/0321712617.
[27] J. Denavit and R. S. Hartenberg. A kinematic notation for lower-pair mechanisms based
on matrices. Trans. of the ASME. Journal of Applied Mechanics, 22:215–221, 1955. URL
http://ci.nii.ac.jp/naid/10008019314/en/.
[28] Kamilo. Melo and Monica Hernandez. Parameterized Space Conditions for the Definition of
Locomotion Modes in Modular Snake Robots. In Robotics and Biomimetics (ROBIO), 2012
IEEE International Conference on, dec. 2012. Submited.
[30] Kamilo Melo and Laura Paez. Modular Snake Robots on Horizontal Pipes. In Intelligent Robots
and Systems (IROS), 2012 IEEE/RSJ International Conference on, October 2012. to appear.
[31] Ethan Tira-Thompson. Digital servo calibration and modeling. Technical Report CMU-RI-
TR-09-41, Robotics Institute, Pittsburgh, PA, March 2009.
[32] K. Melo, J. Leon, J. Monsalve, V. Fernandez, and D. Gonzalez. Simulation and control integra-
ted framework for modular snake robots locomotion research. In System Integration (SII), 2012
IEEE/SICE International Symposium on, pages 523–528, 2012. doi: 10.1109/SII.2012.6427341.
[33] J. Leon, J. Monsalve, A. DiZeo, L. Paez, and K. Melo. Open Modular Snake Robot Software
Architecture. In VIII Workshop on Software Development and Integration in Robotics (SDIR
VIII), IEEE International Conference on Robotics and Automation (ICRA), 2013, pages 84–86,
may 2013.
[34] J. Leon, L. Paez, and K. Melo. Modular Snake ROS. In ROS Developer Conference (ROS-
Con2013), 2013.
[35] K. Melo, J. Leon, J. Monsalve, A. DiZeo, and L. Paez. Modular Snake Robots. Research on
Locomotion and Low Cost Open Hard/Software Platforms Development and Integration. In
Robotics for Risky Environments - Extreme Robotics (RISE-ER), 2013, International Workshop
on, 2013. Acepted.
58