capítulo 1 -...
TRANSCRIPT
3
1. Introducción
1.1 . Introducción
Por décadas los investigadores han estudiado métodos para reproducir los
movimientos de un ser humano en sistemas electromecánicos y robóticos, y que
permitan no solo copiar, sino mejorar, afinar, y usarlos en el bienestar de la humanidad.
En la actualidad la tele operación provee protección e incrementa la maniobrabilidad de
los operadores, esto se ve en industria química, maquinaria de construcción, maquinaria
de minería, etc. Una de las aplicaciones más exigentes es la medicina, la cual requiere
un estricto control del sistema robótico que asiste a un cirujano. En este caso es muy
importante la afinación de los movimientos del tele operador y para ello se usa
algoritmos que reducen el ruido y las oscilaciones. Los filtros de Kalman son usados
normalmente para estos propósitos [1].
El sistema transmite los datos desde el tele operador hasta el robot. En este
trabajo se han usado transmisores inalámbricos RF de tipo Zig-Bee. Además se ha
analizado la forma de interrumpir el menor tiempo posible al controlador del robot.
Seleccionar un controlador óptimo para esta aplicación es muy importante. Los
controladores borrosos son utilizados para múltiples aplicaciones de control complejas
[2],[3] o para ajustar un controlador previamente diseñado [4]. Se propone el uso de
controladores borrosos para esta aplicación porque facilita el trabajo con sistemas no
lineales y reduce el trabajo con ecuaciones de la planta.
Existen diferentes técnicas para capturar movimientos humanos [5], como
visualización usando cámaras [6], con sensores en el cuerpo (biomecánica) [5] o
externos [4], por animación computarizada usando descriptores de movimiento [7].
Estas técnicas reproducen movimientos básicos como líneas círculos, etc. y sus
parámetros correspondientes. Todos los movimientos humanos son descritos con estos
movimientos básicos [6], pero es requerido un gran número de variables [5].
En esta investigación, para capturar los movimientos, se propone usar sensores
en un traje que es operado por una persona. Los movimientos asociados activan los
4 Memoria
sensores, el sistema electrónico lee estos datos y envía esta información mediante RF al
sistema de control ubicado en el robot.
Adicionalmente, como se propuso, se ha usado un control no lineal para
equilibrar el robot. Sin embargo, es importante recordar que este tipo de control causa
mucha carga computacional, más aún, cuando necesita controlar un sistema de varios
grados de libertad como es un robot humanoide [7], [4]. El control implementado es de
tipo borroso, el cual, aunque es no lineal, permite trabar en tiempo real por su rápida
respuesta. Los sensores son tratados como variables de articulaciones, es decir
(articulación, ángulo), en vez de variables cartesianas (x, y) [7]. La segunda opción es
más utilizada, pero se ha usado la primera por razones de eficiencia computacional.
1.2. Estado del Arte
La robótica humanoide ha despertado gran interés en la comunidad científica en
los últimos años, siendo así que hoy en día existen algunos robots diseñados
especialmente para investigación y desarrollo, los cuales por su elevado precio son
adquiridos en su mayoría por laboratorios especializados y universidades. Tal es el caso
del robot Asimo, desarrollado por Honda, el cual tiene como principal objetivo ayudar
en tareas sencillas en el hogar [8] y también es usado por investigadores para desarrollar
mejores algoritmos de movimiento y de interacción con el entorno. Otro Robot
humanoide pero de estatura menor es Nao[9]. Este es usado ampliamente en
competiciones de robótica a nivel internacional, como la Robo-Cup [10] y tantas más,
que promueven la investigación y desarrollo de los mismos. Cabe destacar que el costo
de estos robots es considerable. Un robot Nao para investigación ronda los 13000€.
También son usados para investigación y desarrollo robots de pequeña estatura
que son más asequibles como Robonova [11], Bioloid [12], MechRc [13], etc. siendo
este último el usado en este trabajo para implementar el algoritmo de tele operación.
Estos robots son relativamente económicos y fáciles de reparar en caso de daños.
En diversos centros de investigación, especialmente en las universidades, se
busca continuamente mejorar los sistemas de control que permitan a un robot
humanoide caminar. Es conocido que grupos privados han avanzado mucho en este
campo, como Honda, pero la información no está disponible.
1 Introducción 5
Una solución para construir algoritmos de la caminata humana se basa en copiar los
movimientos de las extremidades de una persona. Así, [4] ha desarrollado un sistema
que captura el movimiento de una pierna a través de diferentes giróscopos y
acelerómetros ubicados en la misma. Éstos miden continuamente la velocidad angular y
la aceleración en cada ciclo de caminata. Un aspecto interesante de este trabajo es que
cuenta con un sistema de inferencia borroso, FIS por sus siglas en inglés, que facilita la
construcción del modelo de la caminata. Un filtro digital elimina los ruidos de la salida
del FIS y brinda robustez al sistema implementado en un robot humanoide "RI”. Se
destaca también que los sensores son de bajo coste y comúnmente usados en
construcción de sistemas de navegación.
(a)Ubicación de sensores (b) Etapas de caminata
Figura 1.1: “A Wearable Sensor System for Human Motion Analysis and Humanoid Robot Control” [4].
En la Fig. 1.1 (a) se observa la ubicación de los sensores y en (b) los cuatro
ciclos de caminata con lo cual se facilita el procesamiento de datos. Las dos salidas de
los giróscopos y las dos de los acelerómetros forman las cuatro entradas del FIS y su
salida es un valor que indica la fase de caminata. El sistema borroso es tipo Mamdani y
es implementado en un computador personal, y desde este se envía en forma
inalámbrica los resultados hasta el controlador del robot.
Este sistema permite que un robot humanoide pequeño pueda realizar
movimientos de caminata.
Siguiendo con esta línea de investigación los autores en [6] presentan una
solución basada en visión artificial. Su trabajo consiste en imitar movimientos humanos,
que previamente han sido capturados por ocho cámaras y ocho computadores
6 Memoria
personales, y reproducirlos en un robot de mediana estatura. Las cámaras están
colocadas geométricamente en posiciones conocidas.
Cada computador captura imágenes de una sola cámara. La medida de
profundidad se establece mediante marcas referenciadas en cada imagen. Se usan 15
puntos de medida para los análisis como son: las manos (I, D), los codos (I, D), los
hombros (I, D), cabeza, centro del cuerpo, cadera, extremos de cintura (I, D), muslos (I,
D) y pies (I, D). Se define la coordenada del centro del cuerpo y se cambian las
coordenadas de las manos y pies a este nuevo sistema. Se calcula la velocidad de los
diferentes puntos y se detecta un mínimo local. Un filtro Gaussiano es aplicado para
evitar errores en la segmentación. Posteriormente se evalúa las trayectorias de los
diferentes puntos y la correlación con sus vecinos, esto permite segmentar el
movimiento y agrupar estos segmentos llamados "Segmentos de movimiento mínimo".
Los movimientos completos del robot se rigen por concatenaciones de estos segmentos
de movimiento.
(a) Vista general del sistema (b) Algoritmo de generación del movimiento
Figura 1.2: Imitating Human Dance Motions through Motion Structure Analysis [6].
Se destaca que los autores combinan cinemática inversa con visión artificial ya
que a partir de las imágenes obtenidas se construye un modelo de movimientos, pero un
aspecto negativo es que requiere un gran coste computacional y accesorios adicionales
(cámaras, espacio controlado, etc.).
En [14] se usa también cámaras para capturar el movimiento de un cuerpo
humano. En este trabajo los autores presentan un nuevo enfoque acerca del movimiento
de un robot. Se menciona que aparte del movimiento orientado a tareas y del
movimiento orientado a postura, puede existir el movimiento orientado al contexto.
1 Introducción 7
En el movimiento orientado a tareas el objetivo principal del robot es ejecutar
una tarea establecida sin poner mucha atención a la precisión en el posicionamiento. El
movimiento orientado a postura requiere que un robot cumpla con ciertos movimientos
o acciones como caminar, correr, danzar y realizar algunas tareas de manipulación y
tampoco se requiere precisión en el posicionamiento de los actuadores finales del robot.
El movimiento orientado al contexto es una combinación de los dos anteriores y
hace énfasis en la exactitud de la posición del robot y de sus elementos finales.
Figura 1.3: Esquema de generación de movimiento orientado a contexto [14].
Una característica especial en este modelo es que tiene un generador de
trayectorias y un clasificador con el cual se selecciona la mejor trayectoria y
posteriormente se realiza el control del elemento final del robot para cumplirla. El
modelo descrito se observa en la Fig. 1.3.
(a) Marcas para reconocimiento de Visión artificial (b) Modelo computacional
Figura 1.4: Context Orientated Motion Generation: A New Scheme for Humanoid Robot Control [14].
El sistema de visión artificial usa 80 marcas ubicadas en el cuerpo de la persona
para hacer el seguimiento del movimiento. Posteriormente los movimientos se mapean
8 Memoria
y se trasladan a un modelo humano computacional de 50 grados de libertad, como se
puede ver en la Fig. 1.4. El clasificador usa una red neuronal tipo Elman de 20 neuronas
en la primera capa. Los resultados de este proyecto son satisfactorios, se trabaja en
tiempo real y el robot es capaz de reproducir los movimientos con gran exactitud.
El laboratorio de robótica humanoide de la Universidad de Freiburg, Alemania,
también ha desarrollado un sistema para reproducir los movimientos de un operador
humano en un robot Nao [15]. Este trabajo consiste en captar los movimientos del
cuerpo y extremidades del operador mediantes sensores inerciales de tipo Xsens MVN.
Estos se distribuyen en puntos específicos del cuerpo y se atan con sujetadores, como se
observa en la Fig. 1.5. El objetivo es convertir los momentos angulares de las
articulaciones del operador en los momentos angulares de las articulaciones del robot.
Para evitar que el robot caiga, como ocurre con la teleoperación sin control de
estabilidad, se ha diseñado una propuesta en la cual se balancea el centro de masa del
robot a lo largo de un polígono de soporte ubicado en las piernas del mismo. Con este
método se asegura que en cada instante de tiempo el robot está en estabilidad estática.
Figura 1.5: Tele operación Robot Nao [15].
El sistema primero encuentra posiciones válidas para la ubicación de los pies del
robot mediante el plano objetivo y la orientación del mismo. Así, se asegura que el
centro de masa está sobre el plano en el polígono de soporte. Luego, las siguientes
posiciones angulares se calculan como proyecciones del plano mediante cinemática
inversa. No se requiere aprendizaje a priori, pero es necesario un ordenador el cual
realiza el control total del robot y permite trabajar en tiempo real. El sistema tiene un
1 Introducción 9
retardo de tiempo de aproximadamente 1.5ms y se desarrolla en la plataforma
proporcionada por Nao.
Este trabajo se usa actualmente para diseñar modelos de movimientos complejos
del cuerpo humano, como por ejemplo escalar, bajar un rampa, subir o bajar escaleras,
etc.
Otros modelos usan visión artificial para construir algoritmos y controlar robots
humanoides, ya sea orientado a tareas como presentan los autores en [16], cuya labor es
buscar una pelota y patearla, o a posturas, como en [7], el cual se enfoca en reproducir
todos los movimientos establecidos por un patrón dado por una persona con marcas en
el cuerpo.
En algunos casos, el estudio se hace sobre diferentes sensores usados en robótica
para detección de movimiento como en [17–20], o para mejorar el sistema mecánico y
optimizar la potencia consumida por el robot [20].
1.3. Objetivos
El objetivo principal del presente proyecto es “Realizar teleoperación
inalámbrica de extremidades de un robot humanoide”.
Se usan un máximo de 8 sensores en el traje ya que es el número disponible de
canales del conversor análogo digital (AD) del procesador Atmega 328 [21]. Así, el
objetivo se limita a mover por lo menos ocho articulaciones del robot humanoide. Para
cumplir esto es necesario realizar un control mínimo de estabilidad del robot ya que al
mover las diferentes articulaciones tiende a caer. Se hace especial énfasis en el control
de estabilidad al momento de levantar las rodillas. Se usa un controlador Borroso para el
control de estabilidad. Los servos, como se explica más adelante, tienen su propio
control de posicionamiento.
Los objetivos secundarios son:
1. Construir un traje que contenga los sensores.
2. Usar radio transmisión de datos del traje al robot.
3. Diseñar el sistema de control de estabilidad del robot.
13
2. Fundamentos Teóricos
El sistema está compuesto por un traje con sensores y un robot controlado por un
procesador. El traje envía los datos de forma inalámbrica, para lo cual se requiere un
módulo de transmisión de estas características. El robot, un humanoide de modelo
MechRc que consta de 16 servos, requiere un controlador de servos para cada uno de
ellos. Para el control de equilibrio global del robot se ha estudiado el control borroso
Takagi Sugeno con modelo singleton. Este controlador requiere que sus entradas no
estén demasiado contaminadas con ruido, razón por la cual se ha estudiado e
implementado un filtro de Kalman, el cual trata las señales del acelerómetro del robot
antes de ingresar al controlador.
A continuación se describirán los fundamentos teóricos en los que se basa este trabajo.
2.1. Módulos RF Xbee
Los módulos Xbee se basan en el protocolo de comunicación Zig-Bee, el cual
está diseñado específicamente para comunicación inalámbrica de baja potencia, baja
transmisión de datos y bajo coste [22]. Conocido también como estándar IEEE
802.15.4, usa la banda de 2.4 GHz de frecuencia de radio y trata de regular todos los
dispositivos de transmisión de datos de baja tasa de información [22] .
Los módulos Xbee se pueden configurar de dos formas: en modo API o en modo
AT. En el primero el usuario interactúa directamente con el módulo con comandos de
programación y configuración para hacer petición de información, en el segundo caso el
dispositivo funciona de modo transparente, es decir, transmite los datos recibidos por su
canal de entrada como si fuera un cable [23].
Figura 2.1: Módulo Xbee [23].
14 Memoria
Para seleccionar el módulo se toma en cuenta que el teleoperador está cerca del
robot, 10m, por tanto se decide trabajar con un Xbee de 2mW, el cual permite un
alcance aproximado de 90m en exteriores y 30m en interiores, además tiene las
siguientes características [23]:
• 9 entradas/salidas con entradas analógicas y digitales.
• Bajo consumo <50mA cuando están en funcionamiento y <10uA cuando están
en modo sleep.
• Interfaz serie.
• 65,000 direcciones para cada uno de los 16 canales disponibles. Se pueden
tener muchos de estos dispositivos en una misma red.
• Fáciles de integrar.
Una característica por la cual se ha decidido trabajar con estos módulos es que
usan interfaz serie, permitiendo transmitir información de un procesador Atmega 328 o
cualquier otro dispositivo que se comunique de esta manera.
2.1.1. Configuración de módulo Xbee
Para configurar un Xbee es necesaria una placa llamada “Xbee Explorer USB”,
Fig. 2.1, la cual permite conectarlo con un ordenador al programa de configuración X-
CTU.
Figura 2.2: Xbee Explorer USB [23].
La red Xbee de este trabajo se compone de 3 elementos. Un módulo va en el
traje, otro en el robot y el tercero permite hacer seguimiento de los parámetros del robot
en tiempo real desde un ordenador.
En la Fig. 2.3 se observa la red Xbee con la cual funciona el sistema. Se
configura el Xbee del robot como coordinador, el del traje y el del ordenador como
dispositivos finales. Obsérvese que el módulo del traje envía los datos al robot y éste los
envía al ordenador. Solo puede existir un coordinador en este tipo de redes.
2 Fundamentos Teóricos 15
No existe una realimentación de datos desde el robot al traje ya que el protocolo
Zig-Bee se encarga de realizar las comprobaciones de errores en las capas inferiores de
comunicación.
Figura 2.3: Red Xbee del sistema de Teleoperación.
El formato de comunicación Serie entre los módulos y su respectivo procesador es:
• Baudios: 57600 • Control de flujo: Ninguno • Bits de datos: 8 • Paridad: Ninguna • Bits de Parada: 1
Esto quiere decir que el puerto serie del ordenador, tanto para configurar el
módulo como para leer datos del Xbee, debe estar configurado de esta manera y
también los procesadores del traje y del robot.
2.1.1.1. Configuración de Xbee en modo Coordinador
El programa X-CTU permite configurar un Xbee, leer información acerca de su
firmware, abrir un puerto serie del ordenador, realizar una prueba de transmisión entre
módulos, etc.
Las siguientes instrucciones describen cómo configurar un Xbee en modo coordinador.
1. Conectar el Xbee al Xbee Explorer y con un cable USB al ordenador.
2. Abrir el programa X-CTU y cambiar los parámetros de comunicación de
velocidad, bits de datos, etc. a los descritos anteriormente, como se indica en
la Fig. 2.4(a). La primera vez que se lee un Xbee su Velocidad de
comunicación es 9600B.
Xbee Traje
Dispositivo Final
Xbee Robot Coordinador
Xbee Ordenador
Dispositivo Final
16 Memoria
3. Para comprobar el firmware del dispositivo y conocer el número de serie
(dirección) se puede pinchar en Test Query, una vez se despliegue el test
pinchar en OK.
4. Abrir la viñeta Modem Configuration Fig.2.4(b), pinchar en Read para saber
las características actuales del dispositivo.
5. Pinchar en Function Set y seleccionar ZIGBEE COORDINATOR AT,
asegurarse que es la Version 208C, en este caso el Modem es XB24-ZB.
6. En la carpeta Networking, del área de configuración, cambiar el PAN ID al
número de la red, en este caso 77.
7. En la carpeta Addressing colocar en DH (Destination Address High) y DL
(Destination Address Low) la dirección del dispositivo al cual el coordinador
enviará los datos. En este caso DH=13A200 y DL=407B6D71, que es la
dirección del Xbee del ordenador.
8. En la carpeta Serial Interfacing seleccionar la opción Baud Rate 6, que
corresponde a la velocidad de 57600B.
9. Finalmente pinchar en Write.
10. En algunos Xbee para finalizar la escritura o lectura el programa pide un
Reset del dispositivo. El Reset se genera por un flanco negativo de 1 a 0
lógico. El Xbee Explorer no cuenta con botón de Reset, así que hay que
agregarlo mediante un pulsador conectado entre los pines RST y GND.
(a) Viñeta de Ajuste. (b) Viñeta de Configuración
Figura 2.4: Software X-CTU.
2 Fundamentos Teóricos 17
2.1.1.2. Configuración de Xbee en modo Dispositivo Final
Para configurar un Xbee en modo Dispositivo Final se cumple los mismos pasos
que para configurar en modo Coordinador, con las siguientes diferencias.
• En el paso 5 en Function Set se debe seleccionar ZIGBEE END DEVICE AT y
la Versión para dispositivo final es 288C, como se indica en la Fig.2.5.
• Nótese que debe estar direccionado al mismo PAN ID.
• En el paso 7, la dirección DH y DL debe ser la del coordinador en ambos Xbee,
esto es DH=0 y DL=0. El módulo del traje envía datos al robot, pero en caso del
ordenador no lo hace. El flujo de información se representa en la Fig. 2.3.
Figura 2.5: Configuración en modo END DEVICE.
En la tabla 2.1 se observa las ubicaciones, direcciones y direccionamientos de cada
módulo Xbee de la red.
Tabla 2.1 Caracterización de módulos Xbee.
Ubicación Dirección H Dirección L Direccionado a Modo Versión ID
Traje 13A200 407C49B8 Robot D. Final 288C 77
Robot 13A200 407C5F72 Ordenador Coordinador 208C 77
Ordenador 13A200 407B6D71 Robot D. Final 288C 77
18 Memoria
2.2. Acelerómetro ADXL335
Es un acelerómetro digital desarrollado por Analog Devices, sensible en 3 ejes,
de bajo consumo, soporta hasta 3G y se caracteriza por ser muy pequeño, 4mmx4mm
x1.45mm. Resulta ideal para trabajar con dispositivos de 3,3V [18].
La mayoría de acelerómetros aportan una salida de tipo analógica o PWM que
posteriormente es medida y transformada a un valor binario [25] por un conversor
análogo digital AD.
El ADXL335 proporciona una señal por cada uno de los ejes que mide. Se
puede adquirir en una placa en la cual se integran los capacitores para estabilizar las
salidas como lo recomienda el fabricante [24], como se observa en la Fig.2.6.
Figura 2.6: Acelerómetro ADXL 335.
Una variante de este sensor es el ADXL 225, el cual soporta hasta 2G y mantiene todas las características del anterior.
2.3. Potenciómetro Lineal
Es aquel potenciómetro cuya respuesta de resistencia es directamente
proporcional al ángulo de giro del cabezal. Es ampliamente usado en la industria de la
amplificación de sonido y otras que requieran esta característica. Por ejemplo, en un
amplificador de audio, si el usuario desea poner el volumen a la mitad de la potencia
deberá girar el potenciómetro hasta la mitad y si desea el 75% del volumen deberá girar
hasta un 75% el potenciómetro.
Si se observa la curva de respuesta de Resistencia Vs Ángulo de giro, se puede
notar claramente su linealidad, como se observa en la Fig. 2.7.
El potenciómetro usado en este trabajo es de 10KΩ, y alimentado con 3,3V
2 Fundamentos Teóricos 19
(a) Potenciómetro Lineal b) Curva de Resistencia vs Giro
Figura 2.7: Potenciómetro lineal.
2.4. Servo
Un servo es un motor DC que cuenta con un control electrónico encapsulado. Es usado
ampliamente en mecatrónica, robótica y otras ramas para aplicaciones como, mover alas
de un avión a escala, formar diferentes partes de un robot, etc.
Un servo tiene tres cables: Vcc, tierra y entrada de señal PWM de control. Esta
señal PWM no es usada para convertirla en velocidad como normalmente se hace, sino
indica el ángulo, de 0º a 180º, al que ha de colocarse el disco del servo, el cual se
observa en la Fig. 2.8 en la parte superior del servo. Esto quiere decir que no se controla
la velocidad sino la su posición. Por esta razón, un servo no gira libremente como un
motor DC normal, sino que tiene limitaciones mecánicas y electrónicas para que lo haga
a ±120º desde el centro de posición. Internamente, un servo combina un motor DC con
un simple circuito de realimentación, usualmente un potenciómetro sensa la posición
del disco y mediante un control PID, u otro, se controla la posición del mismo [25].
Figura 2.8: Motor Servo [25].
La frecuencia de la señal de control de un servo es de 50 Hz, y el ancho de pulso
determina la posición requerida del disco. Un ancho de pulso de 0.3ms indica una
posición de 0º, uno de 1.5ms, 90º y 2.1ms lo lleva a 180º, como lo indica la Fig. 2.9.
20 Memoria
Figura 2.9: Señal de control PWM [25].
Para controlar varios servos existen controladores previamente diseñados con
diferentes interfaces como Serie, USB, o se puede usar un procesador que tenga timers
que permitan trabajar a estas frecuencias. El procesador Atmega328 en la placa Arduino
Fio permite controlar directamente 12 servos [26].
2.5. Robot Humanoide MechRc
MechRc es un robot Humanoide diseñado por la compañía del mismo nombre.
Está construido con 16 servos de precisión que permiten 180º de movimiento. Cuenta
con 100 movimientos programados y con una herramienta computacional que permite
programar nuevas posiciones [13].
Las acciones del robot, como caminar, levantar una pierna, levantarse del suelo,
etc. se pueden ejecutar desde un control remoto o desde un ordenador. Al ser un robot
juguete no cuenta con sensores, como acelerómetros o inclinómetros, para conocer el
estado del mismo, aunque desde el ordenador se puede seguir el del los servos. La
Fig.2.10 muestra el robot descrito.
Figura 2.10: Robot MechRc [13].
2 Fundamentos Teóricos 21
2.6. Plataforma Arduino.
“Arduino es una plataforma de electrónica abierta para la creación de prototipos
basada en software y hardware flexibles y fáciles de usar. Se creó para artistas,
diseñadores, aficionados y cualquiera interesado en crear entornos u objetos
interactivos”. [26]
Esta plataforma dispone de variedad de placas electrónicas, la gran mayoría con
procesadores Atmega AVR de Atmel. Al basarse en “open source”, código abierto,
pone a disposición del usuario los archivos originales tanto de hardware, como un
software del mismo nombre que permite programar los procesadores de sus placas. El
software es desarrollado en Flash, pero la programación de los procesadores se realiza
en C.
Brinda muchas facilidades ya que cada placa está diseñada para facilitar una
aplicación determinada, por ejemplo, la placa Arduino Ethernet facilita el trabajo con
módulos de redes Ethernet, la placa Arduino Nano está diseñada para usar muy poco
espacio, la placa Arduino Lilypad está diseñada para aplicaciones portables sobre ropa,
como por ejemplo encender leds en un traje, la placa Arduino Fio se utiliza en
aplicaciones con transmisión inalámbrica de datos y por ello ha sido seleccionada para
este proyecto, etc. [26].
2.6.1. Placa Arduino Fio
El controlador tanto del traje como del robot están basados en placas Arduino
Fio, que facilita la conexión de un módulo X-bee en su parte posterior. Esta placa se
observa en la Fig.2.11.
Figura 2.11: Tarjeta Arduino Fio [26].
22 Memoria
Entre las principales características técnicas de la placa se tiene:
• Microcontrolador Atmega 328P
• Voltaje de trabajo 3.3V
• Voltaje de Entrada 3.35 -12 V
• Voltaje de Entrada en Carga 3.7 - 7 V
• Pines E/S Digital 14 (6 pueden proveer salida PWM)
• Pines de Entrada Analógica 8
• Corriente DC por pin E/S 40mA.
• Memorias: Flash32 KB, SRAM 2 KB, EEPROM 1 KB
• Frecuencia de Reloj 8 MHz
Para programar el microcontrolador desde el software de Arduino es necesario
un cable FTDI, el cual es un conversor de protocolos USB-Serie TTL y también puede
alimentar la placa, como se observa en la Fig. 2.12. Este cable crea un puerto Serie
virtual (Com) en el ordenador, mediante el cual se puede comunicar con la placa. Se
puede programar también de forma inalámbrica usando los módulos X-bee.
Figura 2.12: Cable FTDI conectado a placa Arduino Fio [26].
Los pines digitales son configurables como salidas o entradas. La corriente que
puede circular por cada uno es 40mA y el voltaje es de 3.3V. Se puede también
configurar en modo entrada con resistencias de pull-up. Los pines digitales 2 y 3 pueden
configurarse además como entradas de interrupción externa, el flanco de la misma se
puede configurar por software. La entrada 13 está conectada a un led verde el cual se
enciende con 1L y se apaga con 0L.
Los pines analógico A0 - A7, permiten leer el voltaje conectado, de 0V a 3.3V,
por medio de un conversor analógico digital de 10 bits. La resolución es de 3.33mA.
2 Fundamentos Teóricos 23
Se tiene también pines especiales que permiten comunicarse con diferentes
protocolos como I2C, Serie y SPI. Una importante aportación del software de
programación es que cuenta con una librería que permite que cualquier pin digital se
comunique de forma Serie. Los pines Tx y Rx del microcontrolador están conectados al
conector Xbee y a los pines del cable Serie FTDI.
La placa Arduino Fio cuenta con conectores para batería, Xbee, FTDI, Zócalos,
comunicaciones, swich y USB. El conector USB permite sólo alimentar la batería ya
que cuenta con un chip cargador de batería Li-Po de 3.3V.
2.6.2. Software Arduino
La plataforma de programación Arduino está disponible en [26]. Existen
diferentes versiones siendo actualmente la 1.0.1 la usada mayormente.
Este software es sencillo de usar. En la Fig. 2.13 se observa la ventana de
programación, la cual es similar en Windows o Linux.
Figura 2.13: Ventana de programación Arduino.
Antes de empezar con un programa es necesario definir el tipo de placa usada.
Para ello se ubica en el ícono “Herramientas”, “Tarjeta” y se selecciona el tipo de placa
Arduino conectada al ordenador. Se debe seleccionar en este mismo punto el puerto de
24 Memoria
comunicación Serie al que está conectada la placa y el tipo de programador, en este caso
“AVRISP mkII”.
Los componentes básicos de la interfaz son: Verificar, Cargar, Nuevo, Abrir,
Guardar y el Monitor Serie, respectivamente.
Al verificar se revisa que no existan errores de sintaxis de los comandos del
programa en C. El ícono “Cargar” envía el programa desarrollado al microcontrolador
de la placa Arduino a través del cables FTDI por el puerto Serie Com respectivo.
El monitor Serie es una herramienta muy importante ya que refleja los datos de
comunicación Serie que envía el microcontrolador y se usa también para depurar. Las
librerías e instrucciones se encuentran disponibles en la página web de Arduino.
2.7. Filtro de Kalman
El filtro de Kalman es un método para estimar los estados de un sistema
estocástico, el cual fue descrito por Rodolfo E. Kalman en 1960 [27].
Este algoritmo discreto es óptimo y recursivo. Minimiza un criterio determinado
e incorpora información que se le suministra para determinar el filtrado. Además no
mantiene datos previos, lo que facilita su implementación en sistemas de tiempo real. El
objetivo del filtro de Kalman es estimar los datos de tal manera que se minimice el error
cuadrático medio[28].
En la Fig. 2.14 se representa un sistema lineal en espacio de estados, donde A, B y C
son matrices, y son procesos estocásticos del proceso y de la medida,
respectivamente.
Fig. 2.14: Representación de un sistema lineal
2 Fundamentos Teóricos 25
Las ecuaciones que rigen este sistema son 2.1 y 2.2, donde es la entrada, el estado
y la salida.
= + + (2.1)
= + (2.2)
Además se debe asumir las siguientes condiciones iniciales:
= = 0∀ = 0∀ , = 0∀ , = 0∀ , = 0∀ , = ˄0∀ ≠ , = ˄0∀ ≠ , = ∀ Las matrices de covarianza y son diagonales y por tanto simétricas.
En un sistema real se puede observar, medir, el valor de con un sensor
adecuado. Esta medida incorpora incertidumbres asociadas, estas son del sistema y del
sensor, y respectivamente.
Si se necesita la evolución completa del estado y el valor de la observación ajena
a las variaciones provocadas por la incertidumbre se deben estimar estos valores de
forma indirecta. El filtro de Kalman propone un método para resolver este problema y
define el error como la diferencia entre el valor real del estado y la estimación.
= − (2.3)
El objetivo por tanto es minimizar
= . (2.4)
La matriz se la conoce como matriz de covarianza del error.
El filtro consiste en determinar los valores estimados , conocidas las medidas
contaminadas ,, … , para que sea mínima. La propuesta de Kalman se realiza a
partir del estado anterior , y de un factor de corrección que es función del error. El
algoritmo tiene dos pasos que se ejecutan de forma iterativa. El primero es llamado
predicción y se realiza antes de tener la medida. El segundo paso se llama corrección o
actualización del estado.
26 Memoria
2.7.1. Paso 1: Predicción
La predicción ′es calculada a partir del valor más actualizado del estado.
′ = + (2.5)
Tal como en la ecuación 2.3 el error está definido por
′ = − ′ (2.6)
Por tanto el error en esta etapa de previsión es
′ = + + − −
′ = ( − ) + (2.7)
Operando con la matriz covarianza del error se tiene
′ = [( − ) + ][( − ) + ]
′ = [( − )][( − )] + . (2.8)
De donde se obtiene la matriz covarianza asociada al proceso
= . (2.9)
Así, la predicción de la matriz de covarianza queda por tanto
′ = () + (2.10)
2.7.2. Paso 2: Corrección, Actualización
El valor del estado se calcula a partir del estado anterior y de la corrección que es función del error.
= ′ + [ − . ′] (2.11)
El factor de corrección es
[ − . ′] (2.12)
Donde es el último valor observado y ′ es el valor más actualizado
disponible del estado en esta fase del algoritmo. El factor de corrección es tal que la
matriz de covarianza del error sea mínima. Para más detalles revisar [28] y [27].
2 Fundamentos Teóricos 27
El factor de corrección queda por tanto
= [
+ ] (2.13)
Y la matriz de covarianza asociada a la medida es
= ∗ (2.14)
La actualización de la matriz de covarianza del error en esta fase es
= − (2.15)
La Fig. 2.15 muestra el algoritmo del filtro, se debe notar que se necesita condiciones iniciales para empezar el proceso recursivo.
Figura 2.15: Algoritmo del Filtro de Kalman
2.8. Control Borroso
Un control borroso provee una forma metodológica para representar, manipular
e implementar el conocimiento heurístico del ser humano para controlar un sistema.
Una diferencia importante entre el control borroso y el convencional (PID) es
básicamente el lenguaje matemático. Las ecuaciones diferenciales ordinarias, ODE por
sus siglas en inglés, son el lenguaje del control convencional mientras que para el
control borroso lo son las reglas [29]. Existen sistemas borrosos que no se basan en un
conjunto de reglas sino en modelos de regresión lineal borrosa o modelos borrosos
usando estructura de célula [3].
El diagrama general del controlador borroso se muestra en Fig. 2.16, donde se
observa los cuatro elementos principales del mismo.
28 Memoria
Figura 2.16: Arquitectura del controlador borroso.
Las relaciones entre las variables de entrada y salida son representadas por un
conjunto de reglas de tipo “If -Then” de la forma
If proposición de antecedente Then proposición de consecuente
Donde la proposición de antecedente corresponde a subconjuntos de variables de
entrada y la proposición de consecuente a subconjuntos de salida. Dependiendo del tipo
de consecuente se pueden clasificar tres tipos de modelos:
Modelo lingüístico Borroso, conocido como modelo Mamdani, dónde los antecedentes
y consecuentes son conjuntos borrosos.
Modelo borroso relacional, el cual permite que un antecedente particular esté asociado
a diferentes consecuentes mediante una relación borrosa.
Modelo Takagi-Sugeno, donde el consecuente es una función cuyas variables son los
antecedentes de la regla [3]. Si la función es de orden cero, da lugar a su forma más
básica y corresponde a una función singleton. Esta se considera también como una
función borrosa de tipo triangular con base nula y puede ser tratado como un modelo
lingüístico borroso.
Este es usado en la implementación del presente proyecto, por tanto, se estudia en más
detalle.
2.8.1. Modelo Takagi-Sugeno
El modelo Takagi-Sugeno (TS) es un buen controlador local para la región
borrosa descrita por la correspondiente regla [2]. Tiene como ventaja que aplicando
funciones sencillas para los consecuentes se reduce el tiempo de respuesta, lo cual en
aplicaciones de tiempo real es muy importante [30]. Como contraparte este modelo es
2 Fundamentos Teóricos 29
sensible al ruido de entrada. Para reducir este problema se pueden usar diferentes filtros
y en este caso se ha usado el filtro de Kalman estudiado en el apartado 2.7.
Los componentes del modelo son los siguientes.
2.8.1.1. Borrosificador
Convierte las entradas del controlador en información que el mecanismo de
inferencia pueda activar fácilmente y aplicar reglas, es decir, convierte las entradas
numéricas en borrosas. Esto se implementa mediante un conjunto singleton conocido
como función Delta de Dirac.
Los subconjuntos de entrada pueden ser de diferentes tipos así se tiene,
triangular, trapezoidal o gaussiano. Los de tipo triangular son muy usados en sistemas
de tiempo real. Los de trapezoidal se usan a menudo como subconjuntos iniciales y
finales de la variable. Los de tipo gaussiano, son los más acertados, pero por la carga
computacional que se requiere para procesarlos suelen ser usados en simulaciones. En la
Fig. 2.17 se observa los 3 tipos de subconjuntos usados para representar las variables
lingüísticas.
(a) Trapezoidal y triangular (b) Gaussiano
Figura 2.17: Tipos de funciones miembro.
En la Fig. 2.18 la variable lingüística de entrada “x” se conforma de 3
subconjuntos A1, A2 y A3, los cuales en este caso se sobreponen. El Borrosificador
coloca un singleton, conjunto A, en el valor a borrosificar, “x=i”. Los puntos de
intersección entre el singleton y las subconjuntos son las valores borrosos A1=0,
A2=0.7 y A3=0.3. Estos valores posteriormente activarán las reglas respectivas.
30 Memoria
Figura 2.18: Borrosificador.
2.8.1.2. Base de reglas
Contiene la lógica de cuantificación borrosa de las bases lingüísticas expertas
que aseguran un buen control [24]. Relaciona los antecedentes y consecuentes del
sistema borroso mediante los modelos If - Then ya mencionados.
El modelo del conjunto de reglas sugerido por TS en [31] es.
: , … , = (, … , ) (2.16)
Donde
Número de reglas, en este caso = (1, 2, 3, … ,15). Salida del controlador. − Variables de entrada de la premisa. − Subconjuntos de la función miembro x. Función lógica que conecta las preposiciones. Función que resuelve la implicación cuando la entrada satisface la premisa.
La función del consecuente , = ! + ! +⋯+ !depende de
las variables de entrada, subconjuntos y número de regla. Esto quiere decir que puede
ser distinto en cada regla.
Si el coeficiente ! es el único coeficiente de la función, diferente de
cero, se obtiene una función de tipo singleton, de donde toma el nombre el Modelo
Singleton, Fig.2.19.
, = ! (2.17)
Figura 2.19: Consecuentes de modelo Singleton.
2 Fundamentos Teóricos 31
El modelo TS con este tipo de consecuente es un modelo Mamdani y se puede
realizar los cálculos como tal. Así la ecuación 2.16 quedaría
: , … , = ! (2.18)
2.8.1.3. Motor de inferencia y Desborrosificación
Llamado también Inferencia Borrosa (IB). Emula la decisión del experto
mediante la interpretación y aplicación del conocimiento de la respuesta de la planta. Se
puede decir también que obtiene una salida borrosa a partir de las entradas borrosas y
las reglas condicionantes.
A partir de la ecuación 2.18, la cual describe una regla, se define la conectiva y
la agregación de reglas. La conectiva describe qué función booleana AND u OR aplicar
a las entradas y qué valor tomar en caso de tener valores de diferentes funciones
miembro de dos o más variables, así se puede usar, máximo, mínimo, producto, suma,
etc. En este caso se toma la función AND mínimo, ya que es usada para sistemas reales.
El producto y suma se usa en casos de aprendizaje. La agregación define que regla tiene
mayor ponderación en caso de afectar al mismo consecuente. Las reglas quedarían
definidas por
:1"#2$% (2.19)
Donde 1 e 2 son las entradas, y funciones miembros de cada entrada
respectivamente y $ la salida con su función miembro de tipo singleton % respectiva.
Finalmente el motor de inferencia en el modelo TS realiza directamente la
desborrosificación al obtener un valor numérico mediante la suma ponderada dada por
la ecuación 2.20.
=∑ ,,…,.
∑ ,,…,
(2.20)
Este resultado puede ser escalado para transformar el rango de discurso de las
variables lingüísticas al rango de las variables de salida. Este es un proceso muy común
en muchos controladores, por tanto no se toma como una técnica específica del
controlador borroso TS.
32 Memoria
2.9. Entorno de diseño Xfuzzy
Xfuzzy es un entorno gráfico para desarrollo de sistemas borrosos. Además,
combina un conjunto de herramientas que facilitan el diseño de sistemas de inferencia
basados en lógica borrosa. Esta herramienta computacional fue desarrollada por el
Instituto de Microelectrónica de Sevilla, España, y es puesta a disposición de
investigadores de forma gratuita a través de su página web [32], en donde también se
puede encontrar detalladamente todas sus herramientas, funciones y demás aspectos
necesarios para su utilización. La última versión es Xfuzzy 3.0 al cual se dedica esta
revisión.
El entorno ha sido completamente desarrollado en Java, de modo que puede ser
ejecutado en cualquier plataforma que tenga instalado JRE (Java Run Environment).
Xfuzzy 3.0 cuenta con algunas etapas para el diseño de sistemas borrosos. Estas se
pueden observar en la Fig. 2.20.
Figura 2.20: Etapas de diseño de sistemas Borrosos en Xfuzzy 3.0.
La etapa de descripción permite usar herramientas gráficas para el diseño del
sistema borroso. Así se puede definir entradas, salidas y sus respectivas variables
lingüísticas. La etapa de Verificación permite simular, monitorizar y representar
gráficamente el comportamiento del sistema. En la etapa de ajuste se puede usar
algoritmos de aprendizaje para ajustar el comportamiento del sistema. Finalmente, la
etapa de síntesis permite generar descripciones en lenguajes de alto nivel como C, C++,
Java, VHDL y Sysgen, para implementaciones en software o hardware.
2 Fundamentos Teóricos 33
Para empezar el diseño se debe ejecutar el archivo xfuzzy ubicado en la carpeta
Xfuzzy\bin. Luego se hace clic en File, New System, con lo cual se crea un nuevo
sistema y su nombre aparece en la ventana Available Systems, como se observa en la
Fig. 2.21.
Figura 2.21: Ventana de trabajo Xfuzzy 3.0.
Para editar el sistema creado se hace doble clic sobre su nombre y aparece la
ventana de diseño mostrada en la Fig. 2.22. En esta se puede observar los diferentes
elementos del sistema borroso, estos son, entradas, salidas, operadores, tipo de motor de
inferencia, base de reglas y finalmente la estructura resultante. Antes de agregar
entradas y salidas se debe agregar tipos de funciones borrosas. Para ello se hace clic
derecho en Types y se escoge New Type, esto permite crear las funciones borrosas en el
universo de discurso de la variable lingüística. Se debe definir el nombre del tipo, el
valor máximo, mínimo, el centro, el número de subconjuntos y el tipo de función.
Figura 2.22: Ventana de diseño de sistema borroso
La Fig. 2.23 muestra el diseño del tipo creado. En este caso se tiene una variable
llamada Temperatura con un universo de discurso de 0 a 100 y con 4 funciones
34 Memoria
miembro de tipo gaussiano que van desde mf0 hasta mf3. El tipo de funciones miembro
pueden ser gaussianas, triangulares, trapezoidales y singleton.
Luego se definen las entradas y salidas en las respectivas ventanas y se
relacionan con los tipos de funciones creadas anteriormente. En la ventana Operatorsets
se definen la inferencia borrosa, implicación, solución de conjunción AND y método de
desborrosificación. La inferencia borrosa editada para el funcionamiento del control
borroso TS, estudiado en el apartado 2.8, queda definida por: AND MIN , implicación
MAX y desborrosificador FuzzyMean.
Figura. 2.23: Definición de formato de Variable lingüística Temperatura.
Figura 2.24: Diseño del sistema completo.
Finalmente en la ventana System Structure se conectan las entradas y salidas al
sistema borroso y se selecciona la inferencia borrosa creada en el paso anterior.
2 Fundamentos Teóricos 35
El sistema de la Fig. 2.24 tiene dos entradas, Temperatura y Velocidad, y una
salida llamada Tensión. Todas las funciones miembro tienen la forma del tipo
Temperatura del la Fig. 2.23.
Una vez diseñado el sistema se pueden hacer las siguientes funciones: afinación
de parámetros, simulación de superficie de control, autoajuste por aprendizaje,
compilación, etc. Para un mayor conocimiento de esta herramienta se recomienda ir a
[32].
En el siguiente capítulo se describe el diseño e implementación del traje de sensores, las
adecuaciones de las placas electrónicas Arduino y las conexiones de los servos del
robot.
39
3. Diseño de Hardware
Para cumplir los objetivos planteados es necesario inicialmente construir un traje
de sensores. Este traje deberá tener un acondicionamiento electrónico adecuado de tal
forma que permita determinar los ángulos de movimiento de las extremidades de la
persona que lo usa. Los datos deberán ser enviados hasta el robot humanoide que cuenta
con un controlador que posibilita reproducir los movimientos del operador.
Para llevar a cabo este diseño se ha seleccionado un controlador embebido en
una placa electrónica Arduino Fio. Este controlador impone ciertas limitaciones al
sistema general, ya que, al contar con 8 canales para el conversor AD limita el número
de sensores del traje y por tanto el número de articulaciones. Con 8 sensores no se
puede obtener gran cantidad de información para que el robot sea capaz de seguir los
movimientos con fidelidad, por lo cual es necesario estimar algunos datos a partir de la
información que envía el traje y el resultado del control borroso.
3.1. Traje de Sensores
El traje de sensores se compone de: Traje mecánico y Sistema electrónico.
3.1.1. Traje mecánico.
Está construido en dos partes, superior e inferior.
Figura 3.1: Traje de sensores. a) Parte inferior b) Parte superior
La parte superior se compone de dos acelerómetros ubicados en brazaletes que
se ajustan en cada brazo. Aunque los acelerómetros tienes 3 grados de libertad se ha
40 Memoria
usado únicamente uno. Los acelerómetros están conectados al sistema electrónico y
brindan información del movimiento del hombro en el plano sagital.
La parte inferior está formada por un sistema mecánico con 3 articulaciones por
cada pierna, 6 en total. Cada articulación está acoplada a un sensor basado en un
potenciómetro lineal que gira proporcionalmente al giro de la articulación. En la Fig. 3.1
se detalla el traje de sensores, se observa también la ubicación del sistema electrónico.
Figura 3.2: Movilidad de las articulaciones del traje inferior. Plano frontal y Sagital.
En la Fig. 3.2 se observa la movilidad que tiene la parte inferior del traje. Las
articulaciones a3 y a4 permiten abrir las piernas referenciados al plano frontal, las
articulaciones a2 y a5 permiten levantar las piernas y las articulaciones a1 y a6
permiten doblar las rodillas, se toma en cuenta que es casi imposible que el operador
doble las rodillas hacia adentro y se da un margen de seguridad.
La tabla 3.1 describe el ángulo, plano de incidencia, ubicación, tecnología de sensor,
articulaciones adyacentes y longitud del vector. De esta forma se describen todos los
sensores del traje.
Tabla 3.1 Descripción de sensores en el traje.
Art. Máx. Mín. Plano Tecn. Ubicación Art. Consecutiva. Vector cm
1 -90 10 Sagital Potenciómetro Rodilla Der. 2 40
2 90 -30 Sagital Potenciómetro Muslo Der. 3 y 4 45
3 -90 20 Frontal Potenciómetro Cadera Der. 2 y 4 9
4 90 -20 Frontal Potenciómetro Cadera Izq. 3 y 5 9
5 90 -30 Sagital Potenciómetro Muslo Izq. 4 y 6 45
6 -90 10 Sagital Potenciómetro Rodilla Izq. 5 40
7 -90 90 Sagital Acelerómetro Hombro Der. Libre x
8 -90 90 Sagital Acelerómetro Hombro Izq. Libre x
3 Diseño de Hardware 41
El parte inferior del traje se ha construido de madera para reducir el peso del
mismo y evitar un exceso de presión sobre los ejes de cada articulación. Además cuenta
con un sujetador el cual permite que el traje se ajuste al operador mediante una serie de
correas, como se observa en la Fig. 3.3
Figura 3.3: Traje completo en operador.
42 Memoria
3.1.2. Sistema Electrónico.
Una tarjeta Arduino Fio es la base del sistema electrónico.
Los sensores basados en potenciómetro se conectan como se indica en la
Fig.3.4. El sensor tiene 3 pines, los dos externos se alimentan con una tensión de 3.3 V
y el pin intermedio, que proporciona la tensión variable, se conecta a un canal analógico
del procesador.
Los acelerómetros se conectan de la misma forma, pero en este caso queda libre
el pin del eje Z. El pin del eje X provee la señal de la variación angular del hombro
respectivo.
Se ha construido un módulo que aloja la batería y la placa electrónica con sus
conectores. En este se encuentra también un selector con el cual se enciende o apaga el
sistema de transmisión y dos leds con los cuales el usuario conoce si la transmisión es
efectiva. La conexión del acelerómetro, leds y potenciómetros se observa en la Fig. 3.4.
(a) Conexión de acelerómetro. (b) Conexión de potenciómetro (c) Conexión Leds.
Figura 3.4: Conexión de sensores y leds a tarjeta electrónica.
En la Fig. 3.5 se observa la placa electrónica Arduino Fio conectada a las
baterías de 3.3V, 1000mA, Li-Po, “Litio-Polímero”, el swich de encendido del sistema
y las etiquetas de los diferentes sensores. Para conectar el swich externo de encendido
se han soldado dos cables en paralelo al swich interno de la placa.
Se observa también que existe un grupo de 6 pines que permiten programar el
procesador que lleva la tarjeta. Para realizar la programación mediante el cable FTDI,
explicado en el apartado 2.6.1, se debe desconectar la alimentación de la batería ya que
este cable tiene su propia fuente de alimentación. También se debe desconectar el
módulo Xbee porque genera conflictos en la programación.
3 Diseño de Hardware 43
El orden de ubicación de los sensores en la tarjeta y su correspondencia con las
articulaciones se rige según la tabla 3.1.
El módulo inalámbrico Xbee se encuentra acoplado en la parte trasera de la
placa electrónica, donde los pines Rx y Tx de comunicación Serie del módulo están
conectados con los correspondientes Rx y Tx del procesador Atmega, por tanto el envío
de datos es transparente, es decir, el Xbee es “el cable de transmisión”. No es necesario
hacer ajustes electrónicos al mismo, sino únicamente configurarlo como se explica en el
apartado 2.1.1. Los detalles de configuración del módulo Xbee del traje se observa en la
tabla 2.1.
Figura 3.5: Conexión de tarjeta Arduino Fio
La placa electrónica cuenta también con un conector mini USB que se usa
únicamente para recargar la batería.
El sistema de lectura de sensores puede funcionar correctamente con baja
energía en la batería, pero el módulo Xbee no funcionará con normalidad y los datos
transmitidos serán erróneos. Se aconseja recargar las baterías después de un uso
continuo de 3 horas.
44 Memoria
3.2. Sistema electrónico del Robot
Como se ha explicado anteriormente el robot usado en este trabajo es un
MechRc. Después de desmontar su sistema electrónico se ha acoplado una placa
Arduino Fio, en la cual se conecta el sistema de control de los motores servo, el
acelerómetro de realimentación y el módulo Xbee del Robot.
Para esto se ha realizado una pequeña ampliación a la placa agregando una
extensión de conectores. Esta es necesaria para conectar los servos y para cada uno se
ha incorporado un conector de 3 pines, como se observa en la Fig. 3.6. Estos conectores
no cumplen el estándar de ubicación de los pines de un servo, los cuales en el pin
central tienen la alimentación de potencia y en los extremos la señal de control y tierra
respectivamente. Por este motivo no se puede usar esta placa para controlar cualquier
tipo de servo.
La placa final se alimenta de dos fuentes de tensión, una batería de 3.3V,
2000mA, Li-Po para el sistema electrónico de control y una batería de 7.6V, 800mA,
Li-Po, para el sistema de potencia de los servos. Las dos fuentes comparten la referencia
de tierra. Estos detalles se pueden observar en la Fig. 3.7.
Figura 3.6: Extensión de conectores para control de servos.
Se puede observar que las señales de control de los servos se ubican como
salidas desde el pin D2 hasta el D13, 12 señales para controlar 12 servos.
Las señales de entrada para los ejes X e Y del acelerómetro se ubican en los
canales analógicos A2y A3 respectivamente.
3 Diseño de Hardware 45
Figura 3.7: Conexiones de la placa electrónica del Robot.
Figura 3.8: Distribución de señales de control y acelerómetro.
El acelerómetro se ubica en la espalda del robot siendo el eje X el que se mueve
en el plano frontal del robot y el eje Y en el plano Sagital. Se alimenta directamente de
las salidas de 3.3V y Gnd de la placa Arduino y se conecta de la forma que se muestra
en las Fig. 3.4 y 3.7.
46 Memoria
En la Fig. 3.8 se observa la distribución de las señales de control de los servos
en el robot.
Se debe destacar que al ser un robot comercial no se necesita hacer un diseño
mecánico para ubicar los servos. Como resultado de ello el sentido de giro, la ubicación
y el ángulo de inicialización de los motores están limitados por la mecánica del mismo y
son prácticamente inalterables.
En la tabla 3.2 se detallan las características que son necesarias conocer al
momento de programar los movimientos. En esta tabla las columnas Sensor y Servo
relacionan los datos enviados desde el traje con el respectivo servo del robot. La
ubicación de los servos en el robot también se muestra en esta tabla al igual que en la
Fig. 3.8. No todos los servos giran en el mismo sentido, así, mediante el estudio de los
mismos se ha identificado el sentido de movimiento cuando se incrementa el ángulo de
control. En unos casos, como el Servo a, cuando se incrementa el ángulo el servo gira
en sentido anti horario y en otros, como el Servo c, gira en sentido horario. Finalmente
el detalle Ángulo inicial, indica cuál es el ángulo en el cual el robot estaría erguido y
con los brazos hacia abajo.
Tabla 3.2 Caracterización de los servos del robot.
Sensor Servo Ubicación Robot Sentido inc. Ángulo Inicial
Art. 1 a Cadera Izq. Anti horario 90
Art. 2 b Muslo Izq. Anti horario 93
Art. 3 c Rodilla Izq. Horario 93
Art.7 d Hombro Izq. Horario 41
Art. 8 e Hombro Der. Anti horario 143
Art.6 f Rodilla Der. Anti horario 87
Art.5 g Muslo Der. Horario 87
Art.4 h Cadera Der. Anti horario 90
x i Tobillo Izq. Horario 92
x j Tobillo Der. Anti horario 88
x k Pie Izq. Anti horario 92
x l Pie Der. Anti horario 92
El robot cuenta con 16 servos de los cuales se controlan 12, los 4 servos no
controlados corresponden a los hombros en el eje frontal y los codos. Aunque en el
objetivo inicial del proyecto se pretendía controlar únicamente 8 servos, las necesidades
3 Diseño de Hardware 47
del sistema han exigido que se controlen 4 servos más. Éstos corresponden a los pies y
tobillos del robot.
El módulo Xbee se coloca en la parte trasera de la placa Arduino, de la misma
forma que el caso del traje. El modo de configuración de este módulo se indica en el
apartado 2.1.1.
Usar los módulos Arduino permite reducir el tiempo de diseño de placas
electrónicas. De esta manera, usando sistemas embebidos se optimiza el tiempo de
diseño hardware de un sistema y se transfiere al desarrollo de software, que siempre es
más controlable.
En el siguiente capítulo se presenta el diseño del control de equilibrio y los algoritmos
necesarios para el control de robot. Se presenta las diferentes funciones implementadas
en los programas del procesador del traje y del robot.
51
4. Diseño de Software
En este apartado se aborda el diseño de los programas de control, tanto del
sistema del traje como del sistema del robot. Los algoritmos para ambos sistemas son
distintos en complejidad. El del traje únicamente debe leer datos y enviarlos sin aplicar
procesos matemáticos complejos. El algoritmo de control del robot es más extenso y
mucho más elaborado, cuenta con una serie de funciones que se explicarán con detalle
en este capítulo.
Los procesadores usados son de 8 bits y trabajan a 4Mhz, por tanto el
tratamiento de datos está sujeto a estas limitaciones.
4.1. Algoritmo de control de traje
La Fig. 4.1 muestra la arquitectura del programa del sistema electrónico del
traje, el cual básicamente lee los datos de los 8 sensores y los envía a través del módulo
Xbee.
Figura 4.1: Arquitectura de programa del procesador del Traje.
4.1.1. Inicialización
En la inicialización de este programa se realiza las configuraciones globales, es
decir, se determina las variables y su tamaño, las entradas analógicas, salidas digitales,
velocidad de comunicación, etc. La configuración del oscilador a 4MHz lo realiza el
programa de desarrollo por sí solo al momento de programar el chip.
Se usan 5 variables las cuales se describen en la tabla 4.1. Como se ha
mencionado anteriormente el programa se desarrolla en C, pero al ser una aplicación
52 Memoria
especial para este tipo de procesadores es necesario explicar algunos comandos
especiales.
En cuanto a la configuración de variables se escriben igual que en C, es decir int j=0;
Para obtener un sistema rápido de envío de datos se seleccionó a priori la
máxima velocidad de comunicación Serie, es decir 115200 Baudios, como se indica en
la tabla 4.2, pero el sistema de recepción no alcanzaba a leer los datos con precisión y se
producía errores. Por esta razón se redujo la velocidad a 57600 Baudios.
Tabla 4.1 Descripción de variables
N Variable Tipo Descripción
1 i int Se usa en limitador de datos
2 j int Se usa en lazos for
3 u byte Valor constante de 255 binario
4 ledState bit Permite leer estado de led
5 val int Guarda dato de lectura de sensor
Tabla 4.2 Velocidades de transmisión disponibles.
N Velocidad bps
1 1200
2 2400
3 4800
4 9600
5 19200
6 28800
7 33600
8 57600
9 115200
4.1.1.1. Función Setup
La configuración de los pines digitales, analógicos, velocidad de comunicación y
otros módulos disponibles se hace desde una función especial llamada setup.
Para configurar la comunicación se escribe Serial.begin(57600); el formato de
comunicación Serie de este procesador es Baud,1,8,1,N y N, lo cual indica: velocidad,
1 bit de inicio, 8 bits de datos, 1 bit de parada, sin bit de paridad y sin bit de control de
flujo de datos respectivamente.
4 Diseño de Software 53
Para configurar el pin 13 de la tarjeta Arduino como salida digital se escribe
pinMode(13,OUTPUT); , se aclara que el pin 13 de la tarjeta Arduino no corresponde al
pin 13 del procesador. Para saber a qué pin corresponde se debe revisar el manual de
Arduino Fio [26].
Por lo tanto la función setup queda
void setup() pinMode(13,OUTPUT); //configuración de salida digital Serial.begin(57600); //configuración de com. Serie
4.1.2. Función Lectura y Transmisión de datos
En esta Función se leen los 8 datos de los canales analógicos de forma
secuencial. Se empieza por el canal A0 y se termina en el A7. Los datos varían de 0 a
1024 porque el registro de lectura del canal analógico es de 2 bytes. El dato se lee en la
variable val mediante el comando val = analogRead(i); donde i representa el canal a
leer.
Posteriormente este valor se escala con un factor de 0.25, con esto se reduce la
longitud del dato de 10 a 8 bits, si bien se pierde resolución también ayuda a enviar
únicamente 8 bits por dato. El número binario 255 no se toma en cuenta como dato, sino
que es usado como encabezado para que el receptor reconozca el inicio de la trama.
El comando usado para escalar el dato es j = map(val, 0, 1023, 0, 254); donde j
es el dato escalado, val es el dato a escalar, 0, 1023 la escala actual y 0, 254 la escala a
transformar.
Arduino permite transmitir datos con el comando Serial.println(j); donde j es el
dato a transmitir. Si j = 10, el código enviado son dos bytes correspondientes al “1” y
“0” en ASCII. La trama en este caso debe tener un encabezado para cada dato, para el
inicio y para el fin de trama. La longitud de esta puede ser de hasta 34 bytes, lo cual a
la velocidad de comunicación de 57600Baudios resulta en 5.9ms de retardo, a esto se
deben agregar 20ms por cada canal leído lo cual da un resultado final de 165.9ms. La
trama usando la transmisión ASCII sería:
Xa170b180c180d180e180f180g180h180Y
54 Memoria
Para transmitir los datos usando el puerto Serie también se usa la función
Serial.write(j); donde j es el dato a transmitir. Esta función permite transmitir el dato en
forma de byte. Por ejemplo, si se transmite un dato j = 10, el código binario enviado es
B00001010, por tanto se envía un solo byte. Con este código se reduce la trama a 9
bytes, esto es, un encabezado y 8 datos. La trama es:
ÿabcdefgh
Donde ÿ es el encabezado y corresponde al valor 255, y las letras desde a hasta h
contienen el valor de los 8 sensores de 0 a 254. El retardo total es de 161.5ms, lo que es
ligeramente menor que el anterior, pero por facilidad de lectura y decodificación en el
receptor se ha usado este método de transmisión. Una vez procesado y enviado el dato
de un sensor se pasa al siguiente canal y se realiza el mismo procedimiento.
El programa del traje usa 2 leds y para controlarlos se configuran los pines 2 y 3
como salidas digitales.
El programa de control del traje se inicia una vez que se alimenta el procesador
al encender la placa Arduino Fio.
4.2. Algoritmo de control de Robot
En el robot se ha programado un control que aloja diferentes funciones. La
arquitectura de este sistema empieza con la recepción de datos a través del módulo
Xbee, posteriormente se decodifica el paquete de datos para saber a qué articulación
corresponde. Existe un código de inicialización de lectura con el cual se corrige posibles
errores del envío de datos del traje.
Figura 4.2: Arquitectura de algoritmo de control de robot.
4 Diseño de Software 55
Posteriormente se lee los datos del acelerómetro de realimentación y mediante
un filtro de Kalman se reducen ruidos gaussianos asociados al movimiento mecánico
del robot. Se usa un controlador borroso tipo TS para evaluar y controlar el equilibrio
del robot cuando este levanta cualquiera de las dos piernas. Posteriormente se usa un
algoritmo de compensación de servos, a partir de los resultados del control borroso.
Finalmente las señales PWM que genera el procesador controlan 12 servos del robot. La
Fig. 4.2 muestra la arquitectura descrita.
4.2.1. Inicialización del programa
Consiste en dimensionar las variables usadas a lo largo del programa, también se
hace una llamada a la librería encargada de manejar los PWM de los servos. Esta
librería se define como #include <Servo.h> la cual permite controlar hasta 14 servos.
La tabla 4.3 muestra el nombre de las variables usadas y su descripción. El procesador
Atmega328 dispone de 1Kbyte para variables en memoria SRAM.
Tabla 4.3 Descripción de variables.
N Variable Tipo Valor inic. Descripción
1 servoa Servo x Contiene posición de servo a
2 servob Servo x Contiene posición de servo b
3 servoc Servo x Contiene posición de servo c
4 servod Servo x Contiene posición de servo d
5 servoe Servo x Contiene posición de servo e
6 servof Servo x Contiene posición de servo f
7 servog Servo x Contiene posición de servo g
8 servoh Servo x Contiene posición de servo h
9 servoi Servo x Contiene posición de servo i
10 servoj Servo x Contiene posición de servo j
11 servok Servo x Contiene posición de servo k
12 servol Servo x Contiene posición de servo L
13 i int 0 Usado en lazos for
14 j int 0 Usado en lazos for
15 m byte 0 Contador de datos de inicialización
16 val byte 0 Recibe encabezado=255
17 auxrec byte 0 Auxiliar de recepción de datos D0 a D7
18 aux77 int 0 Auxiliar en transmisión de datos
19 datoa byte 0 Tratamiento de dato a
20 datob byte 0 Tratamiento de dato b
21 datoc byte 0 Tratamiento de dato c
Continúa en la página siguiente
56 Memoria
Tabla 4.3 - continúa en la página anterior 22 datod byte 0 Tratamiento de dato d
23 datoe byte 0 Tratamiento de dato e
24 datof byte 0 Tratamiento de dato f
25 datog byte 0 Tratamiento de dato g
26 datoh byte 0 Tratamiento de dato h
27 datoi byte 0 Tratamiento de dato i
28 datoj byte 0 Tratamiento de dato j
29 datok byte 0 Tratamiento de dato k
30 datol byte 0 Tratamiento de dato L
31 prueba int 0 Usado en depuración
32 d0i int 128 Valor inicial posición erguida dato 0
33 d1i int 132 Valor inicial posición erguida dato 1
34 d2i int 132 Valor inicial posición erguida dato 2
35 d3i int 102 Valor inicial posición erguida dato 3
36 d4i int 151 Valor inicial posición erguida dato 4
37 d5i int 124 Valor inicial posición erguida dato 5
38 d6i int 124 Valor inicial posición erguida dato 6
39 d7i int 128 Valor inicial posición erguida dato 7
40 k0 int 0 Sumador de 30 datos de inicialización dato 0
41 k1 int 0 Sumador de 30 datos de inicialización dato 1
42 k2 int 0 Sumador de 30 datos de inicialización dato 2
43 k3 int 0 Sumador de 30 datos de inicialización dato 3
44 k4 int 0 Sumador de 30 datos de inicialización dato 4
45 k5 int 0 Sumador de 30 datos de inicialización dato 5
46 k6 int 0 Sumador de 30 datos de inicialización dato 6
47 k7 int 0 Sumador de 30 datos de inicialización dato 7
48 k int 0 Auxiliar en sumador de datos de hombro.
49 delta1 int 0 Auxiliar para conocer estado de rodilla Izq.
50 delta2 int 0 Auxiliar para conocer estado de rodilla Der.
51 Ax int 0 Lectura de eje X de acelerómetro
52 Ay int 0 Lectura de eje Y de acelerómetro
53 xi int 400 Condición inicial de dato Ax FK (Filtro Kalman)
54 Sw2 float 0.5 Covarianza de medida FK
55 R float Sw2 Matriz R de Covarianza FK
56 Sv2 float 0.03 Covarianza de sistema FK
57 Q float Sv2 Matriz Q de Covarianza FK
58 Pi float Q Matriz P inicial FK
59 Xestim float 0.0 Estado estimado inicial FK
60 Xantes float 0.0 Estado anterior FK
61 Pantes float 0.0 Matriz P anterior FK
62 Pdespués float 0.0 Matriz P actualizada FK
63 K float 0.0 Ganancia K FK
64 Y float 0.0 Valor actual de eje Y de acelerómetro
Continúa en la página siguiente
4 Diseño de Software 57
Tabla 4.3 - continúa en la página anterior 65 X float 0.0 Valor actual de eje X de acelerómetro FK
66 Xestims int 0 Estado estimado, dos bytes FK
67 Xestimsa int 0 Estado estimado anterior, dos bytes.
68 Acel int 0 Velocidad angular calculada
69 Ref float 200.0 Referencia horizontal=200.
70 I float 0.0 Valor borroso de subconjunto de entrada 1 I
71 CI float 0.0 Valor borroso de subconjunto de entrada 1 CI
72 C float 0.0 Valor borroso de subconjunto de entrada 1 C
73 CD float 0.0 Valor borroso de subconjunto de entrada 1 CD
74 D float 0.0 Valor borroso de subconjunto de entrada 1 D
75 Ne float 0.0 Valor borroso de subconjunto de entrada 2 Ne
76 ZZ float 0.0 Valor borroso de subconjunto de entrada 2 ZZ
77 Po float 0.0 Valor borroso de subconjunto de entrada 2 Po
78 a int 100 Constructor de subconjuntos entrada 1
79 b int 200 Constructor de subconjuntos entrada 1
80 c int 300 Constructor de subconjuntos entrada 1
81 d int 400 Constructor de subconjuntos entrada 1
82 aa int -30 Constructor de subconjuntos entrada 2
83 bb int 0 Constructor de subconjuntos entrada 2
84 cc int 30 Constructor de subconjuntos entrada 2
85 dd int 60 Constructor de subconjuntos entrada 2
86 Nb int -40 Singleton Nb de consecuente
87 N int -20 Singleton N de consecuente
88 Z int 0 Singleton Z de consecuente
89 P int 20 Singleton P de consecuente
90 Pb int 40 Singleton Pb de consecuente
91 nbr int 0 Auxiliar para determinar máximos
92 nr int 0 Auxiliar para determinar máximos
93 zr int 0 Auxiliar para determinar máximos
94 pr int 0 Auxiliar para determinar máximos
95 pbr int 0 Auxiliar para determinar máximos
96 r1 int 0 Valor calculado de regla 1
97 r2 int 0 Valor calculado de regla 2
98 r3 int 0 Valor calculado de regla 3
99 r4 int 0 Valor calculado de regla 4
100 r5 int 0 Valor calculado de regla 5
101 r6 int 0 Valor calculado de regla 6
102 r7 int 0 Valor calculado de regla 7
103 r8 int 0 Valor calculado de regla 8
104 r9 int 0 Valor calculado de regla 9
105 r10 int 0 Valor calculado de regla 10
106 r11 int 0 Valor calculado de regla 11
107 r12 int 0 Valor calculado de regla 12
Continúa en la página siguiente
58 Memoria
Tabla 4.3 - continúa en la página anterior 108 r13 int 0 Valor calculado de regla 13
109 r14 int 0 Valor calculado de regla 14
110 r15 int 0 Valor calculado de regla 15
111 ir byte 0 Disparador de reglas Subconjunto I
112 cir byte 0 Disparador de reglas Subconjunto CI
113 cr byte 0 Disparador de reglas Subconjunto C
114 cdr byte 0 Disparador de reglas Subconjunto CD
115 dr byte 0 Disparador de reglas Subconjunto D
116 ner byte 0 Disparador de reglas Subconjunto Ne
117 zzr byte 0 Disparador de reglas Subconjunto ZZ
118 por byte 0 Disparador de reglas Subconjunto Po
119 YFz float 0.0 Resultado de Desborrosificador
4.2.1.1. Función Setup
En esta función se configura la velocidad de comunicación a 57600Baudios, se
lee el eje X del acelerómetro y se guarda este dato en la variable Xestim usada en el
filtro de Kalman. El valor inicial de esta variable debe acercarse lo máximo posible al
estado del vector de equilibrio. Luego se espera 20ms, para reactivar el canal analógico
y se imprime como salida serie un mensaje de “Inicio”.
4.2.2. Decodificación de trama
La trama encapsula los 8 datos de los sensores del traje. El encabezado facilita la
decodificación de la trama y tiene un valor de 255 en decimal, o ÿ, en ASCII.
La función espera que llegue el encabezado y posteriormente guarda en orden
los siguientes 8 datos desde la variable datoa hasta datoh. Aunque se haya recibido el
encabezado, el algoritmo siempre analiza cada variable que llega, y si es diferente de
255 lo toma como dato válido, con esto se evita errores si los módulos Xbee se
desconectan. Posteriormente se identifica si es la primera vez que llegan datos y si lo es
se procede a inicializar y compensar los datos recibidos.
4.2.3. Inicialización y compensación de datos.
Los datos que envía el traje no siempre están ajustados ni tienen los mismos
valores para una misma posición. Esto se debe a que los potenciómetros se pueden
mover un poco por el uso, porque el teleoperador adopta una postura erguida un tanto
diferente o porque el valor de las baterías varía. Para compensar estas variaciones se han
4 Diseño de Software 59
añadido las variables desde d0i hasta d7i con valores iniciales de servos para que el
robot permanezca erguido. Esta posición es considerada como inicial tanto para el
operador como para el robot. Luego, las primeras 30 tramas que llegan se suman dato a
dato y se promedian, así se tiene un valor inicial medio de los datos recibidos. A estos
se los resta de la posición inicial que debe tener para que el robot esté erguido y esta
diferencia se suma a cada dato que llega. Las diferencias se guardan en las variables
desde k0 a k7.
La ecuación 4.1 muestra el valor final de cada dato actual para > 30, es decir, el valor
que toman los datos después de la inicialización y compensación.
&, = &, − '∑ ,
− () (4.1)
Donde > 0 y 0 < * < 8, además
Orden de llegada d datos. * Dato a – h. ( Dato inicial. Recibido
Seguidamente se inicializan los pines de control de los servos desde el pin 2
hasta el 13 de la placa Arduino. Esto se realiza mediante el comando
Var.attach(x);.Donde Var representa la variable tipo Servo y x es el pin de salida
configurado.
Finalmente se escalan los datos de 0 – 254 a 0 – 179, debido a que las funciones
de control de servo reciben datos de 0º hasta 179º. Este valor representan el ángulo al
que se coloca el servo [26].
Se observa que los únicos datos tratados hasta aquí son 8 y que corresponde a las
articulaciones que envía el traje. Los 4 datos restantes se calcularán a partir de la
variación de éstos y del resultado del controlador borroso.
En este punto el robot podría reproducir los movimientos de las 8 articulaciones
del traje pero sería imposible que se mantuviera de pie, por tanto se aplica el control al
movimiento de rodillas para compensar el desequilibrio que el movimiento de las
articulaciones causa en el robot.
60 Memoria
4.2.4. Función flexión de rodillas
En este algoritmo se determina qué rodilla está más flexionada y de acuerdo a
ello se corrige el equilibrio hacia un lado o hacia otro. Se toma como ejemplo la flexión
de la rodilla izquierda del robot para la siguiente explicación.
En la comparación del ángulo de las rodillas la rodilla izquierda tiene un ángulo
mayor de flexión y por tanto el robot se inclina hacia ese lado con tendencia a caer. Para
equilibrarlo se cambia la posición de 5 articulaciones en función del resultado del
controlador borroso, el cual tiene como entradas el ángulo de inclinación en el plano
frontal y la velocidad angular del mismo. En la Fig. 4.3 se puede observar el robot
levantando la rodilla izquierda y los servos compensados a, h, k, f y l.
Fig. 4.3: Función flexión de rodilla.
La tabla 4.4 muestra los cambios realizados en los datos de control de cada servo
compensado a partir del resultado del controlador borroso.
La lógica de compensación que se explica a continuación es comúnmente usada
para robots comerciales y de investigación.
Una vez que se determina por medio de un comparador que el robot está
levantando la rodilla, se inicia el control de equilibrio. Para ello se mueve el servo l, el
cual gira y permite que el centro de gravedad se ubique sobre la pierna derecha (la no
flexionada), en este fin ayuda también el servo h. El servo f permite flexionar
4 Diseño de Software 61
ligeramente la rodilla de la pierna derecha para ganar estabilidad. El servo k ayuda a
balancear el robot hacia la derecha cuando recién se inicia la flexión de la rodilla
izquierda. El servo a gira para mantener la pierna paralela, pues al girar el servo h las
piernas se cruzan. En la Fig.4.3 no se toma en cuenta el servo que flexiona la rodilla
izquierda porque este toma el valor directamente calculado por la ecuación 4.1. De esta
manera los valores angulares de los servos son calculados aplicando la variación de la
tabla 4.4 y 4.5. A los ángulos de cada servo que interviene en el equilibrio se suma el
compensador escalado. El factor de escalado ha sido determinado mediante
experimentación y permite que el compensador afecte con mayor o menor incremento
angular a cada servo. Así, por ejemplo en la tabla 4.4, al ángulo del servoa se le suma el
valor del compensador, mientras que al del servok se le suma el compensador escalado
con un valor de 0.77 por tanto a este último le afecta un incremento menor. Los servos
afectados por el escalado son principalmente los de los pies y el de la rodilla izquierda
del robot.
Tabla 4.4 Compensación y Escalado de servos flexión izquierda.
Articulación Compensador YFz Escalado
Servo a + 1
Servo h + 1
Servo k - 0.77
Servo l - 1.4
Servo f - 1
Si se observa el datol la solución sería, datol=datol-YFz*1.4;. Esta solución se aplica
también para la flexión de la rodilla derecha cumpliendo la tabla 4.5.
Tabla 4.5 Compensación y Escalado de servos flexión derecha.
Articulación Compensador YFz Escalado
Servo a + 1
Servo h + 1
Servo k - 1
Servo c - 0.77
Servo L - 1.4
62 Memoria
Nótese que el compensador mantiene los signos en ambas tablas. Esto se debe a
que el resultado del controlador borroso cambia de signo dependiendo si el equilibrio es
hacia derecha o izquierda.
Si se flexiona las dos rodillas el sistema responde de la misma manera pero si la
comparación se mantiene bajo un valor establecido se considera que no se debe
equilibrar.
Los servos j e i, corresponden a las articulaciones de los tobillos los cuales se
compensan siempre que las rodillas se flexionan. Por ejemplo, si se flexiona la rodilla
izquierda, el ángulo deflexión se guarda en una variable y se suma o resta al ángulo del
tobillo para conseguir ángulos internos congruentes en una paralela como se observa en
la Fig. 4.4. Los ángulos correspondientes a los servos son iguales y cuanto más se
flexione la rodilla más se flexiona el tobillo.
Figura 4.4: Compensación de tobillos. Ej. Flexión rodilla (f) compensación tobillo (j).
Una vez calculados los ángulos en los cuales debe posicionarse cada servo se
aplica la función Control de servos.
4.2.5. Función Control de servos
Es una función sencilla con la cual se actualiza la señal PWM de control de cada
servo.
Para escribir el valor angular de un servo se escribe Var.write(x);. Donde Var
representa la variable de control del servo y x el ángulo de posición. Si se desea cargar
el ángulo de la variable datoa se escribe servoa.write(datoa);. No es necesario realizar
un seguimiento adicional a cada servo ya que, como se explicó en el apartado 2.4 cada
uno tiene su propio sistema de realimentación y control.
4 Diseño de Software 63
Finalizado el procesamiento de datos de los servos es necesario describir el
filtro de Kalman y el controlador borroso usado para obtener la variable YFz con la cual
se compensa los servos.
4.2.6. Función filtro de Kalman
Se ha usado un filtro de Kalman para reducir el ruido gaussiano que se refleja en
los datos del acelerómetro del robot y obtener un ángulo y velocidad angular del plano
frontal del robot. Se aplica el filtro a los datos del eje X. El eje Y es usado para un
control más simple del plano sagital del robot razón por la cual no se le aplica un filtro.
Primeramente se lee las señales del acelerómetro, tanto en el eje X, como en el
Y. El comando Ax=analogRead(2); permite leer el canal ADC 2 y guardar el valor en
la variables Ax. El eje Y se lee en el canal 3 y su valor se guarda en la variable Ay.
Posteriormente, aplicando las ecuaciones calculadas y mostradas en la Fig. 2.15,
se aplican los siguientes valores:
= = 0.03; = = 0.25 y = 0; = 1; = 1;
y las condiciones iniciales:
′ = !í" y = = 0.03
Se tiene el conjunto de ecuaciones
= # Predicción de estado
= + 0.03 Predicción de matriz de covarianza
= ∗ [
+ 0.25] Cálculo de ganancia, factor de corrección
= Lectura de dato de sensor
= + −
Actualización de Estado
= 1 − ∗ Actualización de matriz de covarianza
Con las cuales se diseñan el filtro de Kalman y se obtiene el dato de ángulo de
inclinación del robot en el plano frontal. Aplicando la ecuación 4.2 al dato estimado del
filtro se tiene como resultado la velocidad angular. El intervalo de tiempo transcurrido
entre el dato anterior y el actual se refleja en ∆+. Estos resultados forman las variables
de entrada del controlador borroso TS.
64 Memoria
=
∆ (4.2)
En la Fig. 4.5 se pueden observar los resultados del filtro de Kalman a diferentes
valores de covarianza asociada a la medida. Si este valor, dado por la matriz R, tiende a
cero, el resultado del filtro es la misma señal de entrada. El incremento de R permite
que el filtro reduzca el ruido pero también se produce un retardo de la señal. En el
primer caso a) el retardo ronda los 200ms, en b) los 80ms y en c) los 2ms.
Los servos debido al movimiento mecánico necesitan un tiempo, en el rango de
los ms, para alcanzar el ángulo objetivo. Así pues, el retardo del filtro de Kalman
permite sincronizar el controlador con le respuesta mecánica del robot. Mediante
experimentación se ha calculado la matriz R=0.5, con la cual el filtro ofrece buenos
resultados, con un retardo aproximado de 110ms. La Fig. 4.6 muestra la respuesta del
filtro con R=5.
Figura 4.5: Ángulo de inclinación, resultado de filtro a variaciones de R.
4 Diseño de Software 65
Figura 4.6: Respuesta de filtro afinado.
Dado que el intervalo ∆+ de la ecuación 4.2 es constante, se asume que la
velocidad angular es una función lineal y tiene similares características de retardo en
el filtro que la inclinación angular.
4.2.7. Función Controlador Borroso
Esta función permite calcular la salida borrosa del controlador Takagi-Sugeno
(TS). El ángulo de inclinación y la velocidad angular filtradas son las entradas, y la
respuesta de control, es decir, la salida, se usa para compensar los cambios angulares en
los motores cuando se equilibra al robot.
La Fig. 4.7 muestra la secuencia de los datos desde el acelerómetro hasta el
controlador borroso.
Figura 4.7: Secuencia de datos de control.
Existen programas computacionales que convierten algoritmos borrosos en
funciones C o C++, como el explicado en el apartado 2.9. En este caso no se pudo
aplicar una función de este tipo porque el lenguaje C del programador de Arduino
difiere en algunos aspectos y no brinda facilidades para trabajar con librerías de tipo
“math.h” o “stdio.h”, además algunas variables de tipo flotante necesitan varios
decimales, lo que es fácil de resolver en un computador personal pero no en un
66 Memoria
procesador de 8 bits. Por las razones expuestas se decidió diseñar y simular el
controlador TS en el programa XFuzzy y posteriormente traducir la función al propio
lenguaje de Arduino.
4.2.7.1. Diseño de Controlador Borroso TS
Como se ha explicado anteriormente, las entradas del controlador son dos y
corresponden al ángulo de inclinación y velocidad angular, ambos filtrados y
correspondientes al plano frontal.
Para la entrada de inclinación angular se han escogido 5 subconjuntos para
componer la variable lingüística “Angulo”, cuyo valor oscila entre -90º y 90º y se ha
escalado a 0 y 400 respectivamente, como se observa en la Fig. 4.8. Estos valores son
limitados anteriormente para evitar valores no determinados.
El primer subconjunto, Izquierda I, va de 0 a 100 y corresponde a un triángulo
rectángulo. El segundo, Centro Izquierda CI, de 0 a 200 con un triángulo isósceles. El
tercero, Centro C, va desde 100 a 300 con un triángulo isósceles. El cuarto, Centro
Derecha CD, va desde 200 a 400, también con un triángulo isósceles y el quinto y
último, Derecha D, es un triángulo rectángulo con base de 300 a 400. Se ha escogido
subconjuntos triangulares porque brindan facilidades de programación. Se han definido
5 subconjuntos de tal forma que permita tener un rango aceptable de opciones al
momento de construir las reglas.
Figura 4.8: Subconjuntos de variable lingüística Ángulo.
4 Diseño de Software 67
Le segunda entrada es la variable lingüística Velocidad Angular, la cual se
compone de tres subconjuntos definidos por: Negativo Ne, Cero ZZ y Positivo Po. El
primero y tercero corresponden a trapecios truncados y ZZ a un triángulo que va de -30
a 30.
Figura 4.9: Subconjuntos de variable lingüística Velocidad Angular.
La variable lingüística Ángulo de compensación es la salida y está definida por 5
subconjuntos de tipo singleton. Estos subconjuntos son: Negativo bastante Nb, Negativo
N, Cero Z, Positivo P y Positivo bastante Pb, ubicados en: -40, -20, 0, 20 y 40
respectivamente, esto se observa en la Fig.4.10.
Figura 4.10: Variable lingüística de salida.
Como se ha explicado anteriormente, los subconjuntos de tipo singleton
condicionan el método TS a consecuentes constantes y facilita su implementación.
En el diseño del controlador borroso es importante seleccionar el operador
conjuntivo, así, la conectiva AND que relaciona las entradas puede ser MIN , referido al
mínimo entre ambas o PROD, el producto de las mismas. Ambos operadores permiten
simplificar la solución [33]. Se ha explicado con anterioridad que MIN es usado en
68 Memoria
casos prácticos y PROD en estudios de estabilidad, por esta razón se usa el MIN para
solucionar la conectiva AND y construir las reglas del sistema borroso.
Con estas bases el modelo TS es construido usando
Conectiva AND: MIN
Implicación: Takagi-Sugeno
Agregación: MAX
Considerando la ecuación 2.18 y las bases planteadas se construye la ecuación
4.3, la misma que refleja el modelo de cada regla.
:$%&'()*' +,-).'/ (4.3)
Donde
Número de regla
& Variable Ángulo de inclinación del robot, antecedente, entrada 1.
Subconjunto de la variable Ángulo de inclinación.
Variable Velocidad angular, antecedente, entrada 2.
Subconjunto ! de la variable Velocidad angular.
. Variable de salida, consecuente del sistema.
/ Subconjunto singleton respectivo.
El sistema completo se forma con 15 reglas, lo cual corresponde al número
máximo de combinaciones entre los subconjuntos de ambas entradas, 5 de Ángulo y 3
de Velocidad angular, siendo esto 5x3=15.
En base al conocimiento previo del funcionamiento del sistema se hacen las
siguientes acotaciones, las cuales permiten definir las reglas del sistema.
• Se disponen de dos entradas de cinemática del sistema, esto es, Ángulo de
inclinación y Velocidad angular.
• El valor central de la entrada Ángulo corresponde al valor 200, siendo 0 y 400
los extremos mínimo y máximo respectivamente.
4 Diseño de Software 69
• La variable Ángulo se encuentra escalado, así, 0 corresponde a -90º y 400 a
+90º. Por lo tanto 200 corresponde a 0º, lo cual indica que el robot está en
posición vertical.
• La variable Velocidad angular, tiene como mínimo y máximo, -60 y 60
respectivamente y se encuentra escalado de la misma forma que la variable
Ángulo, pero centrado en 0.
• Las condiciones de estabilidad se dan específicamente en el vector de entrada
,, = (200,0), lo cual indica que el robot esta erguido y no existe una
velocidad angular hacia algún lado, el robot está estable. Este es el punto
objetivo del control, por tanto las reglas deben contribuir a cumplirlo.
• Se han definido 5 subconjuntos en la variable Ángulo, como se observa en la
Fig.4.8. Los valores medios de cada subconjunto se intersecan cada 22.5º.
• Se definen 3 subconjuntos en la variable Velocidad angular. Una velocidad
angular de ±0.5816rad/s se considera para la intersección del subconjunto
central y los extremos. En la Fig. 4.9 se refleja en el punto ±15.
• Cuanto mayor sea el Ángulo o la Velocidad angular del robot, tanto mayor debe
ser el ángulo de corrección del controlador para volver al punto objetivo
,, = (200,0).
Estas bases de conocimiento permiten diseñar el conjunto de reglas definidos en la
tabla 4.6 y que siguen la siguiente filosofía de funcionamiento.
Si el Ángulo es Izquierda (I) y la Velocidad angular es Negativa (Ne) se debe
corregir al máximo hacia el lado opuesto, es decir, hacia la derecha, esto es una
salida Positivo Bastante (PB), esta filosofía se observa en la regla R1. Si el Ángulo
es Centro Izquierda (CI) y la Velocidad es Positiva (Po) quiere decir que aunque el
robot está inclinado hacia la izquierda está con velocidad angular hacia derecha y se
puede estabilizar, por esta razón la salida es Cero (Z), como se observa en la regla
R6. Si el Ángulo es Centro (C) y la Velocidad angular es Negativa (Ne) la
corrección no es muy pronunciada, por tanto es Positiva (P) como se observa en la
regla R7. Siguiendo este lineamiento se construyen las 15 reglas.
70 Memoria
Tabla 4.6 Tabla de reglas
R1 If & es I y es Ne Then S es PB
R2 If & es I y es ZZ Then S es P
R3 If & es I y es Po Then S es P
R4 If & es CI y es Ne Then S es P
R5 If & es CI y es ZZ Then S es P
R6 If & es CI y es Po Then S es Z
R7 If & es C y es Ne Then S es P
R8 If & es C y es ZZ Then S es Z
R9 If & es C y es Po Then S es N
R10 If & es CD y es Ne Then S es Z
R11 If & es CD y es ZZ Then S es N
R12 If & es CD y es Po Then S es N
R13 If & es D y es Ne Then S es N
R14 If & es D y es ZZ Then S es N
R15 If & es D y es Po Then S es NB
Usando herramientas proporcionadas por XFuzzy, se ha realizado una
simulación del sistema de control. Así, en la Fig. 4.11 se observa la superficie de
control. En esta se observa el cumplimiento del comportamiento deseado del
sistema. Por ejemplo, si el Ángulo es negativo y la Velocidad también, el control
genera una salida positiva para corregirlo. Por el contrario, si el Ángulo y Velocidad
angular son positivos, el control genera una salida negativa.
Figura. 4.11: Simulación. Superficie de control
4 Diseño de Software 71
La Fig. 4.12 muestra la línea de transición en el espacio de estados, esto permite
detectar errores de forma temprana al momento de diseñar las reglas. También se
observa cómo se distribuyen los consecuentes de las reglas a través del espacio de
estados.
Figura. 4.12: Espacio de estados y línea de transición.
En la Fig. 4.13 se observa la simulación de la acción de corrección. Figuran las
dos entradas y la salida referida como corrección angular. El ángulo empieza en un
valor de 330 aproximadamente y se corrige alrededor del vector de estabilización.
Este proceso toma alrededor de 40 iteraciones.
Figura. 4.13: Simulación de acción de corrección.
La Fig. 4.14 muestra los resultados de la trayectoria de las variables lingüísticas
durante la simulación realizada. Se observa que el punto de inicio está ubicado en la
72 Memoria
regla R12, luego oscila entre R11 y R10 para finalmente ubicarse alrededor de la
parte central de R8, en cuyo centro está el vector de estabilidad.
Figura. 4.14: Trayectorias lingüísticas seguidas por las variables durante la simulación.
Las simulaciones se realizaron con el vector de variables ubicados en diferentes
puntos del espacio de estados y se han obtenido resultados similares, por tanto se
considera que el controlador cumple el objetivo esperado.
Una vez comprobado el buen funcionamiento del controlador borroso, se
procede a su transposición a lenguaje C en Arduino.
4.2.7.2. Diseño de entradas y salidas (Borrosificador)
La entrada correspondiente a la variable Ángulo se ha diseñado separando las
funciones en 4 grupos, como lo muestra la Fig. 4.15, estos grupos o regiones, son a, b, c
y d y son semejantes entre sí. Cada uno se compone de 2 triángulos rectángulos
contrapuestos, con catetos de valor 100. Si bien es cierto, la altura de los triángulos del
controlador tienen valor 1, aquí se ha escalado a 100 para facilitar la programación del
algoritmo.
4 Diseño de Software 73
Figura 4.15: Regiones a, b, c y d de variable Ángulo.
El diseño de esta entrada tiene triángulos simétricos y facilita esta división, y por
tanto la programación de la misma. Se programa la entrada considerando las 4 posibles
ubicaciones del valor de la variable Ángulo ,.
Por ejemplo, si 0 ≤ , < 100, entonces , se ubica en la región a, si 100 ≤ , <
200 se ubica en la región b, si 200 ≤ , < 300 entonces se ubica en la región c y si
300 ≤ , ≤ 400 entonces está en la región d.
Si , está en la región a, puede tomar el valor del subconjunto I y del
subconjunto CI, como se observa en la Fig. 4.16. Para calcular estos valores se usan las
ecuaciones 4.4 y 4.5, las cuales se basan en la geometría simétrica de los triángulos.
= 100 − , (4.4)
= , (4.5)
Figura 4.16: Cálculo de valores borrosos en los subconjuntos de región a.
74 Memoria
Este método se usa para calcular los valores borrosos en cualquiera de las
regiones de la variable. Las ecuaciones implicadas en la borrosificación, además de 4.4
y 4.5, son entonces:
En la región b:
= 200 − , (4.6)
= , − 100 (4.7)
En la región c:
= 300 − , (4.8)
- = , − 200 (4.9)
En la región d:
- = 400 − , (4.10)
- = , − 300 (4.11)
Para construir la segunda entrada correspondiente a la Velocidad angular se ha
usado el mismo método. Así, en la Fig. 4.17 se observa las regiones de división de la
variable, las cuales en este caso son cuatro y son aa, bb, cc y dd.
Si la Velocidad angular es −60 < ≤ −30 se encuentra en la región aa, si está
en −30 < ≤ 0 se encuentra en la región bb, si está en 0 < ≤ 30 se ubica en la
región cc y si 30 < ≤ 60 entonces se ubica en la región dd. La región aa y dd no se
construyen con triángulos sino con valores constantes. Las regiones bb y cc son
similares a las diseñadas en la entrada de Ángulo.
Figura 4.17: Regiones aa, bb, cc y dd de variable Velocidad angular
4 Diseño de Software 75
Las ecuaciones que permiten borrosificar la Velocidad angular son:
Para la región aa:
. =30 (4.12)
Para la región bb:
. = − (4.13)
// = 60 + (4.14)
Para la región cc:
// = 60 − (4.15)
0 = (4.16)
Para la región dd:
0 = 30 (4.17)
Para llegar hasta este punto el algoritmo debe comparar cada variable lingüística
y determinar en qué región está. Posteriormente se aplica las ecuaciones para obtener el
valor borroso de cada subconjunto. Para cada región, los subconjuntos excluidos toman
un valor nulo.
4.2.7.3. Cálculo de la conectiva AND
Una vez borrosificadas las dos entradas se aplica la propiedad de MIN ,
cumpliendo así la conectiva AND establecida en las reglas.
= min( ,) (4.18)
La ecuación 4.18 permite calcular el MIN de la conectiva. Donde corresponde
a la variable donde se guarda el valor del antecedente de la regla, es el valor borroso
de la variable Ángulo y el valor borroso de la variable Velocidad angular
En Arduino se programa con el comando r1 = min(I, Ne);, r1 toma el valor
mínimo entre los valores borrosos I del Ángulo y Ne de la Velocidad angular.
Así, con la ecuación 4.18 se construye 15 comparaciones correspondientes al
cumplimiento de la conectiva AND: MIN en cada regla y se asigna el valor a la variable
rx correspondiente.
76 Memoria
r1 = min(I, Ne) r2 = min(I,ZZ) r3 = min(I,Po) r4 = min(CI, Ne) r5 = min(CI,ZZ) r6 = min(CI,Po) r7 = min(C, Ne) r8 = min(C,ZZ) r9 = min(C,Po) r10 = min(CD, Ne) r11 = min(CD,ZZ) r12 = min(CD,Po) r13 = min(D, Ne) r14 = min(D,ZZ) r15 = min(D,Po)
4.2.7.4. Cálculo de agregación MAX
La agregación entre reglas se soluciona mediante el MAX , con lo cual si el
resultado de las reglas tiene aplicación a los mismos consecuentes, como se observa en
algunas reglas en la tabla 4.6, entonces se toma el valor mayor. Se calcula el MAX de
los diferentes consecuentes mediante la ecuación 4.19.
,= max1⋁
→ $3 (4.19)
Donde
, Variable que guarda el valor del máximo del respectivo consecuente $.
⋁ → $ Conjunto de reglas que comparten el mismo consecuente, $.
Se construye las siguientes comparaciones que dan cumplimiento a la ecuación
anterior, donde pbr, pr, zr, nr y nbr corresponden a las variables que guardan el valor
del máximo referidos a los consecuentes de tipo singleton pb, p, z, n y nb
respectivamente.
pbr=r1; pr=max(r2,r3,r4,r5,r7); zr=max(r6,r8,r10); nr=max(r9,r11,r12,r13,r14); nbr=r15;
4 Diseño de Software 77
4.2.7.5. Cálculo del Motor de Inferencia desborrosificador
El Motor de inferencia se calcula con la ecuación 2.20, la cual reemplazando por
las variables definidas por cálculos anteriores da como resultado la ecuación 4.20.
S =∑ ,
.
∑ ,
(4.20)
Reemplazando por las variables de programación queda
YFz =....(.)
(4.21)
Donde $45 es la variable que contiene el resultado del controlador borroso y es
usada para realizar las compensaciones de los diferentes servos.
Finalmente se carga un valor igual a cero en toda las variables usadas en el
algoritmo del controlador borroso, excepto en la del resultado $45.
4.2.8. Función Ponerse de Pie
Esta función controla los servos para que el robot se levante cuando se ha caído
de frente. Esta decisión se toma cuando el dato del acelerómetro en el eje Y es menor
que 400, lo que indica que el robot está cayendo o ha caído.
Los movimientos de los servos para ponerse de pie cumplen 3 fases y están
basadas en la forma original del robot MechRc de ponerse de pie. Cada fase cumple un
número de ciclos indefinido de incremento o decremento del ángulo de cada servo
implicado en el movimiento. La Fase termina cuando todos los servos han llegado a la
posición deseada. Cada ciclo se cumple en una base de tiempo (retardo) de 35ms de tal
forma, que el movimiento de los servos es suavizado, lo cual además brinda estabilidad
mecánica. Las fases posicionan a los servos en los ángulos descritos en la tabla 4.7 y se
cumplen en forma secuencial.
78 Memoria
Tabla 4.7 Posicionamiento de servos en cada fase.
Ángulo ᵒ
Servo Fase 1 Fase 2 Fase 3
a 90 90 90
b 45 45 93
c 145 145 93
d 41 80 41
e 140 100 143
f 35 35 87
g 135 135 87
h 90 90 90
i 80 50 92
j 100 140 88
k 92 92 92
l 92 92 92
(a) Fase 0, Robot caído. (b) Fase 1
(c) Fase 2 (d) Fase 3
Figura 4.18: Fases para levantarse.
4 Diseño de Software 79
En la Fase 1 se ubican los motores como se observa en la Fig. 4.18(a). Se
recogen las piernas y caderas, rodillas, tobillos y pies, e inclusive los hombros, de tal
forma que el robot pueda dejar caer su peso sobre las piernas con los pies apoyados en
el piso.
En la Fase 2 se flexiona ligeramente los tobillos hacia atrás para llevar el peso
del robot completamente sobre las piernas.
En la Fase 3 se mueve los servos para poner al robot en posición erguida, como
se observa en la Fig. 4.18(d). Luego se hace una pausa de 500ms y se continúa con la
rutina normal de teleoperación y control.
4.2.9. Ajuste del sistema de control
El controlador diseñado proporciona una salida con la cual se compensan los
diferentes motores para equilibrar el robot. Estudiando más detalladamente el sistema se
observa que una vez que el robot logra estabilizarse la salida del control vuelve a un
valor nulo y por tanto el robot se desestabiliza nuevamente. Esto produce una oscilación
en el robot el cual pierde el equilibrio y cae.
Para corregir este efecto se ha proporcionado unos valores de referencia
constantes sumadas a los respectivos ángulos de flexión de rodillas como entrada al
controlador borroso. Esto quiere decir que la variable lingüística Ángulo no es
directamente la del acelerómetro, sino que a esta se le suma o resta el ángulo de flexión
de rodillas. La Velocidad angular cumple la misma variante.
Así, cuando el robot dobla la rodilla el controlador siempre está proporcionando
una salida de control diferente de cero aunque el robot esté estable.
El esquema del proceso de control descrito se observa en la Fig. 4.19.
80 Memoria
Figura 4.19: Esquema de control aplicado.
Aquí finaliza la programación de los diferentes algoritmos integrados en el
procesador Atmega 328 de la placa electrónica Arduino Fio.
4.2.10. Control en el plano Sagital
En esta función se comparan la inclinación del robot en el plano sagital con una
de referencia. Para esto se lee el eje Y del acelerómetro y si el robot está con una
inclinación mayor de 30º se carga un valor constante a los servos a y h para evitar que
se siga inclinando. La Fig. 4.20 muestra el proceso descrito.
Figura 4.20: Esquema de control en el plano sagital.
Los diagramas de flujo de las funciones presentadas en este capítulo se exponen
en el apartado 8.
En el siguiente capítulo se muestran los resultados obtenidos después de las diferentes
pruebas realizadas al sistema de teleoperación.
83
5. Pruebas y Resultados
En el presente capítulo se muestran los resultados obtenidos en el diseño del
sistema de teleoperación del robot humanoide.
Se han realizado pruebas para comprobar el tiempo de retardo en la
teleoperación, el tiempo de proceso de las funciones principales del procesador, la
respuesta del control de equilibrio y la evaluación de poses.
Para observar el comportamiento del sistema y realizar la depuración del
programa de control se transmite algunas variables por comunicación Serie. En
cualquier ventana de recepción Serie se puede dar seguimiento al comportamiento del
sistema. Los datos transmitidos en orden son: encabezado valor “X”, eje X e Y del
acelerómetro, la velocidad angular, datos de los 12 servos, desde servoa hasta servok,
valores de variables lingüísticas Angulo y Velocidad angular y resultado de controlador
borroso.
Usando la información disponible se pueden construir diferentes curvas para
estudiar la respuesta del sistema.
5.1. Evaluación temporal.
Con esta prueba se mide el tiempo de los diferentes procesos de control y el
tiempo de retardo de teleoperación.
5.1.1. Tiempo de procesos
En esta prueba se mide los tiempos de procesamiento de las diferentes funciones.
Para ello se ha programado el procesador de tal forma que por un pin genera una señal
de voltaje durante un determinado proceso y con un osciloscopio se ha medido el
tiempo que tarda en ejecutarse.
La Fig. 5.1(a) muestra el tiempo que emplea el procesador en realizar el filtro de
Kalman. La Fig. 5.1(b) muestra el tiempo de proceso del controlador borroso TS.
84 Memoria
(a) Tiempo de proceso de filtro de Kalman (b) Tiempo de proceso control borroso TS
Figura 5.1: Tiempo de proceso de funciones principales
De la misma forma se ha determinado los tiempos de los procesos adicionales
que se detallan en la tabla 5.1. El tiempo total del proceso es de 4.4ms, pero es necesario
generar retardos de 20ms cada vez que se lee un canal del conversor AD, lo que resulta
en un tiempo total de proceso de 84.8 ms.
Tabla 5.1 Tiempo de procesos de funciones principales.
Función Retardo
Filtro de Kalman 660 us
Control Borroso 276 us
Control equilibrio (rodilla) 13.80 ms
Control de servos 1.56 ms
Proceso todas las funciones 4.8 ms
Proceso completo 84.80 ms
De esta forma se determina el tiempo ∆+ entre el dato actual y el anterior que se
usa para calcular la velocidad angular en la ecuación 4.2, el cual es 84.80ms.
5.1.2. Retardo de teleoperación
Para realizar esta prueba se graba los movimientos del teleoperador junto con los
del robot y se determina una posición de inicio. Luego en base al sonido que genera
cada uno se puede determinar qué tiempo de retardo existe entre los dos. Con esto se
mide directamente el tiempo de respuesta de los servos, algo que electrónicamente no se
puede hacer ya que no se tiene acceso al sensor interno de los mismos para saber
después de qué tiempo responde exactamente.
La Fig. 5.2 se muestra la señal de audio generada durante la teleoperación en la
cual se ha señalado un espacio de tiempo en el que se conoce que el operador ha
5 Pruebas y Resultados 85
empezado a moverse hasta que el robot lo hace. La escala de tiempo muestra que este es
de aproximadamente 517ms, lo cual es un retardo bastante aceptable tomando en cuenta
todos los procesos que se genera antes de mover los servos.
Figura 5.2: Medición de tiempo de retardo en respuesta del robot.
Este retardo de tiempo puede alterarse en algunos us por variaciones en
funciones del procesador del robot .Comparando estos resultados con los observados en
el trabajo presentado en [15] donde el tiempo de retardo es de aproximadamente 1.5s, se
concluye que el tiempo de retardo es menor y susceptible a mejoras, las cuales se
proponen en el capítulo 6.
5.2. Evaluación de la estabilidad
En el apartado 4.2.7.1 se revisó la simulación de la superficie de control y
simulaciones de la trayectoria lingüística a través de la matriz de estados. Ahora se
revisa estas trayectorias pero del sistema real. Primero se enciende el sistema y se
flexiona una rodilla. El sistema envía los datos de las variables lingüísticas vía Serie y
se almacenan para posteriormente encontrar las curvas seguidas.
La Fig. 5.3 muestra la trayectoria de las variables del sistema real en una prueba
de equilibrio. Se puede observar que en este caso la variable velocidad angular empieza
con un valor de 17 aproximadamente y el ángulo está cerca de 200. La trayectoria
seguida por el sistema atraviesa el espacio dominado por las reglas R9 y R8 hasta
acercarse al vector de equilibrio (200, 0).
86 Memoria
Figura 5.3: Trayectorias lingüísticas reales, flexión rodilla derecha.
Se ha observado que la mayoría de trayectorias del sistema son de esta forma
debido al ajuste del controlador y a diferencia de la simulación ésta tiene menos
oscilaciones ya que el sistema real es más lento.
(a) Con controlador (b) Sin controlador
Figura 5.4: Cambio angular de los planos frontal y axial del robot.
La Fig. 5.4 muestra los cambios angulares del robot en los planos frontal y
sagital durante la flexión de la rodilla izquierda. Esto se observa mediante la medición
del acelerómetro ubicado en el robot. El eje X da la información del cambio en el plano
frontal y el eje Y del plano sagital. Se observa en la Fig. 5.4(a) que durante la flexión de
la rodilla el controlador puede compensar los cambios angulares producidos y mantiene
al robot en equilibrio y el robot puede completar su tarea, mientras que en la Fig. 5.4(b)
se observa que sin el controlador el robot cae y como resultado se observa las
184 186 188 190 192 194 196 198 200 2020
2
4
6
8
10
12
14
16
18
Angle
Ang
ular
vel
ocity
Start
Stability Vector (0, 200)
Finish
R 9
R 8
0 10 20 30 40 50 60
-100
-50
0
50
Samples
Ang
le (
º )
Robot planes responses without control
Robot frontal plane
Robot sagital plane
Robot falls
Start left knee flexion
0 20 40 60 80 100 120-60
-40
-20
0
20
40
60
Samples
Ang
le (
º )
Robot planes responses with control
Robot frontal plane
Robot sagital plane
Complete knee flexion
Start left knee flexion
5 Pruebas y Resultados 87
variaciones bruscas de los ejes de los planos del robot, en este caso el robot puede
levantarse por sí solo pero nunca podría completar seguimientos de este tipo. Se observa
también que el eje Y tiene más ruido debido a que esta señal no pasa por el filtro de
Kalman como lo hacen los datos del eje X, las razones se exponen en el apartado 4.2.6.
El tiempo de muestreo de las figuras es de 84.8ms.
5.3. Evaluación de poses
Se ha probado el correcto funcionamiento de los movimientos de los diferentes
servos y el seguimiento de las articulaciones del robot a las del teleoperador.
Las Figs. 5.5 y 5.7 muestran el recorrido realizado por los brazos tanto del
teleoperador como del robot, además de sus posiciones iniciales y finales. En la primera
se hace el seguimiento al mover una sola articulación y en la segunda se combinan las
dos articulaciones
Las Fig. 5.8 muestra las diferentes posiciones de prueba, en las cuales el robot
cumple el objetivo propuesto. En las pruebas de levantar rodillas se observa que el robot
toma una postura diferente a la del operador, como se observa en la Fig. 5.9. Esto se
debe a que en esta postura se ejecuta el control de equilibrio, el cual mueve y compensa
algunos servos para equilibrar el robot y la postura se ve ligeramente diferente. Además
se puede destacar que el sistema funciona en modo espejo, es decir, el lado izquierdo
del robot es el derecho del teleoperador.
a) Hombro derecho b) Hombro izquierdo
Figura 5.5: Movimiento individual de extremidades superiores.
88 Memoria
La Fig. 5.6 muestra los cambios angulares de la secuencia de movimiento de los
servos de los hombros del robot de la Fig.5.7. A continuación se describe la posición de
los brazos de acuerdo a la numeración presentada en la Fig.5.6.
1. Ambos brazos abajo a -90º.
2. Ambos hombros han subido hasta media posición. Brazos horizontales a 20º.
3. Se bajan ambos brazos.
4. Brazo derecho completamente arriba a 80º. Brazo izquierdo abajo a -80º.
5. Brazo izquierdo completamente arriba a 80º. Brazo derecho abajo a -90º.
6. Ambos brazos completamente arriba a 80º.
Figura 5.6: Variación angular generador en secuencia de movimiento de brazos.
Figura 5.7: Movimiento de extremidades superiores combinadas.
0 20 40 60 80 100 120 140 160-100
-80
-60
-40
-20
0
20
40
60
80
100
Samples
Pitc
h A
ngle
( º
)
Left shoulder Rigth shoulder
1
2
3
4 5
6
1
5 Pruebas y Resultados 89
(a) Caderas (Apertura de piernas) (b) Muslos (Inclinación)
(c) Flexión de ambas rodillas (d) Postura erguida (inicial).
Figura 5.8: Movimiento de extremidades inferiores.
(a) Rodilla Derecha (Control estabilidad) (b) Rodilla Izquierda (Control estabilidad)
Figura 5.9: Flexión de rodillas.
90 Memoria
En la Fig. 5.10 se analiza los valores de los servos implicados en el equilibrio al
levantar la rodilla izquierda del teleoperador. Se observa que todos los servos van
cambiando su valor conforme la rodilla se acerca a su punto de máxima flexión, esto se
debe a la compensación mediante el resultado que provee el controlador borroso. A
continuación se describe los diferentes estados del proceso.
1. Se empieza en posición erguida.
2. La rodilla se flexiona.
3. Flexión completa.
4. Retornando a pose inicial
Figura 5.10: Análisis valores de servos en flexión de rodilla izquierda.
En la Fig. 5.11 se observa los movimientos realizados por el tele operador y el
robot relacionados al análisis de la Fig. 5.10.
Figura 5.11: Secuencia flexión de rodilla.
20 40 60 80 100 12075
80
85
90
95
100
105
Samples
Ang
le (
º )
Servos response whit fuzzy control compensation
Servo a Pitch R. leg
Servo c Pitch R. Knee
Servo h Pitch L. legServo k Rol R. foot
Servo k Rol R. foot
42 31
Start flexion
Start deflexion
5 Pruebas y Resultados 91
La Fig. 5.12 muestra los valores de los servos de la Fig.5.10 pero esta vez sin
compensar con el valor del controlador borroso. Se puede observar que durante la
flexión los valores de la mayoría de servos no cambia porque no se toma en cuenta en
lazo de realimentación y por esta razón el robot cae. Este resultado se observa también
en la Fig.5.4(b).
Figura 5.12: Análisis valores de servos en flexión de rodilla izquierda sin controlador.
En el siguiente capítulo se describe las conclusiones y las propuestas para continuar con
esta línea de investigación y mejorar el sistema.
0 20 40 60 80 100 12089
90
91
92
93
94
95
96
Samples
Ang
le (
º )
Servos response without control compesation
Servo a Pitch R.legServo c Pitch R. kneeServo h Pitch L. leg
Servo k and l Rol both feet
Complete flexion
Start flexion
95
6. Conclusiones y Trabajos Futuros
En este capítulo se presentan las conclusiones obtenidas después de realizar las
diferentes pruebas y verificar el funcionamiento del sistema. También se presentan ideas
que pretenden mejorarlo, y proyectan una investigación más específica en el campo de
la robótica humanoide.
6.1. Conclusiones
Una vez realizadas las diferentes pruebas, se concluye que se ha cumplido el
objetivo planteado, es decir, el robot es capaz de reproducir los movimientos que
realiza el tele operador.
El controlador borroso Takagi Sugeno permite controlar sistemas en tiempo real
de una manera eficiente. Además, si los subconjuntos de la variable lingüística
que corresponde al consecuente de las reglas son de tipo singleton el sistema es
aún más rápido, aunque el resultado borroso pierde un poco de suavidad. Se
debe buscar una herramienta matemática que reduzca el ruido de las entradas ya
que este produce inestabilidad en la respuesta.
La respuesta de un controlador borroso no tiene una dinámica acumulativa de
error, como sucede en el control clásico con un PID. Por este motivo es
necesario ajustar ciertos parámetros en las referencias de entrada para obtener el
resultado deseado.
El filtro de Kalman es una excelente herramienta matemática que permite
reducir ruidos Gaussianos de señales contaminadas. Trabajando detalladamente
en su diseño se puede ralentizar su respuesta, lo cual en ciertos casos, redunda en
una mayor estabilidad del sistema, como ha sucedido en este proyecto.
Los módulos Xbee de comunicación inalámbrica por radiofrecuencia permiten
transmitir datos a distancias relativamente grandes usando pequeñas potencias.
También existen otras tecnologías como Wi-Fi, bluetooth, infrarrojos, etc. que
96 Memoria
hoy en día permiten que diferentes dispositivos estén conectados en red. En un
futuro cercano se pretende incluir este tipo de tecnologías en los coches para
mejorar el sistema de transporte y brindar más seguridad al usuario.
La tecnología open source permite usar tanto hardware como software sin pagar
derechos de uso o de autor. Esto brinda una ventaja tanto para investigadores
académicos como particulares porque se dispone de estos recursos de una forma
gratuita, además, de la ayuda brindada por los expertos de soporte.
Arduino permite optimizar el tiempo en el diseño de algoritmos y programación
de micro controladores y procesadores. También permite realizar cambios en sus
módulos electrónicos, aunque la mayor parte de sus usuarios no lo hace y
prefiere usarlos como base de una placa electrónica general. El soporte brindado
a través de sus ejemplos y herramientas facilita el aprendizaje al usuario, el cual
se enfoca más en solucionar los algoritmos y su programación.
Los procesadores usados por Arduino hasta la actualidad han sido de 8 bits y de
frecuencias no mayores a 8MHz, razón por la cual muchos de los procesos
matemáticos embebidos, en los cuales se usa punto flotante, se realizan a baja
velocidad. Se puede mejorar notablemente el desempeño del sistema de control
del robot humanoide usando procesadores con mayores prestaciones como los
ARM.
Hoy en día existe un avance importante en la investigación de los modelos de
caminata humana y su aplicación en robots humanoides. Uno de los mayores
inconvenientes en este tipo de investigaciones es el precio del robot, el cual si
tiene los sensores y actuadores necesarios resulta relativamente costoso.
El sistema de sensores de tipo potenciómetrico usados en el traje resultan
económicos pero no muy eficientes para transmitir el movimiento, debido a las
limitaciones mecánicas que tiene el mismo por eso se plantea hacer mejoras para
trabajos futuros. En la actualidad existen sistemas comerciales para la captura
del movimiento humano como el Xsens MVN, los cuales se basan en sistemas
inerciales[34].
6 Conclusiones y Trabajos Futuros 97
6.2. Trabajos Futuros
De acuerdo a las conclusiones obtenidas al finalizar este trabajo se observa que
pueden hacerse mejoras que se plantean como trabajos futuros. Además se expone
nuevos retos para continuar con la investigación.
Usar un procesador de mejores prestaciones. Se propone usar la tarjeta Arduino
DUE, cuyo procesador es un ARM Cortex de 32 bits y 96 MHz de ATMEL [35]
ó una tarjeta mbed NXP LPC1768 con similares características que el anterior
[36]. Del primer módulo se tiene la ventaja de conocer las herramientas de
programación. El segundo módulo por su parte tiene el programador y
compilador on line, esto quiere decir que se puede programar desde cualquier
ordenador con internet sin necesidad de descargar la herramienta.
Cambiar el procesador permitirá incrementar la velocidad de procesamiento del
control en el robot y en el traje se puede incrementar el número de sensores a 16
con lo cual la respuesta dinámica del sistema será mejor y se pueden controlar
todos los servos disponibles en el robot.
Incrementar el número de sensores del teleoperador a 16. Se propone cambiarlos
a sensores de tipo IMU (Inertial Measurement Unit) o acelerómetros y mejorar
la mecánica del traje.
Cambiar el sistema de control de equilibrio actual a un sistema de control de
caminata, el cual está formado por un control de equilibrio dinámico, es decir
controla el equilibrio durante la caminata.
Estudiar diferentes curvas características que reflejan la forma de movimiento de
las diferentes articulaciones y tratar de reproducirlos para estudiar la eficiencia
de las mismas en una articulación robótica.
Revisar nuevas aplicaciones de robots humanoides y su interacción con seres
humanos
Implementar los sistemas descritos en un robot humanoide o en simulación.
101
7. Manual de Usuario
Este manual de usuario especifica el modo de funcionamiento y la puesta a
punto del sistema. Se describe la colocación del traje y la puesta a punto del robot.
Además se explica cómo se puede dar seguimiento en tiempo real del estado del robot
mediante la recepción Serie de los datos que proporciona el procesador.
7.1. Colocación del traje
El traje está compuesto de dos partes siendo estos el traje superior y el inferior.
Por comodidad primeramente el teleoperador debe colocarse el traje inferior. Antes se
debe verificar que la parte superior está conectada mediante los cables de alimentación
y datos al módulo de control.
Los siguientes pasos muestran cómo se lo debe colocar:
1. Colocarse el traje y sujetarse con el cinturón.
2. Ajustar las correas de las piernas y de las pantorrillas.
3. Colocarse el brazalete del brazo izquierdo.
4. Colocarse el brazalete del lado derecho.
Una vez colocado el traje el teleoperador debe realizar movimientos suaves que le
permiten ajustarse al movimiento del mismo.
Para inicial la transmisión de datos se debe encender el sistema con el swich
disponible en el módulo electrónico del traje. Un led verde empieza a titilar cuando la
transmisión ha empezado. En caso de agotarse al batería se debe recargar usando el
cargador descrito en la tabla 9.3.
7.2. Puesta a punto del robot.
El robot no necesita ajustes internos para empezar su funcionamiento, salvo estar
en pose erguida al empezar la teleoperación como lo indica la Fig. 5.8(d). Un requisito
del entorno es que el piso debe ser horizontal con una inclinación de ±2º, el no contar
con esto no se asegura el funcionamiento al 100% del sistema de control de equilibrio.
El robot funciona con dos baterías, como ya se ha explicado anteriormente, para
recargarlas se debe usar los cargadores descritos en la tabla 9.3.
102 Manual de Usuario
Para encender el sistema se debe colocar el swich ubicado en la espalda del
robot en ON. El robot permanecerá sin control hasta que haya inicializado el sistema,
enlazado el módulo Xbee y recibido las 30 primeras tramas de datos, lo cual toma un
tiempo aproximado de 10s tiempo en el cual el tele operador debe permanecer inmóvil.
La distancia máxima entre el teleoperador y el robot es de 30m en interiores y 90
en exteriores.
No se necesita un ordenador para el funcionamiento ya que el sistema es
autónomo. La lectura de los datos de seguimiento en tiempo real se puede hacer desde
un ordenador o cualquier dispositivo que tenga un conector USB/Serie.
7.3. Requerimientos de receptor Serie
Para acceder a los datos de estado del robot el receptor necesita un puerto USB/Serie
con la siguiente configuración:
• Velocidad de comunicación: 57600.
• Bits de inicio: 1
• Bits de datos 8:
• Bits de parada 1:
• Bits de paridad: Ninguno
• Control de flujo: Ninguno
Se debe conectar el módulo Xbee al Xbee Explorer y con un cable mini USB se
conecta al dispositivo de recepción, como se indica en la Fig.7.1.
Figura 7.1: Conexión de Xbee Explorer
Se debe recordar que el módulo Xbee que cumple esta tarea se ha configurado
como se indica en el apartado 2.1.1 como dispositivo final.
7 Manual de Usuario 103
A continuación se muestra un ejemplo de un paquete de datos recibido y su descripción.
X,ánguloFK,ejey_acc,velocidad_ang,servoa,servob,…,servok,servol,Rcontrolador
Paquete : X,390,520,-15,90,92,86,78,67,89,90,90,100,123,98,99,-12
Descripción:
X Encabezado
ánguloFK=390 Respuesta del filtro Kalman (ángulo en eje X del acelerómetro),
aplicar: (ánguloFK-200)/1.66 para obtener respuesta en grados.
ejey_acc=520 ángulo del eje Y del acelerómetro, aplicar: (ejey_acc-510)/1.66
para obtener respuesta en grados.
velocidad_ang=-15 Velocidad angular del eje X.
servoa,servob, ,…,servok,servol=90,92,…98,99 datos actuales de la posición angular
en grados de los servos.
Rcontrolador=-12 Respuesta en grados del controlador borroso.
Cada dato está separado por una coma de tal forma que se pueda separarlos sin
dificultad.
107
8. Diagramas de flujo
En este capítulo se presentan los diagramas de flujo de las funciones descritas en el
apartado 4.1 y 4.2.
8.1. Diagramas de flujo de funciones del traje.
Figura 8.1: Programa principal del traje.
108 Diagramas de Flujo
Figura 8.2: Función Set up.
Enviados 8
datos
Fin
Guardar dato de
canal N
N=0
Escalar valor de
0-1024 a 0-254
Transmitir
Encabezado
Dato = 255.
Transmitir
Dato
Siguiente canal NSí No
Lectura de sensores
y Transmisión de
datos
Figura 8.3: Función de lectura y transmisión de datos.
8 Diagramas de Flujo 109
8.2. Diagramas de flujo de funciones del robot.
Figura 8.4: Programa principal.
8 Diagramas de Flujo 111
2
30 primeras
Tramas
DatoN = Dato N +
compensador
Sumar Cada Dato
Respectivo
Hacer un promedio de
cada Dato
Hallar un
compensador de
cada DatoN como la
resta de la variable de
inicialización y el
promedio de cada
uno.
Fin
No Sí
Figura 8.6: Función Decodificación de trama y cálculo de compensadores.
112 Diagramas de Flujo
Figura 8.7: Función Flexión de rodillas.
Figura 8.8: Función Control de servos.
8 Diagramas de Flujo 113
Función 8.9: Función Filtro de Kalman.
Función 8.10: Función Controlador Borroso.
8 Diagramas de Flujo 115
Figura 8.12: Función Calcular conectiva AND.
Figura 8.13: Función Calcular agregación MAX .
116 Diagramas de Flujo
Figura 8.14: Función Ponerse de pie.
Figura 8.15: Función Control en plano sagital.
119
9. Presupuesto
En el presente capítulo se detalla los elementos usados en el sistema completo y
sus respectivos precios. El costo de hardware se clasifica en elementos del traje y
elementos del robot, demás se incluye los accesorios usados. Todos los precios están en
euros.
9.1. Coste de material hardware
Tabla 9.1 Lista de elementos y precios de traje de sensores.
Descripción Cantidad Precio Unitario Precio
Potenciómetros Lineales 6 2 12
Acelerómetro 3 ejes ADXL335 +/- 3g 2 22,3 44,6
Tarjeta Arduino Fio 1 19,9 19,9
Xbee 2mW antena chip Serie 2-ZB 1 21,1 21,1
Interruptor 1 2 2
Leds 2 0,3 0,6
Caja protectora 1 6 6
Articulaciones y correas de sujeción 1 350 350
Batería LiPo 1000mA, 3.3V 1 9,9 9,9
Sub total 1 466,1€
Tabla 9.2 Lista de elementos y precios del sistema del robot.
Descripción Cantidad Precio Unitario Precio
Robot Humanoide MechRc 1 400 400
Tarjeta Arduino Fio 1 19,9 19,9
Acelerómetro 3 ejes ADXL322 +/- 2g 1 23,8 23,8
Baquelita perforada auxiliar 1 5 5
Batería LiPo 2000mA, 3.3V 1 13,55 13,55
Xbee 2mW antena chip Serie 2-ZB 2 21,1 42,2
Sub total 2 504,45€
120 Presupuesto
Tabla 9.3 Lista de elementos y precios de accesorios.
Descripción Cantidad Precio Unitario Precio
Tarjeta Arduino uno (Pruebas) 1 25 25
Xbee Xplorer 1 19,9 19,9
Cargador baterías LiPo con chip
MCP73831T de 3,7V 1 12,3 12,3
Conversor Serie USB FTDI232 1 12,5 12,5
Cable tipo Bus/m 10 1 10
Conectores polarizados 10 1,3 13
Soldador 1 20 20
Destornilladores 4 2 8
Pistola de pegamento 1 15 15
Pinzas 3 4 12
Estaño 1 5 5
Pasta de soldar 1 4 4
repuesto de potenciómetros 8 2 16
Envío paquetería 4 9 36
Sub total 3 208,7€
El coste total de hardware es
Sub Total Hardware
1179,25€
9.2. Coste de diseño e implementación
Tabla 9.4 Coste de diseño e implementación.
Descripción Cantidad Precio Unitario Precio
Diseño de control/horas 200 15 3000
Diseño de software/horas 190 12 2280
Subtotal ID 5280€
En esta tabla no se incluyen los costos del programa Arduino, del programa de
configuración de Xbee y de Xfuzzy ya que son aplicaciones “open source”.
9 Presupuesto 121
Tabla 9.5 Importe total del presupuesto.
Descripción Precio
Sub Total Hardware 1179,25
Subtotal ID 5280
Honorarios de redacción 452,1475
Base imponible 6911,3975
Iva (18%) 1244,05155
TOTAL 8155,45€
El costo total del prototipo es de: ocho mil ciento cincuenta y cinco euros con
cuarenta y cinco céntimos.
Alcalá de Henares, I de julio de 2012.
Fdo.: Andrés Cela Rosero
125
10. Bibliografía
[1] R. Vullings, B. de Vries, y J. W. M. Bergmans, «An Adaptive Kalman Filter for ECG Signal Enhancement», Biomedical Engineering, IEEE Transactions on, vol. 58, no. 4, pp. 1094 –1103, abr. 2011.
[2] K. Michels, F. Klawonn, R. Kruse, y A. Nürnberger, Fuzzy control: fundamentals, stability and design of fuzzy controllers. Springer, 2006.
[3] R. Babuška, Fuzzy Modeling for Control. Springer, 1998. [4] T. Liu, Y. Inoue, y K. Shibata, «A Wearable Sensor System for Human Motion
Analysis and Humanoid Robot Control», in Robotics and Biomimetics, 2006. ROBIO ’06. IEEE International Conference on, 2006, pp. 43 –48.
[5] A. Alvarez-Alvarez, G. Trivino, y O. Cordon, «Human Gait Modeling Using a Genetic Fuzzy Finite State Machine», Fuzzy Systems, IEEE Transactions on, vol. 20, no. 2, pp. 205 –223, abr. 2012.
[6] A. Nakazawa, S. Nakaoka, K. Ikeuchi, y K. Yokoi, «Imitating human dance motions through motion structure analysis», in Intelligent Robots and Systems, 2002. IEEE/RSJ International Conference on, 2002, vol. 3, pp. 2539 – 2544 vol.3.
[7] B. Dariush, M. Gienger, B. Jian, C. Goerick, y K. Fujimura, «Whole body humanoid control from human motion descriptors», in Robotics and Automation, 2008. ICRA 2008. IEEE International Conference on, 2008, pp. 2677 –2684.
[8] «The ASIMO Technical Robotics Manual | ASIMO History and Specs». [Online]. Available: http://asimo.honda.com/Abstract-Technical-Information/. [Accessed: 18-may-2012].
[9] «Humanoid Robots Laboratory». [Online]. Available: http://hrl.informatik.uni-freiburg.de/research.html. [Accessed: 28-jun-2012].
[10] «Competitions : RoboCup Mexico 2012». [Online]. Available: http://www.robocup2012.org/comp_RCSoccer-humanoid-General.php. [Accessed: 28-jun-2012].
[11] «Hitec Robotics :: Sitemap». [Online]. Available: http://www.robonova.de/store/sitemap.php. [Accessed: 28-jun-2012].
[12] «TikiWiki : User Projects». [Online]. Available: http://www.bioloid.info/tiki/tiki-index.php?page=User+Projects. [Accessed: 28-jun-2012].
[13] «MechRCTM - A Revolution in Robotics!» [Online]. Available: http://www.mechrc.com/support.htm. [Accessed: 17-may-2012].
[14] I. Boesnach, J. Moldenhauer, A. Fischer, y T. Stein, «Context Orientated Motion Generation: A New Scheme for Humanoid Robot Control», in Robot and Human Interactive Communication, 2006. ROMAN 2006. The 15th IEEE International Symposium on, 2006, pp. 304 –308.
[15] J. Koenemann y M. Bennewitz, «Whole-Body Imitation of Human Motions with a Nao Humanoid», ACM/IEEE International Conference on Human-Robot Interaction (HRI), no. 1, mar. 2012.
[16] A. Kos y J. Babič and, «Programming and control of humanoid robot football playing tasks», in Robotics in Alpe-Adria-Danube Region (RAAD), 2010 IEEE 19th International Workshop on, 2010, pp. 115 –118.
[17] E. Foxlin, «Inertial head-tracker sensor fusion by a complementary separate-bias Kalman filter», in Virtual Reality Annual International Symposium, 1996., Proceedings of the IEEE 1996, 1996, pp. 185 –194, 267.
[18] C. Hide, T. Moore, y M. Smith, «Adaptive Kalman filtering algorithms for integrating GPS and low cost INS», in Position Location and Navigation Symposium, 2004. PLANS 2004, 2004, pp. 227 – 233.
126 Bibliografía
[19] L. W. Stimac y T. A. Kennedy, «Sensor alignment Kalman filters for inertial stabilization systems», in Position Location and Navigation Symposium, 1992. Record. 500 Years After Columbus - Navigation Challenges of Tomorrow. IEEE PLANS ’92., IEEE, 1992, pp. 321 –334.
[20] C. A. Monje, S. Martinez, A. Jardon, P. Pierro, C. Balaguer, y D. Munoz, «Full-size humanoid robot TEO: Design attending mechanical robustness and energy consumption», in Humanoid Robots (Humanoids), 2011 11th IEEE-RAS International Conference on, 2011, pp. 325 –330.
[21] «ATmega328- Atmel Corporation». [Online]. Available: http://www.atmel.com/devices/ATMEGA328.aspx. [Accessed: 17-may-2012].
[22] «ZigBee Technology». [Online]. Available: http://www.zigbee.org/About/AboutTechnology/ZigBeeTechnology.aspx. [Accessed: 23-may-2012].
[23] «Xbee - Módulos de transmisión inalambrica - Aplicaciones». [Online]. Available: http://www.xbee.cl/. [Accessed: 23-may-2012].
[24] «ADXL335 | Small, Low Power, 3-Axis ±3 g Accelerometer | MEMS Accelerometers | MEMS and Sensors | Analog Devices». [Online]. Available: http://www.analog.com/en/mems-sensors/mems-accelerometers/adxl335/products/product.html. [Accessed: 17-may-2012].
[25] T. Bräunl, Embedded Robotics: Mobile Robot Design and Applications With Embedded Systems. Springer, 2008.
[26] «Arduino - ArduinoBoardFio». [Online]. Available: http://arduino.cc/en/Main/ArduinoBoardFio.
[27] G. Welch y G. Bishop, «An Introduction to the Kalman Filter», University of North Carolina at Chapel Hill, Department of Computer Science, 1997, p. 16.
[28] R. Kalman, «A New Approach to Linear Filtering and Prediction Problems», Transactions of the ASME – Journal of Basic Engineering, no. 82 (Series D), pp. 35–45, 1960.
[29] K. M. Passino y S. Yurkovich, Fuzzy control. Addison-Wesley, 1998. [30] International Electrotechnical Commission (IEC), «Programmable Controllers»,
IEC, vol. Part 7 "Fuzzy controling programming", ene. 1997. [31] T. Takagi y M. Sugeno, «Fuzzy Identification of Systems and Its Applications to
Modeling and Control», IEEE Transactions on Systems, Man, and Cybernetics, vol. 15, no. 1, pp. 116–132, feb. 1985.
[32] «An Overview of Xfuzzy 3.0». [Online]. Available: http://www2.imse-cnm.csic.es/Xfuzzy/Xfuzzy_3.0/index.html. [Accessed: 28-jun-2012].
[33] M. Benrejeb, A. Sakly, D. Soudani, y P. Borne, «Stability Domain Study of Discrete TSK Fuzzy Systems», in Computational Engineering in Systems Applications, IMACS Multiconference on, 2006, vol. 1, pp. 293 –298.
[34] «Homepage Español - Xsens». [Online]. Available: http://www.xsens.com/en/homepage-es. [Accessed: 04-jul-2012].
[35] «Arduino Blog » Blog Archive » Breakfast at Arduino». [Online]. Available: http://arduino.cc/blog/2011/09/17/arduino-launches-new-products-in-maker-faire/. [Accessed: 02-jul-2012].
[36] «mbed NXP LPC1768 - Handbook | mbed». [Online]. Available: http://mbed.org/handbook/mbed-NXP-LPC1768. [Accessed: 02-jul-2012].