Sunteți pe pagina 1din 136

TESIS DE MÁSTER:

Micro-Robot Trazador de Trayectorias

Estudios: Máster en Ingeniería Electrónica


Autor: Andrés Alfaya Mariño
Supervisor: Sergi Bermejo Sánchez
Fecha: Julio 2014
Micro-Robot Trazador de Trayectorias ii
Índice general

1. Introducción 1
1.1. Situación actual . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Fases de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4. Material de trabajo . . . . . . . . . . . . . . . . . . . . . . . . 3

2. Sistemas de navegación inercial robótica 5


2.1. Sistema de Navegación Inercial (INS) . . . . . . . . . . . . . . 5
2.2. Sistemas de referencia . . . . . . . . . . . . . . . . . . . . . . 7
2.3. Cambio de sistema de referencia . . . . . . . . . . . . . . . . . 8
2.4. Obtención de la posición a partir de la aceleración . . . . . . 10
2.5. Obtención de la aceleración respecto a los ejes fijos . . . . . . 12
2.6. Errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.7. Eliminación de errores . . . . . . . . . . . . . . . . . . . . . . 14
2.7.1. Filtro de Kalman . . . . . . . . . . . . . . . . . . . . . 14
2.7.2. Sistema de filtro para la orientación basado en cuater-
niones . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3. Micro-robótica móvil 23
3.1. Robótica móvil . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2. Mecatrónica para micro-robots . . . . . . . . . . . . . . . . . 26
3.2.1. Mecánica . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.2. Eléctrica . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.3. Electrónica . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3. Percepción en micro-robots . . . . . . . . . . . . . . . . . . . 36
3.3.1. Sensores y sistemas de percepción de entorno . . . . . 36
3.3.2. Sensores y sistemas de percepción del propio movi-
miento del robot . . . . . . . . . . . . . . . . . . . . . 41
3.4. Resumen de los sistemas presentes en un robot móvil . . . . . 42

4. Desarrollo de elementos de un robot móvil trazador 45


4.1. Diseño de μTrace . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.1. Análisis de las necesidades . . . . . . . . . . . . . . . . 46

iii
Micro-Robot Trazador de Trayectorias iv

4.1.2. Sistemas comerciales . . . . . . . . . . . . . . . . . . . 47


4.1.3. Selección de componentes . . . . . . . . . . . . . . . . 49
4.1.4. Diseño del hardware . . . . . . . . . . . . . . . . . . . 55
4.1.5. Diseño del firmware . . . . . . . . . . . . . . . . . . . 56
4.1.6. Comparativa con otros sistemas comerciales . . . . . . 61
4.2. Algoritmos de trazado de trayectorias . . . . . . . . . . . . . 62
4.2.1. Algoritmo de ángulos de Euler calculados directamente 62
4.2.2. Algoritmo de ángulos de Euler calculados con filtro de
Kalman . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2.3. Algoritmo de cálculo de cuaterniones . . . . . . . . . . 66
4.3. Puesta en marcha de μTrace: pruebas y resultados . . . . . . 67
4.3.1. Proceso de puesta en marcha del μTrace . . . . . . . . 67
4.3.2. Prueba de funcionamiento del μTrace . . . . . . . . . . 69
4.3.3. Testeo de los algoritmos de reconstrucción de trayectorias 73
4.3.4. Resultados de los test . . . . . . . . . . . . . . . . . . 78

5. Conclusiones y líneas de trabajo futuras 81

Bibliografía 84

Anexo A 87

Anexo B 91

Anexo C 104
Índice de figuras

2.1. Diagrama de un Sistema de Navegación Inercial[2] . . . . . . 6


2.2. Marco de referencia asociado a un cuerpo[10] . . . . . . . . . 7
2.3. Rotaciones según los 3 ejes de referencia[7] . . . . . . . . . . . 8
2.4. Representación de un cuaternión[13] . . . . . . . . . . . . . . 10
2.5. Fases del Filtro de Kalman . . . . . . . . . . . . . . . . . . . 16
2.6. Ángulo Pitch girado con respecto a la tierra . . . . . . . . . . 17
2.7. Diagrama para la obtención del cuaternión[13] . . . . . . . . . 20

3.1. Ejemplo de posibles trayectorias seguidas por un robot móvil[14] 24


3.2. Ejemplo de posibles trayectorias seguidas por un robot móvil[18] 29
3.3. Detalle de un regulador lineal ajustable (izquierda) y de un
regulador lineal fijo (derecha)[16] . . . . . . . . . . . . . . . . 33
3.4. Detalle de funcionamiento de un puente en H[16] . . . . . . . 35
3.5. Esquema de funcionamiento de un sensor tipo bumper[19] . . 38
3.6. Funcionamiento de un sensor de infrarrojos[20] . . . . . . . . 40

4.1. Bases robóticas de dos y cuatro ruedas respectivamente . . . 48


4.2. Robot Pololu 3pi (izquierda) y robot Mark III (derecha) . . . 50
4.3. Vista superior del prototipo de pruebas . . . . . . . . . . . . . 68
4.4. Vista inferior del prototipo de pruebas . . . . . . . . . . . . . 68
4.5. Terminal de computador conectado con el prototipo de pruebas 70
4.6. Reconstrucción de trayectoria circular ascendente usando al-
goritmo de ángulos de Euler . . . . . . . . . . . . . . . . . . . 74
4.7. Reconstrucción de trayectoria circular ascendente usando al-
goritmo de ángulos de Euler con filtrado de Kalman . . . . . 75
4.8. Reconstrucción de trayectoria circular ascendente usando al-
goritmo basado en cuaterniones . . . . . . . . . . . . . . . . . 75
4.9. Reconstrucción de trayectoria cuadrada ascendente usando al-
goritmo de ángulos de Euler . . . . . . . . . . . . . . . . . . . 76
4.10. Reconstrucción de trayectoria cuadrada ascendente usando al-
goritmo de ángulos de Euler con filtrado de Kalman . . . . . 76
4.11. Reconstrucción de trayectoria cuadrada ascendente usando al-
goritmo basado en cuaterniones . . . . . . . . . . . . . . . . . 77

v
Micro-Robot Trazador de Trayectorias vi
Índice de cuadros

4.1. Tabla comparativa de los micro-controladores candidatos . . . 55


4.2. Tabla comparativa de los robots comerciales y el μTrace . . . 61

vii
Micro-Robot Trazador de Trayectorias viii
Palabras clave

Trazado, tracking, IMU, acelerómetro, giroscopio, trayectorias, robot mó-


vil

ix
Micro-Robot Trazador de Trayectorias x
Resum

En aquesta tesi de màster es fa un estudi detallat de l’arquitectura mecànica,


elèctrica, electrònica i de programari de la construcció d’un robot mòbil que
tingui la capacitat de reconstruir la trajectòria que ha seguit prenent dades
d’un sistema de sensorització inercial i aplicant eines de programari per al
tractament d’aquestes dades.
Al llarg d’aquesta memòria s’analitzaran en primer lloc alguns aspectes
teòrics per al disseny i construcció d’un robot mòbil així com aspectes teòrics
de la navegació inercial, base en què es fonamenta la reconstrucció de les
trajectòries seguides pel robot a partir de dades de mesures inercials.
Posteriorment, es detallaran els processos de creació de prototips i d’aplica-
cions informàtiques que es podran utilitzar en un futur desenvolupament d’un
sistema autònom mòbil amb capacitat de reconstrucció de trajectòries, així
com la seva posterior posada a prova i validació d’aquestes eines.
Per acabar, en aquest document es fa una reflexió de la validesa o no de
tots els desenvolupaments que es detallen al llarg del mateix, i de com l’aquí
exposat pot ser implementat per a la creació de robots mòbils com capacitat
per a la reconstrucció de trajectòries i fins i tot de desenvolupar aplicacions
de navegació inercial.

xi
Micro-Robot Trazador de Trayectorias xii
Resumen

En esta tesis de máster se hace un estudio detallado de la arquitectura mecá-


nica, eléctrica, electrónica y de software de la construcción de un robot móvil
que posea la capacidad de reconstruir la trayectoria que ha seguido, toman-
do datos de un sistema de sensorización inercial y aplicando herramientas de
software para el tratamiento de esos datos.
A lo largo de esta memoria se analizarán en primer lugar algunos as-
pectos teóricos para el diseño y construcción de un robot móvil así como
aspectos teóricos de la navegación inercial, base en la que se fundamenta la
reconstrucción de las trayectorias seguidas por el robot a partir de datos de
medidas inerciales.
Posteriormente, se detallarán los procesos de creación de prototipos y de
aplicaciones informáticas que se podrán utilizar en un futuro desarrollo de
un sistema autónomo móvil con capacidad de reconstrucción de trayectorias,
así como su posterior puesta a prueba y validación de dichas herramientas.
Para terminar, en este documento se hace una reflexión de la validez o
no de todos los desarrollos que se detallan a lo largo del mismo, y de cómo
lo aquí expuesto puede ser implementado para la creación de robots móviles
con capacidad para la reconstrucción de trayectorias e incluso de desarrollar
aplicaciones de navegación inercial.

xiii
Micro-Robot Trazador de Trayectorias xiv
Abstract

In this master thesis, has been done a detailed study of the mechanical
architecture, electrical, electronic and software to build a mobile robot that
possesses the ability to reconstruct the path followed by taking data from an
inertial sensor and applying tools is software for processing that data.
Throughout this report, has been analyzed some theoretical aspects for
the design and construction of a mobile robot as well as theoretical aspects
of inertial navigation, base for the reconstruction of the paths followed by
the robot using for that inertial measurement data taken by the system.
Later, has been detailed the process of creating prototypes and informa-
tics applications that may be used in the future development of a mobile au-
tonomous system capable of reconstructing trajectories and the subsequent
testing and validation of these tools.
Finally, on this paper, has been done a reflect on the validity or not of all
the developments that are detailed along it, and how all thing here presented
can be implemented for future creation of mobile robots with capacity for
reconstruction of trajectories and even develop inertial navigation applica-
tions.

xv
Micro-Robot Trazador de Trayectorias xvi
Capítulo 1

Introducción

En esta tesis de máster se analizan diferentes conceptos fundamentales en el


campo de la mecatrónica y la robótica, así como en el campo de la navegación
inercial y reconstrucción de trayectorias. A lo largo de este capítulo, y a
modo de introducción, se presentarán cuáles son las motivaciones y objetivos,
etapas de trabajo y el material del que se dispuso a lo largo de toda la tesis
de máster.

1.1. Situación actual


Actualmente existen numerosos robots móviles en el mercado. Pero habitual-
mente estos robots están destinados al aprendizaje de conceptos básicos de
robótica o como entretenimiento. No existe en el mercado ningún sistema
comercial que posea movimiento propio y que a su vez sea capaz de gene-
rar información y datos que permitan una posterior reconstrucción de las
trayectorias que ha seguido.
Existen algunos ejemplos de dispositivos que si que permiten la recons-
trucción de trayectorias, pero siempre son sistemas que se deben acoplar a
otros que les sirvan como medio de locomoción. Típicamente, estos medios
de transporte son dispositivos de radiocontrol o teleoperados o incluso otros
robots móviles que pueden o no sincronizarse con los citados sistemas de to-
ma de datos. Pero actualmente, no existe ningún tipo de sistema que integre
en un mismo dispositivo la parte de navegación autónoma y la de toma de
datos.
Debido a esta carencia de dispositivos que permitan integrar en un mismo
sistema todo lo citado anteriormente, es necesario hacer una estudio de qué
elementos y herramientas software y hardware son necesarias para la cons-
trucción de un robot móvil. Por ello durante este trabajo se pretende hacer
un estudio de cuáles son las necesidades y qué soluciones se pueden aportar
para hacer posible la construcción de dicho sistema.

1
Micro-Robot Trazador de Trayectorias 2

1.2. Objetivos
El principal objetivo de este proyecto es el de diseñar, desarrollar y testear
posibles soluciones que puedan aplicarse para la construcción de un robot
móvil completamente operativo y funcional que sea capaz de realizar movi-
mientos por sí mismo sin necesidad de ser teleoperado y que este, sea capaz
de de obtener información de su movimiento, para luego, mediante una serie
de herramientas de software, poder calcular cual ha sido la ruta seguida por
el robot.
A continuación se detallan y enumeran de forma detallada cuales son los
objetivos que se persiguen con esta tesis de máster.
Hacer un estudio detallado de qué elementos serian necesarios para
la creación de una plataforma robótica móvil que sea capaz de ejecu-
tar movimientos de forma completamente autónoma, sin necesidad de
estar conectado a fuentes de alimentación externas (por ejemplo, es-
tar conectado a la red eléctrica) ni de ser guiado remotamente por un
operador.
Analizar y desarrollar un sistema que pueda ser integrado en el robot
móvil que permita la adquisición de datos inerciales relacionados con
su movimiento así como de elementos para que el robot móvil pueda
almacenar dicha información para que pueda ser tratada y con ello
reconstruir las trayectorias que ha seguido.
Desarrollo y creación de herramientas de software que permitan, con
los datos obtenidos por el robot durante su movimiento, reconstruir de
una manera lo más fiel posible el movimiento del robot, es decir, crear
alguna aplicación que permita recrear las trayectorias que ha seguido
el robot.
Poner a prueba los elementos que se han desarrollado, para un aná-
lisis de las posibilidades reales de, a partir de estos elementos, crear
un sistema que pueda hacer de manera autónoma una navegación sin
intervención externa y a la vez tomar datos para una posterior recons-
trucción de la trayectoria seguida.
Hacer una reflexión de cuáles son las principales problemáticas que se
pueden presentar a la hora de crear un robot móvil con capacidad para
reconstruir trayectorias.
En suma, se pretende analizar y crear herramientas para que sea viable la
construcción de un robot capaz de moverse de forma autónoma y que al
tiempo sea capaz de obtener suficiente información, para posteriormente,
reconstruir los movimientos ha realizado. A lo largo de los diferentes capí-
tulos que componen esta tesis, se irán desgranando los diferentes objetivos
detallados anteriormente.
Micro-Robot Trazador de Trayectorias 3

1.3. Fases de desarrollo


La realización de este proyecto consta de las siguientes etapas en el proceso
de desarrollo:

Recopilación de información y teoría acerca de cómo construir y diseñar


una plataforma robótica móvil y autónoma dotada de los elementos
necesarios para poder moverse libremente. Ver capítulo 3.

Recopilación de información y teoría acerca de sistemas de navegación


inercial y de reconstrucción de trayectorias a partir de datos tomados
por sensores inerciales. Ver capítulo 2.

Elección y diseño de una plataforma robótica. Ver capítulo 4.

Diseño y desarrollo de un firmware que pueda ser utilizado en un robot


y su posterior puesta a prueba. Ver capítulo 4.

Creación de herramientas de software capaz de reconstruir el recorrido


realizado por una plataforma robótica a partir de los datos recolectados
por la misma. Ver capítulo 4.

Creación de un prototipo que integre todo lo desarrollado y su posterior


puesta a prueba de cada uno de los elementos que integran el sistema
y la integración de todos ellos. Ver capítulo 4.

Análisis de resultados y propuestas para seguir el desarrollo futuro de


esta tesis de máster. Ver capítulo 5.

1.4. Material de trabajo


Durante el desarrollo de la tesis se dispuso del siguiente material usado para
el desarrollo, implementación y depuración de todas las partes de sistema:

Programa para diseño de circuitos integrados Eagle de Cadesoft.

Compilador y IDE (integrated development environment) o Entorno


de desarrollo integrado, para microcontroladores de la familia PIC de
Microchip, CCS C compiler de CCS. INC.

Herramienta de software matemático MATLAB de MathWorks.

Diferentes placas de pruebas de microcontroladores y sensores.


Micro-Robot Trazador de Trayectorias 4
Capítulo 2

Sistemas de navegación inercial


robótica

En este capítulo se presentan algunos de los conceptos que se han utilizado


para el desarrollo y posterior realización de los algoritmos de reconstrucción
de trayectorias que se presentan en esta tesis y que pueden ser usados para un
posterior desarrollo de un robot móvil. A lo largo de las siguientes secciones se
enumerarán diferentes formas de tratamiento de datos obtenidos de sensores
inerciales así como diferentes conceptos físicos y matemáticos.

2.1. Sistema de Navegación Inercial (INS)


Los sistemas de navegación inercial se utilizan principalmente para estimar
la posición de un cuerpo que se desplaza desde una posición conocida utili-
zando para ello mediciones en un intervalo de tiempo conocido con el fin de
actualizar el desplazamiento hecho por el mismo.
Durante mucho tiempo su uso estuvo restringido principalmente a usos
militares debido a los elevados costes asociados a los sensores (IMU’s), puesto
que estos deben ser de una altísima precisión si queremos que los resultados
sean lo más precisos posible. Principalmente por los giroscopios que han de
ser extremadamente precisos si queremos determinar de forma satisfactoria
la orientación del cuerpo a estudio.
Una forma de abaratar costes, es decir, obtener unos resultados aceptables
bajando la calidad de los sensores es utilizar sensores externos que nos vayan
actualizando la posición u orientación del cuerpo. Estos sensores pueden ser
un compás magnético o un receptor GPS que vaya actualizando la posición
del mismo.
Para aplicaciones de poca trascendencia como pueden ser seguimiento
de plataformas móviles en interior de edificios o estimación de velocidad y
orientación de vehículos no tripulados, se han desarrollado a lo largo del
tiempo métodos para la estimación de velocidad y orientación basado en

5
Micro-Robot Trazador de Trayectorias 6

Figura 2.1: Diagrama de un Sistema de Navegación Inercial[2]

IMU’s de bajo coste, que básicamente intentan corregir los errores de medida
que estas IMU’s de bajo coste llevan intrínsecos [1, 2].
En la figura 2.1 podemos observar como es el proceso que se utiliza para la
navegación inercial. En un primer momento se obtienen los datos de la IMU,
concretamente información acerca de la velocidad angular (giroscopio) y de la
aceleración (acelerómetro) a la que está sometido el cuerpo a estudio. Estos
datos, junto con información inicial de velocidad, posición y orientación,
permiten mediante un proceso de transformación de coordenadas obtener la
información de posición, velocidad y orientación en el momento en el que ha
recogido el dato.
Como se puede observar este proceso de estimación está basado en la inte-
gración, por lo que los errores que aparecen en la estimación de la orientación
son propagados y acumulados a lo largo del tiempo. Estos errores acumu-
lativos son los que al final determinan el grado de precisión del sistema de
navegación inercial. El estudio de estos errores se basa en métodos estadís-
ticos y son posteriormente usados en los algoritmos de fusión de datos para
minimizar los efectos de estos errores.
El primer tipo de sistema de navegación inercial desarrollado era el deno-
minado “gimballed system”. En este sistema los acelerómetros son montados
sobre una plataforma cardan motorizada que se mantiene siempre alineada
con el marco de navegación. Los sensores se encuentran sobre los cardans
externos e internos que mantienen la pista de la actitud de la plataforma
estabilizada con respecto al vehículo en el que está montado el sistema de
navegación inercial. Esta configuración tiene varios problemas que hacen des-
aconsejable su uso, entre los que se encuentran un mayor consumo por los
motores, mala alineación de la plataforma cardan, los motores han de ser
muy precisos o los altos constes de mantenimiento que tiene.
Con el desarrollo de los MEMS (Microelectromechanical systems) el “gim-
Micro-Robot Trazador de Trayectorias 7

Figura 2.2: Marco de referencia asociado a un cuerpo[10]

balled system” se simplificaba ya que los sensores eran más pequeños, y se


podían alinear con los ejes del cuerpo y al no tener que ser movidos por un
sistema mecánico simplificaba mucho su uso. Para compensar el movimiento
de acelerómetros se utiliza una solución software para calcular la orientación
de acelerómetro.

2.2. Sistemas de referencia


Se define un sistema de referencia o marco de referencia como un conjunto
de convenciones usadas por un observador para poder medir la posición, ve-
locidad, fuerza y otras magnitudes físicas del sistema que se está estudiando,
en este caso, para hacer referencia a la posición, velocidad y orientación de
un cuerpo [1, 3].
Existen numerosos sistemas de coordenadas para elegir a la hora de rea-
lizar la navegación, pero en este caso nos interesan especialmente dos:

Sistema de referencia inercial. Se trata de un sistema fijo inercial aso-


ciado a la tierra.

Sistema de referencia móvil o del cuerpo. Es el sistema de coordenadas


asociado con el sistema medido. Típicamente, pero no siempre, el eje X
indica la parte delantera del vehículo, el eje Z apuntando hacia arriba y
el eje Y está situado ortogonalmente a los ejes X y Z. Este es el sistema
de coordenadas en que se tomarán todas las medidas. En la figura 2.2
se puede observar una representación sombre un cuerpo de estos ejes.

Para poder pasar de un sistema de referencia a otro es necesario el uso de


matrices de rotación usando los ángulos de Euler o bien usando cuaterniones
Micro-Robot Trazador de Trayectorias 8

que nos den la rotación de un sistema de referencia con respecto al otro.


Estos cambios de un sistema a otro se explicarán más adelante.
Se definen los ángulos de Euler como los ángulos girados por parte de un
sistema de referencia ortogonal, en este caso, un sistema móvil, con respecto
a un sistema de ejes ortogonales fijos. En la figura 2.2 se puede observar
donde se sitúa cada uno de los ángulos de Euler. La nomenclatura de estos
ángulos son los siguientes:

Roll o α es el ángulo girado por los ejes ortogonales móviles con respeto
al eje X del sistema fijo.

Pitch o β es el ángulo girado por los ejes ortogonales móviles con res-
peto al eje Y del sistema fijo.

Yaw o γ es el ángulo girado por los ejes ortogonales móviles con respeto
al eje Z del sistema fijo.

2.3. Cambio de sistema de referencia


Uno de los numerosos métodos para el cambio de sistema de referencia es
el de la denominada “Matriz de Rotación”. Este método consiste en rotar el
sistema que queremos rotar en los tres planos de referencia del sistema al
que queremos llegar. Por ejemplo, primero giramos en el plano abarcado por
el eje X y el eje Y, a continuación, el plano abarcado por los ejes X y Z y
por último, el plano formado por los ejes Y y Z. En la figura 2.3 se puede
observar como son las rotaciones de los ejes [4, 7].

Figura 2.3: Rotaciones según los 3 ejes de referencia[7]

Matemáticamente, esta rotación de planos se define según los ejes X, Y y


Z de la siguiente manera:

Rfm = Rz (γ)Ry (β)Rx (α) (2.1)

sabiendo que:
Micro-Robot Trazador de Trayectorias 9

 
cos(γ) −sen(γ) 0
Rz (γ) =  sen(γ) cos(γ) 0  (2.2)
0 0 1
 
cos (β) 0 sen (β)
Ry (β) =  0 1 0  (2.3)
−sen (β) 0 cos (β)
 
1 0 0
Rx (α) =  0 cos (α) −sen (α)  (2.4)
0 sen (α) cos (α)
Si sustituimos las ecuaciones (2.2), (2.3) y (2.4) en (2.1) y operamos,
obtenemos la matriz que sigue:
 
cβcγ cγsαsβ − cαsγ cαcγsβ + sαsγ
Rfm =  cβsγ cαcγ + sαsβsγ −cγsα + cαsβsγ  (2.5)
−sβ cβsα cαcβ
siendo cθ y sθ el coseno y el seno del ángulo θ respectivamente.
Esta matriz, es la denominada matriz de rotación que define el giro de
un sistema de referencia móvil (m) con respecto a un sistema de referencia
fijo (f). Así, para rotar un vector vm (xm , ym , zm ) definido en un sistema
de referencia móvil a un vector definido en un sistema de referencia fijo
vf (xf , yf , zf )no hay más que multiplicar la matriz de rotación de los ejes
móviles en ejes fijos siguiendo la siguiente ecuación.

vf = Rfm vm (2.6)
Otro método de cambio de sistemas de referencia es el basado en el uso
de cuaterniones. Un cuaternión es un número complejo de cuatro dimen-
siones que se puede utilizar para representar la orientación de un cuerpo o
sistema de referencia en el espacio tridimensional. Una orientación arbitra-
ria del sistema de referencia móvil respecto al sistema fijo puede lograrse a
través de una rotación de ángulo θ alrededor de un eje rf definido para un
sistema de referencia fijo. En la figura 2.4 se muestra una representación grá-
fica de un cuaternión donde los vectores unitarios mutuamente ortogonales
XA , YA , ZA y XB , YB , ZB definen los ejes de los sistemas de referencia fijo y
móvil respectivamente.
f
El cuaternión que describe esta orientación, qm se define como

       
θ θ θ θ
f
qm = [q1 q2 q3 q4 ] = [cos − rx sen − ry sen − rz sen ] (2.7)
2 2 2 2
f
Como se puede apreciar en la Ec. (2.7), qm describe la orientación del
eje móvil con respecto al eje fijo, siendo rf el vector descrito con respecto al
Micro-Robot Trazador de Trayectorias 10

Figura 2.4: Representación de un cuaternión[13]

eje fijo. Para describir el eje fijo con respecto al eje móvil (qfm )se utiliza la
siguiente expresión conjugada:

f∗
qm = qfm = [q1 − q2 − q3 − q4 ] (2.8)
Para rotar un vector vm (xm , ym , zm ) definido en un sistema de referencia
móvil a un vector definido en un sistema de referencia fijo vf (xf , yf , zf ), hay
que multiplicar por el cuaternión que define la rotación del sistema de ejes
móviles en el sistema de ejes fijos de la manera que se muestra:

f∗
f
v f = qm ⊗ v m ⊗ qm (2.9)
A partir de los cuaterniones, también se puede definir la matriz de rotación
utilizando la siguiente expresión:

2q12 − 1 + 2q22 2 (2q2 q3 + q1 q4 ) 2 (2q2 q4 − q1 q3 )


 
f
Rm =  2 (2q2 q3 − q1 q4 ) 2q12 − 1 + 2q32 2 (2q3 q4 + q1 q2 )  (2.10)
2 (2q2 q4 + q1 q3 ) 2 (2q3 q4 − q1 q2 ) 2q12 − 1 + 2q42

2.4. Obtención de la posición a partir de la acele-


ración
Del acelerómetro es posible obtener la aceleración en un eje de manera que,
si tenemos un sistema IMU que es capaz de medir en los tres ejes cartesianos,
se conseguirían las tres componentes de la aceleración del cuerpo donde está
instalada la IMU. En este caso, si hacemos que los ejes del sistema móvil
coincidan con los ejes de la IMU, la IMU permitirá estimar la aceleración
referida al sistema móvil, que se representa como sigue:
Micro-Robot Trazador de Trayectorias 11

a = (ax , ay , az ) (2.11)

La aceleración de un sistema se define como la derivada con respecto


al tiempo de la velocidad de dicho sistema rígido como se puede ver en la
ecuación (2.12). Por otro lado, tenemos que la velocidad de un sistema rígido
se define como la derivada con respecto al tiempo de la posición de dicho
sistema (ver Ec. 2.13). Por lo tanto, al sustituir la Ec. (2.12) en la Ec. (2.13),
la aceleración podrá ser definida como la derivada segunda de la posición
con respecto al tiempo, dando lugar a la Ec. (2.14).

d
a= v (2.12)
dt

d
v= x (2.13)
dt

d2
 
d d
a= x = x (2.14)
dt dt dt2

Para obtener la posición a partir de la aceleración no tenemos más que


hacer una integración doble de la aceleración con respecto al tiempo:
Z Z
x= a.dt2 (2.15)

Asimismo, y dado que es un sistema discreto con una frecuencia de mues-


treo del sistema que es ∆t, la posición en un instante t podrá ser definida
como:

v(t) = v(t − 1) + a(t) ∗ ∆t (2.16)

x(t) = x(t − 1) + v(t) ∗ ∆t (2.17)

Sin embargo, se plantea un problema, la condición de validez de dichas


ecuaciones se da para un sistema que tiene como referencia unos ejes inercia-
les denominados ejes fijos. La aceleración medida por los acelerómetros del
sistema IMU, es una aceleración referida a los propios ejes del robot, que está
en movimiento, por lo que no son unos ejes inerciales, son unos ejes móviles,
de manera que no resulta factible obtener la posición directamente a partir
de los datos que arroja el acelerómetro. Por consiguiente, será necesario rotar
esta aceleración para que esté referida a los ejes fijos anteriormente citados.
Micro-Robot Trazador de Trayectorias 12

2.5. Obtención de la aceleración respecto a los ejes


fijos
El sistema más sencillo de rotar la aceleración para referenciarlos a los ejes
fijos, surgirá de obtener los ángulos de Euler directamente de los datos arro-
jados por el giroscopio, ya que como se ha explicado anteriormente, un gi-
roscopio nos da información acerca de la velocidad angular del sistema en el
eje donde esté midiendo [4].
Dado que tenemos un giroscopio que mide la velocidad angular de los
tres ejes, podemos representar los datos obtenidos de estos sensores de la
siguiente manera:

w = (wx , xy , xz ) (2.18)

La velocidad angular se define, como cualquier otra velocidad, como la


derivada con respecto al tiempo del ángulo girado por un sistema; es decir,
se puede definir la velocidad angular como:

d
wi = θi , ∀i(x, y, z) (2.19)
dt
Teniendo esto en cuenta, se puede obtener el ángulo girado de cualquiera
de los tres ejes integrando la expresión anterior, con lo que quedaría de la
siguiente manera:
Z
θ= w.dt (2.20)

Al igual que con la aceleración, debido a que es un sistema discreto, dado


el periodo de muestreo ∆t, tenemos la siguiente ecuación con la que aplicada
a cada uno de los tres ejes, obtendremos los ángulos Roll, Pitch y Yaw:

θ (t) = θ (t − 1) + w (t) ∗ ∆t (2.21)

Puesto que ya tenemos los tres ángulos de Euler (Roll, Pitch y Yaw), se
puede crear una matriz de rotación. Con ella es posible rotar la aceleración
dada por el acelerómetro, con lo que se obtiene la medida referida al sis-
tema de referecia a los ejes fijos (af ). Para ello es necesario multiplicar el
vector proporcionado por el acelerómetro (am ) por la matriz de rotación de
la siquiente manera:

af = Rfm (α, β, γ, ) am (2.22)

Este método ofrece una gran simplicidad debido a que es muy sencillo de
implemetar algoritmicamente en un computador. Sin embargo, los girosco-
pios inducen un error acumulativo importante debido a que son integrados
Micro-Robot Trazador de Trayectorias 13

sin un punto de referencia fijo. Así los datos obtenidos a partir de este mé-
todo son poco fiables por el error creciente tras cada integración, originando
desviaciones en la medida de los ángulos girados.

2.6. Errores
Los acelerómetros y giroscopios que son los encargados de tomar los datos
de aceleración y velocidad angular a la que está sometido el cuerpo a estudio
están sujetos a varios parámetros de rendimiento especificados por los fabri-
cantes de sensores para describir la precisión y el rendimiento que el usuario
puede esperar alcanzar [6].
Los errores en las mediciones realizadas por los giroscopios se propagan
en las estimaciones de la posición, velocidad y orientación a través de la inte-
gración de mediciones de velocidad angular inexactas. Debido a este hecho,
también habrá una inexactitud creciente al rotar el vector de la aceleración.
Asimismo, los errores en las mediciones del acelerómetro redundarán en la
propagación de errores a través de un cálculo inexacto de posición. De esta
manera, se puede concluir que los giroscopios y los acelerómetros experi-
mentan el mismo tipo de errores, caracterizados como errores sistemáticos o
aleatorios.
Los errores sistemáticos causan la deriva que se experimenta en un INS,
incluso cuando la unidad está parada. Los principales tipos de errores sis-
temáticos son el sesgo, error de factor de escala y el error de acoplamiento
cruzado. De los tres errores mencionados, es el sesgo (bias) el más grande de
los tres, por lo que consideraremos únicamente este error despreciando los
otros dos por ser muy pequeños en comparación del sesgo.
El sesgo es una desviación sistemática de la medida proporcionada por los
sensores con el tiempo. Todos los sensores presentan algún grado de sesgo. Es
un error independiente lo que significa que se produce independientemente
de la aceleración o la señal del giroscopio. Esto significa que incluso cuando
un INS se deja estacionario, su posición va a experimentar una acumulación
de error. El término sesgo se puede separar en dos componentes: sesgo de
estabilidad y sesgo de repetición. Se puede calcular el sesgo utilizando la
siguiente expresión:

Bias = BiasDeEstabilidad + BiasDeRepetición (2.23)


El sesgo de estabilidad es un componente dinámico que se acumula con
el tiempo medido en º/h. Mientras que el sesgo de repetición es un error
constante que varía cada vez que el sensor se enciende.
Para eliminar el sesgo de repetición no hay más que hacer una serie de
medidas cuando se enciende en sistema IMU y tomar un valor medio. Con
estas medidas se consigue la eliminación de los componentes de error aso-
ciados al encendido del sensor y, en el caso del giroscopio, la eliminación de
Micro-Robot Trazador de Trayectorias 14

efectos no deseados como son las aceraciones de coriolis.


Finalmente, el error de estabilidad puede ser eliminado mediante un tra-
tamiento estadístico de los datos combinado con un filtro de datos como
puede ser el filtro de Kalman.

2.7. Eliminación de errores


A continuación se analizan los dos métodos estudiados en este proyecto para
eliminar los errores acumulativos que, originados en la toma de datos, indu-
cen un error considerable en el sistema de posicionamiento. Dichos métodos
son:

El filtro de Kalman.

El filtrado para la orientación basado en cuaterniones.

2.7.1. Filtro de Kalman


El filtro de Kalman es un algoritmo recursivo de procesado digital de
datos óptimo [8]: es óptimo porque minimiza un criterio determinado e in-
corpora toda la información que se le suministra para determinar el filtrado;
es recursivo al no usar los datos previos, hecho que facilita su implementa-
ción en sistemas de procesado en tiempo real; por último, procesado digital
de datos, ya que es un filtro pensado para sistemas discretos.
El objetivo del filtro de Kalman es estimar los estados de una manera
óptima, de manera que se minimiza el índice del error cuadrático medio y
está definido por las siguientes ecuaciones:

xt = A.xt−1 + B.ut−1 + wt−1 (2.24)

yt = Hxt + vt (2.25)

siendo:

xt Estado.

yt Salida u observación del sistema.

wt representa el error del proceso.

vt representa el error de la medida.

A, B, H Matrices deterministas que definen la dinámica del sistema.


Micro-Robot Trazador de Trayectorias 15

La ecuación (2.25) se conoce como proceso de estimación y la (2.24) como


proceso de corrección.
Asimismo, si asumimos que los errores de proceso y de medida son inde-
pendientes entre ellas, que son ruido blanco y con distribución de probabili-
dad normal:

p(w) ∼
= N (0, Q) (2.26)

p(v) ∼
= N (0, R) (2.27)
siendo Q y R las matrices de covarianza de la perturbación del proceso y
de la perturbación de la medida respectivamente.
La matriz A se asume de una dimensión nxn y relaciona el estado en el
periodo previo t-1 con el estado actual t. La matriz H, de dimensiones mxn,
relaciona el estado con la medición yt . Estas matrices pueden cambiar con el
tiempo, pero también se asumen constantes por simplicidad.
Una vez definido el proceso a ser estimado, se deberá aplicar el algorit-
mo del filtro de Kalman. La primera etapa, de predicción, pronostica las
estimaciones del estado y la covarianza mediante:

ˆ +ˆBut−1
xˆ∗t = Ax∗t−1 (2.28)

Pt∗ = APt−1 AT + Q (2.29)


donde Q representa la covarianza de la perturbación aleatoria del proceso
que trata de estimar el estado.
En la segunda etapa, de corrección, encontramos la ganancia de Kalman
Kt , seleccionada de tal forma que minimice la covarianza del error de la nue-
va estimación del estado. Luego se mide realmente el proceso para obtener
yt y entonces generar una nueva estimación del estado x̂t , que incorpora la
nueva observación. El paso final es obtener una nueva estimación de la cova-
rianza del error. El algoritmo descrito para la segunda etapa es el siguiente:
−1
Kt = Pk∗ H T HPk∗ H T + R (2.30)

 
x̂t = xˆ∗t + Kt yt − H xˆ∗t (2.31)

Pt = (I − Kt H) Pt∗ (2.32)
Después de cada par de actualizaciones, tanto del tiempo como de la
medida, se repite el proceso tomando como punto de partida las nuevas
estimaciones del estado y de la covarianza del error. Esta naturaleza recursiva
es una de las características llamativas del filtro de Kalman.
Micro-Robot Trazador de Trayectorias 16

En la imagen 2.5 podemos observar un pequeño diagrama de las diferentes


fases del filtro de Kalman.

Figura 2.5: Fases del Filtro de Kalman

Para el cálculo de los ángulos usando el filtro de Kalman, debemos definir


como obtener los ángulos Roll y Pitch a partir de la aceleración [9]. Para ello
se debe analizar cómo actúa la aceleración en un cuerpo. Como sabemos, todo
cuerpo está sometido a una fuerza perpendicular a la tierra llamada gravedad.
El acelerómetro nos proporciona lecturas de las aceleraciones que actúan
sobre el eje que está midiendo, eso incluye la componente de la gravedad
sobre dicho eje. Con estas medidas de aceleración, podemos medir el ángulo
que forma el eje X con respecto a la tierra, con lo que obtendríamos el
ángulo girado por el eje Y, es decir el ángulo Pitch. Tal como se muestra en
la figura2.6 y aplicando relaciones trigonométricas entre ángulos, se puede
obtener la relación entre el ángulo girado (θ) y el ángulo pitch, que es la que
se muestra en la Ec. (2.33).
Micro-Robot Trazador de Trayectorias 17

Figura 2.6: Ángulo Pitch girado con respecto a la tierra

Π
β =θ+ (2.33)
2
Por otro lado, por trigonometría, sabemos que el ángulo θ se puede cal-
cular de la siguiente manera:
 
aceleración
aceleración = cos(θ) ∗ g ⇒ θ = arccos (2.34)
g
Si sobre la ecuación (2.33) aplicamos la ecuación (2.34) y tenemos en
cuenta que la aceleración se mide en los 3 ejes obtenemos que podemos
calcular el ángulo Pitch de la siguiente manera:
!
ay
pitch = −arctan p (2.35)
a2x + a2z

Aplicando el mismo razonamiento, obtenemos que para el cálculo del án-


gulo Roll, se aplica la siguiente ecuación:
 
ax
roll = −arctan  q  (2.36)
a2y + a2z

Con este sistema somos capaces de filtrar los datos y estimar el error acu-
mulado y eliminarlo. El problema surge cuando se intenta calcular el valor del
ángulo girado por el eje Z, el Yaw. Con este sistema es imposible calcularlo
a partir de las aceleraciones, por lo que se necesitaría otro dispositivo adi-
cional al acelerómetro y el giroscopio para poder filtrar esos datos y estimar
su error, como podría ser una brújula magnética.
Micro-Robot Trazador de Trayectorias 18

2.7.2. Sistema de filtro para la orientación basado en cuater-


niones
Este sistema está basado en el algoritmo desarrollado por Sebastian O.H.
Madgwick en su trabajo “Estimation of IMU and MARG orientation using
a gradient descent algorithm” [13].
Se trata de un algoritmo que usa cuaterniones para estimar la orienta-
ción del sistema de referencia móvil, basándose en la información extraída
de los sensores que componen la IMU (acelerómetro y giroscopio). Su prin-
cipal ventaja con respecto al filtro de Kalman es que es capaz de estimar
completamente la orientación, y no sólo dos de los tres ángulos de Euler co-
mo hemos visto en el apartado anterior. Además, dado que usa cuaterniones
como sistema de orientación, requiere de muchas menos regresiones por lo
que es más eficiente computacionalmente.
El giroscopio entrega información de la velocidad angular de los tres ejes
cartesianos que componen el sistema móvil. Se puede representar como un
cuaternión de la siguiente manera:

wm = [0wx wy wz ] (2.37)
La derivada del cuaternión con respecto al tiempo que describe el cambio
de los ejes fijos con respecto a los ejes móviles se puede calcular utilizando
la siguiente ecuación:

d f 1 f
q = qm,est,t−1 ⊗ wm (2.38)
dt m,w 2
Para calcular la orientación relativa de los ejes fijos con respecto a los
ejes móviles usando la velocidad angular se puede calcular mediante la in-
tegración de la derivada de este con respecto al tiempo (2.38). Si tenemos
definido el periodo de adquisición de datos ∆t y la posición estimada anterior
f
qm,est,t−1 podemos calcular el cuaternión que define la orientación de los ejes
fijos con respecto a los móviles con la siguiente ecuación:

f f d f
qm,w,t = qm,est,t−1 +q ∆t (2.39)
dt m,w
El acelerómetro nos entrega información de la aceleración de los tres ejes
cartesianos que componen el sistema móvil. Se puede representar como un
cuaternión de la siguiente manera:

am = [0ax ay az ] (2.40)
Por otro lado, es perfectamente válido asumir el campo gravitacional de
la tierra como paralelo al eje Z con respecto al sistema de referencia de la
tierra. Se puede representar de la siguiente manera:

gf = [0001] (2.41)
Micro-Robot Trazador de Trayectorias 19

Para representar un cuaternión, es necesario obtener una solución com-


pleta, para lograrla se puede plantear la formulación de un problema de
f
optimización donde una orientación del sensor, qm, , es la que se alinea con
la dirección de referencia predefinida del campo en el marco del sistema fijo,
df , con la dirección de medición del campo en el sistema de referencia móvil,
f
sm , usando la rotación de cuaterniones. Por lo tanto qm como solución a esta
ecuación:
 
f
mı́n f qm , df , sm (2.42)
f
qm R4

Donde:
 
f∗
f
f qm , df , sm = qm f
⊗ df ⊗ qm − sm (2.43)

f
qm = [q1 q2 q3 q4 ] (2.44)

df = [0dx dy dz ] = gf = [0001] (2.45)

sm = [0sx sy sz ] = am = [0ax ay az ] (2.46)

La ecuación se basa en una de las técnicas de optimización más simples de


implementación y cálculo conocida con el nombre de descenso de gradiente.
 
f
∇f qm,k , df , sm
f f
qm,k+1 == qm,k −µ   , k = 1, 2, 3... (2.47)
f
||∇f qm,k , df , sm ||

Esta ecuación implementa el método de descenso de gradiente para n


f
iteraciones basada en una estimación de la orientación del qm,n+1 a partir
f
de una estimación inicial qm,0 con un paso de tamaño µ. Para el cálculo del
gradiente de la solución definido por la función objetivo y su Jacobiano,
simplificados a los 3 vectores fila definido por las ecuaciones (2.49) y (2.50)
respectivamente, se obtiene
     
f f f
∇f qm,k , df , sm = J T qm,k , df f qm,k , df , sm (2.48)

2dx 12 − q32 − q42 + 2dy (q1 q4 + q2 q3) + 2dz (q2 q4 − q1 q3 )


  
 
f
f qm,k , df , sm =  2dx (q2 q3 − q1 q4 ) + 2dy 21 − q22 − q42 + 2dz (q1 q2 − q3 q4) 
2dx (q1 q3 + q2 q4 ) + 2dy (q3 q4 − q1 q2 ) + 2dz 21 − q22 − q32
(2.49)
Micro-Robot Trazador de Trayectorias 20

 
  2dy q4 − 2dz q3 2dy q3 + 2dz q4
f
J T qm,k , df =  −2dx q4 + 2dz q2 2dx q3 − 24dq2 + 2dz q1  (2.50)
2dx q3 − 2dy q2 2dx q41 − 2dy q1 − 4dz q2

 
−4dx q3 + 2dy q2 − 2dz q1 −4dx q4 + 2dy q1 + 2dz q2
 2dx q2 + 2dz q4 −2dx q1 − 4dy q4 + 2dz q3 
2dx q1 + 2dy q4 − 4dz q3 2dx q2 + 2dy q3

Si aplicamos las igualdades vistas en las ecuaciones (2.45) y (2.46) y sim-


plificamos, obtendremos:
 
  2 (q2 q4 − q1 q3 ) − ax
f
f qm,k , df , sm =  2 (q1 q2 − q3 q4 ) − ay  (2.51)
2 21 − q22 − q32 − az
 
  −2q3 2q4 −2q1 2q2
f
J T qm,k , df =  2q3 2q1 2q4 2q3  (2.52)
0 −4q2 −4q3 0
Con un valor óptimo de µde

d f
q
µt = α|| ||∆t, α > 1 (2.53)
dt m,w,t
En la figura 2.7 se presenta un esquema general del algoritmo y su imple-
mentación.

Figura 2.7: Diagrama para la obtención del cuaternión[13]

Aplicando este algoritmo, se obtiene el cuaternión que define en cada


momento la orientación del sistema. Con este cuaternión podemos rotar la
aceleración medida como
Micro-Robot Trazador de Trayectorias 21

f∗
f
af = qm ⊗ a m ⊗ qm (2.54)
Micro-Robot Trazador de Trayectorias 22
Capítulo 3

Micro-robótica móvil

En este capítulo se desarrollarán los conceptos teóricos básicos de la robótica,


particularmente de la robótica móvil así como conceptos fundamentales de
la integración de elementos mecánicos, eléctricos y electrónicos, denominada
mecatrónica.

3.1. Robótica móvil


Antes de analizar los robots móviles, es conveniente hacer una definición de
estos. Los robots móviles son un tipo de robots cuya principal característica
es que tienen la capacidad de moverse por ellos mismos. Pueden desplazarse
sobre la tierra, sobre y bajo el agua e incluso algunos tienen la capacidad
de volar. En contraste con los robots de base fija, como por ejemplo los ma-
nipuladores de las cadenas de montaje, que suelen estar programados para
tareas repetitivas, habitualmente con un número de sensores bajos, los ro-
bots móviles, suelen tener un radio de acción mucho más amplio, por lo que
su programación es menos estructurada, habitualmente orientada a reaccio-
nar ante estímulos externos detectados por sus sensores, que habitualmente
también son mucho más numerosos [14].
Los robots móviles operando en ambientes no estructurados deben en-
frentarse con incertidumbres en la posición e identificación de objetos. La
incertidumbre es tal que, trasladarse desde un punto A hasta un punto B es
una actividad complicada para un robot móvil debido a que no sabe que se
encontrará en el camino. En la figura 3.1 se puede observar como un robot
móvil puede realizar diferentes trayectorias para enfrentarse al cometido de
ir del punto A al punto B. En compensación por tener que enfrentarse con
más incertidumbres del entorno, no se espera que un robot móvil siga tra-
yectorias o alcance su destino final con el mismo nivel de precisión que se
espera de un manipulador industrial.
Los diferentes índices de operación (medidos por la incertidumbre y pre-
cisión requeridas) de los robots móviles en relación a los manipuladores in-

23
Micro-Robot Trazador de Trayectorias 24

Figura 3.1: Ejemplo de posibles trayectorias seguidas por un robot móvil[14]

dustriales se debe a la existencia de un conjunto diferente de prioridades en


su cometido.
El principal problema a resolver en un robot móvil es generar trayecto-
rias y guiar su movimiento a través de las mismas, en base a la información
proveniente del sistema de sensores externos (ultrasonidos, láser, visión), per-
mitiendo al vehículo desplazarse entre dos puntos cualesquiera del ambiente
de trabajo de manera segura y sin colisiones. Esto exige diseñar sistemas
de control de trayectorias (posición, dirección, velocidad) en diversos niveles
jerárquicos, de manera que el procesamiento de la información proveniente
de los sensores externos asegure la mayor autonomía posible.
Las principales características que diferencia a un robot móvil de cualquier
otro vehículo son:

Percepción: El robot móvil debe ser capaz de determinar la relación


con su entorno de trabajo, mediante el sistema sensorial a bordo. La
capacidad de percepción del robot móvil se traduce en la síntesis de
toda la información provista por los sensores, con el objeto de generar
mapas globales y locales del entorno de acuerdo a los diversos niveles
de control.

Razonamiento: El robot móvil debe ser capaz de decidir qué acciones


son requeridas en cada momento, según el estado del robot y el de su
entorno, para alcanzar su(s) objetivo(s). La capacidad de razonamiento
del robot móvil se traduce en la planificación de trayectorias globales
seguras y en la habilidad para modificarlas en presencia de obstáculos
inesperados (control local de trayectoria) para permitirle al robot, la
consecución de los objetivos encomendados.

Las estrategias de control empleadas son muy variadas. Las estrategias de


control van desde el control deliberativo hasta el control puramente reactivo.
Las estrategias basadas en el control deliberativo son aquellas que necesitan
Micro-Robot Trazador de Trayectorias 25

de un modelo muy preciso del entorno en el que se van a mover y el robot


calcula las trayectorias que debe seguir planificándola sobre ese modelo. Por
el contrario las estrategias de control reactivo son aquellas en las que la
trayectoria que sigue en robot no es para nada planificada, este modifica su
trayectoria actual en función de lo que va detectando con los sensores.
Ahora hablaremos de las diferentes opciones de morfología. Pero antes
de hablar de esto, es conveniente que definamos los entornos en los que va
a trabajar el robot. Se define el entorno de trabajo como las condiciones
ambientales, de tipo de suelo, pendientes del terreno, etc, donde va a desem-
peñar su función el robot móvil. Basándonos en esto, podemos agrupar los
entornos de trabajo como:
Entorno de trabajo interior. Son ambientes interiores aquellos que se
desarrollan dentro de construcciones o edificios. Se caracterizan por
estar delimitado por paredes, techos y puertas. La iluminación suele ser
principalmente artificial y los obstáculos suelen estar bien definidos y
delimitados. Son por ejemplo naves industriales, edificios, habitaciones.

Entorno de trabajo exterior. Son ambientes no estructurados. No suelen


estar delimitados por nada y los obstáculos no suelen estar definidos ni
delimitados. Además la iluminación es principalmente natural y está
sujeto a cambios ambientales.
A continuación se hace un repaso a las principales morfologías de robots que
existen. A pesar de que existen un número muy amplio de tipos de mor-
fologías de robots móviles, el objeto de este estudio se limita únicamente
a los robots móviles terrestres impulsados por ruedas. Los robots terrestres
impulsados por ruedas, como su propio nombre indica, son robots cuyo sis-
tema para desplazarse son mediante ruedas conectados a motores que giran
para dar al robot un movimiento de avance, retroceso o giro en función de
cómo giren estas ruedas o dependiendo de hacia donde estén orientadas. Los
principales tipos son:
Uniciclos. El robot tipo uniciclo es una estructura que consta de dos
ruedas fijas convencionales sobre el mismo eje, controladas de manera
independiente y una rueda loca o apoyo que le confiere estabilidad. El
sistema de tracción-dirección asociado al robot le permite independi-
zar las consignas de velocidad lineal y angular respectivamente. Las
ventajas que se derivan de la estructura mecánica y de la electróni-
ca de control hacen de esta configuración la preferida para robots de
laboratorio.

Triciclo. El robot tipo triciclo está formado por dos ruedas convencio-
nales fijas sobre un mismo eje y una rueda convencional centrada orien-
table que concentra las funciones de tracción-dirección. Al igual que en
el caso anterior, la estructura mecánica y la electrónica de control son
Micro-Robot Trazador de Trayectorias 26

sencillas, su tratamiento cinemático resulta de interés en áreas específi-


cas del control de robots móviles. En cuanto a aplicaciones industriales
esta configuración es apta para el transporte de cargas pesadas a baja
velocidad.

Cuatriciclo. Está formado por cuatro ruedas. Habitualmente las dos


ruedas delanteras son orientables y se usan para girar y las ruedas
posteriores son las ruedas tractoras encargadas del movimiento, aunque
existen otras configuraciones. Su estructura mecánica y electrónica de
control son más complejas, pero a cambio, presenta una mayor robustez
y fiabilidad, sobre todo en aplicaciones exteriores.

3.2. Mecatrónica para micro-robots


Podríamos definir la mecatrónica como la fusión de las partes mecánicas,
eléctricas y electrónicas que han de estar presentes en un sistema para que
este funcione de manera apropiada. Si lo aplicamos a la robótica, podríamos
decir que la mecatrónica es la forma en la que las distintas partes mecánicas,
eléctricas y electrónicas se interrelacionan entre sí para que el robot móvil
pueda desempeñar sus funciones.
Si analizamos cada parte por separado podemos agrupar los diferentes
sistemas del robot móvil en función de su pertenencia a cada unos de los tres
grupos: parte mecánica, parte eléctrica y parte electrónica.

3.2.1. Mecánica
En cuanto a la parte mecánica del robot móvil, hay que mencionar los
motores. Si bien es cierto que habitualmente los motores que se utilizan para
los robots móviles son motores eléctricos, es la parte mecánica la que nos
interesa [14, 16, 17].
Los motores en los robots móviles se utilizan principalmente para la loco-
moción. Suelen ser parte de los sistemas de tracción, pero también podemos
encontrar otros motores desempeñando otras funciones, como por ejemplo,
en los sistemas de dirección de cuatriciclos con ruedas delanteras de dirección
o en pinzas y manipuladores, si el robot cuenta con alguna de ellas.
Habitualmente los motores eléctricos se caracterizan por trabajar a unas
revoluciones muy altas, pero a costa de tener un par motor muy bajo. Es
siempre recomendable que el par motor de los sistemas de tracción de los
robots móviles sea lo más alto posible, ya que habitualmente las bases son
pesadas debido a todos los sistemas de control y principalmente a la fuente
de energía que debe ser portátil para que un robot se considere autónomo.
Antes de continuar con la parte mecánica, definiremos algunos de los tipos
de motores más utilizados para aplicaciones robóticas móviles.
Micro-Robot Trazador de Trayectorias 27

Motores de corriente continua. Los motores de corriente continua tam-


bién conocidos como motores DC trabajan o se alimentan de corriente
continua como la que suministran las pilas o las baterías. En robótica
se utilizan frecuentemente estos motores por la facilidad de controlar-
los y su fácil interconexión. Los motores cuentan con especificaciones
que deben ser tomadas en cuenta al momento de adquirirlos. Entre las
características más importantes están: voltaje de alimentación, la co-
rriente, el par y la velocidad. El Voltaje se refiere a la energía eléctrica
necesaria para mover el motor. Los motores pequeños operan general-
mente en un rango de 1.6 a 12 voltios. Es importante conocer el voltaje
de operación del motor si se aplica un voltaje muy bajo el motor no
se moverá pero si se aplica un voltaje superior al especificado se gene-
rará calentamientos en el motor que ocasionaran daños permanentes.
La Corriente indica la cantidad de corriente que requiere el motor de
la fuente de alimentación para su operación, la corriente que necesita
el motor depende de la carga que tenga aplicada. La Velocidad de giro
hace referencia al número de vueltas da el eje del motor en cierto inter-
valo de tiempo. Si se mide en rpm (revoluciones por minuto) se cuenta
el número de vueltas da el eje del motor en un minuto. La velocidad
de giro depende de la carga que tenga aplicada el motor. El par indica
la fuerza que puede ejercer un motor para levantar o mover un objeto
a una distancia determinada. Entre mayor sea el par del motor mayor
será la carga que pueda mover.

Motores paso a paso. Los motores paso a paso se pueden ver como
motores eléctricos sin escobillas. Es típico que todos los bobinados del
motor sean parte del estátor, y el rotor puede ser un imán permanente
o, en el caso de los motores de reluctancia variable, un cilindro sóli-
do con un mecanizado en forma de dientes (similar a un engranaje),
construido con un material magnéticamente "blando" (como el hierro
dulce). La conmutación se debe manejar de manera externa con un
controlador electrónico y, típicamente, los motores y sus controladores
se diseñan de manera que el motor se pueda mantener en una posición
fija y también para que se lo pueda hacer girar en un sentido y en
el otro. La mayoría de los motores paso a paso conocidos se pueden
hacer avanzar a frecuencias de audio, lo que les permite girar muy ve-
lozmente. Con un controlador apropiado, se los puede hacer arrancar
y detenerse en un instante en posiciones controladas. Un motor paso
a paso se define por estos parámetros básicos: voltaje, resistencia eléc-
trica y grados por paso. Los motores paso a paso tienen una tensión
eléctrica de trabajo. Este valor viene impreso en su carcasa o por lo
menos se especifica en su hoja de datos. Algunas veces puede ser nece-
sario aplicar un voltaje superior para lograr que un determinado motor
cumpla con el par motor deseado, pero esto producirá un calentamiento
Micro-Robot Trazador de Trayectorias 28

excesivo y/o acortará la vida útil del motor. Otra característica de un


motor paso a paso es la resistencia de los bobinados. Esta resistencia
determinará la corriente que consumirá el motor, y su valor afecta la
curva de par motor del motor y su velocidad máxima de operación.
Los grados por paso es el factor más importante al elegir un motor
paso a paso para un uso determinado. Este factor define la cantidad
de grados que rotará el eje para cada paso completo. Una operación de
medio-paso o semi-paso (half step) del motor duplicará la cantidad de
pasos por revolución al reducir la cantidad de grados por paso. Cuan-
do el valor de grados por paso no está indicado en el motor, es posible
contar a mano la cantidad de pasos por vuelta, haciendo girar el mo-
tor y sintiendo por el tacto cada "diente" magnético. Los grados por
paso se calculan dividiendo 360 (una vuelta completa) por la cantidad
de pasos que se contaron. Las cantidades más comunes de grados por
paso son: 0,72°, 1,8°, 3,6°, 7,5°, 15° y hasta 90°. A este valor de grados
por paso usualmente se le llama la resolución del motor. En el caso de
que un motor no indique los grados por paso en su carcasa, pero sí la
cantidad de pasos por revolución, al dividir 360 por ese valor se obtiene
la cantidad de grados por paso. Un motor de 200 pasos por vuelta, por
ejemplo, tendrá una resolución de 1,8° por paso.

Servomotores. Un servomotor es un dispositivo pequeño que tiene un


eje de rendimiento controlado. Este puede ser llevado a posiciones an-
gulares específicas al enviar una señal codificada. Con tal de que una
señal codificada exista en la línea de entrada, el servo mantendrá la
posición angular del engranaje. Cuando la señal codificada cambia, la
posición angular de los piñones cambia. En la práctica, se usan ser-
vomotores para posicionar superficies de control como el movimiento
de palancas, pequeños ascensores y timones. Ellos también se usan en
radio control, títeres, y por supuesto, en robots. Estos servomotores
tienen un amplificador, servo motor, piñonearía de reducción y un po-
tenciómetro de realimentación; todo incorporado en el mismo conjunto.
Los servomotores tienen tres cables de conexión eléctrica; Vcc, GND,
y entrada de control. Para controlar un servo, es necesario enviar una
serie de pulsos. El tiempo ON de pulso indica el ángulo al que debe
posicionarse; 1ms = 0 grados, 2.0ms = máx. grado (cerca de 120) y
algún valor entre ellos da un ángulo de salida proporcional. General-
mente se considera que en 1.5ms está el "centro." Entre límites de 1
~ 2ms son las recomendaciones de los fabricantes, pero normalmente
se puede usar un rango mayor de 1.5ms para obtener un ángulo ma-
yor e incluso de 2ms para un ángulo de rendimiento de 180 grados o
más. El factor limitante es el tope del potenciómetro y los límites me-
cánicos construidos en el servo. Por ello, para utilizarlo como sistema
de tracción es necesario modificarlos para quitar estas limitaciones y
Micro-Robot Trazador de Trayectorias 29

Figura 3.2: Ejemplo de posibles trayectorias seguidas por un robot móvil[18]

que puedan rotar libremente los 360 grados. En la figura 3.2 podemos
observar distintas posiciones del eje en función de la señal que recibe.

Es habitual que los motores de corriente continua o los motores paso a


paso se utilicen para los sistemas de tracción y los servomotores para sistemas
de dirección o pinzas y manipuladores del robot móvil debido a su mayor
precisión a la hora de posicionar el eje en una posición concreta. Pero esto
dependerá del tipo de aplicación a la que se quiera destinar el robot móvil.
Otro aspecto a considerar en el aspecto mecánico son las ruedas. Las
ruedas son las encargadas de transmitir la potencia de los motores al suelo y
con ello transmitir el movimiento, y en caso de tener ruedas directoras, estas
son las encargadas de cambiar la dirección.
Existe un número muy elevado de tipos de ruedas, tantas como aplicacio-
nes puede tener un robot móvil. Existen ruedas para interiores, más pequeñas
y estrechas, pero que ofrecen menor resistencia y son más ligeras. Existen
también ruedas para exteriores que suelen ser más robustas y anchas, pero
también más pesadas. Otro tipo de ruedas, que no son estrictamente ruedas,
son las orugas. Las orugas se utilizan principalmente para exteriores, y des-
tacan pos su enrome robustez y agarre a costa de un mayor peso. Se trata de,
habitualmente, dos ruedas, una conectada al motor y otra suelta conectada
a un eje independiente y se conectan a través de una correa de goma u otro
material que es la encargada de transmitir el movimiento.
También existen otras alternativas al uso de ruedas u orugas para aque-
llas que sean simplemente para dar estabilidad. Hablamos de los apoyos. Se
tratan de elementos o sistemas de bolas que se anclan al chasis de robot
móvil y que sirven como sustentación del sistema. Habitualmente son bolas
encapsuladas en una caja que se ancla al chasis. Cabe mencionar que este
sistema de apoyo se utiliza principalmente para habientes interiores.
Por último, para terminar con la parte mecánica de un robot móvil, men-
cionar el chasis. El chasis es el elemento en el que se anclan todos los ele-
Micro-Robot Trazador de Trayectorias 30

mentos del robot móvil. Habitualmente para pequeños robots está hecho de
plástico u otros materiales ligeros ya que deben soportar un peso reducido.
Para aquellas aplicaciones que necesiten más robustez o cargar con más peso,
los chasis suelen estar construidos en materiales más resistentes y pesados
como puede ser metal.

3.2.2. Eléctrica
En esta sección hablaremos de los componentes eléctricos que suelen for-
mar parte de los robots móviles. Evidentemente las resistencias, condensado-
res y bobinas estarían incluidas dentro de esta sección por ser componentes
eléctricos, pero dado que son elementos secundarios y que también se usan
en la parte electrónica, serán omitidos en esta parte.
Cuando hablamos de la parte eléctrica de un robot, se suele hacer refe-
rencia a la parte de alimentación y potencia que compone todo robot móvil.
Concretamente de las fuentes de alimentación [15, 16].
Habitualmente cuando nos referimos a robots móviles, hablamos de sis-
temas que se alimentan de energía eléctrica. Por ello es necesario dotar a
estos de algún tipo de sistema que proporcione esta energía de manera que
pueda ser transportada con propio robot móvil, para no depender de fuentes
externas.
Entre los sistemas más comunes para abastecer de energía eléctrica a estos
robots cabe destacar dos, las baterías y los paneles solares fotovoltaicos.
Los paneles solares fotovoltaicos, son sistemas que están formados por
celdas fotovoltaicas capaces de transformar la radiación solar en energía eléc-
trica. Estos sistemas tienen la ventaja de que la engría solar es abundante
y supone una fuente de energía ilimitada y gratuita. Pero tiene numerosos
inconvenientes. El más importante es que es una fuente de energía que sólo
está disponible un número de horas diarias, por lo que hay que añadir al sis-
tema algún tipo de acumulador de energía para las horas en las que no esté
disponible la luz solar. Esto hace que los sistemas solares sean muy pesados y
restringidos a aplicaciones donde los robots móviles se utilicen en ambientes
exteriores.
Por otro lado, tenemos las baterías que son el sistema más extendido
y generalizado para alimentar eléctricamente a los robots móviles. Existen
numeroso tipos de baterías en función del material con el que están hechas,
de si son o no recargables tamaños, etc.
Las baterías pueden caracterizarse a partir de sus parámetros fundamen-
tales, que son:

Voltaje. La tensión o potencial (en voltios) es el primer parámetro a


considerar, pues es el que suele determinar si el acumulador conviene
al uso al cual se le destina. Los valores típicos utilizado en baterías
usadas en robótica móvil son 1,5, 3,2, 5, 6, 9 y 12 voltios.
Micro-Robot Trazador de Trayectorias 31

Corriente. Es corriente máxima que puede dar una batería en condi-


ciones normales. Varían entre un par de cientos de miliamperios hasta
2 o 3 amperios.

Capacidad de carga. La capacidad de carga que puede almacenar el ele-


mento o capacidad del acumulador, se mide en amperios-hora (Ah) o
miliamperios-hora (mAh) y es junto al voltaje el parámetro más impor-
tante a considerar. Un miliamperio-hora es la corriente en miliamperios
que puede entregar la pila durante 1 hora. Entre una batería o pila de
1200 mAh y otra de 2200 mAh la segunda durará más tiempo por-
que tiene mayor cantidad de carga eléctrica almacenada. En cualquier
equipo eléctrico podemos colocar cualquier pila con cualquier mAh ya
que influye en la duración.

Rendimiento. El rendimiento es la relación porcentual entre la energía


eléctrica recibida en el proceso de carga y la que el acumulador entrega
durante la descarga. La batería de plomo-ácido tiene un rendimiento
de más del 90 %. Las baterías Ni-Cd un 83 %.

3.2.3. Electrónica
La electrónica de un robot móvil es todo aquel circuito electrónico o con-
junto de estos, que son necesarios para el correcto funcionamiento de un
robot. En el caso de los robots móviles, los principales sistemas electrónicos
son aquellos relacionados con la administración y conversión de energía, el
control y manejo de los motores y el sistema de control.
A continuación, se presenta un estudio de cada una de las diferentes partes
anteriormente citadas.

Administración y conversión de Energía


La tensión de una batería disminuye constantemente a medida que la
batería se descarga y disminuye de forma transitoria cuando la batería está
sujeta a fuertes demandas, como por ejemplo, en el momento de arranque de
un motor. Además, la base de la química de la batería determina las tensiones
mínima y máxima que puede suministrar. Por lo tanto, no podemos confiar en
la batería sola para la selección de una tensión particular o para el suministro
de ese voltaje de forma constante.
La salida en bruto de la batería se llama la fuente de alimentación no
regulada. Para ofrecer el máximo rendimiento, la energía no regulada se
aplica generalmente a motores y otras cargas pesadas.
La regulación de voltaje es una técnica para modificar la tensión no regu-
lada de la batería para crear una alimentación limpia y constante, de manera
que la corriente, potencia y otras variables sean más fáciles de calcular por-
que se puede confiar en una tensión constante en el tiempo. La salida del
Micro-Robot Trazador de Trayectorias 32

regulador de tensión se llama la fuente de alimentación regulada. Para evitar


errores de lógica o lecturas de los sensores no fiables, alimentación regulada
se aplica por lo general a los chips, sensores, y otros circuitos delicados.
Hay dos tipos básicos de reguladores: los lineales y conmutados. Dado que
los reguladores conmutados son más complejos y costosos nos centraremos
en los reguladores de tensión lineal.
Una fuente de alimentación de tensión regulada lineal requiere una tensión
no regulada que es más alta que la tensión regulada deseada. Por ejemplo,
una batería de 9 V puede suministrar energía a un regulador de voltaje lineal
que emite 5 V. Sin embargo, dos pilas AA, por ejemplo, que ofrecen una
tensión total de 3 V no pueden suministrar suficiente voltaje a un regulador
lineal que tiene la intención de salida de 5 V. Un regulador de voltaje lineal
descarta la potencia extra en forma de calor. Por lo tanto, un regulador de
5 V de recibir 9 V disipa 4 V en forma de calor.
Los reguladores de voltaje lineal son relativamente baratos, requieren po-
cos componentes adicionales, y genera poco ruido eléctrico. Los circuitos
completos son fáciles de construir y ocupan muy poco espacio.
Los reguladores de voltaje lineal son muy populares para los siguientes
usos:

Circuitos rápidos, pequeños y sencillos.

Productos de alto volumen y bajo costo, como la electrónica de consu-


mo baratos.

Los circuitos que consumen cantidades pequeñas de corriente.

Tensión regulada que es sólo ligeramente inferior a la tensión no regu-


lada.

Existen dos tipos de reguladores lineales. Los reguladores lineales fijos y los
reguladores lineales ajustables. Ambos son reguladores de tensión lineales,
pero la diferencia radica en que los fijos, proporcionan una tensión fija y
constante determinada por el modelo del regulador. En el caso de los regu-
ladores variables, la tensión es también fija y constante, pero esta no viene
determinada por el modelo, se determina a partir de la tensión que se le
aplica a la patilla de control del regulador. En la figura 3.3 se pueden obser-
var un ejemplo de dos reguladores, un LM1117, que es un regulador lineal
ajustable y de un 7805, que es un regulador lineal fijo [16, 17].

Control y manejo de los motores


Habitualmente los circuitos electrónicos destinados al control, como pue-
den ser microcontroladores o chips para el manejo de datos, utilizan tensiones
bajas y corrientes bajas (del orden de miliamperios), además de ser delicados
Micro-Robot Trazador de Trayectorias 33

Figura 3.3: Detalle de un regulador lineal ajustable (izquierda) y de un re-


gulador lineal fijo (derecha)[16]

y sensibles a picos de corriente y tensión, que de producirse, podrían origi-


nar daños permanentes en dichos componentes. Por el contrario, los motores
eléctricos son máquinas eléctricas robustas, que consumen grandes cantida-
des de corriente y soportan tensiones más elevadas. Dado que habitualmente
es el controlador el que decide cuando mover o en qué dirección ha de mo-
verse el motor, es necesario separar eléctricamente ambos sistemas, ya que
si se trabaja con las tensiones y corrientes de controlador, no sería suficien-
te para mover el motor y si usásemos las tensiones y corrientes del motor,
dañaríamos el sistema de control [16].
Para ello, se utiliza un tipo de circuitos electrónicos que se denominan dri-
vers de motor. Estos drivers de motor se utilizan para trasladar las comandas
del sistema de control al motor, aislando eléctricamente ambas partes para
que puedan operar con tensiones y corrientes diferentes. Los drivers de motor
presentan las siguientes características:

Los drivers de motor proporcionan corrientes más altas a los motores.

Los drivers de motor a menudo proporcionan voltajes más altos para


el motor

Los drivers de motor aíslan los circuitos lógicos de los picos y ruidos
eléctricos generados por los motores durante el uso de los mismos.

Los drivers de motor por lo general suministran los motores con una
potencia no regulados directamente desde el baterías, en lugar de po-
tencia regulada desde el circuito de fuente de alimentación.

Los drivers de motor, habitualmente son capaces de invertir la polaridad de


la tensión eléctrica que llega al motor con el fin de poder controlar el sentido
de giro del motor en función de las directrices enviadas por el sistema de
control.
Micro-Robot Trazador de Trayectorias 34

A continuación se hace un pequeño resumen de diferentes sistemas o mo-


delos de driver de motor.

Interruptor con transistor. Es el sistema más simple para controlar


un motor. Se trata de un transistor bipolar o MOSFET en función
de cómo queramos que sea la entrada, o bien regulada en corriente o
tensión respectivamente. Para simplificar, utilizaremos como ejemplo
un transistor bipolar. El transistor funciona como un interruptor de la
corriente eléctrica que pasa por el motor. La señal de control del motor
se conecta a la base del transistor y la salida positiva de la alimentación
se conecta directamente a una de las conexiones del motor. La otra
conexión se conecta al colector del transistor, y por último se conecta
el emisor del transistor a tierra o salida negativa de la batería. Con esto
conseguimos que sólo circule tensión por el motor, cuando la señal de
control active la base del transistor. Este es el método más simple para
controlar un motor, pero por contra no es posible regular la dirección
de giro del motor, por lo que es sólo gira en una única dirección.

Puente en H. Se trata de un sistema más complejo para el manejo de


motores. Existen numerosos tipos de puentes en H, principalmente de-
bido a los elementos que se usan para su construcción. Estos puentes
varían en función de si están hechos con transistores, diodos o cualquier
otro sistema para el manejo de corrientes y tensiones, pero todos tie-
nen el mismo principio de funcionamiento. Se trata de conectar cuatro
transistores, por ejemplo, de manera que el motor se conecte a la ali-
mentación positiva a través de dos transistores y a tierra por otros dos
transistores. En función de que transistores estén conectados, el motor
girará en un sentido o en otro. En la figura 3.4 se puede observar como
en función de cómo se aplique una señal de control a cada transistor,
en motor girará en un sentido o en otro.

Otro punto importante del control del motor es la regulación de la veloci-


dad del motor. En el caso de los servomotores, la velocidad de giro del mismo
viene determinada por el propio servomotor y en el caso de los motores paso
a paso, la velocidad de giro dependerá de la frecuencia con la que se vayan
excitando los diferentes nodos del motor.
En el caso de los motores de continua, la velocidad de giro del motor
dependerá de la tensión con la que se alimente el mismo. Por ejemplo, un
motor presenta una velocidad de giro determinada a la tensión nominal,
pero si esta tensión se ver reducida, también lo hará la velocidad de giro
del mismo. Por lo tanto, para regular la velocidad de giro de un motor de
corriente continua, hay que regular la tensión de entrada.
El método más simple para regular la tensión es mediante el uso de un
transistor, a cuya entrada se le aplica una señal PWM. Una señal PWM, es
una señal de frecuencia fija que toma dos valores, un valor alto y un valor
Micro-Robot Trazador de Trayectorias 35

Figura 3.4: Detalle de funcionamiento de un puente en H[16]

bajo, por ejemplo, 5 voltios y 0. El tiempo en que se alternan el nivel alto y


el nivel bajo, determina el ciclo de trabajo. Por ejemplo, un ciclo de trabajo
de 50 % indica que la cantidad de tiempo que la señal está en nivel alto es
la mitad del periodo de la señal y la otra mitad esta a nivel bajo.
Si esto se aplica a un transistor, hace que en un periodo de la señal PWM
pase corriente únicamente durante el tiempo en el que la señal esté en nivel
alto, es decir, de forma controlada. Y aprovechando que el motor de corriente
continua se puede modelar como una resistencia y una bobina, a su paso por
este motor, la señal equivalente sería una señal cuyo valor de tensión será un
valor del porcentaje del ciclo de trabajo que le damos a la señal PWM. Por lo
tanto, con el ejemplo anterior de ciclo de trabajo de 50 %, si alimentamos a
un motor con, por ejemplo, 5 voltios, la tensión efectiva a la que se alimenta
al motor es de 2,5 voltios.
Con este sistema, conseguimos regular la tensión del motor, y por tanto
la velocidad de giro, variando únicamente el valor del ciclo de trabajo de una
señal PWM conectada a un transistor conectado a la entrada del motor.

Control
Cuando nos referimos al control de un robot móvil, nos referimos al siste-
ma electrónico encargado de tomar las decisiones de movimiento o actuación
del robot móvil. Este sistema se encargará de recopilar datos de los sensores
de los que disponga el robot, procesar esa información y por último tomar
la decisión de qué hacer.
El sistema de control varía en complejidad de forma paralela a la comple-
jidad de las tareas a las que esté destinado el robot. Por ejemplo, un sistema
de control de un robot móvil que debe seguir una línea negra sobre un fondo
blanco, puede ser dos transistores cuya base esté conectada a unos sensores
de infrarrojos que darán una señal en función de si esta en fondo blanco o
negro, y el colector y emisor de los transistores se conectan a la batería y
Micro-Robot Trazador de Trayectorias 36

motor respectivamente, y dejarán pasar o no corriente en función del valor


de la base, haciendo que el robot se mueva a lo largo de toda la pista negra.
Este mismo sistema se podría implementar con un microcontrolador.
Habitualmente, los sistemas electrónicos sencillos se suelen utilizar para
aplicaciones de poca transcendencia. Pero para aplicaciones más complejas
que habitualmente requieren cálculos o la adquisición de un gran volumen de
datos, se hace necesario el uso de sistemas electrónicos lógicos más complejos,
como son los microcontroladores.
Dado que no es objeto de este estudio analizar en profundidad que es un
microcontrolador, se da una pequeña definición de que es un microcontro-
lador. Un microcontrolador (abreviado μC, UC o MCU) es un circuito inte-
grado programable, capaz de ejecutar las órdenes grabadas en su memoria.
Está compuesto de varios bloques funcionales, los cuales cumplen una ta-
rea específica. Un microcontrolador incluye en su interior las tres principales
unidades funcionales de una computadora: unidad central de procesamiento,
memoria y periféricos de entrada/salida.
En aplicaciones de robótica móvil, los microcontroladores son la forma
más extendida de control. Esto se debe principalemente a que, al ser sistemas
reprogramables, es posible que un mismo hardware realice diferentes tareas,
únicamente cambiando la programación de la controladora.

3.3. Percepción en micro-robots


La percepción de un robot móvil es todo aquel sistema o sensor con el que
se dota a dicho robot, para que este sea capaz de obtener información del
entorno por donde se desarrolla la actividad del mismo. Esta parte debería
integrarse dentro la mecatrónica de un robot móvil, concretamente dentro
de la electrónica, pero dado a la importancia y densidad de esta parte, se ha
analizado de forma independiente.
Con el objetivo de orientar es estudio de la percepción de robots móviles,
este estudio se centrará en el estudio de los sensores y sistemas de percepción
de entorno y del propio movimiento del robot.

3.3.1. Sensores y sistemas de percepción de entorno


Como se ha definido previamente, el entorno es todo aquello que rodea al
robot móvil, es decir, todo aquello con lo que el robot puede interactuar o
debe sortear para cumplir con su cometido. Para ello el robot ha de poder
obtener información de este entorno con el fin de procesarla y actuar en
consecuencia.
Por ello definiremos los sensores y sistemas de percepción de entorno, co-
mo aquellos sensores o conjunto de los mismos que proporcionen información
acerca de todos los elementos que formen el entorno. Estos elementos van
Micro-Robot Trazador de Trayectorias 37

desde obstáculos que pueda encontrar el robot móvil, pistas trazadas en el


suelo, paredes que limiten el espacio, elementos meteorológicos, etc.
Estos sensores se pueden dividir en diferentes grandes grupos: sensores
de presencia o colisión, sensores de distancia, sensores de detección de pista,
sensores de condiciones ambientales.

Sensores de presencia o colisión


Durante el funcionamiento del robot móvil, este puede necesitar moverse
a través de lugares donde haya obstáculos que deba salvar sin colisionar con
ellos, bien sea para no dañar el propio robot o carga que transporte o bien
porque esos obstáculos no es conveniente que se toquen. Para ello el robot
ha de ser capaz de ubicarlos de alguna manera.
Existen numerosas tecnologías que se pueden utilizar para este fin, lá-
ser, ultrasonidos, luz infrarroja, interruptores de contacto, etc, pero en este
estudio nos centremos en los sistemas más comúnmente usados.
Entre dichos sistemas se encuentran:

Bumper. El bumper es un interruptor mecánico unido a algún tipo de


extensión que sobresale un poco de la planta del chasis del robot móvil.
Cuando el robot se acerca a algún obstáculo, antes de que colisione con
el chasis, choca con el extensor del interruptor haciendo que el robot
detecte un cambio en el interruptor y por tanto que está muy cerca
de un obstáculo y por tanto reaccionar ante el mismo en función de
su programación. Se pueden utilizar la cantidad deseada de sensores,
ya que simplemente teniendo en cuenta que no se entorpezcan entre sí,
son señales independientes que detectan zonas independientes. Existen
infinidad de formas y modelos de este tipo de modelos en función de las
necesidades que se precisen. Entre sus principales cualidades destacan
su robustez y su sencillez, ya que no necesita de acondicionamiento
de señal. Entre sus desventajas, mencionar que son sensores de último
recurso, es decir, al necesitar contacto físico para activarse, eso quieres
decir que ya existe una colisión con el obstáculo. En la figura 3.5 se
puede observar un pequeño esquema de cómo funcionan este tipo de
sensores.

Sensores de presencia infrarrojos. Se trata de un sensor compuesto por


un emisor de luz infrarroja, habitualmente un led infrarrojo y un recep-
tor de infrarrojos. El emisor está continuamente emitiendo luz infra-
rroja. Cuando aparece un obstáculo delante, esta luz infrarroja emitida
por el emisor, rebota sobre el cuerpo y es detectada por el receptor,
generando una señal eléctrica que es interpretada por el controlador.
Con ello detecta la presencia de un obstáculo. Es preciso señalar, que
es un sistema todo o nada, o detecta o no, y son sistemas en los que se
Micro-Robot Trazador de Trayectorias 38

Figura 3.5: Esquema de funcionamiento de un sensor tipo bumper[19]

puede calibrar la distancia de detección aumentado o disminuyendo el


umbral de detección del receptor (a mayor distancia del objeto, menor
intensidad de la luz rebotada). Este sistema es muy recomendable ya
que evita el contacto directo con el obstáculo, pero tiene el problema de
que al utilizar luz infrarroja, esta puede verse afectada por condiciones
climatológicas (luz ambiente, lluvia, etc) y dar errores en las medidas.

Sensores de distancia

Existen ocasiones en las que un robot móvil, necesita cononcer, ademas


de la presencia de un obstáculo, a qué distancia se encuentra. Ahí entran en
juego los sensores de distancia.
Los sensores de distancia son aquellos sensores o conjunto de sensores que
devuelven información de la distancia de los objetos que rodean al robot.
Esta información puede ser mediante una señal analógica cuya información
se mide en el nivel de tensión de dicha señal o puede ser mediante una señal
digital, que codifique de alguna manera la información de la distancia.
Existen numerosas tecnologías en función de cuál sea la aplicación a la
que se destinen estos sensores. Entre ellas destacan:

Sensores de distancia láser. Son los sistemas más precisos. Se trata


de un emisor láser que envía un haz láser y de un receptor láser que
detecta el rebote de dicho haz láser. Para medir la distancia a la que se
encuentra el objeto, se calcula el tiempo que va desde que se envía la
señal hasta que es recibida. Conociendo la velocidad a la que se mueve
el haz de luz láser, es fácil calcular la distancia a la que se produjo
el rebote, y con ello la distancia al objeto. Son sensores muy precisos,
pero también muy costosos.
Micro-Robot Trazador de Trayectorias 39

Sensores de ultrasonidos. Se trata de un sistema que utiliza el mismo


fundamente que los sensores de distancia láser, es decir se basa en el
cálculo de la distancia conociendo el tiempo que tarda entre la emisión
de un estimulo y su recepción. Pero en este caso se utilizan ultrasonidos
en lugar de luz láser. Un altavoz emite una serie de ondas ultrasónicas
y un micrófono las detecta. Sabiendo la velocidad del sonido en el
aire, agua o medio a medir, si se mide la diferencia de tiempo entre la
emisión y la recepción de dichas ondas ultrasónicas, se puede calcular
la distancia a la que rebotaron esas ondas acústicas. Son sistemas muy
fiables y precisos aunque no tanto como los sistemas láser, pero tienen
la ventaja con respecto a estos, de que son más baratos.

Sensores de distancia infrarrojos. Su funcionamiento es similar a los


sensores de presencia infrarrojos. Al igual que en el caso de estos úl-
timos, los sensores de distancia infrarrojos detectan la intensidad de
un haz luminoso de luz infrarroja reflejada en el objeto a determi-
nar su distancia. La detección de la distancia se basa en la detección
de la intensidad de luz infrarroja rebotada. Esta intensidad depende
fundamentalmente de la distancia a la que se produce el rebote y del
material sobre el que rebota. Por ello es necesario hace un calibración a
diferentes distancias y con diferentes materiales. Una vez tomadas las
medidas de referencia se hace interpolación lineal con esos datos y se
obtiene una ecuación que relaciona distancia con intensidad detectada,
y eso es lo que se utiliza para la medida de la distancia.

Sensores de detección de pista

Este tipo de sensores son aquellos que se usan para la detección de una
pista marcada en el suelo mediante el uso de un color (habitualmente negro)
sobre un fondo de color distinto (habitualmente blanco) con índices de re-
flexión de luz diferentes. Así cuando está sobre la pista tendremos un valor
diferente del sensor que cuando está sobre el fondo.
Los más usados y extendidos son los de luz infrarroja. Su funcionamien-
to es el mismo que los sensores de presencia infrarrojos. Pero en este caso
la distancia es fija, habitualmente anclados en el chasis de robot móvil. La
diferencia se produce debido al diferente índice de refracción de la superficie
donde rebote el haz de luz infrarroja (el blanco refleja toda la luz y el negro
absorbe toda la luz). Mediante la imposición de un umbral que se calcula
experimentalmente para cada modelo de sensor, es capaz de detectar la pre-
sencia de pista o fondo. Son sensores muy baratos y sencillos de utilizar, pero
se ven afectados por numerosos elementos ambientales: la luz solar, manchas
en la pista o fondo, etc. Estos elementos pueden hacer que se obtengan me-
didas falsas. En la figura 3.6 se puede observar cómo funciona la detección
de la superficie.
Micro-Robot Trazador de Trayectorias 40

Figura 3.6: Funcionamiento de un sensor de infrarrojos[20]

Sensores de condiciones ambientales

Este conjunto de sensores abarca todos los tipos de sensores que dan
información de cualquier tipo de condición meteorológica o de cambios de
luz o de cualquier otra variable que pueda afectar al funcionamiento del robot
móvil.
Al igual que cualquier otro sensor, existen infinidad de tipos de sensores
en función de que se quiera medir y del principio físico o tecnología que se
usen para medirlos.
A continuación de hace un listado de sensores y algunas tecnologías.

Sensores de temperatura. Son sensores que se utilizan para determinar


la temperatura del ambiente que rodea al robot móvil. Se puede utilizar
para ello termopares, termoresistencias, etc.

Sensores de luz ambiental. Proporcionan información de la cantidad


de luz que hay en el ambiente de trabajo del robot móvil. Se pueden
utilizar LDR, células fotoeléctricas, etc.

Sensores de humedad. Detectan la humedad del ambiente.

También se pueden utilizar cámaras de vídeo o fotografía o sistemas de visión


artificial para hacer mediciones del entorno de que rodea al robot móvil.
Son técnicas muy avanzadas que ofrecen resultados muy buenos y precisos,
pero a costa de un mayor coste asociado a los sensores y un mayor coste
computacional asociado al tratamiento de esa información.
Micro-Robot Trazador de Trayectorias 41

3.3.2. Sensores y sistemas de percepción del propio movi-


miento del robot
Cuando nos referimos a percepción del propio movimiento del robot, nos
referimos a las magnitudes de definen el movimiento de propio robot móvil
como son la aceleración, la velocidad, la posición, la orientación o cualquier
otra magnitud relacionada con el movimiento del mismo. Por lo tanto, se
pueden definir los sensores y sistemas de percepción del propio movimiento
del robot como aquellos sensores que se encargan de medir las magnitudes
relacionadas con el movimiento del robot.
Existen numerosos tipos de sensores para medir estas magnitudes. Entre
los más comunes para el uso de la robótica móvil destacan:

Encoders. Los encoders se colocan en el los ejes de las ruedas y sirven


para medir cuantas vueltas da el eje del motor. También hay encoders
que permiten medir además del número de vueltas, el ángulo girado.
Se trata de discos dentados que se introducen en el eje de giro del mo-
tor. Sobre este disco se monta un par emisor-receptor infrarrojo que va
detectando el paso de cada diente. Contando el número de dientes que
han pasado, se puede obtener cuantas vueltas ha dado el motor. Con el
diámetro de la rueda el número de vueltas que ha dado, se puede cal-
cular la distancia recorrida por esa rueda. Si además se mide el tiempo
que tarda en dar una vuelta entera, se puede calcular la velocidad de
giro, y con el diámetro de la rueda, calcular la velocidad lineal del ro-
bot. Se trata de un sistema muy sencillo de implementar y de montar,
además de ser un sistema barato. Pero presenta un inconveniente, al
medir únicamente el giro de las ruedas no es capaz de detectar si, por
ejemplo, esta patina o se desliza, por lo que daría lecturas falsas de la
velocidad y la distancia recorrida.

Acelerómetro. Se trata de un instrumento capaz de medir aceleración


en uno, dos o tres ejes. Existen varios tipos de acelerómetros, depen-
diendo de su fabricación y funcionamiento. La mayoría de éstos son
capacitivos y utilizan tecnología MEMS, es decir, integrados y de ta-
maño reducido, y calculan la aceleración mediante el voltaje obtenido
entre dos placas una de las cuales varía su posición dependiendo del
movimiento del acelerómetro. Se caracterizan por ser muy precisos en
situaciones estables y tener un gran error en situaciones vibratorias o
movimientos muy inestables. Se caracterizan por medir la aceleración
en múltiplos de la gravedad terrestre o G’s.

Giroscopios. Dispositivo que mide la orientación, basándose en los prin-


cipios de la conservación del momento angular. Las unidades de medi-
da inercial utilizan giróscopos MEMS, es decir, integrados y de tamaño
reducido. La salida de dicho sensor es un voltaje, cuya variación nos
Micro-Robot Trazador de Trayectorias 42

indica, en grados por segundo, la velocidad angular sufrida por el sen-


sor. Se caracterizan por tener un error constante y lineal llamado sesgo
el cual debemos tener en cuenta.

GPS. El GPS o sistema de posicionamiento global, calcula la posición


del robot móvil en función de la posición relativa de la antena GPS
integrada en el robot móvil en función de la posición de una serie de
satélites que se encuentran en orbitas geoestacionarias alrededor del
planeta.

Brújula o compás magnético. Se trata de un sistema que mide el campo


magnético terrestre que circula de norte a sur y determina en qué
posición está orientado el eje medido en función de dicha medida.

Es importante destacar que los acelerómetro y giroscopios se suelen agrupar


en sistemas denominados IMU’s o unidades de medida inercial que son in-
tegrados que incluyen al menos un giroscopio que mide la velocidad angular
en uno dos o tres ejes ortogonales entre si y un acelerómetro que mide la
aceleración en uno dos o tres ejes ortogonales entre sí. Estas IMU’s pueden
incorporar también un compás o brújula magnética o un receptor GPS. Ade-
más estas IMU’s incorporan toda la circuitería necesaria para el tratamiento
y envío de los datos obtenidos por los sensores.

3.4. Resumen de los sistemas presentes en un robot


móvil
A modo de resumen, se listarán a continuación todos los sistemas y compo-
nentes básicos que han de estar presentes en un robot móvil, centrándonos
en los robots móviles terrestres con ruedas, para que este pueda cumplir su
cometido:

Motores y ruedas u oruga para el movimiento.

Batería o sistema de alimentación portátil.

Regulador de tensión para obtener una tensión de alimentación cons-


tante y fiable.

Driver de motor, para poder controlar la velocidad y sentido de giro


de los motores de forma segura sin que afecte al resto de los sistemas.

Sistema de control para gobernar el funcionamiento del robot de forma


autónoma.

Sistema de sensorización. Se trata de todos los sistemas integrados en


un robot con el fin de obtener información del entorno del mismo.
Micro-Robot Trazador de Trayectorias 43

Por supuesto estas son características genéricas y comunes a todos los robots
móviles, y en función de la aplicación a la que se destine, habrá que tener en
cuenta más o menos aspectos.
Micro-Robot Trazador de Trayectorias 44
Capítulo 4

Desarrollo de elementos de un
robot móvil trazador

Como se expuso en la introducción, el objetivo de esta tesis de máster, es


el de desarrollar todos los elementos que deben estar presentes en un robot
móvil que posea la capacidad de reconstruir la trayectoria que ha seguido.
A partir de todo lo visto anteriormente en los capítulos anteriores, donde
se exponía la teoría recopilada para su construcción, se han desarrollado
diferentes elementos tanto de hardware como de software.
En este capítulo se expondrán todos los pasos que deben ser dados para
el desarrollo de un micro-robot móvil, que desde este punto pasaremos a
llamar μTrace (micro-trace) por lo que a partir de ahora se hará referencia
al micro-robot por dicho nombre.
Para el total desarrollo de un μTrace se contemplan los siguientes elemen-
tos:
Diseño del hardware y la creación de un prototipo para la realización
de pruebas.

Diseño del software para la reconstrucción de las trayectorias.

Pruebas realizadas sobre el prototipo y análisis de los resultados.


Por lo tanto a lo largo de este capítulo se irá describiendo todo el proceso
llevado a cabo para el diseño, desarrollo y testeo de los diferentes subsistemas
que deben estar presentes a la hora de crear un μTrace.

4.1. Diseño de μTrace


En esta sección se explicará el proceso llevado a cabo para construir el robot
y su programación. Esto incluye desde el proceso de planteamiento de las
necesidades del sistema hasta la programación del sistema para que cumpla
con los objetivos que se le marquen.

45
Micro-Robot Trazador de Trayectorias 46

4.1.1. Análisis de las necesidades


El objetivo es construir un robot móvil que ha de poder reconstruir tra-
yectorias. Pero estas trayectorias deben ser, una vez estimadas, compradas
con un modelo base. Por ello, para simplificar esta comparación, se ha deci-
dido que el mejor sistema es que el μTrace sea un robot seguidor de líneas.
En otras palabras, todo el desarrollo aquí sugerido para la creación de un
μTrace está orientado a que este ha de ser capaz de seguir una línea trazada
en color negro sobre un fondo blanco. Dado que el fondo ha de ser blan-
co (condición necesaria para maximizar el contraste entre colores y lograr
una mejor navegación siguiendo la línea), se ha decidido que el diseño este
focalizado en robots para su uso en interiores.
Puesto que es un seguidor de líneas, el robot no ha de tener que planifi-
car ninguna trayectoria, por lo que la estrategia de control será puramente
reactiva, es decir, el robot irá decidiendo la trayectoria que sigue en función
de la información que reciba de los sensores. Por razones de simplificar el
modelo cinemático, se ha decidido que la configuración sea uniciclo, que sim-
plifica enormemente la programación y es una configuración perfecta para
interiores.
Se pretende que los μTrace sean micro-robots, es decir, que sus dimensio-
nes sean lo más reducidas posibles para aligerar el peso y que su consumo de
energía sea el menor posible. Dado que el tamaño ha de ser el menor posi-
ble, se utilizarán motores de corriente continua, que son los más pequeños y
ligeros unidos a una caja reductora para aumentar su par motor. En cuanto
a la alimentación se propone usar cuatro baterías de 1.5 V del tipo AAA que
proporcionarán una tensión de 6 V. Puesto que los μTrace ha de poder mover
las ruedas en ambas direcciones así como modificar su velocidad según sea
necesario, se sugiere que la solución óptima es la usar un puente en H para
controlar los motores.
Se debe dotar al μTrace de los sensores necesarios para poder reconstruir
la trayectoria seguida mientras sigue las líneas marcadas en el suelo, por
ello se le incorporará una IMU con un acelerómetro y un giroscopio. Se
prescindirá de magnetómetro y de antena GPS por ser un robot destinado
a interiores. Esta información ha de poder transmitirse de forma fácil y
eficiente a cualquier computador con el fin de que este pueda reconstruir las
trayectorias seguidas por el μTrace. Por ello se ha decidido dotar al sistema
con dos métodos de transmisión de datos. Por un lado se dotará al μTrace
con un sistema de almacenamiento masivo de datos portátil. Y por otro lado
se dotará al μTrace con un puerto de comunicaciones compatible con un
computador, que sea capaz de intercambiar información y datos con este.
Por último, y con el fin de mejorar la comunicación con el usuario, se pro-
pone que posea una interfaz de comunicación visual, por lo que debe contar
con leds de indicación y con una pantalla LCD que muestre información re-
levante del proceso llevado a cabo por el μTrace. También el μTrace ha de ser
Micro-Robot Trazador de Trayectorias 47

completamente reprogramable y ha de ser capaz de almacenar información


en un medio extraíble para luego poder ser portada a una computadora para
la reconstrucción de la trayectoria.
A continuación de hace un listado de todos los requisitos sugeridos para
la creación del robot móvil.
El sistema ha de ser un robot seguidor de líneas para ambientes interio-
res cuyo modelo cinemático sea el de un uniciclo, es decir, dos ruedas
motrices independientes con un apoyo o rueda loca para proporcionar
estabilidad.

Las dimensiones del robot han de ser lo más reducidas posibles, para
que cuando el robot se mueva, desplace el menor peso posible y por
tanto que su consumo sea lo más reducido posible.

Debe estar dotado de sensores para la navegación, por lo que ha de


contar con un sistema de sensorización capaz de seguir líneas trazadas
por el suelo.

La alimentación del robot se hará mediante algún sistema portátil que


proporcione una tensión en continua de forma autónoma.

El control del robot debe ser un sistema de fácil reprogramación con


un planificador de trayectorias puramente reactivo.

El robot μTrace debe estar dotado con un sistema de sensorización


para poder medir las magnitudes esenciales para la reconstrucción de
trayectorias y poder almacenar esta información en un dispositivo de
almacenamiento masivo portátil.

4.1.2. Sistemas comerciales


Antes de iniciar la propuesta de diseño del μTrace se ha hecho una búsque-
da de otros modelos comerciales que pudiesen cubrir todas las necesidades
antes descritas.
Se ha hecho una búsqueda de posibles soluciones comerciales. Estas so-
luciones comerciales abarcan dos grandes grupos. Por un lado se ha hecho
una búsqueda de una base robótica genérica y por otra, se han estudiado
diferentes robots comerciales completamente funcionales. A continuación de
hace una descripción de los sistemas encontrados.
Bases genéricas. No son robots propiamente dichos. Se trata de un
conjunto de elementos que sirven de sustento para la realización de un
robot. Constan habitualmente de los elementos mecánicos y eléctricos
que forman parte de un robot, pero no incluyen ni la electrónica ni los
sistemas de control necesarios para la creación del mismo. Es por ello
que se puede considerar como medio robot. Existen numerosos tipos
Micro-Robot Trazador de Trayectorias 48

Figura 4.1: Bases robóticas de dos y cuatro ruedas respectivamente

de bases genéricas, en función de las configuración de las rudas (ver


imagen 4.1) el tipo de material utilizado para su construcción, el tipo
de motores que utilizan, etc. A continuación se hace un pequeño listado
con las características comunes a todas las bases genéricas comerciales:

• Chasis de plástico o metacrilato duro que sirve de soporte al con-


junto mecánico y que es el emplazamiento donde se monta la
circuitería necesaria para el control de robot.
• Motores de corriente continúa con reductora incorporada.
• En caso de ser un robot con configuración inestables (por ejemplo,
con dos ruedas), las bases genéricas incorporan un apoyo o rueda
loca para dar estabilidad al conjunto.
• Soporte para baterías portátiles. Habitualmente los kits de mon-
taje de estas bases genéricas incorporan elementos para la sujeción
y conexión de baterías de alimentación.

Robots comerciales. Cuando nos referimos a robots comerciales, nos


referimos a robots comercializados por empresas u organizaciones que
incorporan todos los elementos necesarios para el funcionamiento de un
robot. Habitualmente se trata de un robot ya montado y funcional, cu-
ya ampliación de características es muy limitada. Para este proyecto se
han buscado plataformas robóticas que cubrieran todas las necesidades
planteadas anteriormente. Los robots comerciales cuyas características
cubren el mayor número de características son:

• Robot Pololu 3pi. Se trata de un robot diseñado y comerciali-


zado por la empresa Pololu. Se trata de un microrobot seguidor
Micro-Robot Trazador de Trayectorias 49

de líneas, pequeño y ligero. Su estructura de control se basa en


un Atmel ATmega328 a 20 MHz y cuenta con dos micro motores
de corriente continua con reductora integrada. En la imagen 4.2
se puede apreciar como es este robot. En cuanto al sistema de
sensorización, cuenta con cinco sensores infrarrojos para el segui-
miento de líneas y se alimenta con cuatro baterías portátiles tipo
AAA. La ampliación de características es muy limitada y orien-
tada a pequeños cambios es su hardware básico. Este micro-robot
lleva integrado un pequeño LCD que muestra información del ro-
bot. El robot es completamente reprogramable contando con un
puerto JTAG para la reprogramación del microcontrolador. No
va equipado con ningún tipo de almacenamiento masivo de datos
ni puerto de comunicaciones ni con ningún tipo de sensorización
para la medida de datos inerciales.
• Robot Mark III. Es un pequeño robot diseñado y comercializado
por Junun. Se trata de un microrobot de sumo que puede ser adap-
tado para el seguimiento de líneas. Se basa en un PIC16F877 y el
sistema de motorización cuenta con dos servomotores adaptados
para que den vueltas completas de 360 grados. Se puede observar
cómo es este micro-robot en la imagen 4.2. Va equipado con dos
sensores infrarrojos de distancia y tres sensores infrarrojos para
el seguimiento de líneas. Dispone dos sistemas de alimentación,
por un lado, para los motores posee una fuente de alimentación
basado en cuatro baterías tipo AA, y el sistema de control se
alimenta con una batería de 9 voltios. Su ampliación es limita-
da y se limita a la adición de nuevos sensores infrarrojos. Posee
un sistema de comunicación serie para la comunicación con un
computador y para el reprogramado de su sistema de control. No
cuenta con ningún tipo de sistema de almacenamiento masivo ni
sensorización para toma de datos inerciales.

Tras analizar estas soluciones comerciales, se ha decidió diseñar comple-


tamente desde cero un robot seguidor de líneas que incorpore todos los ele-
mentos necesarios y detallados en el capítulo anterior.

4.1.3. Selección de componentes


Antes de pasar a describir una posible solución para el hardware de un
μTrace y de su posterior programación, se hará un resumen de las decisiones
técnicas que deben ser adoptadas para el diseño del μTrace. Es decir, es en
este capítulo se mostrarán que tipo de componentes y sistemas han sido es-
cogidos para crear un prototipo para un posterior análisis. Estas soluciones,
Micro-Robot Trazador de Trayectorias 50

Figura 4.2: Robot Pololu 3pi (izquierda) y robot Mark III (derecha)

tras ser estudiadas y analizadas, pueden formar parte formar parte en el futu-
ro desarrollo de un μTrace. Para esta descripción se agruparan los diferentes
elementos seleccionados según su pertenencia a los siguientes subsistemas:
mecánica, alimentación, control de motores, almacenamiento, comunicación,
sensorización y sistema de control.

Mecánica

Tal como se ha visto en el capítulo dedicado al estudio teórico de robots


móviles, el μTrace ha de contar con un sistema mecánico que asegure su
movimiento. Este sistema de tracción debería constar de un motor de co-
rriente continua con un sistema de reducción. Para el prototipo de pruebas
se han seleccionado unos “microgear motors” de Pololu, con una relación de
transformación 30:1 (es decir, el eje de transmisión da una vuelta por cada
30 vueltas que da el motor), que proporciona una velocidad de giro de 430
rpm alimentándolo con 6 voltios. Este motor se anclará al chasis del motor
con unas abrazaderas especialmente diseñadas para este tipo de motores. Las
ruedas escogidas para este diseño son ruedas de 32x7 mm cuya entrada para
el eje del motor está adaptada a los motores anteriormente citados.
Puesto que la configuración del μTrace es de uniciclo, con dos ruedas
tractoras, este es altamente inestable y tiende a pivotar sobre estas dos rue-
das. Para evitar este balanceo no deseado, se dotará de un apoyo esférico de
plástico colocado en la parte posterior del robot.
El chasis del sistema de pruebas será el propio circuito integrado donde se
estarán montados los diferentes sistemas que componen el μTrace. Su forma
será circular con hendiduras para los motores y ruedas, al estilo del robot
comercial “Pololu 3pi”.
Micro-Robot Trazador de Trayectorias 51

Alimentación

En cuanto a la alimentación de este sistema para testeo, se ha elegido


usar cuatro baterías portátiles tipo AAA que proporcionan una tensión de
6 Voltios y una carga total aproximada de 1200 mAh. Estas baterías se
montarán sobre un portapilas que se anclarán al chasis.
El sistema mecánico se alimenta directamente de la fuente, que le pro-
porcionará los 6 voltios efectivos que generan las baterías. Para el resto de
los sistemas, se ha decidido reducir esta tensión a 3.3 Voltios para reducir el
consumo de todo el sistema. Por ello se ha decidido incluir un convertidor de
corriente continua/continua LM1117 que reduce la tensión de las baterías a
los deseados 3.3 voltios.

Control de motores

Para controlar los motores de corriente continua se sugiere el uso de un


puente en H. El puente en H escogido es un L293DD, que puede controlar dos
motores con un mismo integrado. Además, este puente en H puede controlar
la velocidad de giro de cada uno de los motores mediante una señal PWM en
la entrada “enable” correspondiente a cada motor. También puede controlar
el sentido de giro de cada uno de los motores de forma independiente, me-
diante las señales de giro de cada motor que son independientes para cada
motor. Debido a las características mencionadas, este sistema de puente en
H asegura un control total del movimiento de sistema con un uso mínimo de
señales del sistema de control.

Almacenamiento

El sistema μTrace debe recoger datos procedentes de los sensores y al-


macenarlos para su posterior análisis. Para esto se puede usar, la propia
memoria del micro-controlador, pero dado que la cantidad de datos que se
recogerán va a ser muy elevada, es probable que la memoria se desborde al
poco de empezar a tomar datos. Por ello, se hace necesario utilizar otros
métodos de almacenado externo.
Como método de almacenamiento externo se propone el uso de tarjetas
de memoria flash, concretamente una tarjeta micro SD o Transflash. Son
tarjetas compactas de gran capacidad, que van desde los 16 MB hasta los
2 GB en el caso de las micro SD y de los 4 GB hasta los 64 GB en el caso
de los micro SDHC. Ambos tipos de tarjetas se manejan de la misma forma,
por lo que es indistinto el uso de unas u otras. Estas tarjetas se conectan al
micro-controlador a través del bus SPI y se alimenta a una tensión de 3.3
V. Para la conexión de estas tarjetas, y con el fin de mantenerlas fijas, se
ha sugiere utilizar un socket para tarjetas micro SD que además integren un
switch que nos indica si hay o no tarjeta metida en el socket.
Micro-Robot Trazador de Trayectorias 52

Comunicación

Cuando nos referimos a comunicación nos referiremos tanto a la comunica-


ción del robot con la computadora como a la comunicación con el usuario, es
decir el interfaz humano. Con respecto a la comunicación con la computadora
se aconseja utilizar un sistema basado en USB. Este sistema de comunicación
está muy extendido y es compatible con la gran mayoría de los computado-
res. Por ello es una solución óptima para la comunicación. Para la interfaz
con el computador es preferible utilizar una configuración de puerto serie
virtual dado que los drivers son más sencillos y fáciles de implementar, y
es posible implementar un terminal con lo que se simplifica la comunicación
con el μTrace. Para que esta comunicación sea efectiva, es preferible que el
sistema de control posea la capacidad para el uso de puerto USB puesto que
se reduce considerablemente el consumo al tener que utilizar menos hardwa-
re. También se debe se dotar al sistema con conector USB como por ejemplo
un miniUSB tipo B.
En cuanto a la interfaz humana, se pueden utilizar dos sistemas diferentes.
Por un lado, una comunicación luminosa mediante leds. El μTrace debería
contar al menos con dos leds, uno que indique si el sistema está alimentado,
es decir, si se ha conectado el interruptor de corriente y el otro led que
indique si el μTrace está en modo reposo (el led estará apagado) o si está
realizando alguna tarea (el led estará encendido). Otro modo de transmitir
información al usuario es mediante una pantalla LCD numérica. La mejor
opción para este apartado seria utilizar una pantalla cuyas entradas están
multiplexadas puesto que se reduce el número de terminales necesarios para
su conexión. También es recomendable que el controlador del sistema lleve
integrado un dispositivo de control directo del LCD, lo que supone no tener
que poner un controlador externo, con el consiguiente ahorro energético.
Esta multiplexación consiste en que el LCD dispone de ocho entradas para
controlar cada uno de los segmentos del LCD numérico, y además cuenta con
cuatro señales que sirven para indicar cuál de los cuatro dígitos se pretende
utilizar. Mediante este sistema, el LCD puede controlar 32 segmentos (cuatro
dígitos) usando únicamente doce señales. En el caso de que se quisiese que
utilizar un LCD numérico ordinario de 40 entradas, habría que hacer la
demultiplexión de forma externa al LCD. Para ello, es necesario utilizar un
demultiplexor de una entrada y cuatro salidas para cada una de las ocho
señales de segmentos que salen del microcontrolador y utilizar como señales
de control las 4 señales de COM que se usan para indicar que dígito se
pretende utilizar. Estas señales, además han de pasar por una puerta OR,
para tener siempre una señal COM activada, ya que los LCD ordinarios
necesitan esta entrada que actúa como señal común de todos los segmentos
del LCD.
El μTrace deberá contar también con un sistema para que el usuario pueda
dar instrucciones sencillas al robot, como arrancar y parar o cambiar de
Micro-Robot Trazador de Trayectorias 53

modo de trabajo sin necesidad de conectarse a una computadora. Para esta


transmisión de órdenes, el robot debe disponer al menos de tres pulsadores.
Un pulsador de reset, que se encarga de reiniciar el microcontrolador y dos
pulsadores más. Uno de ellos será el encargado de dar la orden de arranque
y paro del sistema y el otro pulsador, se encarga de cambiar la tarea que el
μTrace ha de realizar.

Sensorización
El μTrace recogerá dos tipos de datos: por una lado los datos relacionados
con la navegación o seguimiento de líneas y por otro los datos inerciales
necesarios para el posicionamiento y el trazado de las trayectorias seguidas.

Para la navegación o seguimiento de líneas es conveniente usar dos


tipos de sensores. Un tipo para evitar colisiones y otro para rastrear
las líneas en el suelo.

• Como sensor de contacto se puede usar un bumper mecánico tipo


switch instalado en frontal del μTrace y conectado al sistema de
control del mismo para indicar si ha habido algún tipo de contacto.
• Para el rastreo de las líneas del suelo la opción más extendida
es la de usar unos sensores infrarrojos. Para el prototipo de prue-
bas, se utilizarán sensores infrarrojos modelo QRE1113, que es un
sensor de montaje superficial, lo que asegura un pequeño peso y
volumen. Se utilizarán 5 sensores y estos se montarán en la parte
inferior delantera del μTrace. La información de estos sensores se-
rá una señal analógica de tensión por cada sensor, por lo que será
necesario un convertidor analógico/digital integrado en el sistema
de control.

Para la toma de datos inerciales es conveniente usar dos tipos de senso-


res. Un giroscopio y un acelerómetro de tres ejes cada uno, que propor-
cionan información de la velocidad de giro y aceleración de cada uno
de los ejes cartesianos del robot. Para hacer las pruebas se ha decidido
que se usará una IMU que contenga ambos elementos. Se ubicará en el
centro geométrico de prototipo, que dado que es un robot circular con
configuración de uniciclo, coincide con el centro de rotación. Para este
fin se ha elegido el MPU6050 de Invensense. Entre las características
más destacables de esta IMU se encuentran las siguientes:

• Giroscopio de 3 ejes.
• Acelerómetro de 3 ejes.
• Sensibilidad de giroscopio ajustable con una escala de: ±250,
±500, ±1000, ±2000 [ grados
s ].
Micro-Robot Trazador de Trayectorias 54

• Sensibilidad de acelerómetro ajustable con una escala de: ±2g,


±4g, ±8g, ±16g.

• Comunicación I2C con el microcontrolador, además de poseer un


puerto I2C extra para obtener datos de otro sensor y almacenarlo
en su memoria interna y enviarlos al microcontrolador si este se
lo solicita.

• Tensión de entrada 3.3 Voltios.

Sistema de Control

Como se ha explicado a lo largo del capítulo dedicado a la electrónica de


los robots, los sistemas de control son los encargados de coordinar y dirigir
todas las operaciones que realiza el robot. La opción más extendida para esta
tarea es utilizar un microcontrolador debido a que su uso es relativamente
sencillo. Esta elección se debe a la gran facilidad para la programación y su
posterior reprogramación, lo que lo hace perfecto como sistema de control
para el μTrace. Este microcontrolador debe poder gestionar la mayor parte
de las tareas de control necesarias que debe realizar el robot trazador. Por
lo tanto debe cumplir con los siguientes requisitos mínimos fundamentales:

Puerto USB 2.0 integrado para la comunicación.

Manejo de LCD integrado para poder crear una interfaz con el usuario.

Convertidor analógico-digital (ADC).

Salida PWM.

Bus de comunicación serie (SPI o I2 C).

Se ha decidido que, puesto que se disponía de material para programar mi-


crocontroladores y compiladores para microcontroladores de la marca “Mi-
crochip”, se eligiese como microcontrolador para el sistema de control de la
placa de pruebas uno de esta marca. Los candidatos que cumplían estos re-
quisitos son los que se pueden ver en la siguiente tabla, donde se pueden ver
cuáles son las características diferenciales de cada modelo.
Micro-Robot Trazador de Trayectorias 55

Modelo Memoria de Programa I/O Pines Segmentos LCD Empaquetado


PIC18F65J94 32 KBytes 53 256 64 QFN/64 TQFP
PIC18F85J94 32 KBytes 69 368 80 TQFP
PIC18F66J94 64 KBytes 53 256 64 QFN/64 TQFP
PIC18F95J94 32 KBytes 87 480 100 TQFP
PIC18F67J94 128 KBytes 53 256 64 QFN/64 TQFP
PIC18F86J94 64 KBytes 69 368 80 TQFP
PIC18F96J94 64 KBytes 87 480 100 TQFP
PIC18F87J94 128 KBytes 69 368 80 TQFP
PIC18F97J94 128 KBytes 87 480 100 TQFP

Cuadro 4.1: Tabla comparativa de los micro-controladores candidatos

Dado que todos estos microcontroladores cumplen con las especificaciones


iniciales, se han tenido en cuenta los aspectos de memoria y de tamaño
(número de pines). Como a la hora de elegir el microcontrolador no se sabe
cuál es el tamaño del programa que debe realizar, se ha optado por los que
tenían una memoria de programa más grande y dado que no se necesitan
demasiados periféricos, se optó por un microcontrolador con no demasiados
pines, independientemente de cuál fuese su empaquetado.
De entre todos los candidatos, el microcontrolador que tiene la memoria
de programa más grande con menor tamaño es el PIC18F67J94, que se ajusta
perfectamente a las necesidades del μTrace.

4.1.4. Diseño del hardware


Para poder validar todas las soluciones propuestas a lo largo de esta tesis
es necesario crear una plataforma de pruebas. Para este prototipo se han
usado todos los elementos anteriormente citados. El μTrace utiliza como
chasis la propia placa donde van integrados los diferentes componentes. Por
ello, es importante que el diseño de esta placa se adapte a los tamaños y
medidas de los motores y ruedas que se han de usar y tener en cuenta también
los apoyos y los portapilas con el fin de que todo encaje, y que estos elementos
no interfieran en el normal funcionamiento del mismo.
Para el diseño de esta PCB en primer lugar se ha hecho un primer diagra-
ma de bloques donde aparecen reflejadas las diferentes partes que componen
el sistema. Como se puede apreciar el en ANEXO A, en este diagrama no
tiene en cuenta pines ni conexiones, solamente el tipo de conexión entre los
distintos componentes.
Una vez decidido el diseño, se ha realizado un diseño esquemático del
circuito. Para dicha tarea se ha utilizado el programa “Eagle” (Easily Ap-
plicable Graphical Layout Editor) de la compañía CadSoft Computer. En
Micro-Robot Trazador de Trayectorias 56

este esquemático, se ponen de relieve todas las conexiones de las diferentes


partes, tanto las conexiones con el microcontrolador, las conexiones entre
otros componentes y la alimentación de cada uno de ellos. Este diseño está
disponible en el ANEXO A.
Tras el esquemático, se importó este archivo y se generó el archivo de la
placa. En este archivo de la placa es la representación de cómo será la placa
una vez construida, con los componentes ya posicionados y con las medidas
reales ya implementadas. Como se ha explicado anteriormente, la sección
del circuito es circular y lleva ya integrados todos los sensores, tanto los de
la navegación como los del trazado. También se integran los huecos para
los motores, ruedas, apoyo, baterías, es decir para todos los elementos que
intervienen en el movimiento del robot. Al igual que los archivos anteriores,
se puede observar una imagen del mismo en el ANEXO A.
Por último, como etapa final del proceso de creación de la placa, se im-
portó el archivo de la placa a un formato que pueda ser entendido por una
microfresadora. Esta microfresadora es la encargada de cortar, realizar las
pistas y agujerear las vías de la placa. El formato necesario para esta opera-
cion es un formato Gerber.
El resultado de este diseño es la fabricación de un prototipo del que se
hablará en capítulos posteriores y con el que se harán más adelante las prue-
bas de los elementos propuestos y de las herramientas de software que se han
diseñado.

4.1.5. Diseño del firmware


El firmware es un bloque de instrucciones de máquina para propósitos es-
pecíficos, grabado en una memoria, normalmente de lectura/escritura (ROM,
EEPROM, flash, etc.), que establece la lógica de más bajo nivel que contro-
la los circuitos electrónicos de un dispositivo de cualquier tipo. En otras
palabras, se trata de la programación básica del microcontrolador.
El microcontrolador es el encargado de gobernar todo el sistema de la
plataforma móvil, de dar las ordenes a las ruedas para realizar la navegación
y a los sensores para recojan datos que, posteriormente, este trata, analiza
y almacena en función de cómo sea su programación.
Para realizar los ensayos de cada componente por separado y su posterior
prueba en conjunto, se ha diseñado un firmware específico. Para el desarrollo
de éste, se ha utilizado el compilador “CCS C Compiler” versión 5.10.19.15
de CCS Inc. Para una mejor prueba de los elementos que componen el pro-
totipo, se ha diseñado un código específico para cada uno de ellos. Entre los
diferentes firmwares propuestos destacan:

Test de los sensores IR y entradas y salidas. Este código se usa para


testear el correcto funcionamiento de los sensores infrarrojos y compro-
bar que el sistema es capaz de utilizar estos sensores para discriminar
Micro-Robot Trazador de Trayectorias 57

el blanco y el negro de la pista donde se realizarán las pruebas del pro-


totipo. Su funcionamiento es muy sencillo. Se habilita el convertidor
analógico-digital del microcontrolador a donde se conectan los sensores
y se realizan lecturas periódicas para comprobar los niveles de tensión
que ofrecen los mismos. Adicionalmente, este firmware utiliza los pul-
sadores integrados en el prototipo para parar o arrancar la rutina, con
el fin de testear las entradas del sistema. Otra rutina integrada, es la
de la activación de un led para confirmar las salidas del sistema.

Firmware de navegación. Este firmware está diseñado específicamente


para ver el comportamiento dinámico del robot móvil. Básicamente se
trata de un código diseñado para convertir el prototipo en un sistema
de rastreo de líneas. Es una rutina que se encarga de seguir las líneas
trazadas en el suelo. Para ello toma datos de los sensores infrarrojos
situados en la parte inferior delantera del μTrace a través del ADC.
Posteriormente analiza estos datos y los pondera, generando un valor
de estado en función del los datos obtenidos por los sensores. A conti-
nuación, mediante un control PID, compara este estado con un valor
de comanda previamente introducido por el usuario. El sistema genera
una señal para los motores con la que pretende corregir la trayectoria
para así corregir la diferencia entre la comanda y el estado. Por último,
esta rutina se encarga de decidir la velocidad y dirección con la que
han de moverse las ruedas para ajustarse a la línea trazada en el suelo.
Esta rutina se dejará de ejecutar cuando el usuario pulse el botón de
Star/Stop o se produzca una colisión, que se detectará mediante una
interrupción externa provocada por el bumper instalado en el frontal
del μTrace.

Escritura y lectura sobre SD. Se trata de un código que pretende validar


el uso de una tarjeta SD como método de almacenamiento permanente
de datos. Tal como se ha explicado anteriormente, este tipo de disposi-
tivos de almacenamiento utiliza un protocolo SPI para la comunicación.
Por ello, en este firmware se habilita el puerto SPI. Básicamente, esta
rutina consiste, en primer lugar, en establecer la comunicación con la
tarjeta SD. Una vez lograda dicha comunicación, se procede a hacer
diferentes pruebas. La primera de ellas, consiste en crear un archivo
(en este caso un archivo .csv) y posteriormente acceder al recién crea-
do archivo y escribir sobre él. Una vez creado dicho fichero, se procede
a hacer una lectura del mismo.

Comunicación y toma de datos del MPU6050. Esta rutina trata de ver


si es posible establecer una conexión con la IMU, realizar cambios en
su funcionamiento mediante la reconfiguración del dispositivo y por
último hacer una toma de datos. Para ello, como se ha visto ante-
riormente, es necesario habilitar el puerto de comunicaciones I2 C. La
Micro-Robot Trazador de Trayectorias 58

rutina consiste básicamente en establecer la conexión con el MPU6050


y esperar la respuesta de este. Una vez validada la comunicación, se
dispone a enviar los parámetros de funcionamiento elegidos y una vez
realizada esta tarea, se le pide al dispositivo que nos de los paráme-
tros de funcionamiento y compararlos con los que se le han enviado.
Tras la verificación de la comunicación y la correcta configuración del
mismo, se procede a tomar muestras del valor de los acelerómetros y
giroscopios, con el fin de comprobar su correcto funcionamiento.

Test de funcionamiento del USB. Se trata del código que se utilizó para
hacer los test de la comunicación entre el prototipo de pruebas con la
computadora. El firmware está diseñado para habilitar la conectividad
del microcontrolador con el ordenador mediante un protocolo de puer-
to serie virtual, lo que hace que el PC interprete dicha comunicación
como si de un puerto serie se tratase y así establecer una comunica-
ción mediante consola, en la que el usuario puede enviar comandos y
peticiones al sistema y este responderle en función de lo que se le haya
enviado.

Prueba en conjunto de los diferentes elementos. Se trata de la prueba


final en la que se pretende someter a una prueba a la intercomunica-
ción entre todos los sistemas presentes en el prototipo. Se trata de la
sincronización de todas las partes del sistema. Este firmware se puede
dividir en las siguientes subrutinas:

• Main. Es el conjunto de instrucciones que el prototipo ejecuta


cuando se conecta la alimentación. Esto incluye el salto a las fun-
ciones de inicialización. También es la parte de código que decide
si el robot está conectado o no a un puerto USB y por tanto
el encargado de lanzar las rutinas de conexión USB. Si no está
conectado al puerto USB, se queda esperando a que el usuario
seleccione que parte de la programación debe ejecutar el μTrace.
Una vez que esté seleccionada, el usuario debe dar la orden de
arrancar, con lo que inicia la tarea elegida. Cuando acabe con su
cometido, el sistema volverá al punto inicial y volverá a comprobar
si hay o no conexión USB o si el usuario ha seleccionado otro mo-
do de funcionamiento y si ha decidido arrancar la programación
o no.
• Inicialización. Son una serie de instrucciones que realiza el μTrace
después de arrancar. Estas rutinas consisten en arrancar cada uno
de los periféricos del sistema. En primer lugar configura los puer-
tos del microcontrolador en función de si van a ser entradas o
salidas. Posteriormente configura los pines del microcontrolador
en función de si usan algún periférico concreto como pueden ser
Micro-Robot Trazador de Trayectorias 59

entradas para el ADC, puerto de comunicación USB, SPI o I2 C,


configura los Timers que usará el μTrace así como sus interrupcio-
nes. Una vez configurados todos los periféricos del microcontro-
lador, se conecta con los otros periféricos, la tarjeta de memoria
micro SD y la IMU MPU6050, comprueba si hay algún tipo de
error en la comunicación con estos y las configura en caso de que
sea necesario.
• Navegación. Se trata de la programación básica del robot segui-
dor de líneas. Es una rutina que se encarga de seguir las líneas
trazadas en el suelo. Para ello toma datos de los sensores infrarro-
jos situados en la parte inferior delantera del μTrace a través del
ADC. Posteriormente analiza estos datos y los pondera, generan-
do un valor de estado en función del los datos obtenidos por los
sensores. A continuación, mediante un control PID, compara este
estado con un valor de comanda previamente introducido por el
usuario bien por programación o bien porque se lo ha dado a tra-
vés del puerto de comunicaciones del μTrace, y genera una salida
para los motores y corregir la diferencia entre la comanda y el es-
tado. Por último, esta rutina se encarga de decidir la velocidad y
dirección con la que han de moverse las ruedas para ajustarse a la
línea trazada en el suelo. Esta rutina se dejará de ejecutar cuando
el usuario pulse el botón de Star/Stop o se produzca una colisión,
que se detectará mediante una interrupción externa provocada
por el bumper instalado en el frontal del μTrace.
• Tracking. Es la parte del programa que se encarga de tomar datos
de la IMU y posteriormente almacenarlos en la tarjeta de memo-
ria micro SD. Esta tarea comienza con la creación dentro de la
memoria externa micro SD de dos archivos de texto. El primero
de ellos es un archivo denominado log.csv, que contiene la infor-
mación con la que se toman los datos, frecuencia de muestreo y
sensibilidad de los sensores. Luego crea otro fichero, datos.csv, que
será el fichero donde se almacenará la información de los sensores.
A continuación, el sistema procede a la habilitación de las inte-
rrupciones del Timer 1 y cargando en este timer una frecuencia de
muestreo de 100 Hz (se toma una muestra del la IMU cada 0.01
segundos). Posteriormente se entra en bucle del que sólo se sale
cuando aparece una interrupción por el Timer 1. Cuando apare-
ce esta interrupción, se borra dicha interrupción y se envía una
petición de lectura a la IMU por el puerto I2 C. Cuando recibe la
información de la IMU, el sistema almacena los datos de forma
temporal en variables y vuelve a activar el Timer 1. Luego de
esto, el sistema abre el archivo datos.csv situado en la memoria
externa, donde se enviarán los datos y estos serán almacenados
Micro-Robot Trazador de Trayectorias 60

separados por comas y precedidos de un número que indica en qué


posición han sido tomados los datos. Una vez almacenados estos
datos, se pondrá a la espera de una nueva interrupción del Timer
1. El sistema tomará datos indefinidamente hasta que el usuario
presione el botón Star/Stop.
• Navegación y traking. Está formada por código que realiza el se-
guimiento de las líneas trazadas en el suelo y toma datos del
movimiento de dicho recorrido. No es más que una fusión de las
rutinas de navegación y tracking. El funcionamiento es similar a
los dos anteriores. El sistema crea los archivos log.csv y el archivo
datos.csv en la memoria interna y habilita las interrupciones del
Timer 1 y externas y posteriormente habilita y carga el Timer 1. A
continuación inicia la rutina de navegación. Cuando aparece una
interrupción del Timer 1, toma datos de la IMU y las almacena
en el archivo datos.csv. Cuando termina de almacenar continúa
con la tarea de navegación. Esta programación se ejecuta inde-
finidamente hasta que el usuario pulse el botón Star/Stop o se
produzca una colisión.
• Ajustes. Es un conjunto de subrutinas que se utilizan para cali-
brar los sensores y adaptarlos a las condiciones del medio donde
se moverá el μTrace. Es la encargada de calibrar tanto los sensores
infrarrojos para el seguimiento de líneas y los sensores de la IMU.
Arranca con el calibrado de los sensores infrarrojos. Es importante
que durante este calibrado el robot esté situado sobre la línea que
queremos que siga. El μTrace pivotará sobre su eje de rotación to-
mando medidas de los sensores y almacenándola en una variable.
Tras hacer varias pasadas sobre la línea y fondo blanco, hará una
media de los datos extraídos de los sensores y tomará esa media
como punto a partir del cual tomará el valor del sensor como me-
dida sobre blanco y medida sobre negro y almacenará ese valor. A
continuación es el turno del calibrado de los sensores de la IMU.
En primer lugar calibra los giroscopios. El sistema toma muestras
del valor tomado por el giroscopio en cada uno de los tres ejes
estando en μTrace parado y almacena este valor en una variable.
Tras tomar un número determinado de muestras (típicamente mil
muestras), hace una media de los valores tomados. Estos valores
del giroscopio se corresponden con la aceleración de coriolis a la
que está sometida el sistema. El sistema almacena estos valores
en variables y las almacena. A continuación hace exactamente lo
mismo con el acelerómetro. El valor extraído corresponde con la
fuerza gravitatoria que actúa sobre el μTrace. Este valor también
es almacenado. Esta programación sólo se ejecuta una sola vez, y
puede repetirse las veces que el usuario lo estime oportuno. Esta
Micro-Robot Trazador de Trayectorias 61

tarea no es estrictamente necesaria, ya que el sistema tiene pro-


gramado una serie de valores estándar que en caso de no ejecutar
el calibrado, son los valores que se usarán para el funcionamiento
del sistema.

El firmware que supone la puesta en conjunto de las diferentes partes del


sistema, se puede consultar en el Anexo B, donde se incluyen los diagra-
mas de flujo que explican el funcionamiento de este firmware y el código
implementado.

4.1.6. Comparativa con otros sistemas comerciales


Tras el diseño del prototipo o μTrace, y con el fin de ubicarlo, a conti-
nuación se muestra una tabla comparativa con los dos robots comerciales
que han sido analizados anteriormente. Esta comparativa no tiene en cuenta
como están programados cada uno de ellos, ya que los robots comerciales y el
mismo μTrace pueden ser reprogramados para realizar diferentes tareas, por
lo que las tareas que realicen cada uno dependerán del usuario que lo utilice.
Por tanto, esta comparativa analizará únicamente aspectos constructivos y
de hardware, así como prestaciones técnicas.

Característica Pololu 3pi Mark III μTrace

Microcontrolador ATmega328 PIC16F877 PIC18F67J94

Frecuencia micro 20 MHz 20 MHz 48 MHz

Chasis Circuito Integrado Chasis de metal Circuito Integrado

Sección Chasis Circular Cuadrada Circular

Motor Corriente continua Servomotor Corriente Continua

Reductora 30:1 Integrada NO 30:1 Integrada

Alimentación 4xAAA 4xAA + 1x9V 4xAAA

Tensión circuitería 5 V 5 V 3.3 V

Comunicación NO Puerto Serie Puerto USB

Reprogramable SI SI SI

Método programación JTAG Bootloader puerto serie JTAG

Ampliable Parcialmente Parcialmente NO

Control Motores Puente H Control tiempo de giro Puente H

Interzaz humano LCD, Pulsadores NO LCD, Pulsadores, Leds

Almacenamiento NO NO SI

Sensores de colisión NO 2xSensor de distancia 1xBumper

Sensor de suelo 5xSensores infrarrojos 3xSensores infrarrojos 5xSensores infrarrojos

Sensor Inercial NO NO Giroscopio y acelerómetro

Cuadro 4.2: Tabla comparativa de los robots comerciales y el μTrace


Micro-Robot Trazador de Trayectorias 62

4.2. Algoritmos de trazado de trayectorias


Los algoritmos de trazado de trayectorias son los algoritmos programados en
la computadora que toman los datos del giroscopio y acelerómetro y recons-
truye la trayectoria seguida por el sistema donde van instalados estos. Todos
estos algoritmos se basan en los aspectos teóricos desarrollados en el capitulo
2 y no son más que simples puestas en código de dichos fundamentos. Todos
los códigos que se han desarrollado para esta tesis de máster, se implementa
el lenguaje de script de MATLAB (.m). Si se quiere analizar el código, en
el Anexo C se pueden ver los diferentes diagramas de flujo que explican los
diferentes algoritmos así como el código del scripts para implementarlo en
MATLAB.

4.2.1. Algoritmo de ángulos de Euler calculados directamen-


te
Este es el algoritmo más simple de todos. Se basa en el cálculo directo
de los ángulos de Euler a partir de los datos arrojados por el giroscopio y la
posterior rotación de la aceleración del sistema de referencia móvil al sistema
de referencia fijo a partir de la matriz de rotación calculada con los ángulos
de Euler obtenidos a partir del giroscopio.
Comienza tomando los datos referentes a las sensibilidades de los sensores
con los que se han tomado los datos así como la frecuencia de muestreo de
los mismos. Estos datos los toma del fichero log.csv que generó el μTrace y
que almacenó en la tarjeta de memoria micro SD. A continuación toma todos
los datos del acelerómetro y del giroscopio correspondiente a cada eje. Estos
datos son datos brutos o datos “raw”, por lo que primero, ha de convertirlos
a unidades de grados/segundo en el caso de los datos del giroscopio y a G’s
en el caso de los provinientes acelerómetro. Para ello no hace falta más que
dividir el valor bruto o “raw” por la sensibilidad con lo que obtendremos el
valor en grados/segundo o G’s.
Cuando los datos estén en el formato adecuado, se les elimina el efecto
de coriolis a los datos del giroscopio y el defecto en la medida a 0 G’s a los
datos del acelerómetro, con lo que tenemos los datos preparados para poder
manipularlos. Luego se pasan los valores del giroscopio a radianes/segundo,
puesto que MATLAB utiliza estas unidades para manipular ángulos.
Como ya se ha comentado anteriormente los acelerómetros son muy sen-
sibles y ante pequeñas vibraciones producen picos o datos erróneos. Para
eliminar estos efectos indeseados, se buscan periodos estacionarios en los que
las variaciones de los datos del acelerómetro sean pequeñas. Para esto se
aplican dos filtros. Un primer filtro paso alto para eliminar los picos de ruido
que puedan proceder de lecturas falsas seguido de un filtro paso bajo para
eliminar también posibles incoherencia en los datos.
Posteriormente, se integran los valores del giroscopio con la frecuencia de
Micro-Robot Trazador de Trayectorias 63

muestreo con lo que obtenemos los ángulos girados por el μTrace en cada
periodo de muestreo por cada uno de los ejes del sistema. Estos ángulos son
directamente los ángulos de Euler. Una vez obtenidos estos ángulos se proce-
de al cálculo de la matriz de rotación R. Una vez obtenida se multiplica por
la aceleración obtenida del acelerómetro y con ello se consigue la aceleración
del sistema referida a los tres ejes cartesianos fijos del punto de origen; esta
operación se repite para todos y cada uno de los datos obtenidos.
Una vez tenemos todas las aceleraciones referidas al sistema fijo de re-
ferencia, convertimos el valor de G a sm2 multiplicando el valor obtenido de
girar la aceleración por el valor de la gravedad, 9.81 sm2 , y compensamos la
aceleración de la gravedad restando el valor de 9.81 a la gravedad medida
en el eje Z. Tras esto, ya podemos integrar estos datos con el valor de la
frecuencia de muestreo para obtener la velocidad, teniendo en cuenta que
la velocidad inicial es nula. Hay que tener en cuenta que en los periodos
estacionarios calculados anteriormente, se considera la velocidad nula, por lo
que tenemos en cuenta esta situación. También intentamos corregir la posible
deriva de velocidad teniendo en cuenta que, tras los periodos estacionarios
donde la velocidad es nula, la velocidad en los siguientes periodos no puede
ser demasiado elevada. Se calcula una tasa de reducción de la velocidad con
lo que corregimos la velocidad. Por último, se vuelve a integrar la velocidad
con lo que tenemos el incremento de la posición en cada uno de los tres ejes
del sistema fijo. También aquí hay que tener en cuenta que la posición inicial
es cero. Los datos de la posición se pasan a una gráfica en tres dimensiones
con lo que obtenemos la trayectoria seguida por el μTrace.
De este algoritmo de trazado no se espera que sea preciso. Como se ha
explicado anteriormente, los giroscopios introducen un gran error y como se
puede observar, en este algoritmo no se corrige de ninguna manera, por lo
que al integrar los datos con error, este error es acumulativo y es de esperar
que la gráfica trazada sea muy imprecisa.

4.2.2. Algoritmo de ángulos de Euler calculados con filtro de


Kalman

Este algoritmo se basa en los mismos principios que los explicados para
el algoritmo de cálculo directo de los ángulos de Euler, pero en este caso,
se aplica un filtro de Kalman que reduce y compensa el error en dos de los
ángulos del sistema. Este algoritmo está basado en [9].
En primer lugar vamos a definir las ecuaciones y valores de las constantes
y valores iniciales de este algoritmo.
Nos interesa calcular el ángulo girado por cada eje y el error que se comete
cuando se calcula dicho ángulo. Si tenemos en cuenta esto, podemos definir
el ángulo y el error como:
Micro-Robot Trazador de Trayectorias 64

ángulot = ángulot−1 + (medidagiro,t−1 − errorgiro,t−1 ) ∗ dt + errormedidas


(4.1)

errort = errort−1 + errormedidas (4.2)

ánguloaccel − ángulogiro = errormedida + errorproceso (4.3)


Tal como se analizó en el capitulo 2, en el apartado dedicado al filtro de
Kalman, este usa dos ecuaciones fundamentales que son:

xt = A.xt−1 + B.ut−1 + wt−1 (4.4)

yt = Hxt + vt (4.5)
Si adaptamos las ecuaciones de estado, al modelo de Kalman, obtenemos
los siguientes parámetros:

Matriz de estado. Nos interesa estimar tanto el ángulo como el error


que se produce al calcular dicho error para utilizarlo en la siguiente
iteración, por ello, podemos definir la matriz de estado como

 
ángulo
xt =
error

Matriz de covarianza de la medida. Como se ha visto en el capítulo


2, en la sección del filtro de Kalman, el termino vt se puede sustituir
por p(v) ∼= N (0, R). Por lo tanto sólo tendremos que definir la matriz
R. Esta matriz nos dice el error que cometemos cuando medimos y la
suponemos constante. No existe un método exacto para la asignación
de un valor, por lo que se han hecho diferentes pruebas y se ha elegido
uno que proporciona un resultado óptimo

R = 0,3

Matriz de covarianza del proceso. Del mismo modo que la matriz de


covarianza de la medida, la matriz de covarianza del proceso se puede
sustituir por p(w) ∼= N (0, Q), por lo que solo se necesita definir la
matriz Q. Esta matriz es donde se refleja el error que se comete en la
medida. Estos valores se pueden obtener en la hoja de datos de la IMU.
El primer valor corresponde al error del acelerómetro y el segundo al
del giroscopio que se suponen constantes esta matriz. El resultado es
Micro-Robot Trazador de Trayectorias 65

 
0,004 0
Q=
0 0,05

A es la matriz de cambio de estado. Esta matriz relaciona el estado


estimado con el estado anterior. Por lo que A se define como

 
1 −dt
A=
0 1

B es la matriz que relaciona la medida de los sensores con el estado


estimado. Por lo que se define B como

 
dt
B=
0

H relaciona el estado estimado con el valor estimado con la aceleración.


Por lo que H se define como


H= 1 0

yt es el ángulo obtenido a partir del método de la aceleración.

ut es el ángulo obtenido a partir del método de la velocidad angular.

Tras el análisis de cada una de las variables que intervienen en el proceso del
filtro de Kalman, se pasa a la metodología que sigue el algoritmo.
Se inicia de igual manera que el algoritmo anterior. Se extraen los datos de
la memoria micro SD y se tratan hasta obtener los datos en la forma deseada.
También aplicamos los mismos filtros para detectar periodos estacionarios.
Una vez tenemos los datos comienza en cálculo de los ángulos. Este método
sólo se aplica a los ángulos Roll y Pitch, por lo que el cálculo del ángulo Yaw
se calcula exactamente igual que en el método anterior.
En primer lugar se calculan los ángulos mediante el método del giroscopio,
es decir integrando el valor de los datos obtenidos de giroscopio con el valor
de la frecuencia de muestreo. A continuación se calcula el ángulo a partir del
método de la aceleración, es decir, se aplican las ecuaciones 2.35 y 2.36 para
el Pitch y el Roll respectivamente.
Posteriormente, se actualiza la matriz de covarianza del sistema y se pro-
cede al calculo del error entre el ángulo calculado por el método del acele-
rómetro y el giroscopio. Se calcula la ganancia de Kalman K y volvemos a
actualizar la matriz de covarianza. Con la ganancia y el error calculamos el
ángulo a partir del ángulo calculado con los giroscopios y se calcula el sesgo
Micro-Robot Trazador de Trayectorias 66

que se usará para las siguientes estimaciones. Tras esto, se rota la aceleración
para referenciarlos al sistema de referencia fijo y se sigue el mismo proceso
de cálculo de la velocidad y de la posición que en el algoritmo anterior.
Con este sistema compensamos los errores en los ángulos Pitch y Roll
aunque persiste el error en al ángulo Yaw. De esta manera se espera una
mejora con respecto al anterior, si bien es cierto, que los cambios no serán
significativos.

4.2.3. Algoritmo de cálculo de cuaterniones


El algoritmo con cuaterniones basado en un cálculo de un gradiente des-
cendiente se trata de una implementación directa del algoritmo explicado
anteriormente y basado en [13]. Se sigue el mismo proceso que en los mode-
los anteriores. En primer lugar se hace un tratamiento los datos procedentes
del μTrace para tener los datos en el formato adecuado y se procede a filtrar
los datos para obtener los periodos estacionarios del movimiento. A conti-
nuación se hace un cálculo inicial de la convergencia del algoritmo usando
para ello los periodos estacionarios, aunque se podría utilizar cualquier dato.
Esto se realiza para aumentar la precisión del algoritmo, ya que este algo-
ritmo genera mejores resultados cuantas más veces se aplique el gradiente.
Para calcular este valor inicial se sigue el mismo proceso que se usará pos-
teriormente para la estimación de los cuaterniones de orientación, con la
salvedad de que estos cuaterniones no se almacenan, sólo se guarda el último
cuaternión estimado para obtener un primer cuaternión de referencia.
Una vez obtenido este cuaternión de referencia comienza el algoritmo
propiamente dicho, que sigue las siguientes fases:

Caálculo del valor normalizado de la aceleración.

Se calcula el Jacobiano del gradiente usando para ello el cuaternión de


referencia.

Estimación de la dirección de la gravedad usando el valor normalizado


de la aceleración.

Se procede al caálculo del error acumulado y corregimos el valor del


giroscopio.

Cálculo de la tasa de cambio del cuaternión.

Se integra la tasa de cambio del cuaternión para obtener el propio


cuaternión.

Normalización del cuaternión.

Se hace el cálculo del conjugado del cuaternión para referirlo al sistema


fijo.
Micro-Robot Trazador de Trayectorias 67

Este cuaternión obtenido se almacena y tras calcular todos los cuaterniones,


se rota la aceleración para obtener esta aceleración referida al sistema fijo. A
continuación aplicamos el mismo proceso, calculamos la velocidad teniendo
en cuenta los periodos estacionarios y luego su deriva para seguidamente co-
rregir la velocidad. Por último, calculamos la nueva posición y la mostramos
en una gráfica.
De este método se espera que sea el más preciso. Dado que este algorit-
mo corrige todos los errores en la estimación de la orientación del sistema,
la posición calculada debe tener una menor discrepancia con respecto a la
trayectoria original y por lo tanto ser la reconstrucción más precisa.

4.3. Puesta en marcha de μTrace: pruebas y resul-


tados
A lo largo de este apartado se hará una descripción de todo el proceso seguido
para el testeo de las diferentes partes que se proponen para la construcción de
un robot móvil con capacidad para reconstruir trayectorias. Se presentará el
prototipo con el que se han hecho las pruebas, para seguir con la explicación
de las pruebas a las que se han sometido todas las partes implementadas en
el mismo, así como las herramientas de software diseñadas para la recons-
trucción de trayectorias. Por último se expondrán las diferentes conclusiones
que se han podido extraer de las pruebas realizadas así como las soluciones
técnicas que se pueden aplicar para mejorar el proceso.

4.3.1. Proceso de puesta en marcha del μTrace


En primer lugar, tras la construcción del circuito integrado y el ensam-
blaje de las diferentes partes del sistema sobre dicho circuito, se procedió a
hacer las diferentes pruebas sobre hardware con el fin de determinar si este
tiene algún tipo de fallo derivado de la construcción del mismo. Para ello
se han comprobado las alimentaciones de todos los componentes del siste-
ma con el fin de detectar posibles cortocircuitos o fallos de soldadura que
impidan la correcta conexión a la toma de corriente. Tras hacer este tipo
de comprobaciones se ha procedido con la comprobación de cada una de las
interconexiones entre los elementos así como la verificación de que todos los
elementos están ubicados en su lugar y posición correcta.
Una vez hechas las verificaciones previas a la primera conexión se ha
procedido a alimentar el sistema. Para ello, se han colocado las pilas en su
correspondiente portapilas y se ha comprobado que las tensiones presentes
en el sistema son las adecuadas así como que las tensiones que llegan a cada
uno de los componentes son las correctas.
Puesto que tras estas pruebas, se ha comprobado que todo funciona de
manera correcta, se da por validado el prototipo para continuar con las prue-
Micro-Robot Trazador de Trayectorias 68

bas de firmware.
A continuación, en las imágenes 4.3 y 4.4, se puede observar el resultado
de la creación del prototipo. En la imagen 4.3 se aprecia la vista superior
de μTrace donde se ubican los motores con sus correspondientes soportes, el
socket para la tarjeta SD, el conector USB, la IMU MPU6050, los botones y
leds y las baterías. En la imagen 4.4 se muestra la vista inferior, lugar donde
se ubican el microcontrolador, el regulador de tensión el puente en H para el
control de los motores, los sensores de infrarrojos y el apoyo mecánico para
que la plataforma no pivote sobre las ruedas.

Figura 4.3: Vista superior del prototipo de pruebas

Figura 4.4: Vista inferior del prototipo de pruebas


Micro-Robot Trazador de Trayectorias 69

4.3.2. Prueba de funcionamiento del μTrace


Como se ha explicado anteriormente, se ha sometido al prototipo de prue-
bas o μTrace, a diferentes pruebas para comprobar el funcionamiento de cada
una de las partes del sistema. Para ello, como se ha detallado, se han creado
diferentes firmwares que se centran en cada uno de los procesos de manera
individual. A continuación se detallan los resultados de dichas pruebas.

Prueba de Navegación
El objetivo de estas pruebas es la de ver si esta configuración es factible
para utilizar como robot móvil y por otro lado, comparar el funcionamiento
de los algoritmos de navegación. Para dichas pruebas, se ha decidido que se
compare con otro robot comercial, en este caso, con el Pololu 3pi.
Para realizar las pruebas, se ha programado el microcontrolador del μTrace
con el firmware diseñado específicamente para ello. Previo paso a hacer las
pruebas comparativas se han hecho diferentes pruebas con el prototipo de
pruebas con el fin de sintonizar los parámetros del PID que lleva implemen-
tado. Tras hacer este ajuste, se ha creado un pequeño circuito o pista de
pruebas que servirá para comprobar el correcto funcionamiento del sistema.
Este circuito es un circuito rectangular cuyas esquinas han sido redondea-
das con diferentes radios de curvatura para comprobar cómo se comporta el
sistema ante diferentes radios de giro.
Tras hacer las pruebas con ambos robots, se ha concluido que el μTrace
pasa satisfactoriamente este test. La velocidad y tiempo que necesita para
superar el circuito el μTrace es similar al que necesita el sistema comercial
Pololu 3pi. Por ello se puede decir que es factible utilizar este sistema de
navegación para la creación de un robot móvil. También queda patente, que
la elección de motores, el driver de los mismos y los sensores infrarrojos
pueden ser usados para dicha creación.

Prueba de comunicación con el PC mediante USB


Tal como se ha explicado anteriormente, se ha diseñado un firmware es-
pecífico para comprobar la conectividad del μTrace con una computadora.
Tras cargar el programa en el microcontrolador y conectar el sistema con el
computador, este último reacciona pidiendo que se carguen los drivers para
manejar dicha conexión. Tras la selección de dichos drivers, el PC asigna
un número de puerto a la conexión con el prototipo de pruebas. Tras este
proceso inicial, fue posible mediante un terminal establecer una conexión bi-
direccional entre la computadora y el prototipo, por lo que se considera que
este último supera el test de conexión con el PC.
Micro-Robot Trazador de Trayectorias 70

En la imagen 4.5 se puede observar una captura de pantalla del PC donde


se han realizado las pruebas. Se puede apreciar como el prototipo de pruebas
responde a los comandos introducidos por el usuario, dando información o
bien tomando datos que el usuario le envía.

Figura 4.5: Terminal de computador conectado con el prototipo de pruebas

Prueba de lectura y escritura en la SD


Estas pruebas tratan de determinar si se pueden utilizar tarjetas de me-
moria SD como método de almacenamiento masivo de datos. Como se ha
explicado anteriormente se utilizará para ello el prototipo de pruebas y el
firmware diseñado para tal fin. Como particularidad, este firmware se apoya
en el firmware de pruebas del puerto de comunicaciones USB, como méto-
do para visualizar contenido de la tarjeta SD, así como medio para poder
escribir en ella.
El sistema está diseñado para trabajar con tarjetas micro SD formateadas
en formato FAT o FAT16, por lo que se ha utilizado una tarjeta de memoria
Trascend de 2 GB.
El proceso de prueba ha sido como se explica a continuación. El primer
paso que se da es el de establecer la comunicación con el dispositivo de
almacenamiento. Si esta comunicación se realiza de forma satisfactoria, el
prototipo de pruebas establece una conexión mediante USB con el compu-
tador. Tras establecer dicha comunicación, se ha procedido a la creación y
edición de archivos dentro de la SD. Tras hacer diferentes escrituras, se extrae
la SD y se conecta al computador para comprobar si los archivos generados
están corrompidos o si por el contrario pueden ser visualizados. Una vez he-
cha esta comprobación se reinserta la tarjeta en el μTrace y se reinicia. El
Micro-Robot Trazador de Trayectorias 71

sistema vuelve a establecer la comunicación con el computador, pero esta vez


en lugar de hacer peticiones de escritura y creación de nuevos archivos, se
hacen peticiones de lectura de ficheros. Los resultados han sido positivos y
en la consola del computador aparecen los datos que estaban escritos dentro
de los ficheros.
Tras los resultados positivos obtenidos en estas pruebas, se puede con-
cluir que es factible el uso de tarjetas de memoria SD como método para
el almacenamiento de los datos que pueda arrojar un sistema de trazado de
trayectorias, puesto que los ficheros que escribe en dicha tarjeta son archivos
legibles y utilizables por un computador.

Comunicación y toma de datos del MPU6050


Un punto importante a la hora de abordar un problema de reconstrucción
de trayectorias es la toma de datos inerciales de los giroscopios y aceleró-
metros del sistema. Por ellos las pruebas sobre el MPU6050 son un punto
importante de estos tests.
Al igual que se hacía con las pruebas sobre la tarjeta SD, durante el testeo
de la IMU, se ha utilizado parte del firmware de pruebas del puerto de comu-
nicaciones USB. Este protocolo de comunicaciones nos permite monitorizar
la conexión entre el microcontrolador con el sistema de adquisición de datos
inerciales.
Primero, se ha testeado la comunicación entre la controladora con el MPU
6050. En primer lugar, el sistema se conecta con el computador y se inicia
la comunicación con el usuario. Por su parte, el usuario envía al sistema
la orden de conectarse con la IMU. A través de la consola de comandos,
el microcontrolador va pasando el estado de la conexión. Va escribiendo en
pantalla todos los comandos que envía y recibe, así como las direcciones a
las que envía dichos comandos. Comienza realizando una prueba del estado
del canal haciendo una comprobación de si el dispositivo de adquisición de
datos recibe los comandos. Tras la confirmación de dicha comunicación, el
sistema comienza a enviar los comandos de configuración. Finalizada esta
configuración inicial, pide una confirmación de la correcta configuración. Es-
to lo realiza mediante la petición de lectura de los registros del MPU6050 y
comparándolos con los comandos enviados. Una vez confirmada dicha confi-
guración, se da por concluido el proceso de conexión.
Si la comunicación se establece satisfactoriamente, toca el turno a probar
la toma de datos. El usuario mediante una petición por comando, inicia la
toma de datos. Estos datos se toman de forma simultánea, es decir se le hace
una petición de toma de datos de los seis ejes del MPU6050. Este guarda
en memoria los datos de los tres ejes del acelerómetro y los tres ejes del
giroscopio y a continuación mediante peticiones secuenciales del microcon-
trolador, este almacena los datos y los saca por terminal, donde el usuario
puede visualizar esos datos.
Micro-Robot Trazador de Trayectorias 72

Tras hacer diferentes pruebas de calibración en superficies planas para


tomar los datos de offset de cada eje, se procede a validar los datos arro-
jados por el sensor, siendo esta validación positiva. Por ejemplo, sobre una
superficie plana y horizontal, los datos arrojados por el acelerómetro son
cercanos a 9.8 sm2 en el eje perpendicular a la superficie y de prácticamente
0 sm2 en los otros dos ejes. Con respecto a los giroscopios, los datos arrojados
se corresponden con la aceleración de coriolis y se mantienen prácticamente
constantes durante todo el proceso de prueba, por lo que se pueden dar como
validos esos datos.

Prueba de uso conjunto de todo el sistema


Esta prueba pretende determinar si el sistema planteado es valido para
la creacion de un robot móvil para el trazado de trayectorias. Se trata de
una prueba en la que se implementan todas las funcionalidades anterior-
mente descritas. La prueba consiste en programar el μTrace con el firmware
anteriormente descrito y someterlo a diferentes pruebas para comprobar su
correcto funcionamiento.
En primer lugar se han hecho pruebas similares a las ya hechas con el fin
de comprobar que todos los sistemas del prototipo de pruebas son operativos.
Tras comprobar que todos ellos funcionan, toca el turno a hacer un recorrido
de pruebas en un trazado tomando muestras del giroscopio y acelerómetro y
luego ver los datos recogidos.
El sistema de ha configurado para tomar muestras con una frecuencia de
100 Hz, es decir, tomar una muestra de los sensores inerciales cada 10 ms.
Una vez iniciada la prueba, se ha observado un comportamiento errático del
robot. Este no seguía las líneas trazadas y se quedaba con las velocidades
fijas a pesar de estar saliéndose de la trayectoria marcada por la pista. Tras
la prueba, se han analizado los datos y se ha comprobado que los datos eran
muy escasos. La duración de la prueba fue de 1 minuto, lo que equivaldría a
la toma de una seis mil muestras, pero apenas llegaban a la veintena.
A continuación, se analizó el código y tras no detectar ningún fallo se
ha decidido que se bajaría la frecuencia de muestreo de 100 Hz a 50 Hz y
se ha repetido la prueba. El resultado obtenido era el mismo. Persistía el
comportamiento errático del sistema y el número de muestras tomadas era
muy inferior del número esperado.
Tras esto se procedió a hacer un análisis detallado de los mensajes del
compilador, que dio como resultado la detección del problema. Este indicaba
que durante la escritura sobre la SD el sistema queda bloqueado hasta que
no termine de realizar esta operación. El tiempo empleado en la operación de
escritura es muy superior a lo estimado inicialmente, por lo que durante este
proceso, queda deshabilitada la función de navegación y de toma de datos,
lo que explica el comportamiento erratico siguiendo las líneas y el número
tan bajo de muestras.
Micro-Robot Trazador de Trayectorias 73

Para intentar compensar este problema, se bajó la frecuencia de la toma de


datos todavía más, hasta el punto de usar frecuencias de muestreo inferiores
a 10 Hz, pero el problema persistía, porque la velocidad de escritura en la
SD es independiente de la frecuencia de muestreo. Por ello se intentó otro
método para la toma de datos.
Aprovechando que el microcontrolador deja libres en torno a 2 Kbytes de
memoria RAM, es posible almacenar los datos obtenidos del sensor inercial,
y hacer la navegación. Dado que cada vez que se toma datos, supone 12 bytes
de memoria, es posible almacenar unas 150 muestras en la memoria RAM.
Usando esto, se ha decidido que el sistema pase por dos estados independien-
tes. El primero de estos estados es la toma de datos y navegación. Durante
este estado, el sistema navega a lo largo del circuito y almacena datos en la
memoria RAM. Dado que son 150 muestras a una frecuencia de unos 80 Hz,
el sistema permanece en este estado en torno a 2 segundos. Una vez llena
esta memoria RAM, sale de este primer estado y cambia al siguiente. En
el segundo estado, el sistema para los motores y comienza la escritura en
la memoria SD de todos los datos previamente almacenados. Este proceso
es lento, lo que provoca que esté entre 15 y 20 segundos en este proceso.
Tras finalizar la escritura, el sistema vuelve el primer estado y retoma la
navegación y la toma de datos.
Con este sistema se consigue una toma de datos aceptable, aunque diná-
micamente hablando, el robot se comporta de forma muy deficiente, ya que
tarda mucho más tiempo en completar el recorrido debido a los constantes
parones. Tras esta prueba, ha quedado de manifiesto que el microcontrolador
seleccionado para estas pruebas no es el adecuado para utilizar en este tipo
de aplicaciones.

4.3.3. Testeo de los algoritmos de reconstrucción de trayec-


torias
Como se ha mostrado anteriormente, se han diseñado tres algoritmos de
reconstrucción de trayectorias basados en datos inerciales recogidos duran-
te el recorrido de dicha trayectoria. A lo largo de esta sección se describe
el proceso se que ha seguido para hacer los test correspondientes a estos
algoritmos.
Durante el proceso de diseño de estas herramientas de software y debido
a que no se disponía de datos obtenidos por medios propios, se ha recurrido
a los datos que ofrece un sistema comercial. Este sistema comercial es el “x-
IMU” de la compañía “x-io Technologies”. Se trata de un dispositivo de toma
de datos inerciales que incluye un giroscopio de tres ejes y un acelerómetro
de tres ejes. Esta compañía ofrece en su web tres tipos de recorridos diferen-
tes: un recorrido en línea recta, una ascensión por una escalera cuadrada y
una ascensión por una escalera de caracol. Estos datos están recogidos una
frecuencia de muestreo de 256 Hz.
Micro-Robot Trazador de Trayectorias 74

Con estos datos, se ha procedido a hacer una primera prueba de los tres
algoritmos. En un primer intento, dado que los parámetros de los scripts
están sin ajustar, los resultados son poco realistas, pero tras una serie de
pruebas, y una puesta a punto, los algoritmos proporcionan una reconstruc-
ción bastante buena de los trazados seguidos.

En las imágenes 4.6, 4.7 y 4.8 se puede observar el resultado de dichas


reconstrucciones usando el algoritmo de los ángulos de Euler, el algoritmo
de los ángulos de Euler con filtrado de Kalman y el algoritmos basado en
cuaterniones respectivamente, usando los datos anteriormente citados, con-
cretamente los referidos a la ascensión por una escalera de caracol. En todos
los casos, el resultado es satisfactorio, cumpliéndose lo que se había pro-
nosticado durante la fase de planteamiento y desarrollo de estos algoritmos.
La mejor reconstrucción corresponde al algoritmo que filtra los tres datos
proporcionados por el giroscopio que corresponde al algoritmo basado en
cuaterniones. Tras este, en cuanto a calidad de la reconstrucción, se sitúa el
sistema que filtra dos de los tres datos del giroscopio, el algoritmo de ángu-
los de Euler con filtrado de Kalman. Por último, a pesar de ser una buena
reconstrucción, se encuentra el que corresponde al algoritmo de ángulos de
Euler, que no filtra ningún dato.

Figura 4.6: Reconstrucción de trayectoria circular ascendente usando algo-


ritmo de ángulos de Euler
Micro-Robot Trazador de Trayectorias 75

Figura 4.7: Reconstrucción de trayectoria circular ascendente usando algo-


ritmo de ángulos de Euler con filtrado de Kalman

Figura 4.8: Reconstrucción de trayectoria circular ascendente usando algo-


ritmo basado en cuaterniones

Otra de las pruebas realizadas es mucho más explícita a la hora de ver


como la adición de filtros mejora notablemente el rendimiento de estos algo-
ritmos. Se trata de los datos correspondientes a la ascensión por una escalera
cuadrada. Las imágenes 4.9, 4.10 y 4.11 corresponden a la reconstrucción del
citado trazado usando los algoritmos de Euler, Euler con filtrado de Kalman
y cuaterniones respectivamente. En este caso, como se comentó anteriormen-
te, los resultados muestran como a medida que aumenta el número de datos
del giroscopio filtrados, aumenta considerablemente la eficiencia y exactitud
de las reconstrucciones. Así, tal como muestran las imágenes, vemos una
reconstrucción errónea al usar el algoritmo de ángulos de Euler. Cuando se
empiezan a filtrar los datos del giroscopio, la mejoría es notable, y ya en el
Micro-Robot Trazador de Trayectorias 76

caso de la reconstrucción hecha por el algoritmo de ángulos de Euler con


filtro de Kalman, donde sólo se hace un filtrado parcial, el resultado es ya
claramente una estimación buena. Cuando se pasa el algoritmo de cuaternio-
nes, que, como se comentó, filtra todos los datos procedentes del giroscopio,
la reconstrucción es muy precisa, lo que confirma, una vez más, las prediccio-
nes acerca de la precisión hechas durante el desarrollo de estas herramientas
de reconstrucción.

Figura 4.9: Reconstrucción de trayectoria cuadrada ascendente usando algo-


ritmo de ángulos de Euler

Figura 4.10: Reconstrucción de trayectoria cuadrada ascendente usando al-


goritmo de ángulos de Euler con filtrado de Kalman
Micro-Robot Trazador de Trayectorias 77

Figura 4.11: Reconstrucción de trayectoria cuadrada ascendente usando al-


goritmo basado en cuaterniones

Esta discrepancia de resultados entre las dos muestras, sobre todo en lo


relacionado con la reconstrucción de la trayectoria usando el algoritmo de
ángulos de Euler, es debida a los giros que se realizan en el recorrido. En el
primer caso, la trayectoria es circular, por lo que el radio de curvatura de
los giros es mucho mayor y más constante que en el caso de la trayectoria
cuadrada. De estos test, se puede deducir, que los cambios de trayectoria
bruscos provocan que los resultados empeoren, sobre todo si se usa el algo-
ritmo donde no se filtra dato alguno.
Con los primeros resultados positivos de las pruebas previas, se puede con-
cluir que estos algoritmos son validos y sus resultados pueden ser extendidos
a otros sistemas de toma de datos.
A continuación, se pasaron a hacer los test con los datos que se obtuvieron
con el prototipo de pruebas. A priori, debido a los problemas que surgieron
durante la toma de datos, las esperanzas de conseguir un resultado aceptable,
son bajas. Además, por otro lado, la baja frecuencia de muestreo del sistema
de adquisición de datos, unos 80 Hz, hace que los resultados esperados de
esta prueba no sean tan satisfactorios como los anteriores, debido a que el
espaciado temporal entre muestras es bastante elevado, lo que hace que se
pierda mucha información entre una toma de datos y la siguiente.
Tras varias pruebas con el prototipo de pruebas, se han logrado obtener
una serie temporal completa de datos del trazado de pruebas. Esta serie tem-
poral de muestras son la que se utilizarán para poner a prueba los algoritmos.
Tras las primeras reconstrucciones utilizando los ajustes usados en los
algoritmos anteriores, los resultados obtenidos no son nada buenos. Las re-
construcciones son altamente imprecisas y no se parecen en nada al recorrido
original. Para aumentar la precisión del sistema, se aplica a los datos un fil-
trado de datos adicional. Este filtrado es un filtro Gausiano, que elimina los
picos y datos que están fuera de lugar. Estos datos son provocados por las
Micro-Robot Trazador de Trayectorias 78

continuas arrancadas y frenadas que sufre el sistema durante el proceso de al-


macenamiento de datos en la memoria SD. Tras aplicar estos filtros y aplicar
una serie de ajuste de parámetros, los resultados obtenidos son sensiblemen-
te superiores a los iniciales, obteniendo reconstrucciones de mayor calidad,
pero distando todavía mucho de los resultados obtenidos anteriormente.
Si se analizan las posibles causas de esta disparidad de resultados, es
evidente que el problema se encuentra en la adquisición de datos. Estos
problemas estan causados por los graves problemas de toma de datos del
prototipo de pruebas. En primer lugar la frecuencia de muestreo. Los datos
del prototipo están tomados a frecuencias muy bajas por lo que se pierde
muchísima información en dicha toma de datos. Por otro lado está el propio
funcionamiento del μTrace. Los continuos cambios de velocidad producidos
durante el arranque y frenado del sistema provocan falsas lecturas que luego
se traducen fallos en los datos que se trasladan a los algoritmos. Como se ha
demostrado con los datos obtenidos de un sistema comercial, si la toma de
datos es continua y a frecuencias más elevadas, los resultados son positivos.

4.3.4. Resultados de los test


Si se analizan los resultados de las diferentes pruebas realizadas tanto
sobre el prototipo de pruebas como sobre las herramientas de software desa-
rrolladas se pueden extraer las siguientes conclusiones.
En primer lugar cabe hacer una reflexión acerca del hardware. Como se
ha demostrado durante los procesos de reconstrucción de trayectorias, la
toma de datos es un punto fundamental. La frecuencia de muestreo ha de ser
lo más alta posible para obtener unos resultados los más precisos posibles.
Además, estos datos deben tomarse intentando perturbar lo menor posible
las velocidades del sistema, es decir, la toma de datos debe ser constante, sin
cambios bruscos de velocidad, siempre que no sean provocados por el normal
funcionamiento del sistema donde va montado el sistema de adquisición de
datos.
También en cuento al hardware es necesario prestar especial atención a los
tiempos de lectura y escritura sobre las memorias externas de almacenamien-
to. Como se ha visto, el uso de un único microcontrolador es especialmente
delicado, y en caso de usarse un sistema monoprocesador, este ha de ser lo
suficientemente rápido para tratar con el cuello de botella que supone una
tarjeta SD. Como posible solución está en uso de un sistema multiprocesa-
dor. Si se utiliza una configuración multiprocesador con un microcontrolador
esclavo que se encargue de controlar los procesos de navegación y seguimien-
to de líneas y otro microcontrolador maestro que se encargue de la toma
de datos y el almacenamiento de los mismos, se reducen notablemente los
problema de bloqueo de tiempo de procesado por bloqueo de alguno de los
sistemas. Si además se complementa esto con una memoria acceso rápido
volátil conectada al microcontrolador encargado de la toma de datos, y se
Micro-Robot Trazador de Trayectorias 79

almacena en ella los datos y una vez finalizado en proceso de toma de estos
datos, se vuelcan de la memoria volátil a la tarjeta SD se eliminan todos
procesos que ralentizan e impiden un correcto funcionamiento del sistema.
Para terminar con el análisis de las pruebas, se hace una serie de reco-
mendaciones que pueden utilizarse para la construcción de un robot seguidor
de líneas con capacidad para reconstruir trayectorias:

Dado que durante las pruebas, el mayor cuello de botella del sistema es
el almacenamiento de datos en una memoria extraíble SD, es necesario
buscar alternativas para el almacenamiento de datos a alta velocidad
de forma transitoria para luego, cuando no sea necesario el uso del
procesador, pasar estos datos a la memoria externa.

Prestar especial atención a la elección del sistema de control. Se puede


usar un sistema multiprocesador con las tareas de toma de datos, na-
vegación y almacenamiento divididas entre los diferentes procesadores,
lo que asegura un funcionamiento correcto, o en caso de querer usar
un sistema con un único procesador, elegir uno cuya velocidad asegure
un correcto funcionamiento.

La frecuencia en la toma de datos, se presenta como uno de los princi-


pales factores que determinan la calidad de la reconstrucción de trayec-
torias. Se debe procurar que la frecuencia de muestreo de los sensores
inerciales sea lo más elevada posible con el fin de aumentar la precisión
de la reconstrucción.

Los diferentes módulos de comunicación, gestión de energía, gestión de


motores, sensorización de navegación e interfaz humana son perfecta-
mente validos y aplicables a futuros desarrollos.
Micro-Robot Trazador de Trayectorias 80
Capítulo 5

Conclusiones y líneas de
trabajo futuras

Personalmente, durante la realización de esta tesis de máster, he aprendido


métodos para el diseño de un robot móvil, así como técnicas de reconstrucción
de trayectorias. También he aprendido y trabajado con sistema de navegación
inercial y sistemas de navegación para robots autónomos.
En líneas generales, durante esta tesis de máster se han desarrollado una
serie de herramientas para la futura creación de un micro robot móvil se-
guidor de líneas con capacidad de reconstrucción de trayectorias. Además se
ha visto una metodología para la selección, diseño y posterior construcción
de un robot móvil, estudiando cada una de los aspectos que se deben de
tener en cuenta durante su desarrollo. Se ha construido una plataforma de
pruebas para probar y analizar diferentes aspectos que se han de tomar en
consideración cuando se pretende construir un robot trazador.
También se han estudiado diferentes metodologías para el desarrollo de
un sistema de navegación inercial. Se han obteniendo los principales pará-
metros necesarios que intervienen en estos sistemas. Estos paramatros son la
orientación (cuaternión o ángulos de Euler), la velocidad y la posición. Para
obtenerlos, se han seguido métodos que se basan en los datos que se obtie-
nen de una IMU compuesta por acelerómetros y giroscopios. También se han
puesto a prueba estos métodos y algoritmos y se ha comprobado cuales son
los aspectos a tener en cuenta a la hora de hacer dichas reconstrucciones de
trayectorias.
A continuación, se muestra una lista con los objetivos cumplidos en esta
tesis de máster.

Se ha hecho un completo estudio de los diferentes elementos que deben


estar presentes a la hora de construir un robot móvil y se han visto
algunas alternativas constructivas para la construcción de dicho robot.

Un estudio de los diferentes sistemas de navegación inercial y de cómo

81
Micro-Robot Trazador de Trayectorias 82

se pueden aplicar estos conceptos a un sistema para que sea posible la


reconstrucción de trayectorias.

Se ha creado una plataforma de pruebas para analizar los diferentes


retos y problemáticas a los que se debe enfrentar un diseñador a la
hora de desarrollar un proyecto relacionado con la robótica móvil con
capacidad de toma de datos inerciales.

Se han desarrollado y puesto a prueba una serie de algoritmos en


MATLAB, para que, tomando los datos inerciales, se pueda recons-
truir la trayectoria que ha seguido el sistema mediante estimaciones de
posición. También se han analizado los posibles problemas que pueden
surgir a la hora de realizar dichas estimaciones.

Durante esta tesis de máster se han completado todos los objetivos principa-
les. Pero dado que se trata de un estudio de la problemática que se presenta
a la hora de desarrollar un sistema móvil con capacidad para reconstruir
trayectorias y las posibles soluciones que pueden presentarse, existen nume-
rosas líneas de aplicación futura. La primera y más inmediata es la aplicación
de estos conceptos para la construcción de un robot seguidor de líneas con
capacidad de tomar datos para una posterior reconstrucción de trayectorias.
Pero no es la única. A continuación se hace un listado de las posibles líneas
de desarrollo futuras.

Creación de un robot seguidor de líneas equipado con sensorización


para tomar datos inerciales y con un sistema de almacenamiento de
datos eficiente y de alta velocidad. Para este desarrollo, se podría usar
alguna de las sugerencias que se han dado a lo largo de esta tesis. Su-
gerencias como el uso de un sistema multiprocesador o en caso de usar
un único microcontrolador, prestar especial atención a que la veloci-
dad de procesado y de comunicación del mismo sea lo suficientemente
elevada para poder manejar de la forma más rápida posible los proce-
sos, la información y los periféricos que se necesitan. También se puede
considerar la adición de una memoria volátil adicional que aligeraría
de forma notable los requerimientos de velocidad que se precisan para
la toma y almacenamiento de datos.

Explorar la posibilidad de introducir algún sistema de comunicación


inalámbrica que permita la transmisión directa de datos entre el sis-
tema de trazado y el computador donde se realizan las estimaciones
con lo que se eliminaría la necesidad de depender de memorias para el
almacenado de datos.

Portar este estudio, especialmente el relacionado con la navegación


inercial, a otro tipo de robots móviles, como pueden ser robots aéreos
o robots acuáticos, o a otro tipo de configuraciones de robots terrestres.
Micro-Robot Trazador de Trayectorias 83

Ampliar y mejorar los algoritmos de estimación y reconstrucción de


trayectorias mediante la adición de otro tipo de sistema de captura de
datos inerciales como pueden ser un compás magnético o una antena
GPS.
Micro-Robot Trazador de Trayectorias 84
Bibliografía

[1] Kevin J. Walchko, Michael C. Nechyba, Eric Schwartz and Antonio


Arroyo. Embedded Low Cost Inertial Navigation System. University of
Florida, Gainesville.

[2] Xiaoying Kong. Inertial Navigation System Algorithms for Low Cost
IMU. Department of Mechanical and Mechatronic Engineering, Univer-
sity of Sydney. August 27, 2000.

[3] Robert King. The Effects of Approximations in the Processing of Strap-


down Inertial Navigation Systems. University College London. Septem-
ber 2011.

[4] Joona Pusa. Strapdown inertial navigation system aiding with nonholo-
nomic constraints using indirect Kalman filtering. Tampere University
of Technology. April 8, 2009.

[5] Eduard Angelats, M. Eulàlia Parés and Ismael Colomina. Methods, Al-
gorithms and Tools for Precise Terrestril Navigation. Institute of Geo-
matics.

[6] Kevin J. Walchko. Low Cost Inertial Navigation: Learning to Integrate


Noise and Find Your Way. University of Florida. 2002.

[7] Adrian Schumacher. Integration of a GPS aided Strapdown Inertial Na-


vigation System for Land Vehicles. March 2006.

[8] Inelmatic. El filtro de Kalman [Online]. Disponible: Link:http://www.


inelmatic.com/web/files/downloads/filtrodekalman.pdf

[9] Fatemeh Abyarjoo, Armando Barreto, Jonathan Cofino, Francisco R.


Ortega. Implementing a Sensor Fusion Algorithm for 3D Orientation
Detection with Inertial/Magnetic Sensors. Florida International Univer-
sity, Miami.

[10] (2010) Yaw, Pitch, and Roll [Online]. Disponible: Link:http://


collagefactory.blogspot.com.es/2010/06/yaw-pitch-and-roll.
html

85
Micro-Robot Trazador de Trayectorias 86

[11] Chrobotics. Understanding Euler Angles [Online]. Dis-


ponible: Link:http://www.chrobotics.com/library/
understanding-euler-angles

[12] June 6, 2013. Glenn Murray. Rotation About an Arbitrary Axis in


3 Dimensions [Online]. Disponible: Link:http://inside.mines.edu/
~gmurray/ArbitraryAxisRotation/

[13] April 30, 2010. Sebastian O.H. Madgwick. An eficient orientation


filter for inertial and inertial/magnetic sensor arrays [Online]. Dis-
ponible: Link:http://www.x-io.co.uk/res/doc/madgwick_internal_
report.pdf

[14] (2008). Una introducción a los Robots Móviles [Online].


Disponible:http://www.ieee.org/documents/ieeecitationref.pdf

[15] Fei-Yue Wang, Yanqing Gao. Advanced Studies of Flexible Robotic Ma-
nipulators - Modeling, Design, Control, and Applications. Singapore,
World Scientific Publishing Co. Pte. Ltd., 2003.

[16] David Cook. Intermediate robot building. Apress. 2010.

[17] Newton C. Braga. Meachatronics for the Evil Genius. MacGraw Hill.
2005

[18] TechMikro (2013). El servomotor MS-311 de Robotek [Online]. Dispo-


nible: http://www.ieee.org/documents/ieeecitationref.pdfhttp:
//www.programarpicenc.com/productos/servo-motor.html)

[19] JKB (1998). Sensor Design [Online]. Disponible: http://redwood.


colorado.edu/jkb/legorobots/sensors.html

[20] maxEmbedded.com (2013). How to build an IR Sensor [On-


line]. Disponible: http://maxembedded.com/2013/08/04/
how-to-build-an-ir-sensor/
ANEXO A: Hardware de
μTrace: diagrama de bloques y
esquemáticos

87
Micro-Robot Trazador de Trayectorias 88
Micro-Robot Trazador de Trayectorias 89
Micro-Robot Trazador de Trayectorias 90
ANEXO B Firmware de
μTrace: diagramas de flujo y
código en C

91
Micro-Robot Trazador de Trayectorias 92

Diagramas de Flujo
Micro-Robot Trazador de Trayectorias 93
Micro-Robot Trazador de Trayectorias 94
Micro-Robot Trazador de Trayectorias 95
Micro-Robot Trazador de Trayectorias 96
Micro-Robot Trazador de Trayectorias 97
Micro-Robot Trazador de Trayectorias 98
Micro-Robot Trazador de Trayectorias 99

Codigo en C

#i n c l u d e <18F67J94 . h>
#d e v i c e PASS_STRINGS = IN_RAM
#d e v i c e ADC=12

#FUSES NOWDT //No Watch Dog Timer


#FUSES WDT128 //Watch Dog Timer u s e s 1 : 1 2 8 P o s t s c a l e
#FUSES NOSTVREN // S t a c k f u l l / u n d e r f l o w w i l l not c a u s e
reset
#FUSES NOXINST // Extended set e x t e n s i o n and I n d e x e d
A d d r e s s i n g mode d i s a b l e d
#FUSES BORV20 // Brownout r e s e t a t 2 . 0V
#FUSES NOCLOCKOUT // I /O function on OSC2
#FUSES NOIESO // I n t e r n a l E x t e r n a l Swi tc h Over mode
disabled
#FUSES CKSFSM // Clock S w i t c h i n g i s e n a b l e d , f a i l
S a f e clock m o n i t o r i s e n a b l e d
#FUSES NOWPFP // Write / E r a s e P r o t e c t Page S t a r t /End
L o c a t i o n , set t o page 0
#FUSES NOWPDIS // E r a s e / w r i t e −p r o t e c t a c t i v e f o r t h e
selected region ( s )
#FUSES NOWINDIS //Watch Dog Timer i n Window mode
#FUSES NOVBATBOR //VBAT BOR D i s a b l e d
#FUSES NODSBOR //BOR d i s a b l e d i n Deep S l e e p
#FUSES NODS // Deep S l e e p o p e r a t i o n i s a l w a y s
disabled
#FUSES NODSWDT // Deep S l e e p Watchdog Timer d i s a b l e d

// L i b r e r i a con l a s d e f i n i c i o n e s de V a r i a b l e s y e t i q u e t a s
#i n c l u d e "/ l i b s /GLOBAL/ global . h"

// D e f i n i c i o n de l o s p u e r t o s de s a l i d a
#u s e FIXED_IO( E_outputs=rueda_derecha_1 )
#u s e FIXED_IO( G_outputs=PWM_DERECHA,PWM_IZQUIERDA, rueda_izquierda_2 ,
rueda_izquierda_1 , rueda_derecha_2 )

// D e f i n i c i o n de l o s p i n e s de S a l i d a d e l PWM
#PIN_SELECT P4A=PWM_DERECHA
#PIN_SELECT P5A=PWM_IZQUIERDA

// D e f i n i c i o n de l o s r e t a r d o s
#u s e d e l a y ( clock =64000000 , c r y s t a l =12000000 ,USB_FULL)

// D e f i n i c i o n de l o s p i n e s d e l p u e r t o SPI
#PIN_SELECT SDI2=MMCSD_PIN_SDI
#PIN_SELECT SDO2=MMCSD_PIN_SDO
#PIN_SELECT SCK2=MMCSD_PIN_SCL
#u s e s p i (MASTER, DI=MMCSD_PIN_SDI, DO=MMCSD_PIN_SDO, CLK=MMCSD_PIN_SCL
, BITS=8 , MSB_FIRST, MODE=0 , baud =400000 , stream=mmcsd_spi )
#d e f i n e MMCSD_SPI_XFER( x ) s p i _ x f e r ( mmcsd_spi , x )

// D e f i n i c i o n d e l p u e r t o S e r i e ( s e puede u s a r para l a c o m i n u c a c i o n con


e l XBEE)
#u s e r s 2 3 2 ( baud =9600 , p a r i t y=N, xmit=PIN_C6 , r c v=PIN_C7 , b i t s =8 , stream=
PORT1)

// D e f i n i c i o n de l a l i b r e r i a USB
#i n c l u d e "/ l i b s /USB/mod_usb_cdc . h"
Micro-Robot Trazador de Trayectorias 100

// D e f i n i c i o n de l a l i b r e r i a d e l A c e l e r o m e t r o / G i r o s c o p i o
#i n c l u d e "/ l i b s /MPU6050/mpu6050 . c "

// D e f i n i c i o n de l a l i b r e r i a SD
#i n c l u d e "/ l i b s /SD/ sd . c "
#i n c l u d e "/ l i b s /USB/ rut_usb . c "

// D e f i n i c i o n de l a l i b r e r i a d e l Navegador
#i n c l u d e "/ l i b s /NAVEGADOR/ navegador . c "

#INT_TIMER1
v o i d TIMER1_isr ( v o i d ) {
c l e a r _ i n t e r r u p t (INT_TIMER1) ; // Borramos Fl a g
set_timer1 (0) ; // Volvemos a c a r g a r T e m p o r i z a c i ó n
c o n t a d o r ++;
Get_Accel_Values ( ) ; //Tomamos d a t o s d e l a c e l e r a r o m e t r o
Get_Gyro_Values ( ) ; //Tomamos d a t o s d e l g i r o s c o p i o
Appendcsv ( c o n t a d o r ) ; // Pasamos d a t o s a SD
}

#INT_EXT
v o i d EXT_isr ( v o i d ) {
d i s a b l e _ i n t e r r u p t s (INT_EXT) ; // D e s h a b i l i t a m o s i n t e r r u p c i o n e s
c l e a r _ i n t e r r u p t (INT_EXT) ; // Borramos Fl a g
fin_nav = 1 ;
delay_ms ( 2 0 0 ) ; // Retardo para r e b o t e s
}

v o i d parpadeo1 ( ) {
output_high (LED) ;
delay_ms ( 2 0 0 ) ;
output_low (LED) ;
delay_ms ( 2 0 0 ) ;
}

v o i d parpadeo2 ( ) {
output_high (LED) ;
delay_ms ( 1 0 0 0 ) ;
output_low (LED) ;
delay_ms ( 1 0 0 0 ) ;
}

void i n i c i o ( ) {
// I n i c i a l i z a c i ó n de v a r i a b l e s con v a l o r e s p r e d e f i n i d o s
KP = def_kp ∗ 0 . 1 ;
KD = def_kd ∗ 0 . 0 1 ;
KI = d e f _ k i ∗ 0 . 0 1 ;
GYRO_XOUT_OFFSET = OFF_ACX_DEF;
GYRO_YOUT_OFFSET = OFF_ACX_DEF;
GYRO_ZOUT_OFFSET = OFF_ACX_DEF;
ACCEL_XOUT_OFFSET = OFF_ACX_DEF;
ACCEL_YOUT_OFFSET = OFF_ACX_DEF;
ACCEL_ZOUT_OFFSET = OFF_ACX_DEF;
umbralA=umbralA_def ;
umbralB=umbralB_def ;
umbralC=umbralC_def ;
umbralD=umbralD_def ;
umbralE=umbralE_def ;

// C o n f i g u r a c i o n e l Timer1
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1) ; //F Timer 1 => Fosc /4 =
64000000 / 4 = 16000000
Micro-Robot Trazador de Trayectorias 101

// C o n f i g u r a c i o n ADC
setup_adc_ports ( sAN0 | sAN1 | sAN2 | sAN3 | sAN6 ) ;
setup_adc (ADC_CLOCK_DIV_64|ADC_TAD_MUL_16) ;

// C o n f i g u r a c i o n l a s s a l i d a s PWM
setup_timer_2 (T2_DIV_BY_16, 2 5 5 , 1 ) ;
setup_ccp4 (CCP_PWM) ;
setup_ccp5 (CCP_PWM) ;
set_pwm4_duty ( 0 ) ;
set_pwm5_duty ( 0 ) ;

// C o n f i g u r a c i o n de l a s i n t e r r u p c i o n e s
e n a b l e _ i n t e r r u p t s (GLOBAL) ;
ext_int_edge ( H_TO_L ) ;

//MPU6050 s e t u p
error = 0 ;
i = 0;
do {
aux_mpu = init_MPU6050 ( ) ;
i f (aux_mpu != 0 ) {
i f (aux_mpu == 1 ) { e r r o r _ 2 = 1 ; } e l s e { e r r o r _ 3 = 1 ; }
error_mpu = 1 ;
i ++;
i f ( i > 5) {
error_mpu = 0 ;
error = 1 ;
}
} else {
error_mpu = 0 ;
error = 0 ;
}
} while ( error_mpu != 0 ) ;
i =0;
i f ( error == 1 ) {
while (TRUE) {
parpadeo2 ( ) ;
}
}

i f ( f a t _ i n i t ( ) != GOODEC) {
error =1;
} else {
error =0;
}

i f ( error == 1 ) {
while (TRUE) {
parpadeo2 ( ) ;
}
}

i =0;
mode = 1 ;
}

v o i d track_navega ( ) {
MakeFile ( 1 ) ;
delay_ms ( 1 0 0 ) ;
MakeFile ( 2 ) ;
delay_ms ( 1 0 0 ) ;
Micro-Robot Trazador de Trayectorias 102

Appendlog ( ) ;
delay_ms ( 1 0 0 ) ;
e n a b l e _ i n t e r r u p t s (INT_EXT) ;
e n a b l e _ i n t e r r u p t s (INT_TIMER1) ;
set_timer1 (0) ;
contador = 0 ;
fin_track = 0;
do {
navegacion ( ) ;
i f ( ! input (START) ) {
fin_nav = 1 ;
}
} while ( fin_nav == 0 ) ;
d i s a b l e _ i n t e r r u p t s (INT_EXT) ;
d i s a b l e _ i n t e r r u p t s (INT_TIMER1) ;
}

void track ( ) {
contador = 0 ;
MakeFile ( 1 ) ;
delay_ms ( 1 0 0 ) ;
MakeFile ( 2 ) ;
delay_ms ( 1 0 0 ) ;
Appendlog ( ) ;
delay_ms ( 1 0 0 ) ;
e n a b l e _ i n t e r r u p t s (INT_TIMER1) ;
output_low (LED) ;
set_timer1 (0) ;
fin_nav = 0 ;
while ( fin_nav == 0 ) {
i f ( ! input (START) ) {
fin_nav = 1 ;
}
};
fin_nav = 0 ;
d i s a b l e _ i n t e r r u p t s (INT_TIMER1) ;
}

v o i d navega ( ) {

e n a b l e _ i n t e r r u p t s (INT_EXT) ;
fin_nav = 0 ;
while ( fin_nav==0){
navegacion ( ) ;
i f ( ! input (START) ) {
fin_nav = 1 ;
}
}
fin_nav = 0 ;
set_pwm4_duty ( 0 ) ;
set_pwm5_duty ( 0 ) ;
d i s a b l e _ i n t e r r u p t s (INT_EXT) ;
delay_ms ( 2 0 0 0 ) ;
}

void a j u s t e ( ) {
Calibrate_Gyros ( ) ;
Calibrate_Accel () ;
calibrado_ir () ;
}

v o i d main ( ) {
Micro-Robot Trazador de Trayectorias 103

output_high (LED) ;
usb_inicio () ;
inicio () ;

while (TRUE) {
output_low (LED) ;
i f ( ! input (SELECT) ) {
fin_usb = 0 ;
output_high (LED) ;
do {
i f ( usb_cdc_connected ( ) ) {
rut_usb ( ) ;
}
} while ( f i n _ u s b==0) ;
f i n _ u s b =0;
}
i f ( ! input (START) ) {
output_high (LED) ;
s w i t c h ( mode ) {
case 0:
track_navega ( ) ;
delay_ms ( 1 0 0 0 ) ;
break ;
case 1:
track () ;
delay_ms ( 1 0 0 0 ) ;
break ;
case 2:
delay_ms ( 2 0 0 0 ) ;
navega ( ) ;
break ;
case 3:
ajuste () ;
delay_ms ( 1 0 0 0 ) ;
break ;
default :
break ;
}
}
}
}
Micro-Robot Trazador de Trayectorias 104
ANEXO C Algoritmos de
trazado: diagramas de flujo y
código en Matlab

105
Micro-Robot Trazador de Trayectorias 106

Diagramas de Flujo
Micro-Robot Trazador de Trayectorias 107
Micro-Robot Trazador de Trayectorias 108
Micro-Robot Trazador de Trayectorias 109
Micro-Robot Trazador de Trayectorias 110

Codigo para Matlab


Algoritmo de ángulos de Euler calculados directamente

close a l l
clear a l l

p a t h d a t a = ’E : \ P r o y e c t o s ␣ Matlab \ s p i r a l S t a i r s . c s v ’ ;
dato_raw = csvread ( pathdata , 1 , 0 ) ;

g = 9.81;
periodo = 1/256;

numero_datos = length ( dato_raw ( : , 1 ) ) ;


tiempo = ( 0 : numero_datos − 1 ) ’ ∗ ( p e r i o d o ) ;
g i r o s c o p i o _ x = dato_raw ( : , 2 ) ;
g i r o s c o p i o _ y = dato_raw ( : , 3 ) ;
g i r o s c o p i o _ z = dato_raw ( : , 4 ) ;
a c e l e r a c i o n _ x = dato_raw ( : , 5 ) ;
a c e l e r a c i o n _ y = dato_raw ( : , 6 ) ;
a c e l e r a c i o n _ z = dato_raw ( : , 7 ) ;

%D e t e c c i ó n de p e r d i o d o s e s t a c i o n a r i o s
M a g n i t u d A c e l e r a c i o n = sqrt ( a c e l e r a c i o n _ x . ∗ a c e l e r a c i o n _ x +
aceleracion_y .∗ aceleracion_y + aceleracion_z .∗ aceleracion_z ) ;
CorteFiltro = 0.001;
[ b , a ] = butter (1 , (2∗ C o r t e F i l t r o ) /(1/ periodo ) , ’ high ’ ) ;
MagnitudAceleracionFiltada = f i l t f i l t (b , a , MagnitudAceleracion ) ;
M a g n i t u d A c e l e r a c i o n F i l t a d a = abs ( M a g n i t u d A c e l e r a c i o n F i l t a d a ) ;
CorteFiltro = 5;
[ b , a ] = b u t t e r ( 1 , ( 2 ∗ C o r t e F i l t r o ) / ( 1 / p e r i o d o ) , ’ low ’ ) ;
MagnitudAceleracionFiltada = f i l t f i l t (b , a , MagnitudAceleracionFiltada
);
PeriodoEstacionario = MagnitudAceleracionFiltada < 0 . 0 5 ;

R_euler = zeros ( 3 , 3 ) ;

angulo_x = zeros ( s i z e ( g i r o s c o p i o _ x ) ) ;
angulo_y = zeros ( s i z e ( g i r o s c o p i o _ y ) ) ;
angulo_z = zeros ( s i z e ( g i r o s c o p i o _ z ) ) ;

f o r i = 2 : length ( g i r o s c o p i o _ x )
angulo_x ( i ) = angulo_x ( i −1) + ( d e g 2 r a d ( g i r o s c o p i o _ x ( i ) ) ∗ p e r i o d o ) ;
end

f o r i = 2 : length ( g i r o s c o p i o _ y )
angulo_y ( i ) = angulo_y ( i −1) + ( d e g 2 r a d ( g i r o s c o p i o _ y ( i ) ) ∗ p e r i o d o ) ;
end

f o r i = 2 : length ( g i r o s c o p i o _ z )
angulo_z ( i ) = angulo_z ( i −1) + ( d e g 2 r a d ( g i r o s c o p i o _ z ( i ) ) ∗ p e r i o d o ) ;
end

f o r i = 1 : length ( g i r o s c o p i o _ z )
R_euler ( 1 , 1 ) = cos ( angulo_y ( i ) ) ∗ cos ( angulo_z ( i ) ) ;
R_euler ( 1 , 2 ) = ( cos ( angulo_z ( i ) ) ∗ s i n ( angulo_x ( i ) ) ∗ s i n ( angulo_y ( i ) )
) −(cos ( angulo_x ( i ) ) ∗ s i n ( angulo_z ( i ) ) ) ;
R_euler ( 1 , 3 ) = ( cos ( angulo_x ( i ) ) ∗ cos ( angulo_z ( i ) ) ∗ s i n ( angulo_y ( i ) )
) +( s i n ( angulo_x ( i ) ) ∗ s i n ( angulo_z ( i ) ) ) ;
R_euler ( 2 , 1 ) = cos ( angulo_y ( i ) ) ∗ s i n ( angulo_z ( i ) ) ;
R_euler ( 2 , 2 ) = ( cos ( angulo_z ( i ) ) ∗ cos ( angulo_z ( i ) ) ) −( s i n ( angulo_x ( i
Micro-Robot Trazador de Trayectorias 111

) ) ∗ s i n ( angulo_y ( i ) ) ∗ s i n ( angulo_z ( i ) ) ) ;
R_euler ( 2 , 3 ) = −(cos ( angulo_z ( i ) ) ∗ s i n ( angulo_x ( i ) ) ) +(cos ( angulo_x (
i ) ) ∗ s i n ( angulo_y ( i ) ) ∗ s i n ( angulo_z ( i ) ) ) ;
R_euler ( 3 , 1 ) = −s i n ( angulo_y ( i ) ) ;
R_euler ( 3 , 2 ) = cos ( angulo_y ( i ) ) ∗ s i n ( angulo_x ( i ) ) ;
R_euler ( 3 , 3 ) = cos ( angulo_x ( i ) ) ∗ cos ( angulo_y ( i ) ) ;

a c e l e r a c i o n ( i , 1 ) = ( R_euler ( 1 , 1 ) ∗ a c e l e r a c i o n _ x ( i ) ) +(R_euler ( 1 , 2 ) ∗
a c e l e r a c i o n _ y ( i ) ) +(R_euler ( 1 , 3 ) ∗ a c e l e r a c i o n _ z ( i ) ) ;
a c e l e r a c i o n ( i , 2 ) = ( R_euler ( 2 , 1 ) ∗ a c e l e r a c i o n _ x ( i ) ) +(R_euler ( 2 , 2 ) ∗
a c e l e r a c i o n _ y ( i ) ) +(R_euler ( 2 , 3 ) ∗ a c e l e r a c i o n _ z ( i ) ) ;
a c e l e r a c i o n ( i , 3 ) = ( R_euler ( 3 , 1 ) ∗ a c e l e r a c i o n _ x ( i ) ) +(R_euler ( 3 , 2 ) ∗
a c e l e r a c i o n _ y ( i ) ) +(R_euler ( 3 , 3 ) ∗ a c e l e r a c i o n _ z ( i ) ) ;
end

aceleracion = aceleracion ∗ g ;
aceleracion (: ,3) = aceleracion (: ,3) − g ;

v e l o c i d a d = zeros ( s i z e ( a c e l e r a c i o n ) ) ;

f o r i = 2 : length ( v e l o c i d a d )
velocidad ( i , : ) = velocidad ( i −1 ,:) + ( a c e l e r a c i o n ( i , : ) ∗ periodo ) ;
i f ( P e r i o d o E s t a c i o n a r i o ( i ) == 1 )
velocidad ( i , : ) = [0 0 0 ] ;
end
end

D e r i v a V e l o c i d a d = zeros ( s i z e ( v e l o c i d a d ) ) ;
I n i c i o E s t a c i o n a r i o = find ( [ 0 ; d i f f ( P e r i o d o E s t a c i o n a r i o ) ] == −1) ;
F i n E s t a c i o n a r i o = find ( [ 0 ; d i f f ( P e r i o d o E s t a c i o n a r i o ) ] == 1 ) ;
f o r i = 1 : numel ( F i n E s t a c i o n a r i o )
TasaDeriva = v e l o c i d a d ( F i n E s t a c i o n a r i o ( i ) −1, : ) / ( F i n E s t a c i o n a r i o
( i ) − InicioEstacionario ( i ) ) ;
enum = 1 : ( F i n E s t a c i o n a r i o ( i ) − I n i c i o E s t a c i o n a r i o ( i ) ) ;
D e r i v a = [ enum ’ ∗ TasaDeriva ( 1 ) enum ’ ∗ TasaDeriva ( 2 ) enum ’ ∗ TasaDeriva
(3) ] ;
D e r i v a V e l o c i d a d ( I n i c i o E s t a c i o n a r i o ( i ) : F i n E s t a c i o n a r i o ( i ) −1, : ) =
Deriva ;
end

p o s i c i o n = zeros ( s i z e ( v e l o c i d a d ) ) ;

f o r i = 2 : length ( p o s i c i o n )
posicion ( i , : ) = posicion ( i −1 ,:) + ( velocidad ( i , : ) ∗ periodo ) ;
end

close a l l ;
figure (1) ;
plot3 ( p o s i c i o n ( : , 1 ) , p o s i c i o n ( : , 2 ) , p o s i c i o n ( : , 3 ) ) ;
figure (2) ;
plot ( p o s i c i o n ( : , 1 ) , p o s i c i o n ( : , 2 ) ) ;
Micro-Robot Trazador de Trayectorias 112

Algoritmo de angulos de Euler calculados con filtro de Kalman

close a l l
clear a l l

p a t h d a t a = ’E : \ P r o y e c t o s ␣ Matlab \ s p i r a l S t a i r s . c s v ’ ;
dato_raw = csvread ( pathdata , 1 , 0 ) ;

g = 9.81;
periodo = 1/256;

numero_datos = length ( dato_raw ( : , 1 ) ) ;


tiempo = ( 0 : numero_datos − 1 ) ’ ∗ ( p e r i o d o ) ;
g i r o s c o p i o _ x = d e g 2 r a d ( dato_raw ( : , 2 ) ) ;
g i r o s c o p i o _ y = d e g 2 r a d ( dato_raw ( : , 3 ) ) ;
g i r o s c o p i o _ z = d e g 2 r a d ( dato_raw ( : , 4 ) ) ;
a c e l e r a c i o n _ x = dato_raw ( : , 5 ) ;
a c e l e r a c i o n _ y = dato_raw ( : , 6 ) ;
a c e l e r a c i o n _ z = dato_raw ( : , 7 ) ;

%D e t e c c i ó n de p e r d i o d o e s t a c i o n a r i o s
M a g n i t u d A c e l e r a c i o n = sqrt ( a c e l e r a c i o n _ x . ∗ a c e l e r a c i o n _ x +
aceleracion_y .∗ aceleracion_y + aceleracion_z .∗ aceleracion_z ) ;
CorteFiltro = 0.001;
[ b , a ] = butter (1 , (2∗ C o r t e F i l t r o ) /(1/ periodo ) , ’ high ’ ) ;
MagnitudAceleracionFiltada = f i l t f i l t (b , a , MagnitudAceleracion ) ;
M a g n i t u d A c e l e r a c i o n F i l t a d a = abs ( M a g n i t u d A c e l e r a c i o n F i l t a d a ) ;
CorteFiltro = 5;
[ b , a ] = b u t t e r ( 1 , ( 2 ∗ C o r t e F i l t r o ) / ( 1 / p e r i o d o ) , ’ low ’ ) ;
MagnitudAceleracionFiltada = f i l t f i l t (b , a , MagnitudAceleracionFiltada
);
PeriodoEstacionario = MagnitudAceleracionFiltada < 0 . 0 5 ;

aceleracion_x = aceleracion_x ∗g ;
aceleracion_y = aceleracion_x ∗g ;
aceleracion_z = aceleracion_x ∗g ;

P_x = [ 1 , 0 ; 0 , 1 ] ; %M a t r i z de c o v a r i a n z a
P_y = [ 1 , 0 ; 0 , 1 ] ; %M a t r i z de c o v a r i a n z a
R_angle = 0 . 3 ;
Q_angle = 0 . 0 0 1 ;
Q_gyro = 0 . 0 0 3 ;

%V a l o r e s i n i c i a l e s
w_bias_giro_x = 0 ;
w_bias_giro_y = 0 ;
angulo_x_k = zeros ( s i z e ( g i r o s c o p i o _ x ) ) ;
angulo_y_k = zeros ( s i z e ( g i r o s c o p i o _ y ) ) ;
angulo_z_k = zeros ( s i z e ( g i r o s c o p i o _ z ) ) ;
angulo_x_a = zeros ( s i z e ( a c e l e r a c i o n _ x ) ) ;
angulo_y_a = zeros ( s i z e ( a c e l e r a c i o n _ y ) ) ;
angulo_x_w = zeros ( s i z e ( g i r o s c o p i o _ x ) ) ;
angulo_y_w = zeros ( s i z e ( g i r o s c o p i o _ y ) ) ;
angulo_z_w = zeros ( s i z e ( g i r o s c o p i o _ z ) ) ;
R_euler=zeros ( 3 , 3 ) ;

f o r i =2: length ( g i r o s c o p i o _ x ) ,
%Sin f i l t r o de Kalman
angulo_z_w ( i )= angulo_z_k ( i −1)+( g i r o s c o p i o _ z ( i ) ∗ p e r i o d o ) ;

%Angulo con f i l t r o de Kalman


angulo_x_k ( i )=angulo_x_k ( i −1)+( g i r o s c o p i o _ x ( i )−w_bias_giro_x ) ∗
Micro-Robot Trazador de Trayectorias 113

periodo ;
angulo_y_k ( i )=angulo_y_k ( i −1)+( g i r o s c o p i o _ y ( i )−w_bias_giro_y ) ∗
periodo ;

Pdot_x = [ ( Q_angle−P_x( 1 , 2 )−P_x( 2 , 1 ) ) , −P_x( 2 , 2 ) , −P_x( 2 , 2 ) ,


Q_gyro ] ;
Pdot_y = [ ( Q_angle−P_y( 1 , 2 )−P_y( 2 , 1 ) ) , −P_y( 2 , 2 ) , −P_x( 2 , 2 ) ,
Q_gyro ] ;

%A c t u a l i z a m o s m a t r i z de c o v a r i a n z a
P_x( 1 , 1 ) = P_x( 1 , 1 ) + Pdot_x ( 1 ) ∗ p e r i o d o ;
P_x( 1 , 2 ) = P_x( 1 , 2 ) + Pdot_x ( 2 ) ∗ p e r i o d o ;
P_x( 2 , 1 ) = P_x( 2 , 1 ) + Pdot_x ( 3 ) ∗ p e r i o d o ;
P_x( 2 , 2 ) = P_x( 2 , 2 ) + Pdot_x ( 4 ) ∗ p e r i o d o ;
P_y( 1 , 1 ) = P_y( 1 , 1 ) + Pdot_y ( 1 ) ∗ p e r i o d o ;
P_y( 1 , 2 ) = P_y( 1 , 2 ) + Pdot_y ( 2 ) ∗ p e r i o d o ;
P_y( 2 , 1 ) = P_y( 2 , 1 ) + Pdot_y ( 3 ) ∗ p e r i o d o ;
P_y( 2 , 2 ) = P_y( 2 , 2 ) + Pdot_y ( 4 ) ∗ p e r i o d o ;

%Angulo e x t r a i d o de l o s a c e l e r o m e t r o s
i f ( sqrt ( ( a c e l e r a c i o n _ y ( i ) ) ^2 + ( a c e l e r a c i o n _ z ( i ) ) ^2 ) ) == 0
angulo_x_a ( i ) = pi / 2 ;
else
angulo_x_a ( i ) = −(atan ( a c e l e r a c i o n _ x ( i ) / sqrt ( ( a c e l e r a c i o n _ y (
i ) ) ^2 + ( a c e l e r a c i o n _ z ( i ) ) ^2 ) ) ) ;
end

i f ( sqrt ( ( a c e l e r a c i o n _ x ( i ) ) ^2 + ( a c e l e r a c i o n _ z ( i ) ) ^2 ) ) == 0
angulo_y_a ( i ) = pi / 2 ;
else
angulo_y_a ( i ) = −(atan ( a c e l e r a c i o n _ y ( i ) / sqrt ( ( a c e l e r a c i o n _ x (
i ) ) ^2 + ( a c e l e r a c i o n _ z ( i ) ) ^2 ) ) ) ;
end

error_angulo_x=angulo_x_a ( i )−angulo_x_k ( i ) ;
error_angulo_y=angulo_y_a ( i )−angulo_y_k ( i ) ;

K0_x=P_x( 1 , 1 ) / ( R_angle+P_x( 1 , 1 ) ) ;
K1_x=P_x( 2 , 1 ) / ( R_angle+P_x( 1 , 1 ) ) ;
K0_y=P_y( 1 , 1 ) / ( R_angle+P_y( 1 , 1 ) ) ;
K1_y=P_y( 2 , 1 ) / ( R_angle+P_y( 1 , 1 ) ) ;

P_x( 1 , 1 )=P_x( 1 , 1 ) −(K0_x∗P_x( 1 , 1 ) ) ;


P_x( 1 , 2 )=P_x( 1 , 2 ) −(K0_x∗P_x( 1 , 2 ) ) ;
P_x( 2 , 1 )=P_x( 2 , 1 ) −(K1_x∗P_x( 1 , 1 ) ) ;
P_x( 2 , 2 )=P_x( 2 , 2 ) −(K1_x∗P_x( 1 , 2 ) ) ;
P_y( 1 , 1 )=P_y( 1 , 1 ) −(K0_y∗P_y( 1 , 1 ) ) ;
P_y( 1 , 2 )=P_y( 1 , 2 ) −(K0_y∗P_y( 1 , 2 ) ) ;
P_y( 2 , 1 )=P_y( 2 , 1 ) −(K1_y∗P_y( 1 , 1 ) ) ;
P_y( 2 , 2 )=P_y( 2 , 2 ) −(K1_y∗P_y( 1 , 2 ) ) ;

angulo_x_k ( i ) = angulo_x_k ( i ) + (K0_x∗ error_angulo_x ) ;


angulo_y_k ( i ) = angulo_y_k ( i ) + (K0_y∗ error_angulo_y ) ;
angulo_z_k ( i ) = angulo_z_w ( i ) ;

w_bias_giro_x = w_bias_giro_x + (K1_y∗ error_angulo_x ) ;


w_bias_giro_y = w_bias_giro_y + (K1_y∗ error_angulo_y ) ;
end

f o r i =1: length ( angulo_x_k ) ,


R_euler ( 1 , 1 ) = cos ( angulo_y_k ( i ) ) ∗ cos ( angulo_z_k ( i ) ) ;
R_euler ( 1 , 2 ) = ( cos ( angulo_z_k ( i ) ) ∗ s i n ( angulo_x_k ( i ) ) ∗ s i n (
Micro-Robot Trazador de Trayectorias 114

angulo_y_k ( i ) ) ) −(cos ( angulo_x_k ( i ) ) ∗ s i n ( angulo_z_k ( i ) ) ) ;


R_euler ( 1 , 3 ) = ( cos ( angulo_x_k ( i ) ) ∗ cos ( angulo_z_k ( i ) ) ∗ s i n (
angulo_y_k ( i ) ) ) +( s i n ( angulo_x_k ( i ) ) ∗ s i n ( angulo_z_k ( i ) ) ) ;
R_euler ( 2 , 1 ) = cos ( angulo_y_k ( i ) ) ∗ s i n ( angulo_z_k ( i ) ) ;
R_euler ( 2 , 2 ) = ( cos ( angulo_z_k ( i ) ) ∗ cos ( angulo_z_k ( i ) ) ) −( s i n (
angulo_x_k ( i ) ) ∗ s i n ( angulo_y_k ( i ) ) ∗ s i n ( angulo_z_k ( i ) ) ) ;
R_euler ( 2 , 3 ) = −(cos ( angulo_z_k ( i ) ) ∗ s i n ( angulo_x_k ( i ) ) ) +(cos (
angulo_x_k ( i ) ) ∗ s i n ( angulo_y_k ( i ) ) ∗ s i n ( angulo_z_k ( i ) ) ) ;
R_euler ( 3 , 1 ) = −s i n ( angulo_y_k ( i ) ) ;
R_euler ( 3 , 2 ) = cos ( angulo_y_k ( i ) ) ∗ s i n ( angulo_x_k ( i ) ) ;
R_euler ( 3 , 3 ) = cos ( angulo_x_k ( i ) ) ∗ cos ( angulo_y_k ( i ) ) ;

a c e l e r a c i o n ( i , 1 ) = ( R_euler ( 1 , 1 ) ∗ dato_raw ( i , 5 ) ) +(R_euler ( 1 , 2 ) ∗


dato_raw ( i , 6 ) ) +(R_euler ( 1 , 3 ) ∗ dato_raw ( i ,7) ) ;
a c e l e r a c i o n ( i , 2 ) = ( R_euler ( 2 , 1 ) ∗ dato_raw ( i , 5 ) ) +(R_euler ( 2 , 2 ) ∗
dato_raw ( i , 6 ) ) +(R_euler ( 2 , 3 ) ∗ dato_raw ( i ,7) ) ;
a c e l e r a c i o n ( i , 3 ) = ( R_euler ( 3 , 1 ) ∗ dato_raw ( i , 5 ) ) +(R_euler ( 3 , 2 ) ∗
dato_raw ( i , 6 ) ) +(R_euler ( 3 , 3 ) ∗ dato_raw ( i ,7) ) ;
end
aceleracion = aceleracion ∗ g ;
aceleracion (: ,3) = aceleracion (: ,3) − g ;

v e l o c i d a d = zeros ( s i z e ( a c e l e r a c i o n ) ) ;

f o r i = 2 : length ( v e l o c i d a d )
velocidad ( i , : ) = velocidad ( i −1 ,:) + ( a c e l e r a c i o n ( i , : ) ∗ periodo ) ;
i f ( P e r i o d o E s t a c i o n a r i o ( i ) == 1 )
velocidad ( i , : ) = [0 0 0 ] ;
end
end

D e r i v a V e l o c i d a d = zeros ( s i z e ( v e l o c i d a d ) ) ;
I n i c i o E s t a c i o n a r i o = find ( [ 0 ; d i f f ( P e r i o d o E s t a c i o n a r i o ) ] == −1) ;
F i n E s t a c i o n a r i o = find ( [ 0 ; d i f f ( P e r i o d o E s t a c i o n a r i o ) ] == 1 ) ;
f o r i = 1 : numel ( F i n E s t a c i o n a r i o )
TasaDeriva = v e l o c i d a d ( F i n E s t a c i o n a r i o ( i ) −1, : ) / ( F i n E s t a c i o n a r i o
( i ) − InicioEstacionario ( i ) ) ;
enum = 1 : ( F i n E s t a c i o n a r i o ( i ) − I n i c i o E s t a c i o n a r i o ( i ) ) ;
D e r i v a = [ enum ’ ∗ TasaDeriva ( 1 ) enum ’ ∗ TasaDeriva ( 2 ) enum ’ ∗ TasaDeriva
(3) ] ;
D e r i v a V e l o c i d a d ( I n i c i o E s t a c i o n a r i o ( i ) : F i n E s t a c i o n a r i o ( i ) −1, : ) =
Deriva ;
end

velocidad = velocidad − DerivaVelocidad ;

p o s i c i o n = zeros ( s i z e ( v e l o c i d a d ) ) ;

f o r i = 2 : length ( p o s i c i o n )
posicion ( i , : ) = posicion ( i −1 ,:) + ( velocidad ( i , : ) ∗ periodo ) ;
end

close a l l ;
plot3 ( p o s i c i o n ( : , 1 ) , p o s i c i o n ( : , 2 ) , p o s i c i o n ( : , 3 ) ) ;
figure (2) ;
plot ( p o s i c i o n ( : , 1 ) , p o s i c i o n ( : , 2 ) ) ;
Micro-Robot Trazador de Trayectorias 115

Algoritmo de calculo de cuaterniones

close a l l
clear a l l
addpath ( ’ F u n c i o n e s ’ ) ;

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

%I n i c i a l i z a c i ó n de v a r i a b l e s y d a t o s

f i l e P a t h = ’E : \ P r o y e c t o s ␣ Matlab \ s p i r a l S t a i r s . c s v ’ ;
Periodo = 1/256;
g = 9.81;

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

%Recogida de d a t o s
data_raw = csvread ( f i l e P a t h , 1 , 0 ) ;

%Como l o s d a t o s d e l e j e m p l o ya e s t a n p a s a d o s a G y º / s no s e hace nada


%mas . S i Fuesen d a t o s RAW ( e s d e c i r , s i n t r a t a r , hay que m o d i f i c a r l o s
%s i g u i e n d o l a s i g u i e n t e e c u a c i ó n :
% a c e l e r a c i o n _ i = ( ( data_raw − b i a s ( en h o r i z o n t a l (0 G’ s ) ) ) ∗(1/
sensibilidad ))
% g i r c o s c o p i o _ i = ( ( data_raw − b i a s ( e s t a t i c o ( c o r i o l i s ) ) ∗(1/
sensibilidad ))
numero_datos = length ( data_raw ( : , 1 ) ) ;
tiempo = ( 0 : numero_datos − 1 ) ’ ∗ ( P e r i o d o ) ;
g i r o s c o p i o _ x = data_raw ( : , 2 ) ;
g i r o s c o p i o _ y = data_raw ( : , 3 ) ;
g i r o s c o p i o _ z = data_raw ( : , 4 ) ;
a c e l e r a c i o n _ x = data_raw ( : , 5 ) ;
a c e l e r a c i o n _ y = data_raw ( : , 6 ) ;
a c e l e r a c i o n _ z = data_raw ( : , 7 ) ;

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

%C a l c u l o de l o s p e r i o d o s e s t a c i o n a r i o s ( a ~0)
% C a l c u l o de l a magnitud de l a a c e l e r a c i ó n
M a g n i t u d A c e l e r a c i o n = sqrt ( a c e l e r a c i o n _ x . ∗ a c e l e r a c i o n _ x +
aceleracion_y .∗ aceleracion_y + aceleracion_z .∗ aceleracion_z ) ;

% F i l t r o paso a l t o para l o s d a t o s de l a a c e l e r a c i ó n
CorteFiltro = 0.001;
[ b , a ] = butter (1 , (2∗ C o r t e F i l t r o ) /(1/ Periodo ) , ’ high ’ ) ;
MagnitudAceleracionFiltada = f i l t f i l t (b , a , MagnitudAceleracion ) ;

% Calculo del valor absoluto


M a g n i t u d A c e l e r a c i o n F i l t a d a = abs ( M a g n i t u d A c e l e r a c i o n F i l t a d a ) ;

% F i l t r o paso b a j o para l o s d a t o s de l a a c e l e r a c i ó n
CorteFiltro = 5;
[ b , a ] = b u t t e r ( 1 , ( 2 ∗ C o r t e F i l t r o ) / ( 1 / P e r i o d o ) , ’ low ’ ) ;
MagnitudAceleracionFiltada = f i l t f i l t (b , a ,
MagnitudAceleracionFiltada ) ;

% L í m i t e de d e t e c c i ó n
PeriodoEstacionario = MagnitudAceleracionFiltada < 0 . 0 5 ;
Micro-Robot Trazador de Trayectorias 116

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% G r a f i c a de l o s d a t o s d e l s e n s o r , l o s p e r i o d o s e s t a c i o n a r i o s y l o s
datos
% filtrados
f i g u r e ( ’ P o s i t i o n ’ , [ 9 39 900 6 0 0 ] , ’ Number ’ , ’ o f f ’ , ’Name ’ , ’
S e n s o r ␣ Data ’ ) ;
ax ( 1 ) = subplot ( 2 , 1 , 1 ) ;
hold on ;
plot ( tiempo , g i r o s c o p i o _ x , ’ r ’ ) ;
plot ( tiempo , g i r o s c o p i o _ y , ’ g ’ ) ;
plot ( tiempo , g i r o s c o p i o _ z , ’ b ’ ) ;
title ( ’ Giroscopio ’ ) ;
xlabel ( ’ Time␣ ( s ) ’ ) ;
ylabel ( ’ V e l o c i d a d ␣ Angular ␣ (^\ c i r c / s ) ’ ) ;
legend ( ’X ’ , ’Y ’ , ’ Z ’ ) ;
hold o f f ;
ax ( 2 ) = subplot ( 2 , 1 , 2 ) ;
hold on ;
plot ( tiempo , a c e l e r a c i o n _ x , ’ r ’ ) ;
plot ( tiempo , a c e l e r a c i o n _ y , ’ g ’ ) ;
plot ( tiempo , a c e l e r a c i o n _ z , ’ b ’ ) ;
plot ( tiempo , M a g n i t u d A c e l e r a c i o n F i l t a d a , ’ : k ’ ) ;
plot ( tiempo , P e r i o d o E s t a c i o n a r i o , ’ k ’ , ’ LineWidth ’ , 2 ) ;
t i t l e ( ’ Acelerometro ’ ) ;
xlabel ( ’ Time␣ ( s ) ’ ) ;
ylabel ( ’ A c e l e r a c i ó n ␣ ( g ) ’ ) ;
legend ( ’X ’ , ’Y ’ , ’ Z ’ , ’ F i l t e r e d ’ , ’ S t a t i o n a r y ’ ) ;
hold o f f ;
l i n k a x e s ( ax , ’ x ’ ) ;

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% C a l c u l o de l a c o n v e r g e n c i a i n i c i a l d e l c u a t e r n i ó n
% Esto s e r e a l i a z a para t e n e r una v a l o r i n i c i a l d e l c u a t e r n i ó n de
% referencia .

K p I n i t =1;
Kp=1;
Ki =0;

C u a t e r i o n = zeros ( length ( tiempo ) , 4 ) ; %C u a t e r i o n e s de t o d a s l a s


p o s i c i o n e s d e s c r i t a s por e l s i s t e m a
cuat = [ 1 0 0 0 ] ; %C ua te rn ió n de l a p o s i c i ó n
d e l s i s t e m a con r e s p e c t o a l o s e j e s f i j o s
q = [1 0 0 0 ] ; %C ua te rn io n de l a p o s i c i ó n
de l o s e j e s f i j o s con r e s p e c t o a l s i s t e m a
ErrorIntegral = [0 0 0] ’; %Error i n t e g r a l
KpRamped=K p I n i t ; %Ganancia p r o p o r c i o n a l
usada para l a i n i c i a l i z a c i ó n
PeriodoInicial = 2;

i n d e x S e l = 1 : find ( sign ( tiempo −( tiempo ( 1 )+P e r i o d o I n i c i a l ) ) +1 , 1 ) ;


media_acc =[mean( a c e l e r a c i o n _ x ( i n d e x S e l ) ) mean( a c e l e r a c i o n _ y (
i n d e x S e l ) ) mean( a c e l e r a c i o n _ z ( i n d e x S e l ) ) ] ;
media_gyr =[0 0 0 ] ;

f o r i =1:2000
i f (norm( media_acc ) == 0 )
warning ( 0 , ’ V a l o r ␣ de ␣ l a ␣ a c e l e r a c i ó n ␣ e s ␣ n u l o . ␣ A l g o r i t m o ␣
Micro-Robot Trazador de Trayectorias 117

abortado . ’ ) ;
return ;
else
media_acc = media_acc / norm( media_acc ) ; %Valor
n o r m a l i z a d o de l a a c e l e r a c i ó n
end
v = [ 2 ∗ ( q ( 2 ) ∗q ( 4 ) − q ( 1 ) ∗q ( 3 ) )
2 ∗ ( q ( 1 ) ∗q ( 2 ) + q ( 3 ) ∗q ( 4 ) )
q ( 1 ) ^2 − q ( 2 ) ^2 − q ( 3 ) ^2 + q ( 4 ) ^ 2 ] ; %
E s t i m a c i ó n de l a d i r e c c i ó n de l a g r a v e d a d
error = cross ( v , media_acc ’ ) ; %
Producto c r u z a d o de l a a c e l e r a c i ó n y l a g r a v e d a d e s t i m a d a
E r r o r I n t e g r a l = E r r o r I n t e g r a l + error ;
%Acumulación d e l e r r o r
Ref = media_gyr − (Kp∗ error + Ki ∗ E r r o r I n t e g r a l ) ’ ; %
Valor d e l g i r o s c ó p i o c o r r e g i d o
pDot = 0 . 5 ∗ ProductoCuat ( q , [ 0 Ref ( 1 ) Ref ( 2 ) Ref ( 3 ) ] ) ; %
C a l c u l o de l a t a s a de cambio d e l c u a t e r n i o n
q = q + pDot ∗ P e r i o d o ; %
I n t e g r a c i ó n de l a t a s a de cambio d e l c u a t e r n i o n
q = q / norm( q ) ; %
Normalización d e l cuaternion
inv_q = ConjugadoCuat ( q ) ; %
I n v e r s a d e l c u a t e r n i o n para cambiar de e j e s
inv_q = inv_q /norm( inv_q ) ; %
N o r m a l i z a c i ó n de l a i n v e r s a d e l c u a t e r n i o n
c u a t = inv_q ; %
Acumulamos e l v a l o r d e l c u a t e r n i ó n
q = ConjugadoCuat ( inv_q ) ; %
Volvemos a i n v e r t i r e l c u a t e r n i ó n para v o l v e r a l o s e j e s
del sistema
end

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% C a l c u l o de l a o r i e n t a c i ó n d e l c u a t e r n i ó n en cada i n s t a n t e
% Se e s t i m a l a o r i e n t a c i ó n d e l s i s t e m a en cada i n s t a n t e r e g i s t r a d o por
los
% sensore

f o r t = 1 : length ( tiempo )
i f ( PeriodoEstacionario ( t ) )
%S i s e
t r a t a de un p e r i o d o e s t a c i o n a r i o s e l e da mas g a n a c i a a l
sistema
Kp = 0 . 5 ;
else
Kp = 0 ;

%En c a s o de no s e r p e r i o d o e s t a c i o n a r i o s e a n u l a l a
ganancia
end
g i r o s c o p i o = deg2rad ( [ giroscopio_x ( t ) giroscopio_y ( t )
giroscopio_z ( t ) ] ) ; %Convertimos e l v a l o r d e l g i r o s c ó p i o
de Grados a Racianes y creamos un v e c t o r con e s o s d a t o s
aceleracion = [ aceleracion_x ( t ) aceleracion_y ( t ) aceleracion_z
(t) ]; %Creamos un v e c t o r con l o s d a t o s de l a
a c e l e r a c i o n en e l i n s t a n t e t

i f (norm( a c e l e r a c i o n ) == 0 )
warning ( 0 , ’ V a l o r ␣ de ␣ l a ␣ a c e l e r a c i ó n ␣ e s ␣ n u l o . ␣ A l g o r i t m o ␣
Micro-Robot Trazador de Trayectorias 118

abortado . ’ ) ;
return ;
else
a c e l e r a c i o n = a c e l e r a c i o n / norm( a c e l e r a c i o n ) ;
%Valor n o r m a l i z a d o de l a
aceleració
end

v = [ 2 ∗ ( q ( 2 ) ∗q ( 4 ) − q ( 1 ) ∗q ( 3 ) )
2 ∗ ( q ( 1 ) ∗q ( 2 ) + q ( 3 ) ∗q ( 4 ) )
q ( 1 ) ^2 − q ( 2 ) ^2 − q ( 3 ) ^2 + q ( 4 ) ^ 2 ] ;
%E s t i m a c i ó n de l a
d i r e c c i ó n de l a g r a v e d a d
error = cross ( v , a c e l e r a c i o n ’ ) ;
%Producto
c r u z a d o de l a a c e l e r a c i ó n y l a g r a v e d a d e s t i m a d a
E r r o r I n t e g r a l = E r r o r I n t e g r a l + error ;
%
Acumulación d e l e r r o r
Ref = g i r o s c o p i o − (Kp∗ error + Ki ∗ E r r o r I n t e g r a l ) ’ ;
%Valor d e l g i r o s c ó p i o
corregido
pDot = 0 . 5 ∗ ProductoCuat ( q , [ 0 Ref ( 1 ) Ref ( 2 ) Ref ( 3 ) ] ) ;
%C a l c u l o de l a t a s a de cambio d e l
cuaternion
q = q + pDot ∗ P e r i o d o ;
%
I n t e g r a c i ó n de l a t a s a de cambio d e l c u a t e r n i o n
q = q / norm( q ) ;

%N o r m a l i z a c i ó n d e l c u a t e r n i o n
inv_q = ConjugadoCuat ( q ) ;
%I n v e r s a
d e l c u a t e r n i o n para cambiar de e j e s
inv_q = inv_q /norm( inv_q ) ;
%
N o r m a l i z a c i ó n de l a i n v e r s a d e l c u a t e r n i o n
c u a t = inv_q ;

%Acumulamos e l v a l o r d e l c u a t e r n i ó n
q = ConjugadoCuat ( inv_q ) ;
%
Volvemos a i n v e r t i r e l c u a t e r n i ó n para v o l v e r a l o s e j e s
del sistema
Cuaternion ( t , : ) = cuat ;
%
Almacenamos e l v a l o r d e l c u a t e r n i ó n
end

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% C a l c u l o de l a d i r e c c i ó n de l a a c e l e r a c i ó n

a c e l e r a c i o n = RotacionCuat ( [ a c e l e r a c i o n _ x a c e l e r a c i o n _ y
a c e l e r a c i o n _ z ] , ConjugadoCuat ( C u a t e r n i o n ) ) ; %Posicionamos l a
aceleración respecto a los ejes f i j o s
aceleracion = aceleracion ∗ g ;

%Convertimos de G’ s a m/ s ∗ s

%
Micro-Robot Trazador de Trayectorias 119

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% G r a f i c a de l a a c e l e r a c i ó n

f i g u r e ( ’ P o s i t i o n ’ , [ 9 39 900 3 0 0 ] , ’ Number ’ , ’ o f f ’ , ’Name ’ , ’


Accelerations ’ ) ;
hold on ;
plot ( tiempo , a c e l e r a c i o n ( : , 1 ) , ’ r ’ ) ;
plot ( tiempo , a c e l e r a c i o n ( : , 2 ) , ’ g ’ ) ;
plot ( tiempo , a c e l e r a c i o n ( : , 3 ) , ’ b ’ ) ;
title ( ’ Aceleración ’ ) ;
xlabel ( ’ Time␣ ( s ) ’ ) ;
ylabel ( ’ A c e l e r a c i ó n ␣ (m/ s ∗ s ) ’ ) ;
legend ( ’X ’ , ’Y ’ , ’ Z ’ ) ;
hold o f f ;

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% C a l c u l o de l a v e l o c i d a d d e l s i s t e m a

aceleracion (: ,3) = aceleracion (: ,3) − g ;


%Compesamos l a
a c e l e r a c i ó n de l a g r a v e d a d en e l e j e v e r t i c a l

v e l o c i d a d = zeros ( s i z e ( a c e l e r a c i o n ) ) ;
f o r t = 2 : length ( v e l o c i d a d )
velocidad ( t , : ) = velocidad ( t −1 ,:) + a c e l e r a c i o n ( t , : ) ∗ Periodo
; %I n t e g r a m o s l a a c e l e r a c i ó n para
obtener la velocidad
i f ( P e r i o d o E s t a c i o n a r i o ( t ) == 1 )
velocidad ( t , : ) = [0 0 0 ] ;

%S i s e t r a t a de un p e r i o d o e s t a c i o n a r i o f o r z a m o s una
v e l o c i d a d nula
end
end

D e r i v a V e l o c i d a d = zeros ( s i z e ( v e l o c i d a d ) ) ;
I n i c i o E s t a c i o n a r i o = find ( [ 0 ; d i f f ( P e r i o d o E s t a c i o n a r i o ) ] == −1) ;
F i n E s t a c i o n a r i o = find ( [ 0 ; d i f f ( P e r i o d o E s t a c i o n a r i o ) ] == 1 ) ;
f o r i = 1 : numel ( F i n E s t a c i o n a r i o )
TasaDeriva = v e l o c i d a d ( F i n E s t a c i o n a r i o ( i ) −1, : ) / (
FinEstacionario ( i ) − InicioEstacionario ( i ) ) ;
enum = 1 : ( F i n E s t a c i o n a r i o ( i ) − I n i c i o E s t a c i o n a r i o ( i ) ) ;
D e r i v a = [ enum ’ ∗ TasaDeriva ( 1 ) enum ’ ∗ TasaDeriva ( 2 ) enum ’ ∗
TasaDeriva ( 3 ) ] ;
D e r i v a V e l o c i d a d ( I n i c i o E s t a c i o n a r i o ( i ) : F i n E s t a c i o n a r i o ( i ) −1, : )
= Deriva ;
end

velocidad = velocidad − DerivaVelocidad ;

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% G r a f i c a de l a v e l o c i d a d

f i g u r e ( ’ P o s i t i o n ’ , [ 9 39 900 3 0 0 ] , ’ Number ’ , ’ o f f ’ , ’Name ’ , ’


Velocity ’ ) ;
hold on ;
Micro-Robot Trazador de Trayectorias 120

plot ( tiempo , v e l o c i d a d ( : , 1 ) , ’ r ’ ) ;
plot ( tiempo , v e l o c i d a d ( : , 2 ) , ’ g ’ ) ;
plot ( tiempo , v e l o c i d a d ( : , 3 ) , ’ b ’ ) ;
t i t l e ( ’ Velocidad ’ ) ;
xlabel ( ’ Time␣ ( s ) ’ ) ;
ylabel ( ’ V e l o c i d a d ␣ (m/ s ) ’ ) ;
legend ( ’X ’ , ’Y ’ , ’ Z ’ ) ;
hold o f f ;

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% C a l c u l o de l a p o s i c i ó n d e l s i s t e m a

p o s i c i o n = zeros ( s i z e ( v e l o c i d a d ) ) ;
f o r t = 2 : length ( p o s i c i o n )
p o s i c i o n ( t , : ) = p o s i c i o n ( t −1 ,:) + velocidad ( t , : ) ∗ Periodo ;
%i n t e g r a m o s l a v e l o c i d a d para o b t e n e r l a p o s i c i ó n
end

%
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

% G r a f i c a de l a p o s i c i ó n

f i g u r e ( ’ P o s i t i o n ’ , [ 9 39 900 600] , ’ Number ’ , ’ o f f ’ , ’Name ’ , ’


Position ’ ) ;
hold on ;
plot ( tiempo , p o s i c i o n ( : , 1 ) , ’r ’);
plot ( tiempo , p o s i c i o n ( : , 2 ) , ’g ’ ) ;
plot ( tiempo , p o s i c i o n ( : , 3 ) , ’b ’ ) ;
title ( ’ Position ’ ) ;
xlabel ( ’ Time␣ ( s ) ’ ) ;
ylabel ( ’ P o s i t i o n ␣ (m) ’ ) ;
legend ( ’X ’ , ’Y ’ , ’ Z ’ ) ;
hold o f f ;
close a l l ;
hold on ;

close a l l ;
plot3 ( p o s i c i o n ( : , 1 ) , p o s i c i o n ( : , 2 ) , p o s i c i o n ( : , 3 ) ) ;
figure (2) ;
plot ( p o s i c i o n ( : , 1 ) , p o s i c i o n ( : , 2 ) ) ;

S-ar putea să vă placă și