Sunteți pe pagina 1din 45

UNIVERSIDAD DEL QUINDO

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGAS


PROGRAMA DE TECNOLOGA EN ELECTRNICA

INFORME FINAL PROYECTO SEMILLEROS EN


DESARROLLOS TECNOLGICOS

IMPLEMENTACIN DE ALGORITMOS INTELIGENTES EN


UN ROBOT MVIL PARA LA NAVEGACIN EN
ENTORNOS INTERIORES

Armenia, Abril de 2011


UNIVERSIDAD DEL QUINDO

IMPLEMENTACIN DE ALGORITMOS INTELIGENTES EN UN


ROBOT MVIL PARA LA NAVEGACIN EN ENTORNOS
INTERIORES

INFORME FINAL PROYECTO SEMILLERO

Investigador principal:

Esp. Jos Bestier Padilla Bejarano

Integrantes del semillero:

Docentes del programa de Tecnologa en Electrnica:

Ing. lvaro Andrs Navarro Prez


Msc. Ramiro Arango

Estudiantes de Tecnologa en Electrnica:

Diana Marcela Macas Vanegas


Jos Julin Herrera
Jos Geiler Marn

Estudiantes de Ingeniera Electrnica:

Jos Elas Macas Manrique


Oscar Alexander Henao Hernndez

Grupo de Investigacin:

GIDET (Grupo de Investigacin en desarrollos tecnolgicos)

Lnea de Investigacin: Instrumentacin y Procesamiento de Seales

Proyecto de investigacin presentado bajo la modalidad:


Consolidacin de Semillero

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

3
UNIVERSIDAD DEL QUINDO

TABLA DE CONTENIDO

DESCRIPCIN TCNICA DEL PROYECTO............................................................................................... 5


FICHA TCNICA .................................................................................................................................... 5
CUMPLIMIENTO DE METAS ................................................................................................................. 6
INDICADORES DE RESULTADOS........................................................................................................... 7
INFORME FINANCIERO ........................................................................................................................ 8
INFORME EJECUTIVO DEL PROYECTO ................................................................................................. 9
1. RESUMEN EJECUTIVO DE LOS RESULTADOS DIRECTOS .............................................................. 9
2. ACTIVIDADES DESARROLLADAS ................................................................................................. 10
2.1 ANLISIS DE LOS RESULTADOS .................................................................................................. 20
3. RESULTADOS INDIRECTOS ......................................................................................................... 21
3.1 FORMACIN DE RECURSOS HUMANOS .................................................................................... 21
3.2 DIVULGACIN DE LOS RESULTADOS EN EVENTOS CIENTFICOS ............................................... 21
4. DIFICULTADES............................................................................................................................ 22
5. ACTIVIDADES PENDIENTES ........................................................................................................ 22
6. EQUIPOS ADQUIRIDOS .............................................................................................................. 22
7. CONCLUSIONES ......................................................................................................................... 23
8. AGRADECIMIENTOS................................................................................................................... 23
9. TRABAJOS FUTUROS .................................................................................................................. 24
ANEXO 1. MARCO DE REFERENCIA ................................................................................................... 25
A. INTRODUCCIN ......................................................................................................................... 25
B. MARCO TERICO ....................................................................................................................... 25
ANEXO 2. ALGORITMO IMPLEMENTADO ......................................................................................... 30
ANEXO 3. RESMENES EN EVENTOS ................................................................................................ 44
REFERENCIAS ..................................................................................................................................... 45

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

4
UNIVERSIDAD DEL QUINDO

DESCRIPCIN TCNICA DEL PROYECTO

El presente proyecto se realiz en el Grupo de investigacin en desarrollos


tecnolgicos (GIDET) como objetivo principal la consolidacin de Semilleros de
investigacin.

A continuacin se describe el informe tcnico el cual incluye el presupuesto


ejecutado y las tareas realizadas.

FICHA TCNICA

Fecha de Iniciacin: Agosto de 2010 Periodo: 2010 2011

TTULO: IMPLEMENTACIN DE ALGORITMOS INTELIGENTES EN UN ROBOT


MVIL PARA LA NAVEGACIN EN ENTORNOS INTERIORES

INVESTIGADOR PRINCIPAL: Jos Bestier Padilla Bejarano


GRUPO DE INVESTIGACIN: En desarrollos Tecnolgicos GIDET
LNEA DE INVESTIGACIN: Instrumentacin y Procesamiento de Seales
FACULTAD: Facultad de Ciencias Bsicas y Tecnologas
Lugar de ejecucin del proyecto: Laboratorios de Electrnica, GIDET,
Universidad del Quindo
Ciudad: Armenia
Duracin del proyecto: 6 meses
Tipo de Proyecto: Investigacin tecnolgica
Modalidad: Consolidacin semillero en Aplicacin de microcontroladores en
sistemas autmatas
Valor Solicitado a la Universidad: $1000.000

Descriptores / Palabras Claves: Robot, implementacin, algoritmos inteligentes

Resumen: En el presente proyecto se pretende desarrollar en una plataforma


mvil tipo vehculo la implementacin y validacin de algoritmos inteligentes tales
como: lgica difusa y redes neuronales, dedicados al reconocimiento y adaptacin
en ambientes interiores. Se utiliza un microcontrolador como sistema de manejo
de toda la lgica con la que se cuente en la plataforma robtica. Adems se
manejan herramientas de simulacin para evaluar el desempeo de cada
algoritmo realizado.
FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS
PROGRAMA DE TECNLOGA EN ELECTRNICA

5
UNIVERSIDAD DEL QUINDO

CUMPLIMIENTO DE METAS

Metas Programadas Metas Realizadas Porcentaje de Cumplimiento


Seminario Permanente Cumplida 100%
Revisin Bibliogrfica Cumplida 100%
Proceso de compra de equipos Cumplida 100%
Acople de piezas mecnicas Cumplida 100%
Diseo, simulacin e
implementacin de circuitos y Cumplida 100%
desarrollo de software
Montaje de prototipo y pruebas de Cumplida 100%
desempeo
Optimizacin del sistema propuesto Parcial 80%

Elaboracin, redaccin y Cumplida 100%


publicacin de escritos
Publicaciones:

Implementacin de Lgica
Difusa en un Robot Mvil
para la Navegacin en
Entornos Interiores

XII SIMPOSIO Y XIII MUESTRA


TECNOLOGICA 2011
Cumplida 100%
Navegacin Inteligente de un
Robot Mvil Mediante Lgica
Difusa

III SIMPOSIO NACIONAL DE


ELECTRONICA,TELECOMUNICA
CIONES Y CIENCIAS DE LA
COMPUTACIN 2011

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

6
UNIVERSIDAD DEL QUINDO

INDICADORES DE RESULTADOS

Componentes Actividades Porcentaje de ejecucin


Charlas semanales por
parte de los integrantes del
Seminario Permanente GIDET , en torno al tema de 100%
navegacin de robot
mviles

Construccin de una base


de datos de artculos
Revisin Bibliogrfica obtenido a travs de 100%
internet, revistas y libros
Adquisicin de libros

Robot Pololu, sensores de


Proceso de compra de ultrasonido, sensor de
orientacin, sensor 100%
equipos
infrarrojo y programador
Microcontroladores
Se acopl la plataforma
Acople de Piezas robtica a los diferentes 100%
mecnicas sensores de distancia
Diseo, simulacin e Se dise e implement el
implementacin de programa para el desarrollo 100%
circuitos y desarrollo de de algoritmos de
software navegacin
Montaje de prototipo y Se analiz el montaje
100%
pruebas de desempeo realizado y su desempeo

Optimizacin del sistema Se verific el rendimiento 80%


propuesto del sistema

Durante el proyecto los


Formacin de estudiantes propusieron sus
100%
estudiantes ideas y se compartieron en
evento regionales

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

7
UNIVERSIDAD DEL QUINDO

INFORME FINANCIERO

Componentes y/o Presupuesto Presupuesto


Actividades Proyectado Ejecutado
EQUIPOS
Robot Pololu 270.000 270.000
Sensor de 120.000 144.000
ultrasonidos
Sensores de 40.000 49.000
Distancia
Sensor de 130.000 127.000
Orientacin
Sensores de 32.000 49.500
Proximidad

Sensor de Humedad 110.000 108.000


y Temperatura
DSPIC30F4013 81.000 85.000
Programador 69.000 69.000
Orangutn
BIBLIOGRAFIA
Robots
Manipuladores y 78.000 78.000
robots mviles
Redes Neuronales,
automtica y 88.000 90.000
Robtica
TOTAL 919.000 979500

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

8
UNIVERSIDAD DEL QUINDO

INFORME EJECUTIVO DEL PROYECTO

1. RESUMEN EJECUTIVO DE LOS RESULTADOS DIRECTOS

El tema de la navegacin dentro de la robtica mvil ha adquirido una atencin


especial por los investigadores de esta rama debido a la importancia de ubicar un
punto en el espacio por intermedio de un robot mvil de manera autnoma y que
este a su vez tenga la capacidad de interactuar con el medio sin presentar colisin.

Hoy en da se han desarrollado tcnicas de control inteligente que le permiten al


robot mvil sortear cualquier tipo de situacin sin importar las condiciones del medio
independiente si se conoce con anterioridad o si es desconocido parcial o
totalmente.

El algoritmo implementado fue una tcnica de control basado en lgica difusa que de
acuerdo a un conjunto de reglas predeterminadas, se logr que el robot navegara
por un entorno no conocido con obstculos en frente con un rendimiento
relativamente alto. Para ello, se realiz un programa en lenguaje C por intermedio de
la herramienta AVR Studio de la empresa Atmel [1] donde se simul y depur el
rendimiento del sistema.

Debido a que la tcnica de Lgica Difusa involucra una matemtica sencilla desde el
punto de vista del anlisis pero una matemtica compleja desde el punto de vista de
la implementacin, ya que el microcontrolador empleado solo soporta operaciones
en punto fijo, el rendimiento del robot se vio un poco disminuido pero tolerable dentro
del rango analizado.

Con este sistema, se mostr que la implementacin de un algoritmo inteligente en un


microcontrolador que trabaja a punto fijo, se ve limitado en los clculos realizados y
por ende limita el rendimiento del robot. Sin embargo, estos algoritmos pueden ser
implementados en otro tipo de plataforma o de sistema donde los

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

9
UNIVERSIDAD DEL QUINDO

microcontroladores solo tengan la tarea de leer el estado de los sensores y enviar


datos al sistema de locomocin.

2. ACTIVIDADES DESARROLLADAS

Durante la realizacin de este proyecto se aprendi a implementar tcnicas de


control inteligente en pequeos sistemas embebidos basados en microcontroladores
y que para acercarnos a los objetivos propuestos en la realizacin de este proyecto
se llevaron a cabo las siguientes actividades:

Se particip en seminarios permanente sobre las tcnicas inteligentes para la


navegacin de robots mviles en diferentes entornos lo que permiti divulgacin
de los alcances.

Se hizo una revisin bibliogrfica permanentemente, en forma general y


detallada acerca de las alternativas de implementacin de cualquier algoritmo.

Se realiz la integracin de piezas en la plataforma comercial Pololu y los


sensores de distancia necesarios para la navegacin de la plataforma mvil.

Se dise un programa en lenguaje C para implementar un algoritmo basado en


Lgica Difusa teniendo en cuenta el uso de tres (3) sensores de distancia
infrarrojos. La simulacin del sistema se llev a cabo en la programa Proteus
[2].

Posterior a este diseo, se procedi con la validacin del algoritmo inteligente


sometiendo el robot ante diferentes tipos de escenarios con sus propios
obstculos.

A continuacin se detallan algunas de estas actividades:

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

10
UNIVERSIDAD DEL QUINDO

El algoritmo utilizado en este proyecto se baso en Lgica Difusa y su primera


implementacin se hizo sobre una plataforma robtica construida (Figura 1). En esta
plataforma se manej como sistema de control principal un microcontrolador
ATmega16 de Atmel.

Figura 1. Robot de Prueba

Este microcontrolador es un dispositivo de 8 bits cuya CPU solo puede manejar


operaciones a punto fijo. La configuracin fue del tipo diferencial debido a que es la
configuracin ms apropiada para realizar un giro en cualquier direccin y controlar
su velocidad.

Para realizar los giros en cualquier direccin, el robot cont con un circuito integrado
especializado para tal fin teniendo en cuenta el consumo de corriente en un instante
de tiempo.

Una vez se implement el sistema anterior, se codific el algoritmo segn sus


modelos matemticos. La lgica Difusa es la ciencia que emula el conocimiento de
un experto aplicado a un sistema de control.

Para implementar el algoritmo se debi sealar los bloques funcionales en los que
est dividido el sistema (Figura 2)

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

11
UNIVERSIDAD DEL QUINDO

Figura 2. Diagrama de Bloques del sistema de control

La etapa de percepcin se implement por intermedio de tres sensores de distancia


infrarrojos GP2D12 ubicado en el frente de la parte delantera a una distancia de 30
grados entre cada uno. El sensor infrarrojo entrega un valor analgico segn la
distancia en que se encuentre el obstculo (Figura 3)

Figura 3. Configuracin de los sensores de distancia (a) y curva de respuesta del sensor
GP2D12 (b)

Una vez se tuvo definido cada etapa en la que est constituido el robot, se procedi
a la implementacin del algoritmo basado en lgica Difusa. Para ello, se defini
primero cules fueron las variables de entradas y salidas para posteriormente definir
toda la base de reglas.

Para las variables de entrada se tom a consideracin la distancia del robot hacia un
obstculo descrito por su rango o universo de discurso y segn los valores mximos
y mnimos soportados por el sensor (Tabla 1).
FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS
PROGRAMA DE TECNLOGA EN ELECTRNICA

12
UNIVERSIDAD DEL QUINDO

Tabla 1. Variables lingsticas

Variable Variable de salida


de entrada

Cerca - C Rpido Atrs - RR

Medio - M Lento Atrs - RL

Lejos - L Lento Adelante - FL

Rpido Adelante - FR

Lejos: 45 x 80
Medio: 20 x 70
Cerca: 10 x 45

El rango o universo de discurso para la variable de salida se encuentra limitada por


los valores mximos y mnimos asignados al sentido de giro implementado en el
microcontrolador. Los valores son: -100 (mximo giro hacia atrs) y 100 (mximo
giro hacia adelante) por cada motor. Se encuentra segmentado de la siguiente
manera:

Rpido Adelante: 33 x 100


Lento Adelante: 0 x 66
Lento Atrs: -66 x0
Rpido Atrs: -100 x -33

Los movimientos de robot estn manejados segn la (Figura 4), teniendo en cuenta
que dependiendo de la distancia al obstculo el robot dar los giros ms y menos
forzada.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

13
UNIVERSIDAD DEL QUINDO

Figura 4. Movimientos del robot

Para implementar los conjuntos difusos se definieron las funciones de pertenencia


de tipo triangular, tipo Z, tipo S [6]. Esta seleccin se realiz debido a la facilidad de
expresar estas funciones a travs de un modelo matemtico o conjunto de
ecuaciones. Estas funciones de pertenencia representan de manera adecuada la
naturaleza de los datos.

La (Figura 5) muestra las funciones de pertenencia para la variable de entrada y en


la (Figura 6) se muestra las funciones de pertenencia para la variable de salida.

Figura 5. Funciones de pertenencia para la variable de entrada

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

14
UNIVERSIDAD DEL QUINDO

Figura 6. Funciones de pertenencia para la variable de salida

Base de reglas

Se definieron 27 reglas basadas en el conocimiento del experto segn el entorno


donde el robot est explorando, teniendo en cuenta que el principal objetivo es una
navegacin por un entorno interior sin que choque contra ningn obstculo en su
recorrido. La base de reglas se muestra en la Tabla 2.

Para la simulacin del sistema se utiliz la herramienta UnFuzzy diseada en la


universidad Nacional de Colombia [7]. Esta herramienta permite definir las variables
de entradas, las variables de salida, los tipos de conjuntos, la base de reglas y las
distintas formas para encontrar la respuesta de salida de una manera muy amigable.

Esta herramienta genera un cdigo en lenguaje C listo para ser implementado. El


cdigo ha sido acoplado a la arquitectura de los microcontroladores AVR de punto
fijo.

Una vez el robot inicia, el sistema hace lectura de los sensores analgicos
obteniendo valores cuantizados segn (6).

(6)

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

15
UNIVERSIDAD DEL QUINDO

Tabla 2. Base de Reglas

Variables Variables Variables de Variables


de Entrada de Salida Entrada de Salida

1 C C C RL FL 15 M M L FR FR

2 C C M FL RL 16 M L C RR FR

3 C C L FL RL 17 M L M FR FR

4 C M C FR RR 18 M L L FR RR

5 C M M FR RR 19 L C C RL FL

6 C M L FR RR 20 L C M RL FL

7 C L C FL FL 21 L C L RL FL

8 C L M FL FL 22 L M C FR FR

9 C L L FR FR 23 L M M RR FR

10 M C C RL FL 24 L M L FR FR

11 M C M RL FL 25 L L C RL FL

12 M C L FL RL 26 L L M RR FR

13 M M C RL FL 27 L L L FR FR

14 M M M FR FR

Posterior, se accedi a una funcin que calcula la distancia segn los valores
cuantizados encontrados anteriormente. Debido a que la curva de respuesta de los
sensores analgicos es no lineal (Figura 3), y para facilidad de clculo en el
microcontrolador, se recurri a una interpolacin realizada en Matlab en punto
flotante, dando el siguiente resultado [8]:

( ) (7)

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

16
UNIVERSIDAD DEL QUINDO

Donde corresponde al valor cuantizado por el conversor analgico digital ADC


del microcontrolador a una resolucin de 10 bits.

A continuacin, el sistema verifica si las tres entradas tienen pertenencia sobre cada
regla completa analizando la pertenencia del antecedente segn (8)

( ) ( ) ( ) ( ) (8)

Donde ( ), ( ), ( ) corresponden a las pertenencias para variable de


entrada en los conjuntos difusos.

Se realiza ahora el proceso de hallar la pertenencia del consecuente partiendo de un


centro de altura definido a cada conjunto de salida para finalmente hallar la
pertenencia de la implicacin.

(9)

(10)

Donde ( ) es la pertenencia para las variables de salida.

Con la pertenencia de la implicacin, el sistema traduce estos valores a los valores


correspondientes de salida a cada motor y ejecutar su objetivo de movimiento.

En la Figura 7 se muestra el ambiente al que fue sometido el robot. En este se


plantearon pequeos obstculos en un rea de 1 m x 80 cm delimitado con un lnea
negra para aprovechar los sensores infrarrojos que trae la plataforma y evitar que el
robot recorra sitios no considerados.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

17
UNIVERSIDAD DEL QUINDO

Figura 7. Ambiente de prueba para el Robot

En la Figura 8 se muestra un ambiente con dos obstculos a una distancia plena de


tal manera que el robot pueda tomar de forma correcta y rpida las decisiones para
evitar chocarlos.

Figura 8. Ambiente con obstculos lejanos

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

18
UNIVERSIDAD DEL QUINDO

En la Figura 9 se muestra el ambiente nuevamente pero ahora con los obstculos


ms cercanos entre s. En este ambiente el comportamiento del robot estuvo dentro
de un promedio pero present el inconveniente de acercarse demasiado a
cualquiera de los obstculos para tomar la decisin teniendo en cuenta que al hacer
un giro el obstculo cercano oblig al algoritmo tomar decisiones apresuradas para
salir del posible encierro.

Figura 9. Ambientes con obstculos cercanos

Sin embargo a pesar de lo cercano de los obstculos, el comportamiento del robot


fue aceptable.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

19
UNIVERSIDAD DEL QUINDO

2.1 ANLISIS DE LOS RESULTADOS

Una vez se realiz el anlisis del rendimiento del robot de prueba, se implement el
algoritmo en la plataforma 3PI Pololu (Figura 10).

Figura 10. Robot POLOLU

El robot posee un microcontrolador ATmega328. Este dispositivo posee 32Kb de


memoria de programa y adems puede operar hasta una frecuencia de 20Mhz lo
cual mejor el rendimiento del programa con respecto al robot de prueba.

El robot Pololu fue sometido al ambiente mostrado de la Figura 7. Cuando los


obstculos estaban con una cierta separacin considerable la reaccin del mismo
para evitar chocarlos fue muy buena mientras que si los obstculos estaban muy
cercanos entre s, el robot tardaba un poco de tiempo en tomar la decisin correcta.
Sin embargo, este inconveniente se mejor un poco cambiando el universo de
discurso para la variable de salida, es decir, la velocidad de los motores.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

20
UNIVERSIDAD DEL QUINDO

3. RESULTADOS INDIRECTOS

3.1 FORMACIN DE RECURSOS HUMANOS

Con la realizacin de este proyecto de semillero, se dan los primeros pasos para la
consolidacin del semillero en esta rea tan importante para nuestra sociedad como
lo es la robtica. Se logr la formacin y la motivacin de los estudiantes que
hicieron parte de este proyecto para seguir trabajando en futuros trabajos y poder
tener el semillero fortalecido para mostrar a la comunidad universitaria y regional de
los avances en los desarrollos de proyectos en esta rea y por supuesto ser
competitivos.

3.2 DIVULGACIN DE LOS RESULTADOS EN EVENTOS CIENTFICOS

1. A. Navarro. Arquitectura Hardware Software para la navegacin de un


Robot Mvil. Presentado en la V Muestra Tcnico Cientfica en el Centro de
Investigacin de la Facultad de Ingeniera CEIFI realizado el da 29 de
octubre de 2010 en la universidad del Quindo. Armenia, Quindo.

2. A. Navarro. R. Arango. J. Herrera. Navegacin Inteligente de un Robot Mvil


Mediante Lgica Difusa. Presentado en el III Simposio Nacional de
Electrnica, Telecomunicaciones y Ciencias de la Computacin ETCC2010
realizado durante los das 3 y 4 noviembre de 2010 en el Instituto Tcnico
Metropolitano ITM en la ciudad del Medelln, Colombia.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

21
UNIVERSIDAD DEL QUINDO

4. DIFICULTADES

Durante el desarrollo del proyecto, el inconveniente ms grande se encontr en el


manejo de los clculos de punto flotante encontrados mediante los algoritmos de
lgica difusa. Sin embargo, algunos clculos se simplificaron permitiendo al
microcontrolador encontrar el valor de salida en funcin de los valores de entrada un
poco ms rpido pero con cierto lmite. Con estas simplificaciones se logr una
navegacin aceptable dentro de los parmetros establecidos.

5. ACTIVIDADES PENDIENTES

Del desarrollo del proyecto quedaron pendientes las siguientes actividades:

Realizar la implementacin de Redes Neuronales en un ambiente conocido


sobre el robot mvil para verificar la propiedad de generalizacin.
Seguir la exploracin de nuevos algoritmos inteligentes para la navegacin de
robots mviles en ambientes no conocidos.
Optimizar el cdigo de programacin para tener unos resultados ms
precisos.
Verificar el modelo matemtico del robot mvil tipo diferencial para hacer una
proyeccin ms especfica utilizando leyes de control.

6. EQUIPOS ADQUIRIDOS

Durante la realizacin de este proyecto, se lograron adquirir los siguientes equipos:

Plataforma Robtica 3PI ROBOT de la Empresa Polou.


Programador Orangutan para plataforma robtica 3PI
Dos sensores de ultrasonido SRF05
Un sensor de orientacin CMPS03

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

22
UNIVERSIDAD DEL QUINDO

Cinco sensores de proximidad de referencia IS471FE


Tres circuitos integrados DSPIC de referencia 30F4013
Cuatro sensores de distancia de referencia GP2WOOD4XP
Un sensor de temperatura y humedad de referencia SHT71.

7. CONCLUSIONES

Se logr mostrar la implementacin del algoritmo de Lgica Difusa bajo un sistema


cuyo microcontrolador maneja operaciones a punto fijo. El sistema mostr
aceptables resultados cuyos objetivos era evitar que el robot se choque contra algn
obstculo en su recorrido.

Los algoritmos inteligentes de navegacin son la alternativa que mejor presenta


resultados en un sistema embebido frente a otros tipos de mecanismos siempre y
cuando el sistema de control soporte operaciones complejas.

Se dejado abierta la opcin de seguir trabajando utilizando la plataforma robtica 3PI


para implementar otros algoritmos de navegacin.

8. AGRADECIMIENTOS

Este trabajo ha sido realizado con el apoyo financiero de la Universidad del Quindo,
por intermedio de la vicerrectora de Investigaciones. Se brinda un especial
agradecimiento a todas las personas que estuvieron involucrados en el desarrollo de
este proyecto y al grupo GIDET por facilitar el espacio de trabajo. Esperamos que
este trabajo investigativo permita consolidar el semillero de robtica para el
programa de Tecnologa en Electrnica.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

23
UNIVERSIDAD DEL QUINDO

9. TRABAJOS FUTUROS

El campo de la robtica mvil enfocado a la navegacin tiene gran acogida por los
investigadores de esta rea. Actualmente en el programa de Tecnologa en
Electrnica se est desarrollando un software interactivo para la simulacin de
algoritmos basados en diagrama de flujo enfocado a la programacin de
microcontroladores el cual puede ser utilizado para implementar cualquier algoritmo
evitando la complejidad que involucra escribir un cdigo en algn lenguaje dedicado.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

24
UNIVERSIDAD DEL QUINDO

ANEXO 1. MARCO DE REFERENCIA

A. INTRODUCCIN

A travs de los aos la ciencia y la tecnologa avanzan a pasos agigantados. A


veces con mucha rapidez a veces con menos pero siempre se muestra un avance.
Y con estos avances surgen nuevas ramas y espacios de aplicacin y en la robtica
no ha sido la excepcin. Hoy en da existen muchas estrategias de control que
permiten a los robots mviles tener un control ms preciso de su rendimiento en
cualquier ambiente; aquellas estrategias estn enfocadas hacia los algoritmos
inteligentes donde han demostrado tener una mayor confiablidad.

Los robots mviles deben ser capaces de desenvolverse en un entorno real,


construir su propio mapa y navegar de manera autnoma lo que para ellos se
requiere la implementacin de estrategias de control inteligente, que puedan
manejar la incertidumbre presentada por el entorno de trabajo, al mismo tiempo que
se desempea en tiempo real con una relativa baja carga computacional [1].

Muchos son las tcnicas y algoritmos de control para este tipo de robots, todas con
caractersticas propias en la cual cada una ofrece ventajas y desventajas que
permiten a los cientficos utilizar el que mejor se acomode a la necesidad. Dada la
especializacin de los nuevos mecanismos, se exigen tambin tcnicas de control
capaces de ofrecer un trabajo satisfactorio en la realizacin de las tareas. Una de
las tcnicas es llamada Lgica Difusa dominada por una base de reglas del tipo if
Antecedente then Consecuente [2].

B. MARCO TERICO

La lgica difusa se fundamenta en la teora de conjuntos difusos y se implementa


ampliamente en procesos que utilicen el razonamiento basado en reglas. Los

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

25
UNIVERSIDAD DEL QUINDO

procesos de razonamiento parten del conocimiento de un experto, dicho


conocimiento se introduce en la base de reglas en forma de sentencias si-entonces
(if-then).

Los datos que entran al sistema difuso estn expresados en lenguaje comn, debido
a esto es necesario trasladar el conocimiento inicial, es decir, los datos a un lenguaje
que sea entendido por el sistema difuso (Fusificacin). Al terminar el proceso los
datos son llevados nuevamente a su forma original a travs de la defuzificacin.

Las reglas creadas por el usuario describen el comportamiento del sistema. El


esquema bsico de un sistema difuso se muestra en la (Figura 11).

Figura 11. Esquema bsico de un sistema difuso

La definicin matemtica de un conjunto difuso A se expresa como:

* ( )| + (11)

Donde X es el universo de discurso o simplemente el universo y sus elementos se


denotan como x, entonces el conjunto difuso A en X es definido como un conjunto de
pares ordenados. Dicho universo consiste de objetos discretos (singleton) ordenados
o no ordenados y espacios continuos (funciones de membresa).

Un conjunto difuso nicamente se especifica por su funcin de membresa. Una


funcin de membresa es una funcin que define como cada punto en un espacio de
entradas es mapeado en un grado de membresa entre 0 y 1. El espacio de entradas
a veces es referenciado como el universo de discurso.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

26
UNIVERSIDAD DEL QUINDO

Las funciones de membresa ms conocidas son: singleton, triangular (L o Lambda),


trapezoidal (P o Pi), gaussiana, campana generalizada (generalized bell), sigmoidal,
Z y S. Cada nombre de las funciones de membresa anteriores hace referencia a su
forma y cada una de ellas tiene diferentes variaciones. Algunas de las funciones de
membresa ms utilizadas son mostradas en la (Figura 12).

Figura 12. Funciones de membresa. (a) Membresa triangular, (b) Membresa trapezoidal,
(c) Membresa gaussiana, (d) Membresa campana

El detalle y la descripcin matemtica precisa no siempre son necesarios para el


funcionamiento ptimo de un proceso. En otras palabras, los operadores humanos
son a menudo capaces de manejar situaciones complejas. Su conocimiento est
disponible en un formulario lingstico, es decir, el conjunto de variables de entradas
al sistema difuso son traducidas en un conjunto de variables lingsticas.

Una funcin de pertenencia asociada a cualquier variable lingstica (altura)


mostrndose a su vez el universo de discurso se muestra en la (Figura 13).

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

27
UNIVERSIDAD DEL QUINDO

Figura 13. Parmetros importantes en una funcin de pertenencia

El proceso de combinacin de las diferentes reglas se realiza a partir de las


operaciones con conjuntos difusos tales como: La unin, interseccin y
complemento definidos as:

Interseccin (AND):

( ) ( ) , ( ) ( )- (12)

Unin (OR):

( ) ( ) , ( ) ( )- (13)

Complemento (NOT):

( ) - ( ) (14)

En la (Figura 14) se muestra la comparacin entre operadores clsicos y operadores


difusos.

La Fuzificacin es el proceso en el cual se toman las entradas y se determina el


grado de membresa perteneciente a cada uno de los conjuntos difusos apropiados,
determinado por las funciones de membresa. La entrada es siempre un valor
numrico limitado al universo de discurso de la variable de entrada y la salida es un

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

28
UNIVERSIDAD DEL QUINDO

grado de membresa difuso en el conjunto lingstico calificativo (intervalo entre 0 y


1).

La Defuzificacin es el mtodo para obtener el valor numrico o real, que mejor


represente un resultado lingstico dado por un conjunto difuso en la variable
lingstica de salida. La estrategia de Defuzificacin ms utilizada es el Centro de
Gravedad. El defuzificador por centro de gravedad esta dado por:

(15)

Figura 14. Operadores clsicos (Lgica de dos valores) vs. Operadores Difusos (Lgica
multivaluada)

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

29
UNIVERSIDAD DEL QUINDO

ANEXO 2. ALGORITMO IMPLEMENTADO

Procedimiento Principal
#include <avr/io.h>
#include <avr/interrupt.h>

#include "fuzzy.h"
#include "adc.h"
#include "motor.h"
#include "Retardos.h"

float linear(unsigned int x);


void distanceObstacle(uint16_t entra[],uint8_t entradas[]);

prog_char saludo[] = " ROBOT ";


prog_char saludo1[] = " FUZZY ";

int main(void)
{
uint16_t entra[NUMEROVARIABLESENTRADA];
uint8_t entradas[NUMEROVARIABLESENTRADA];
int8_t salidas[NUMEROVARIABLESSALIDA];

uint8_t i;

adcInit();
motorInit();
llenarDatos();

sei();
while(1)
{

//Se leen los sensores y se adecua la informacin para ser


//entregada al sistema difuso

for(i=0;i<NUMEROVARIABLESENTRADA;i++)
adcReadChannel(&entra[i],ADC_CH_ADC0 + i);

//Se calcula la distancia de acuerdo a la informacin de entrada


distanceObstacle(entra,entradas);

//Se llama al sistema difuso para encontrar las respectivas


//salidas de cada motor
calcularFuzzy(entradas,salidas);

//Se envia informacion a motores


motorSet((uint16_t)salidas[0],(uint16_t)salidas[1]);
}

return 0;
}
FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS
PROGRAMA DE TECNLOGA EN ELECTRNICA

30
UNIVERSIDAD DEL QUINDO

//--------------------- FIN -------------------------------------

float linear(uint16_t x){

if (x<81) x=81;
if (x>512) x=512;

return((6787 / ((float)(x))) - 4);

void distanceObstacle(uint16_t entra[],uint8_t entradas[])


{
float valor;
uint8_t i;

for(i=0;i<NUMEROVARIABLESENTRADA;i++)
{
valor = linear(entra[i]);
entradas[i] = (uint8_t)valor;
}
}

Procedimiento Difuso
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <math.h>

#include "fuzzy.h"

typedef struct conjunto{


int8_t minimo;
int8_t maximo;
}conjunto;

typedef struct variable{


int8_t minimo;
int8_t maximo;
uint8_t intervalos;
uint8_t intervalo;
uint8_t numeroConjuntos;
}variable;

/*typedef struct difusor{


int8_t minimo;
int8_t maximo;
int8_t centro;
int8_t var1;
int8_t var2;
int8_t var3;
int8_t var4;

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

31
UNIVERSIDAD DEL QUINDO

uint8_t puntos;
uint8_t intervalo;
}difusor;*/

variable VariablesEntrada[NUMEROVARIABLESENTRADA];
variable VariablesSalida[NUMEROVARIABLESSALIDA];
conjunto Entradas[NUMEROTOTALCONJUNTOSENTRADA];
//difusor Difusores[NUMEROTOTALCONJUNTOSENTRADA];
int8_t Difusores[NUMEROTOTALCONJUNTOSENTRADA];

int8_t arrSalida[4] = {-80,-40,40,80};

//Esta funcin retorna la posicin del dato pasado como parametro mas
cercano de arregloSalida
uint8_t buscarValor(int8_t dat,int8_t arr[],uint8_t tam)
{
uint8_t i,pos = 0;
int16_t error,er;

error = arr[0] - dat;

if(error < 0)
error = error * (-1);

for(i=1;i<tam;i++)
{
er = arr[i] - dat;

if(er < 0)
er = er * (-1);

if(er < error)


{
error = er;
pos = i;
}
}

return pos;
}

void llenarDatos(void)
{
llenarVariablesEntrada();
llenarVariablesSalida();
llenarEntradas();
llenarDifusores();
llenarReglas();
llenarCentrosAltura();
}

void calcularFuzzy(uint8_t *entra, int8_t *sale)


{
uint8_t i;
int8_t arrTemp[2];
uint8_t indice;

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

32
UNIVERSIDAD DEL QUINDO

for(i=0;i<NUMEROVARIABLESSALIDA;i++)
sale[i]=(uint8_t)salidaConcreta(i,entra);
}

void actualizarEntradas(uint8_t *ent)


{
//uint8_t dx;
uint8_t i;
for(i=0;i<NUMEROVARIABLESENTRADA;i++)
{
Difusores[i] = ent[i];
}
}

uint8_t indiceEntradas(uint8_t numVar,uint8_t numConj)


{
uint8_t contador=0;
uint8_t i;
for(i=0;i<numVar;i++)
{
contador=contador+VariablesEntrada[i].numeroConjuntos;
}
contador=contador+numConj;
return contador;
}

float pertenenciaComposicion(uint8_t numVar,uint8_t numRegla, int8_t sal)


{
float ux=0.0;
float uxa;
float uxab;
float comp=0;

if(!activarRegla(numRegla))
{
comp=Implicacion(0,0);
}

uxab=pertenenciaImplicacion(numVar,numRegla,Difusores,sal);
uxa = 1;
ux=Composicion(uxa,uxab);

}
return ux;
}

float pertenenciaImplicacion(uint8_t numSal,uint8_t numRegla,int8_t


*ent,int8_t sal)
{
float uxa,uxb;
uxa=pertenenciaAntecedente(numRegla,ent);
uxb=pertenenciaConsecuente(numSal,numRegla,sal);
return Implicacion(uxa,uxb);
}

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

33
UNIVERSIDAD DEL QUINDO

float pertenenciaConsecuente(uint8_t numSal,uint8_t numRegla,int8_t sal)


{
float uxc;
int8_t conj;
conj=Reglas[numRegla][NUMEROVARIABLESENTRADA+numSal];
uxc=pertenenciaVariableSalida(numSal,conj,sal);
return uxc;
}

float pertenenciaAntecedente(uint8_t numRegla,int8_t *ent)


{
float ux;
float uxa;
int8_t conj;
uint8_t j=0;
conj=Reglas[numRegla][0];
uxa=pertenenciaVariableEntrada(j,conj,ent[j]);

for(j=1;j<NUMEROVARIABLESENTRADA;j++)
{
conj=Reglas[numRegla][j];
ux=pertenenciaVariableEntrada(j,conj,ent[j]);

uxa=And(uxa,ux);
}
return uxa;
}

uint8_t activarRegla(uint8_t numRegla)


{
uint8_t i;
for(i=0;i<NUMEROVARIABLESENTRADA;i++)
{
uint8_t bmn,bmx,cmn;
uint8_t numCon;
uint8_t indice;
numCon=Reglas[numRegla][i];
indice=indiceEntradas(i,numCon);
bmn=Entradas[indice].minimo;
bmx=Entradas[indice].maximo;
cmn = Difusores[i];

if(cmn < bmn || cmn > bmx)


return 0;
}
return 1;
}

float salidaConcreta(uint8_t NumeroSalida,uint8_t *ent)


{
float respuesta;
switch(NumeroSalida)
{
case 0 : respuesta=salidaConcreta0(ent);break;
case 1 : respuesta=salidaConcreta1(ent);break;
default:respuesta=0;break;

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

34
UNIVERSIDAD DEL QUINDO

}
return respuesta;
}

float salidaConcreta0(uint8_t *ent)


{
uint8_t NumeroSalida=0;
int8_t y;
float y1=0;
float y2=0;
float ymax;
uint8_t j;
ymax=VariablesSalida[NumeroSalida].minimo;
actualizarEntradas(ent);
for(j=0;j<NUMEROREGLAS;j++)
{
if(activarRegla(j))
{
float temp;
y=CentrosAltura[j][NumeroSalida];
temp=pertenenciaComposicion(NumeroSalida,j,y);
y1=y1+y*temp;
y2=y2+temp;
}
}

ymax=y1/y2;
return ymax;
}

float salidaConcreta1(uint8_t *ent)


{
uint8_t NumeroSalida=1;
int8_t y;
float y1=0;
float y2=0;
float ymax;
uint8_t j;
ymax=VariablesSalida[NumeroSalida].minimo;
actualizarEntradas(ent);
for(j=0;j<NUMEROREGLAS;j++)
{
if(activarRegla(j))
{
float temp;
y=CentrosAltura[j][NumeroSalida];
temp=pertenenciaComposicion(NumeroSalida,j,y);
y1=y1+y*temp;
y2=y2+temp;
}
}

ymax=y1/y2;
return ymax;
}

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

35
UNIVERSIDAD DEL QUINDO

void llenarVariablesEntrada(void)
{
VariablesEntrada[0].minimo = MINIMO_VARIABLE1_ENTRADA;
VariablesEntrada[0].maximo = MAXIMO_VARIABLE1_ENTRADA;
VariablesEntrada[0].intervalos = INTERVALOS_VARIABLE1_ENTRADA;
VariablesEntrada[0].intervalo = INTERVALO_VARIABLE1_ENTRADA;
VariablesEntrada[0].numeroConjuntos = N_CONJUNTOS_VARIABLE1_ENTRADA;

VariablesEntrada[1].minimo = MINIMO_VARIABLE2_ENTRADA;
VariablesEntrada[1].maximo = MAXIMO_VARIABLE2_ENTRADA;
VariablesEntrada[1].intervalos = INTERVALOS_VARIABLE2_ENTRADA;
VariablesEntrada[1].intervalo = INTERVALO_VARIABLE2_ENTRADA;
VariablesEntrada[1].numeroConjuntos = N_CONJUNTOS_VARIABLE2_ENTRADA;

VariablesEntrada[2].minimo = MINIMO_VARIABLE3_ENTRADA;
VariablesEntrada[2].maximo = MAXIMO_VARIABLE3_ENTRADA;
VariablesEntrada[2].intervalos = INTERVALOS_VARIABLE3_ENTRADA;
VariablesEntrada[2].intervalo = INTERVALO_VARIABLE3_ENTRADA;
VariablesEntrada[2].numeroConjunto = N_CONJUNTOS_VARIABLE3_ENTRADA;
}

void llenarVariablesSalida(void)
{
VariablesSalida[0].minimo = MINIMO_VARIABLE1_SALIDA;
VariablesSalida[0].maximo = MAXIMO_VARIABLE1_SALIDA;
VariablesSalida[0].intervalos = INTERVALOS_VARIABLE1_SALIDA;
VariablesSalida[0].intervalo = INTERVALO_VARIABLE1_SALIDA;
VariablesSalida[0].numeroConjunto = N_CONJUNTOS_VARIABLE1_SALIDA;

VariablesSalida[1].minimo = MINIMO_VARIABLE2_SALIDA;
VariablesSalida[1].maximo = MAXIMO_VARIABLE2_SALIDA;
VariablesSalida[1].intervalos = INTERVALOS_VARIABLE2_SALIDA;
VariablesSalida[1].intervalo = INTERVALO_VARIABLE2_SALIDA;
VariablesSalida[1].numeroConjuntos = N_CONJUNTOS_VARIABLE2_SALIDA;
}

void llenarEntradas(void)
{
Entradas[0].minimo = ENTRADA1_MINIMO;
Entradas[0].maximo = ENTRADA1_MAXIMO;
Entradas[1].minimo = ENTRADA2_MINIMO;
Entradas[1].maximo = ENTRADA2_MAXIMO;
Entradas[2].minimo = ENTRADA3_MINIMO;
Entradas[2].maximo = ENTRADA3_MAXIMO;
Entradas[3].minimo = ENTRADA4_MINIMO;
Entradas[3].maximo = ENTRADA4_MAXIMO;
Entradas[4].minimo = ENTRADA5_MINIMO;
Entradas[4].maximo = ENTRADA5_MAXIMO;
Entradas[5].minimo = ENTRADA6_MINIMO;
Entradas[5].maximo = ENTRADA6_MAXIMO;
Entradas[6].minimo = ENTRADA7_MINIMO;
Entradas[6].maximo = ENTRADA7_MAXIMO;
Entradas[7].minimo = ENTRADA8_MINIMO;
Entradas[7].maximo = ENTRADA8_MAXIMO;
Entradas[8].minimo = ENTRADA9_MINIMO;
Entradas[8].maximo = ENTRADA9_MAXIMO;

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

36
UNIVERSIDAD DEL QUINDO

void llenarDifusores()
{
uint8_t i;

for(i=0;i<NUMEROVARIABLESENTRADA;i++)
Difusores[i] = 0;
}

void llenarReglas(void)
{

Reglas[0][0]=0;Reglas[0][1]=0;Reglas[0][2]=0;Reglas[0][3]=1;Reglas[0][4]=2;
Reglas[1][0]=0;Reglas[1][1]=0;Reglas[1][2]=1;Reglas[1][3]=2;Reglas[1][4]=1;
Reglas[2][0]=0;Reglas[2][1]=0;Reglas[2][2]=2;Reglas[2][3]=2;Reglas[2][4]=1;
Reglas[3][0]=0;Reglas[3][1]=1;Reglas[3][2]=0;Reglas[3][3]=3;Reglas[3][4]=0;
Reglas[4][0]=0;Reglas[4][1]=1;Reglas[4][2]=1;Reglas[4][3]=3;Reglas[4][4]=0;
Reglas[5][0]=0;Reglas[5][1]=1;Reglas[5][2]=2;Reglas[5][3]=3;Reglas[5][4]=0;
Reglas[6][0]=0;Reglas[6][1]=2;Reglas[6][2]=0;Reglas[6][3]=2;Reglas[6][4]=2;
Reglas[7][0]=0;Reglas[7][1]=2;Reglas[7][2]=1;Reglas[7][3]=2;Reglas[7][4]=2;
Reglas[8][0]=0;Reglas[8][1]=2;Reglas[8][2]=2;Reglas[8][3]=3;Reglas[8][4]=3;
Reglas[9][0]=1;Reglas[9][1]=0;Reglas[9][2]=0;Reglas[9][3]=1;Reglas[9][4]=2;
Reglas[10][0]=1;Reglas[10][1]=0;Reglas[10][2]=1;Reglas[10][3]=1;
Reglas[10][4]=2;
Reglas[11][0]=1;Reglas[11][1]=0;Reglas[11][2]=2;Reglas[11][3]=2;
Reglas[11][4]=1;
Reglas[12][0]=1;Reglas[12][1]=1;Reglas[12][2]=0;Reglas[12][3]=1;
Reglas[12][4]=2;
Reglas[13][0]=1;Reglas[13][1]=1;Reglas[13][2]=1;Reglas[13][3]=3;
Reglas[13][4]=3;
Reglas[14][0]=1;Reglas[14][1]=1;Reglas[14][2]=2;Reglas[14][3]=3;
Reglas[14][4]=3;
Reglas[15][0]=1;Reglas[15][1]=2;Reglas[15][2]=0;Reglas[15][3]=0;
Reglas[15][4]=3;
Reglas[16][0]=1;Reglas[16][1]=2;Reglas[16][2]=1;Reglas[16][3]=3;
Reglas[16][4]=3;
Reglas[17][0]=1;Reglas[17][1]=2;Reglas[17][2]=2;Reglas[17][3]=3;
Reglas[17][4]=0;
Reglas[18][0]=2;Reglas[18][1]=0;Reglas[18][2]=0;Reglas[18][3]=1;
Reglas[18][4]=2;
Reglas[19][0]=2;Reglas[19][1]=0;Reglas[19][2]=1;Reglas[19][3]=1;
Reglas[19][4]=2;
Reglas[20][0]=2;Reglas[20][1]=0;Reglas[20][2]=2;Reglas[20][3]=1;
Reglas[20][4]=2;
Reglas[21][0]=2;Reglas[21][1]=1;Reglas[21][2]=0;Reglas[21][3]=3;
Reglas[21][4]=3;
Reglas[22][0]=2;Reglas[22][1]=1;Reglas[22][2]=1;Reglas[22][3]=0;
Reglas[22][4]=3;
Reglas[23][0]=2;Reglas[23][1]=1;Reglas[23][2]=2;Reglas[23][3]=3;
Reglas[23][4]=3;
Reglas[24][0]=2;Reglas[24][1]=2;Reglas[24][2]=0;Reglas[24][3]=1;
Reglas[24][4]=2;
Reglas[25][0]=2;Reglas[25][1]=2;Reglas[25][2]=1;Reglas[25][3]=0;
Reglas[25][4]=3;

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

37
UNIVERSIDAD DEL QUINDO

Reglas[26][0]=2;Reglas[26][1]=2;Reglas[26][2]=2;Reglas[26][3]=3;
Reglas[26][4]=3;

void llenarCentrosAltura()
{
CentrosAltura[0][0] = -33; CentrosAltura[0][1] = 33;
CentrosAltura[1][0] = 33; CentrosAltura[1][1] = -33;
CentrosAltura[2][0] = 33; CentrosAltura[2][1] = -33;
CentrosAltura[3][0] = 83; CentrosAltura[3][1] = -83;
CentrosAltura[4][0] = 83; CentrosAltura[4][1] = -83;
CentrosAltura[5][0] = 83; CentrosAltura[5][1] = -83;
CentrosAltura[6][0] = 33; CentrosAltura[6][1] = 33;
CentrosAltura[7][0] = 33; CentrosAltura[7][1] = 33;
CentrosAltura[8][0] = 83; CentrosAltura[8][1] = 83;
CentrosAltura[9][0] = -33; CentrosAltura[9][1] = 33;
CentrosAltura[10][0]= -33; CentrosAltura[10][1] = 33;
CentrosAltura[11][0]= 33; CentrosAltura[11][1] = -33;
CentrosAltura[12][0]= -33; CentrosAltura[12][1] = 33;
CentrosAltura[13][0]= 83; CentrosAltura[13][1] = 83;
CentrosAltura[14][0]= 83; CentrosAltura[14][1] = 83;
CentrosAltura[15][0]= -83; CentrosAltura[15][1] = 83;
CentrosAltura[16][0]= 83; CentrosAltura[16][1] = 83;
CentrosAltura[17][0]= 83; CentrosAltura[17][1] = -83;
CentrosAltura[18][0]= -33; CentrosAltura[18][1] = 33;
CentrosAltura[19][0]= -33; CentrosAltura[19][1] = 33;
CentrosAltura[20][0]= -33; CentrosAltura[20][1] = 33;
CentrosAltura[21][0]= 83; CentrosAltura[21][1] = 83;
CentrosAltura[22][0]= -83; CentrosAltura[22][1] = 83;
CentrosAltura[23][0]= 83; CentrosAltura[23][1] = 83;
CentrosAltura[24][0]= -33; CentrosAltura[24][1] = 33;
CentrosAltura[25][0]= -83; CentrosAltura[25][1] = 83;
CentrosAltura[26][0]= 83; CentrosAltura[26][1] = 83;

float pertenenciaVariableEntrada(uint8_t numVar,uint8_t numConj, int8_t x)


{
float ux=0;
switch(numVar)
{
case 0:
switch(numConj)
{
case 0:
if(x<ENTRADA1_MINIMO)
ux=1;
if((x<ENTRADA2_MINIMO) && (x>=ENTRADA1_MINIMO))
ux=1;
if((x<ENTRADA1_MAXIMO) && (x>=ENTRADA2_MINIMO))
ux=((ENTRADA1_MAXIMO)-
(float)x)/((ENTRADA1_MAXIMO)-(ENTRADA2_MINIMO));

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

38
UNIVERSIDAD DEL QUINDO

if(x>=(ENTRADA1_MAXIMO))
ux=0;
break;
case 1:
if(x<(ENTRADA2_MINIMO))
ux=0;
if(x<(ENTRADA1_MAXIMO) && x>=(ENTRADA2_MINIMO))
ux=((float)x-
(ENTRADA2_MINIMO))/((ENTRADA1_MAXIMO)-(ENTRADA2_MINIMO));
if(x<(ENTRADA2_MAXIMO) && x>=(ENTRADA1_MAXIMO))
ux=((ENTRADA2_MAXIMO)-
(float)x)/((ENTRADA2_MAXIMO)-(ENTRADA1_MAXIMO));
if(x>=(ENTRADA2_MAXIMO))
ux=0;
break;
case 2:
if(x<(ENTRADA3_MINIMO))
ux=0;
if(x<(ENTRADA2_MAXIMO) && x>=(ENTRADA3_MINIMO))
ux=((float)x-
(ENTRADA3_MINIMO))/((ENTRADA2_MAXIMO)-(ENTRADA3_MINIMO));
if(x>=(ENTRADA2_MAXIMO))
ux=1;
break;

default:break;
}break;
case 1:
switch(numConj)
{
case 0:
if(x<ENTRADA4_MINIMO)
ux=1;
if((x<ENTRADA5_MINIMO) && (x>=ENTRADA4_MINIMO))
ux=1;
if((x<ENTRADA4_MAXIMO) && (x>=ENTRADA5_MINIMO))
ux=((ENTRADA4_MAXIMO)-
(float)x)/((ENTRADA4_MAXIMO)-(ENTRADA5_MINIMO));
if(x>=(ENTRADA4_MAXIMO))
ux=0;
break;
case 1:
if(x<(ENTRADA5_MINIMO))
ux=0;
if(x<(ENTRADA4_MAXIMO) && x>=(ENTRADA5_MINIMO))
ux=((float)x-
(ENTRADA5_MINIMO))/((ENTRADA4_MAXIMO)-(ENTRADA5_MINIMO));
if(x<(ENTRADA5_MAXIMO) && x>=(ENTRADA4_MAXIMO))
ux=((ENTRADA5_MAXIMO)-
(float)x)/((ENTRADA5_MAXIMO)-(ENTRADA4_MAXIMO));
if(x>=(ENTRADA5_MAXIMO))
ux=0;
break;
case 2:
if(x<(ENTRADA6_MINIMO))
ux=0;

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

39
UNIVERSIDAD DEL QUINDO

if(x<(ENTRADA5_MAXIMO) && x>=(ENTRADA6_MINIMO))


ux=((float)x-
(ENTRADA6_MINIMO))/((ENTRADA5_MAXIMO)-(ENTRADA6_MINIMO));
if(x>=(ENTRADA5_MAXIMO))
ux=1;
break;
default:break;
}break;
case 2:
switch(numConj)
{
case 0:
if(x<ENTRADA7_MINIMO)
ux=1;
if((x<ENTRADA8_MINIMO) && (x>=ENTRADA7_MINIMO))
ux=1;
if((x<ENTRADA7_MAXIMO) && (x>=ENTRADA8_MINIMO))
ux=((ENTRADA7_MAXIMO)-
(float)x)/((ENTRADA7_MAXIMO)-(ENTRADA8_MINIMO));
if(x>=(ENTRADA7_MAXIMO))
ux=0;
break;
case 1:
if(x<(ENTRADA8_MINIMO))
ux=0;
if(x<(ENTRADA7_MAXIMO) && x>=(ENTRADA7_MINIMO))
ux=((float)x-
(ENTRADA8_MINIMO))/((ENTRADA7_MAXIMO)-(ENTRADA8_MINIMO));
if(x<(ENTRADA8_MAXIMO) && x>=(ENTRADA7_MAXIMO))
ux=((ENTRADA8_MAXIMO)-
(float)x)/((ENTRADA8_MAXIMO)-(ENTRADA7_MAXIMO));
if(x>=(ENTRADA8_MAXIMO))
ux=0;
break;
case 2:
if(x<(ENTRADA9_MINIMO))
ux=0;
if(x<(ENTRADA8_MAXIMO) && x>=(ENTRADA9_MINIMO))
ux=((float)x-
(ENTRADA9_MINIMO))/((ENTRADA8_MAXIMO)-(ENTRADA9_MINIMO));
if(x>=(ENTRADA8_MAXIMO))
ux=1;
break;
default:break;
}break;
default:break;
}
return ux;
}

float pertenenciaVariableSalida(uint8_t numVar,uint8_t numConj, int8_t x)


{
float ux=0;
switch(numVar)
{
case 0:

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

40
UNIVERSIDAD DEL QUINDO

switch(numConj)
{
case 0:
if(x<(SALIDA1_MINIMO))
ux=1;
if(x<(SALIDA2_MINIMO) && x>=(SALIDA1_MINIMO))
ux=1;
if(x<(SALIDA1_MAXIMO) && x>=(SALIDA2_MINIMO))
ux=((SALIDA1_MAXIMO)-
(float)x)/((SALIDA1_MAXIMO)-(SALIDA2_MINIMO));
if(x>=(SALIDA1_MAXIMO))
ux=0;

break;
case 1:
if(x<(SALIDA2_MINIMO))
ux=0;
if(x<(SALIDA1_MAXIMO) && x>=(SALIDA2_MINIMO))
ux=((float)x-
(SALIDA2_MINIMO))/((SALIDA1_MAXIMO)-(SALIDA2_MINIMO));
if(x<(SALIDA2_MAXIMO) && x>=(SALIDA1_MAXIMO))
ux=((SALIDA2_MAXIMO)-
(float)x)/((SALIDA2_MAXIMO)-(SALIDA1_MAXIMO));
if(x>=(SALIDA2_MAXIMO))
ux=0;

break;
case 2:
if(x<(SALIDA3_MINIMO))
ux=0;
if(x<(SALIDA4_MINIMO) && x>=(SALIDA3_MINIMO))
ux=((float)x-
(SALIDA3_MINIMO))/((SALIDA4_MINIMO)-(SALIDA3_MINIMO));
if(x<(SALIDA3_MAXIMO) && x>=(SALIDA4_MINIMO))
ux=((SALIDA3_MAXIMO)-
(float)x)/((SALIDA3_MAXIMO)-(SALIDA4_MINIMO));
if(x>=(SALIDA3_MAXIMO))
ux=0;

break;
case 3:
if(x<(SALIDA4_MINIMO))
ux=0;
if(x<(SALIDA3_MAXIMO) && x>=(SALIDA4_MINIMO))
ux=((float)x-
(SALIDA4_MINIMO))/((SALIDA3_MAXIMO)-(SALIDA4_MINIMO));
if(x>=(SALIDA3_MAXIMO))
ux=1;

break;
default:break;
}break;

case 1:
switch(numConj)
{

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

41
UNIVERSIDAD DEL QUINDO

case 0:
if(x<(SALIDA5_MINIMO))
ux=1;
if(x<(SALIDA6_MINIMO) && x>=(SALIDA5_MINIMO))
ux=1;
if(x<(SALIDA5_MAXIMO) && x>=(SALIDA6_MINIMO))
ux=((SALIDA5_MAXIMO)-
(float)x)/((SALIDA5_MAXIMO)-(SALIDA6_MINIMO));
if(x>=(SALIDA5_MAXIMO))
ux=0;

break;
case 1:
if(x<(SALIDA6_MINIMO))
ux=0;
if(x<(SALIDA5_MAXIMO) && x>=(SALIDA6_MINIMO))
ux=((float)x-
(SALIDA6_MINIMO))/((SALIDA5_MAXIMO)-(SALIDA6_MINIMO));
if(x<(SALIDA6_MAXIMO) && x>=(SALIDA5_MAXIMO))
ux=((SALIDA6_MAXIMO)-
(float)x)/((SALIDA6_MAXIMO)-(SALIDA5_MAXIMO));
if(x>=(SALIDA6_MAXIMO))
ux=0;

break;
case 2:
if(x<(SALIDA7_MINIMO))
ux=0;
if(x<(SALIDA8_MINIMO) && x>=(SALIDA7_MINIMO))
ux=((float)x-
(SALIDA7_MINIMO))/((SALIDA8_MINIMO)-(SALIDA7_MINIMO));
if(x<(SALIDA7_MAXIMO) && x>=(SALIDA8_MINIMO))
ux=((SALIDA7_MAXIMO)-
(float)x)/((SALIDA7_MAXIMO)-(SALIDA8_MINIMO));
if(x>=(SALIDA7_MAXIMO))
ux=0;

break;
case 3:
if(x<(SALIDA8_MINIMO))
ux=0;
if(x<(SALIDA7_MAXIMO) && x>=(SALIDA8_MINIMO))
ux=((float)x-
(SALIDA8_MINIMO))/((SALIDA7_MAXIMO)-(SALIDA8_MINIMO));
if(x>=(SALIDA7_MAXIMO))
ux=1;

break;
default:break;
}
default:break;
}

return ux;
}

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

42
UNIVERSIDAD DEL QUINDO

float Implicacion(float x,float y)


{
float rel;
if(x<y)
{
rel=x;
}else
{
rel=y;
}
return rel;
}

float Composicion(float x,float y)


{
float z;
if(x<y)
{
z=x;
}else
{
z=y;
}
return z;
}

float Conjuncion(float x,float y)


{
float z;
if(x>y)
{
z=x;
}else
{
z=y;
}
return z;
}

float And(float x,float y)


{
float z;
if(x<y)
{
z=x;
}else
{
z=y;
}
return z;
}

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

43
UNIVERSIDAD DEL QUINDO

ANEXO 3. RESMENES EN EVENTOS

Navegacin Inteligente de un Robot Mvil mediante Lgica Difusa


lvaro Andrs Navarro, Jos Julin Herrera y Ramiro Arango, Miembros Grupo de
Investigacin en Desarrollos Tecnolgicos GIDET, Programa de Tecnologa en
Electrnica, Universidad del Quindo

Resumen-- En este trabajo se presenta la implementacin de un algoritmo


inteligente basado en lgica difusa sobre la plataforma robtica 3PI POLOLU para la
navegacin en entornos interiores. La implementacin del algoritmo fue realizado en
lenguaje C por intermedio de la herramienta AVRStudio de la empresa Atmel. Para
el sistema difuso se definieron 27 reglas basadas en el conocimiento del experto
hacia el entorno que el robot fue sometido. Pololu posee una configuracin tipo
diferencial manejada por dos micromotorreductores de alta velocidad. La
locomocin es manejada por un circuito de potencia especializado. La percepcin
del robot es controlada por intermedio de tres sensores de infrarrojos ubicados en la
parte delantera. El control del robot fue implementado en un microcontrolador AVR.
Al final se mencionan los resultados obtenidos.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

44
UNIVERSIDAD DEL QUINDO

REFERENCIAS

[1] Ros. L., Parra. H., Bueno. M. Navegacin de robots mviles mediante
comportamientos utilizando lgica difusa. Scientia et Technica Ao XIII.
Universidad Tecnolgica de Pereira. Mayo de 2007..

[2] Caballero. M., Cruz. L. Navegador Difuso de un Robot Mvil. Instituto


Tecnolgico de Queretaro Departamento de Sistemas Computacionales.
Santiago de Queretano.

[3] Pololu 3pi Robot. Pololu Robotics and Electronics. Las Vegas, NV 89120. USA.
Disponible en www.pololu.com

[4] Atmel Corporation. 8 bit AVR Microcontroller with 32 Kbyte In System


Programmable Flash ATmega328 2005.

[5] Sensor Infrarrojo GP2DX. Sharp. Disponible en www.sharp.com.

[6] T. Vidal. Introduccin a la lgica difusa. 2009

[7] Duarte. O. Sistema de Lgica Difusa. Fundamentos (UNFUZZY). Universidad


Nacional de Colombia. 1998.

[8] Parrado. A., Buitrago. J. Tareas en ejecutivo cclico. Control de Posicin de un


Servomecanismo. Diseo de sistema en tiempo real. Universidad del Valle.
2008.

[9] Herrera. R., Gonzales. S. Principios de Robtica: Aplicacin al Guiado de


Vehculos. Introduccin y Sensores de Exploracin. Canales de Mecnica y
Electricidad, Mayo Junio de 2003.

[10] Zamora. M., Barber. H. Navegacin planificada de un Robot Mvil en Entornos


Interiores Desconocidos. Grupo de Visn, Robtica y el Departamento de
Inteligencia Artificial. Universidad del Murcia. Espaa.

[11] Siaffotti. A., Ruspini. E. Using Fuzzy Logic for Mobil Robot Contro. Chapter 5 of
the International Handbook of Fuzzy Sets.1999.

[12] Baena. J., Vallejo. M., Aedo. J. FuzzyComp. Una herramienta para la
construccin de prototipos de sistemas difusos en microcontroladores de 8 bits.
Grupo de Microelectrnica. Facultad de Ingeniera. Universidad de
Antioquia.2002.

FACULTAD DE CIENCIAS BSICAS Y TECNOLOGIAS


PROGRAMA DE TECNLOGA EN ELECTRNICA

45