Capítulo 1 -...

126
Capítulo 1 Introducción

Transcript of Capítulo 1 -...

Capítulo 1

Introducción

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.

Capítulo 2

Fundamentos Teóricos

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.

Capítulo 3

Diseño de Hardware

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.

Capítulo 4

Diseño de Software

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.

Capítulo 5

Pruebas y Resultados

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

Capítulo 6

Conclusiones y Trabajos Futuros

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.

Capítulo 7

Manual de Usuario

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.

Capítulo 8

Diagramas de Flujo

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.

110 Diagramas de Flujo

Figura 8.5: Función Set up.

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.

114 Diagramas de Flujo

Figura 8.11: Función Borrosificador

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.

Capítulo 9

Presupuesto

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

Capítulo 10

Bibliografía

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. Babic&#x030C 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].