Sunteți pe pagina 1din 141

PROYECTO FINAL DE INGENIERÍA

SISTEMA DE NAVEGACIÓN AUTÓNOMA PARA UN


ROBOT UTILIZANDO LÓGICA DIFUSA

Guillermo Gabriel Fernández Amado – LU 88328


Ingeniería en Informática

Tutor/es:
Mutti, Andrés, UADE

Octubre 30 de
2009

UNIVERSIDAD ARGENTINA DE LA EMPRESA


FACULTAD DE INGENIERÍA Y CIENCIAS EXACTAS
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Resumen
Como objetivo principal del trabajo final, se pretende desarrollar un sistema para la
aplicación de la Lógica Difusa como rama de la Inteligencia Artificial, para la
implementación de una aplicación que permita simular la navegación autónoma de un
robot, basado en un modelo de reglas y variables difusas diseñadas a tal efecto, en conjunto
con las ecuaciones clásicas de la cinemática utilizadas para la simulación.

La Lógica Difusa es una estructura matemática ampliada de la lógica convencional, que


permite describir el lenguaje cotidiano con ductilidad, con el atributo de de ser sencilla la
simulación de modelos de algunos fenómenos y problemáticas, de forma alternativa a las
técnicas tradicionales de control programable. El enfoque difuso del comportamiento de un
robot autónomo permite visualizar al mundo real en función de reglas expresadas en
términos lingüísticos.

Página 2 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Abstract
Like primary target of the final work, it is tried to develop a system for the application of
the Fuzzy logic like branch of the Artificial intelligence, for the implementation of  an
application that allows to to this end simulate the autonomous navigation of a robot, based
on a model of rules and designed diffuse variables, altogether with used the classic
equations of the kinematics for the simulation.

 The Fuzzy logic is an extended mathematical structure of the conventional logic, that
allows to describe the daily language with ductility, with the attribute of being simple  to
simulate some models of problematic scenarios and being also an alternative form to
traditional techniques of programmable control. The diffuse approach of the behavior of an
independent robot allows to visualize to the real world based on rules expressed in
linguistic terms.

Página 3 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Contenidos
RESUMEN.......................................................................................................................................................1-2

ABSTRACT......................................................................................................................................................1-3

CONTENIDOS.................................................................................................................................................1-4

CAPÍTULO PRIMERO. INTRODUCCIÓN..................................................................................................1-5

CAPÍTULO SEGUNDO. IMPLEMENTACIÓN DE SISTEMAS BORROSOS........................................2-22

CAPÍTULO TERCERO. APLICACIONES DE LOS SISTEMAS DE CONTROL BORROSO PARA SOFT


COMPUTING.................................................................................................................................................3-33

CAPÍTULO CUARTO. DESARROLLO DE UNA APLICACIÓN PRÁCTICA DE SISTEMAS DE


CONTROL PARA NAVEGACIÓN AUTÓNOMA.......................................................................................4-38

Página 4 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Capítulo 1. Introducción
En el presente trabajo final se pretende realizar la demostración de una implementación
de un sistema de navegación autónoma difusa, realizada a través del uso complementario en
una PC, en primer lugar de un modelo de las funcionalidades del robot, diseñado en un
software comercial de Lógica Difusa llamado AB-Flex y por otro lado de una aplicación
desarrollada a medida en Microsoft Visual Basic, para la simulación del comportamiento
del sistema en tiempo real, mediante interfases entre ambas aplicaciones realizadas en
Microsoft Excel usando DDE , logrando así un prototipo que verifique la solución
planteada y permita poder extrapolar la simulación a un robot real.

Sin duda, el principal campo de aplicación de la lógica difusa es el control, a partir del
empleo de las expresiones de la lógica difusa para formular reglas orientadas al control de
sistemas. Dichos sistemas de control difuso pueden considerarse una extensión de los
sistemas expertos, pero superando los problemas que éstos presentan para el razonamiento
en tiempo real, ocasionados por la explosión exponencial de las necesidades de cálculo
requerido para un análisis lógico completo de las amplias bases de reglas que éstos
manejan.

Las aplicaciones de control difuso de navegación autónoma son utilizadas para simular y
en casos para implementar robots móviles que puedan caracterizarse en términos de su
movilidad, autonomía, inteligencia y conocimiento previo del entorno. El sistema de
navegación del robot incluye tareas de planificación, percepción y control de movimientos.
La primera comprende la planificación de la misión, planificación de la ruta, planificación
de la trayectoria y las funciones específicas para evitar obstáculos imprevistos, no
considerados en las planificaciones anteriores.

La percepción se ocupa de las tareas relacionadas con la detección de obstáculos,


construcción de mapas y modelado del entorno. Por último, el control de movimientos
convierte en acciones las órdenes de control, utilizando para ello la diferencia (error) entre
la posición deseada y la estimación de la posición actual del robot. Se incluyen también
tareas de monitorización de la ejecución.

Se definen entonces las siguientes etapas respecto a la descripción de la organización


del proyecto:

1. Definición del problema

2. Exhibición de las variables lingüísticas

3. Definición de los conjuntos difusos

4. Definición de las reglas

Página 5 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

5. Construcción del sistema

6. Probar el sistema

7. Simulación dinámica del sistema

8. Ajustar el sistema

9. Conclusiones y trabajo futuro

Este tipo de aplicación es novedosa en el país ya que el único paper referido a esta
tecnología para navegación autónoma fue realizado en la Universidad Nacional de Lujan
por José Luis Caero y el mismo carece de todo modelado y simulación.

Los sistemas basados en lógica difusa se vienen utilizando en aplicaciones procedentes


de diversos campos. Así, en el área médica se emplea en diagnóstico, acupuntura, análisis
de ritmos cardíacos o de la arterioestenosis coronaria. Dentro del apoyo a la toma de
decisiones, otra de las grandes áreas de aplicación de estos sistemas, se han utilizado, por
ejemplo, en la búsqueda de caminos críticos en la ejecución de proyectos y asesoramiento a
la inversión.

En el campo del control de sistemas en tiempo real, destaco como antecedentes el


control de un helicóptero de filmación para escenas de travelling o por órdenes
pronunciadas de viva voz y el control con derrapaje controlado de un modelo de coche de
carreras. Dentro del sector del automóvil existe gran número de patentes sobre sistemas de
frenado y cambios de marcha automáticos. El área de la aparatos de consumo es otra de las
más destacables, en el sector de los electrodomésticos se ha diseminado un buen número de
aplicaciones difusas, como lavadoras (Matsushita, Hitachi, Siemens), tostadoras de pan,
controles de calefacción y aire acondicionado.

Para el control de maquinaria, destaca el ya clásico control de frenado del metro de


Sendai (Japón), realizado por Hitachi, y que funciona desde Julio de 1987. Se han aplicado
sistemas difusos en el control de una máquina de perforación de túneles y en el control de
ascensores (Mitsubishi-Elec., Hitachi, Fuji Tech) y grúas para contenedores (Hitachi). Se
han aplicado también al procesado de imágenes y reconocimiento de caracteres; por
ejemplo un sistema que reconoce los números de los cheques bancarios.

Es de destacar que el control difuso, principal aplicación de los sistemas difusos, aparte
de un tema de estudio académico, resulta muy importante desde un punto de vista
industrial, campo en el que existen desde hace tiempo multitud de aplicaciones de estos
sistemas en funcionamiento.

En términos generales y resumiendo el uso de técnicas difusas para el control


automático, trata de imitar el comportamiento consciente de un operador humano,
controlando procesos no-lineales complejos o plantas de producción las cuales difícilmente

Página 6 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

pueden ser modeladas por reflexiones físico-matemáticas. Estas circunstancias deshabilitan


el diseño sistemático de un controlador basado en modelos convencionales. Ejemplos de
esta clase de procesos son procesos de producción bio-tecnológicos, procesos químicos,
procesamiento de imágenes, plantas de tratamiento de aguas residuales, entre otros…

Una importante ventaja de los sistemas difusos es que, gracias a la simplicidad de los
cálculos requeridos (sumas y comparaciones, fundamentalmente), normalmente pueden
realizarse en sistemas baratos y rápidos, con lo que pueden implementarse en sistemas
específicos de control. Este es uno de los motivos fundamentales del hecho constatado de
la existencia en la actualidad de muchas aplicaciones prácticas en funcionamiento basadas
en lógica difusa.

Por otro lado se pretende demostrar como aporte, la fiabilidad del sistema frente al
control humano, evitando posibles errores imprevistos, siendo también más preciso y
rápidamente adaptable a los cambios que se proponen en el ambiente de trabajo.

Incertidumbre en el conocimiento, compejidad y vaguedad del mundo real

Se presentan en la actualidad nuevas aportaciones y reflexiones científicas en torno al


estudio de fenómenos difícilmente abordables desde concepciones clásicas, que manifiestan
una ambigüedad entre los supuestos epistemológicos que constituyen las perspectivas
complejas de investigación científica y las consideradas como visiones clásicas de la
ciencia, como ser la Teoría del Caos , la geometría fractal (o teoría geométrica de la
medida) y a la llamada lógica borrosa o más propiamente teoría de conjuntos borrosos.

Los Sistemas difusos son una alternativa a nociones tradicionales de lógica y de


pertenencia a conjuntos, que tiene sus orígenes en la filosofía Griega antigua, y
aplicaciones en inteligencia artificial. Aún, a pesar de sus orígenes, es un campo
relativamente nuevo, y como tal mucho campo para el desarrollo. Aquí se presentará las
bases de sistemas difusos, conjuntamente con algunas de las objeciones más notables a su
uso, con ejemplos sacados de la investigación actual en el campo de inteligencia artificial.
Finalmente, se demostrará que el uso de sistemas difusos hace una aporte viable al campo
de inteligencia artificial, y quizás más generalmente a las matemáticas formales como una
totalidad.

El problema es la vaguedad del mundo real. El idioma natural abunda con conceptos
inexactos e indistintos, tal como "Juana es alta," o "Esta muy caluroso hoy", tales
declaraciones son difíciles de traducir en el idioma preciso sin perder algún valor
semántico: por ejemplo, la declaración "La altura de Juana es de 152 cm.", no afirma
explícitamente que ella es alta, y la declaración "La altura de Juana es 1.2 desviaciones
estándares sobre la altura para mujeres de su edad en su cultura", esta cargada de
dificultades. ¿Significaría que una mujer con 1.1999999 desviaciones estándares sobre la

Página 7 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

altura para mujeres de su edad es alta? ¿ A que cultura pertenece, y como son los
miembros en la misma?

Mientras que podría argumentarse que tal vaguedad es un obstáculo a la claridad de


significar, únicamente los tradicionalismos más fieles sostendrían que no hay pérdida de
riqueza de significado cuando las declaraciones tal como "Juana es alta" son significados
perdidos en un lenguaje. Este es un caso simple de qué sucede cuando uno trata de traducir
idioma humano en la lógica clásica. Tal pérdida no es notada en el desarrollo de un
programa de nómina, quizás, pero cuando uno quiere preguntas de lenguaje natural, o
"representación de conocimiento" en sistemas expertos, los significados perdidos por
vaguedad son frecuentemente los buscados y útiles.

La Lógica Borrosa o Difusa (fuzzy logic) se pronuncia respecto a la complejidad de la


siguiente manera: «A medida que aumenta la complejidad de un sistema, nuestra
capacidad de hacer enunciados precisos y significantes sobre su comportamiento decrece
hasta un umbral más allá del cual la precisión y la significatividad (o pertinencia) se
vuelven casi características mutuamente excluyentes. ...A modo de corolario hay un
principio que se puede enunciar sucintamente así: «Cuanto más de cerca se mira un
problema del mundo real, tanto más borrosa se vuelve su solución».».

Se pueden diferenciar dos etapas en la evolución del conocimiento: un esfuerzo


orientado a conocer aspectos del mundo y un posterior esfuerzo por conocer aspectos del
propio conocimiento. Se puede suponer que ésta segunda etapa, en la que nos encontramos
hoy en día, surge a consecuencia de los fallos de la primera, para delimitar el alcance y
validez del conocimiento adquirido previamente. Nuestra preocupación no se centra en la
mera adquisición de conocimiento, sino que, además, se intenta determinar en qué medida
conocemos algo, qué grado de certeza podemos asignar a nuestro conocimiento. Hemos
desviado nuestros problemas desde cómo manipular el mundo a cómo manipular el
conocimiento (y la ignorancia) en sí mismo.

Se ha calificado a la nuestra como la sociedad de la información, y se destinan gran


cantidad de recursos a la adquisición, manejo, procesado, selección, almacenamiento,
distribución, protección, recopilación, análisis y clasificación de la información, para lo
cual el ordenador resulta una herramienta de gran ayuda.

La gran cantidad de información de que disponemos, unida al grado de incertidumbre


que lleva asociada, constituye la base de muchos de los problemas actuales: la complejidad.

Desde comienzos de los 80 se han realizado diferentes avances orientados a la


construcción de una teoría general de la información. Dentro de ésta se incluyen, además de
la teoría clásica de conjuntos y de la teoría de la probabilidad, otras como la teoría de
conjuntos borrosos, la teoría de la posibilidad y la teoría de la evidencia.

Página 8 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Con las nuevas teorías se ha conseguido romper la relación única que existía entre
incertidumbre y teoría de la probabilidad, y se ha pasado a considerar la incertidumbre en
los términos mucho más genéricos de la teoría de conjuntos borrosos y de medidas
borrosas. Además, ha quedado demostrado que la incertidumbre puede manifestarse en
diferentes formas o, dicho de otro modo, que existen diferentes tipos de incertidumbre y
que en la teoría de la probabilidad sólo se manifestaba una de ellas.

Los tres tipos de incertidumbre identificados con estas cinco teorías incluidas en la teoría
general de la información son los siguientes:

-Borrosidad: resultante de la existencia de conjuntos borrosos, con límites vagamente


definidos.

-Imprecisión o falta de especificidad: relacionada con el tamaño de conjuntos de


alternativas.

-Discordia: producida por conflictos entre varios conjuntos de alternativas.

La imprecisión y la discordia pueden considerarse como diferentes modos de


ambigüedad, asociando esta última con cualquier situación en la que no quede clara la
alternativa correcta de un conjunto de ellas. Ésta puede deberse a una defectuosa
caracterización de un objeto (imprecisión) o a distinciones conflictivas (discordias). Por
otro lado, la borrosidad es diferente de la ambigüedad, y se produce cuando existen
conceptos cuyos límites no están perfectamente determinados.

Fig1

Breve historia de los sistemas Borrosos

Esta lógica fue inicialmente desarrollada por Peirce, en el siglo pasado, y luego –e
independientemente– por Lukasiewicz. Es como la lógica de las funciones veritativas, con
la particularidad de admitir tres o más de esos llamados valores veritativos, en vez de
limitarse a verdadero y falso. En la década del veinte Bertrand Russell se refería a la lógica

Página 9 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

polivalente con la palabra «vaga»; decía: «Todo es vago en un grado del que no te das
cuenta hasta que no intentas precisarlo», por lo que Russell se convirtió en el abuelo de la
lógica borrosa. Asimismo, por el año 1937, el filósofo cuántico Max Black publicó su
artículo «Vagueness: An exercise in Logical Analysis» que, pese a su enorme importancia,
no logró llamar la atención. Finalmente, en 1965, el ingeniero Lofti Zadeh, iraní educado en
Azerbaiján, publica su artículo «Fuzzy Sets» (no quiso hablar de conjuntos vagos sino de
«conjuntos borrosos» o fuzzy sets), cuando era profesor jefe en la Universidad de
California, en Berkeley. En 1987 publica Fuzzy sets and Applications.

Esta nueva lógica sostiene que hay pocos hechos en el mundo en que pueda encontrarse
cumplidamente lo blanco o lo negro. Sólo hay raros momentos de esos en un mundo gris.
«El principio borroso afirma que todo es cuestión de grado, trata el principio borroso
aplicado a las cosas humanas, de cómo la borrosidad impregna nuestro mundo y la visión
que de él tenemos (porque) cuando abandonamos el mundo artificial de las matemáticas,
reina la borrosidad».

La precisión de matemáticas adeuda su éxito en gran parte a los esfuerzos de Aristóteles


y los filósofos que lo precedieron. En sus esfuerzos para idear una teoría concisa de la
lógica, y luego matemática, se postularon los llamados "Derechos de Pensamiento". Uno
de estos, el "Derecho de los medios excluidos”, dice que cada propuesta debe o ser Cierta o
Falsa. Aun cuando Parmínedes propuso la primera versión de esta ley (alrededor 400 A.C.)
había objeciones inmediatas y fuertes: por ejemplo, Heráclitus propuso que las cosas
podrían ser simultáneamente Ciertas y no Ciertas.

Era Platón quien colocó el fundamento para lo que llegaría a ser lógica difusa, indica que
había una tercera región (más allá de Cierta y Falsa). Otros filósofos más modernos
continuaron notablemente sus pensamientos, Hegel y su dialéctica hegeliana y otros
filósofos materialistas. Pero era Lukasiewicz quien primero propuso una alternativa
sistemática a la lógica bi–valuada de Aristóteles.

A finales del siglo XIX el matemático alemán George Cantor, inició el estudio y la
aplicación de la Teoría de Conjuntos, punto de partida de la matemática moderna. A una
colección de objetos, se le llama conjunto, y los objetos individuales de dicha colección se
dice que son elementos del conjunto o que pertenecen al conjunto.

Página 10 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig2

En los comienzos de los años 1900, Lukasiewicz describió una lógica tri-valuada,
conjuntamente con las matemáticas para acompañarlo. El tercer valor que él propuso puede
mejorarse y se traduce como el término "posible," y él asignó un valor numérico entre
Cierto y Falso. Eventualmente, él propuso una notación entera y el sistema axiomático
desde el cual propuso derivar las matemáticas modernas.

Luego, él exploró lógicas cuatro-valuadas, lógicas cinco-valuadas y entonces declaró


que en principio nada había para prevenir la derivación de una lógica infinita-valuada.

Knuth propuso una lógica tri-valuada parecida a Lukasiewiczs. Su conocimiento,


aparentemente inspirado por Lukasiewiczs, utilizó la gama entera [-1, 0, +1] más bien que
[0, 1, 2]. Sin embargo, esta alternativa fracasó en su búsqueda de aceptación, y pasó a una
oscuridad relativa.

En 1965, Lofti Zadeh, profesor de Ingeniería Eléctrica y Ciencias de la Computación, de


la Universidad de Berkeley, basándose en el trabajo de Lukasiewicz, introduce la Lógica
Difusa basada en una Teoría de Conjuntos Difusos (publicó su trabajo de Seminario "Fuzzy
Sets" que describió las matemáticas de teoría difusa de conjuntos, y por extensión Lógica
Difusa.). Donde un elemento no necesariamente pertenece o no pertenece a un conjunto,
sino que hay un continuo de "grados de pertenencia ". Esta teoría propuso hacer una
función de membresía o pertenencia operando sobre la gama de números reales [0.0, 1.0].
Las operaciones nuevas para el cálculo de la lógica se propusieron, en un principio como
generalización de la lógica clásica.

Las bases teóricas de la lógica borrosa (fuzzy logic) fueron enunciadas a principios de
los años 60 por Lofti A. Zadeh, profesor de Ingeniería Eléctrica en la Universidad de
California en Berkeley, en su primera publicación en 1965, pero hasta 1973 Zadeh no
presenta la teoría básica de los controladores borrosos. Aunque el trabajo de Zadeh fue
recibido muy fríamente, especialmente en Estados Unidos, a partir de él otros
investigadores comenzaron a aplicar la lógica borrosa a diversos procesos. Así, desde
Mamdani, quien aplica la lógica borrosa a un sistema de control de vapor, se han venido

Página 11 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

sucediendo muy numerosas aplicaciones. Otra de las más clásicas quizás sea la de Smidth y
otros, que en 1980 aplican esta técnica al control de hornos rotativos en una cementera.

Especial mención merece la creación de LIFE (Laboratory for International Fuzzy


Engineering research) en marzo de 1989, auspiciado por el Ministerio de Comercio
Internacional e Industria de Japón (MITI). Su capital es al 50% de compañías privadas
japonesas y del propio Ministerio, y su presidente está en el Instituto de Tecnología de
Tokio (TIT). En su sede trabajan en la actualidad alrededor de 30 investigadores a tiempo
completo. En Estados Unidos (y Europa) solamente se empezó a dar importancia a la lógica
borrosa cuando desde Japón empezó a llegar información sobre numerosas aplicaciones
prácticas. A partir de entonces, empresas norteamericanas como NASA, Boeing, Ford,
Rockwell o Bell comenzaron a aplicar la lógica borrosa; por ejemplo, Ford Motor Co.
experimenta en la actualidad con un sistema de aparcamiento automático para camiones
con remolque.

Modelado y Simulacion de Sistemas Borrosos

Estas formulaciones imprecisas y vagas han sido frecuentemente desdeñadas en aras de


la exactitud y la precisión, abordándolas mediante modelos matemáticos que intentan
describir la vaguedad e imprecisión inherente a los sistemas económicos por medio de
técnicas de la estadística.

Un sistema es un modelo que caracteriza un tipo apropiado de relación entre entidades


abstractas. El término “relación” es utilizado aquí en general para representar no sólo el
concepto bien definido de relación matemática, sino a una clase más amplia de ideas tales
como restricción, interdependencia, estructura, cohesión y similares. El modelado de
sistemas es, en general, el conjunto de actividades, métodos y técnicas mediante las cuales
se aborda la construcción de sistemas que sean modelos adecuados de algún aspecto de la
realidad.

Un modelo de un sistema debe contener un conjunto de variables descriptivas, cada una


con valores en un cierto espacio o dominio, junto con un conjunto de relaciones, que
establecen entre otras cosas un conjunto de restricciones que deben cumplirse para
cualquier asignación de valores a las variables descriptivas. Pueden definirse diferentes
modelos de un mismo sistema, cambiando las variables descriptivas, los espacios de
valores, y las relaciones involucradas. Cada uno de estos modelos podía representar una
visión distinta del mismo sistema mostrándonos diferentes aspectos del mismo o distintos
niveles de abstracción.

Dada la veneración histórica por lo preciso, riguroso y cuantitativo en contraposición a


lo difuso, inexacto, no riguroso y cualitativo, no ha de sorprender el auge que los
computadores han tenido en el uso de los métodos cuantitativos de la mayoría de las
ciencias. Indiscutiblemente los computadores se han mostrado muy eficientes en relación a

Página 12 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

los sistemas mecanicistas, esto es, aquellos sistemas inanimados cuyo comportamiento se
rige por las leyes de la física, mecánica, química y electromagnetismo. Desafortunadamente
no se puede decir lo mismo para los sistemas que involucran la actuación de las personas,
los cuales tradicionalmente se resisten al análisis matemático clásico y a la modelización
cuantitativa pues tienen dos características que hacen difícil o simplemente imposible su
tratamiento cuantitativo:

a) El razonamiento y la toma de decisiones de las personas se suelen llevar acabo


empleando el lenguaje natural, que juega un papel fundamental como mecanismo de
expresión y definición dentro de las ciencias sociales. Esto aporta una vaguedad o
incertidumbre propia del lenguaje natural que los modelos matemáticos no pueden
expresar en toda su plenitud.

b) La complejidad de los sistemas abordados impiden una formulación matemática


exacta. Esta característica viene expresada en el principio de incompatibilidad
expresado por Zadeh. Este principio dice que una gran precisión en el modelo de un
sistema es incompatible con su capacidad para manejar una complejidad grande. En
otras palabras, la complejidad de un sistema mantiene una relación inversa con la
exactitud con la que podemos determinar dicho sistema.

Un forma de abordar problemas con estas características es la utilización del


denominado Razonamiento Aproximado donde los modelos dejan de ser cuantitativos para
transformase en modelos cualitativos. Estos modelos cualitativos intentan capturar el
razonamiento humano mediante el uso de relaciones causa-efecto expresada en términos
lingüísticos o vagos. La teoría de los conjuntos difusos formulada por Zadeh en su trabajo
“Fuzzy Sets y posteriormente completada con sus aportaciones del concepto de variable
lingüística es el intento de introducir un marco de trabajo bien definido para el tratamiento
de estos modelos cuantitativos en donde los términos difusos, vagos e imprecisos son
consustanciales.

En las últimas décadas el uso de estos modelos ha sufrido un gran auge, debido a los
resultados espectaculares obtenidos en distintos campos de la ciencia. Se ha de destacar su
uso dentro de la ingeniería y más concretamente en el control industrial. Estos sistemas se
han beneficiado del uso del razonamiento aproximado permitiendo abordar el control de
sistemas complejos, que tradicionalmente eran tratados de forma exacta con complejas
ecuaciones matemáticas, mediante el uso del conocimiento de expertos humanos expresado
en modelos de razonamiento aproximado.

La idea que subyace en todas estas técnicas consiste en extraer los conocimientos que el
experto posee para identificar una situación concreta del estado del sistema y establecer la
acción adecuada que se ha de realizar. Debido a la complejidad de los sistemas estas
situaciones o estados son expresados en términos lingüísticos o vagos. Por esta razón el uso

Página 13 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

de los conjuntos difusos, variables lingüísticas y en general los mecanismos de


representación utilizados por el Razonamiento Aproximado se muestran adecuados para su
modelización.

En general la creación de estos modelos difusos se realiza expresando en forma de regla


lingüística el conocimiento deductivo que emplea el experto. Este puede hacerse (y así se
hizo en los comienzos) mediante complicadas técnicas de Ingeniería del Conocimiento pero
más modernamente, el uso de los computadores, así como la mejora en la potencia de
cálculo y la cantidad de almacenamiento de datos que éstos han sufrido en los últimos años,
han originado la proliferación de técnicas inductivas para la obtención de tales modelos de
sistemas a partir de datos conocidos (Aprendizaje Inductivo). Este enfoque inductivo ha
posibilitado la creación de modelos para los cuales no es posible disponer de expertos que
nos proporcionen el conocimiento sobre los mismos.

Estas técnicas se emplean en la construcción de modelos, y más concretamente, en la


construcción de modelos difusos o vagos, los cuales son enfocados en el sentido del
razonamiento aproximado y la relación causa-efecto con el objetivo de identificar los
estados del sistema a partir de un conjunto de valores conocidos del mismo.

Un “sistema” puede visualizarse como el conjunto de "relaciones", en el sentido más


amplio de la palabra, entre unas variables de entrada y otras variables de salida. Estas
relaciones provocan el cambio temporal de los valores de las variables de salida al
modificarse los valores de las variables de entrada.

Esquemáticamente un sistema se representa mediante una “caja negra” donde


encontramos variables de entrada que introducen sus valores en la misma y variables de
salida que toman sus valores de ella.

ENTRADA SALIDA

SISTEMA

Fig3

Página 14 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Características como el tipo de valores de las variables de entrada y salida, el número de


éstas, su dependencia del tiempo, la retroalimentación de las salidas hacia las entradas, etc.,
originan una multitud de clasificaciones de los sistemas.

De igual manera, los valores que toman las variables, tanto las de entrada como las de
salida, pueden clasificarse en dos grandes categorías: cuantitativos, cuando los valores de
las variables son numéricos, o cualitativos cuando los valores de las variables no son
numéricos, que originan nuevas categorías de sistemas.

Un objetivo de la ciencia es la definición de modelos de los sistemas existentes en la


realidad. Un modelo es la abstracción y simplificación de un sistema real, que sintetiza de
alguna forma las variables y sus relaciones más significativas. Este proceso de abstracción
que se produce en un modelo se realiza por dos motivos: el primero de ellos es la
comprensión del sistema y de los fenómenos asociados al mismo, el segundo, posibilitar su
manipulación para alcanzar algún fin concreto.

Las relaciones que unen las variables de salida con las variables de entrada se pueden
modelar de muy diversas formas; entre ellas destacan aquéllas que utilizan mecanismos
formales para su representación, como pueden ser las funciones matemáticas y lógicas.

Cuando un modelo se expresa mediante una función matemática, lo que se trata de


describir en términos precisos es la relación existente entre los valores de entrada y salida.
Estos modelos matemáticos han de estar descritos sobre variables con valores cuantitativos,
en cuyo caso su interpretación es inmediata. Sin embargo, cuando los valores de las
variables no son numéricos es necesario un proceso de abstracción anterior para trasladar
los valores cualitativos a unos valores cuantitativos.

Otra forma de describir un modelo es mediante relaciones lógicas, donde los elementos
que utilizamos son proposiciones lógicas que unimos mediante conectivas, para formar
nuevas proposiciones. La interpretación de estos modelos lógicos se enmarca dentro de la
aceptación de un sistema de deducción definido mediante un conjunto de axiomas. Este tipo
de modelo ha tenido un gran auge en los últimos 50 años, años en que ha proliferado la
representación lógica fundamentada en el concepto de regla lógica, que tiene la forma "Si A
entonces B", basada en la interpretación de una implicación que permite una fácil
identificación de una relación causa-efecto de los valores de entrada sobre los valores de
salida del sistema.

En la mayoría de los actuales sistemas expertos se presenta este problema: es necesario


representar en la máquina los conocimientos y procedimientos inciertos e imprecisos que
utilizan los expertos humanos para resolver problemas, y para ello se adoptan normalmente
técnicas ad hoc. Pero existen intentos teóricos para introducir en la lógica formal la
imprecisión y subjetividad característica de la actividad humana, y puede esperarse que en
el futuro el diseño de sistemas expertos se base en tales teorías.

Página 15 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Parece claro que el conocimiento humano se basa en apreciaciones tanto de naturaleza


probabilística (basada en la repetición de un fenómeno) como de tipo subjetivo o particular,
que hacen necesario trabajar simultáneamente con probabilidades y con posibilidades para
modelar de forma adecuada este conocimiento. Por ejemplo, en medicina es frecuente
encontrar reglas probabilísticas como "la medicina X provoca vómitos en un 2 por 1000 de
los casos", basadas en un estudio previo de pacientes a los que se ha suministrado dicha
medicina. Sin embargo, reglas como "una persona es atractiva si tiene buena presencia y es
divertida e inteligente", están basadas en apreciaciones más o menos subjetivas sobre la
atracción de las personas. Por tanto, es deseable utilizar un modelo en el que se puedan
manipular conjuntamente ambos tipos de incertidumbre.

En un sistema experto borroso, el proceso de inferencia es una combinación de cuatro


subprocesos, que se ampliará más adelante en la construcción del prototipo:

-Borrosificación o Fuzzificación: proceso por el que se aplican las funciones de


pertenencia definidas en las variables de entrada sobre los valores reales de los atributos,
para determinar el grado de verdad de las premisas de cada regla. La determinación de los
grados de pertenencia suele realizarse mediante métodos empíricos.

-Inferencia: a partir del valor de verdad calculado para las premisas de cada regla se
calcula el de la conclusión de la misma. Este resultado es un subconjunto borroso aplicable
a cada variable de salida de cada regla. Es frecuente hablar de inferencia de tipo MAX-MIN
o de tipo SUMA-PRODUCTO, que deben interpretarse como la combinación de una
composición MAX con una inferencia MIN, o una composición SUMA con una inferencia
PRODUCTO, usando esta división en subprocesos.

-Composición: se combinan los subconjuntos borrosos obtenidos para las variables de


salida en un único subconjunto borroso para cada variable. Para ello se suele usar una
composición de tipo MAX o de tipo SUMA.

-Desborrosificación o Desfuzzificación: A veces es útil examinar los conjuntos borrosos


resultantes del proceso de composición, aunque otras veces se necesita convertir el valor
borroso en un valor no borroso, para lo que se aplica un proceso de desborrosificación. Dos
de las técnicas más usadas de desborrosificación son la del CENTROIDE y el valor
MÁXIMO, aunque existen diferentes variantes de ellas.

En un plano de mayor abstracción cabe mencionar una nueva arquitectura para la


construcción de un entorno de desarrollo de sistemas expertos. Esta arquitectura está
diseñada para ser utilizada en dominios en los que la incertidumbre es un factor esencial a
considerar. Mediante esta arquitectura se pretende facilitar la aplicación de distintas
metodologías de razonamiento aproximado, entre ellas la basada en conjuntos y lógica
borrosa, el enfoque probabilista, etc.

Página 16 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Introducción a los Sistemas de control borroso

Hay que señalar que dentro de los sistemas borrosos se incluyen diversas teorías, como
la teoría de conjuntos borrosos, extensión de la teoría de conjuntos clásica, o la lógica
borrosa, que puede ser considerada una ampliación de las lógicas n-valuadas propuestas por
Lukasiewiez en 1930, y que son, a su vez, extensión de la lógica tri valuada (verdadero,
falso e indeterminado). No obstante, quizás la principal aplicación actual de la lógica
borrosa sean los sistemas de control basados en lógica borrosa o sistemas de control
borroso, que utilizan las expresiones de la lógica borrosa para formular reglas orientadas al
control de sistemas. Dichos sistemas de control borroso pueden considerarse una extensión
de los sistemas expertos, pero superando los problemas prácticos que éstos presentan en el
razonamiento en tiempo real, causados por la explosión exponencial de las necesidades de
cálculo requeridas para el análisis lógico completo de las amplias bases de reglas que
manejan.

Fig4: Ejemplo de conjuntos borrosos para la variable estatura.

Adelantaremos que este control de sistemas puede ser realizado a diferentes niveles. En
el nivel inferior, un controlador borroso puede realizar el control en bucle cerrado de una
determinada magnitud física del sistema, con el fin de mantenerla en tomo a un valor de
referencia. A modo de ejemplo, un controlador de este tipo puede decidir la potencia que se
ha de suministrar al sistema de calefacción de una habitación para mantener la temperatura
en un valor de referencia (por ejemplo, 21°C), utilizando como información la temperatura
actual en la habitación y en el exterior de la casa. Por otro lado, aplicado a los niveles
superiores de planificación, un controlador puede aconsejar los grados de almacenamiento
necesarios para mantener la producción prevista, con los mínimos costes y teniendo en
cuenta los datos históricos.

Página 17 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Estos métodos de control pueden aplicarse también en brazos articulados y vehículos


autónomos, en los cuales los modelos matemáticos significativos son muy complejos. En
muchos de estos casos interesa combinar las propiedades de un control basado en el modelo
del sistema con el de reglas heurísticas, las cuales pueden emplearse para seleccionar o
ajustar automáticamente sus parámetros. Asimismo, las técnicas de razonamiento
aproximado resultan interesantes para los niveles superiores de control y planificación de
robots cuando el entorno no es conocido de forma precisa.

Para desarrollar estos sistemas de control se precisan herramientas de diseño de


controladores que faciliten la adquisición de conocimiento y el análisis del sistema de
control resultante, incluyendo las propiedades dinámicas de estabilidad y robustez.

En caso contrario, el diseño puede convertirse en un proceso muy tedioso, y no


garantizarse el comportamiento correcto del sistema de control.

En la década del 60 (H. Simon) se creía que en los años venideros el hombre llegaría a
construir máquinas "pensantes", sin embargo, pasadas tres décadas no se ha podido cumplir
con esta meta, y aún los computadores no logran simular el razonamiento de los humanos
porque están facultados para trabajar con matemáticas precisas, mientras el mundo real está
lleno de imprecisión e incertidumbre. Este dilema puede afrontarse desde dos puntos de
vista. Uno es asumir que el problema está en el método de control, y por tanto la solución
es aplicar más matemática. El otro punto de vista consiste en aceptar que la matemática es
el problema, y es allí donde aparece la lógica Difusa. En efecto, la lógica Difusa encuentra
que en el mundo real son muy escasos los conjuntos no Fuzzy o convencionales. Por
ejemplo, el conjunto de los mamíferos encuentra un problema al tratar con el ornitorrinco.
La lógica Difusa no tiene que tratar con este tipo de excepciones debido a que permite una
pertenencia parcial a un conjunto.

A partir de la Teoría de Conjuntos se desarrolló la lógica binaria, soporte matemático de


los sistemas digitales. Similarmente, la Teoría de Conjuntos Difusos ha desarrollado
sistemas de control electrónico, procesadores, coprocesadores, tarjetas y computadores. Y
la implementación puede llevarse a cabo exactamente igual a la lógica binaria.

Sistemas basados en lógica Difusa pueden controlar más adecuadamente procesos que
estén gobernados por reglas intuitivas que difícilmente puede expresarse matemáticamente.
Por ejemplo, en el control de un ascensor puede determinarse una desaceleración gradual
cuando el ascensor está próximo a su destino.

La gran potencia de esta metodología programable se debe a la posibilidad de expresar


operaciones y controlar las reglas del sistema mediante palabras de uso cotidiano.
Volviendo al ejemplo anterior, podría programarse: SI esta cerca a un piso Y hay orden de
parar ENTONCES disminuir la velocidad. En este caso una entrada al sistema de control

Página 18 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

sería la posición del ascensor, y como "cerca" es un conjunto difuso, el valor de verdad de
la premisa, y por tanto el de la velocidad varía de acuerdo a dicha posición.

La Lógica Difusa elimina los altos contenidos de matemática y física de un proceso y va


directo al nivel en que el sistema trabaja, esto permite aproximarse intuitivamente a la
solución de un problema mediante la formulación de reglas.

La forma de expresar las reglas de operación mediante palabras permite controlar


procesos sencillos con una decena de reglas, y procesos complejos con 30 o 40, reduciendo
considerablemente la cantidad de código de programación, y por tanto el tiempo de diseño,
el tiempo de desarrollo de un prototipo, la cantidad de memoria para almacenarlo, etc.

La descripción de un proceso mediante la formulación de reglas derivadas de la


experiencia en vez de ecuaciones matemáticas ha llevado a sustituir implementaciones con
procesadores de 32 bits por microcontroladores de 8 bits.

Además puede implementarse en software haciendo uso de herramientas tipo CASE, que
generalmente generan código en lenguaje C o en ensamblador para su uso en
microcontroladores convencionales; convirtiendo al control difuso en una alternativa más
apropiada y económica.

Otra ventaja del control Difuso es la fácil modificación que puede llevarse a cabo
cambiando algunas premisas y operaciones o adicionando reglas (el criterio de
comportamiento del sistema va implícito en las reglas), mientras en un sistema
convencional, un pequeño cambio requiere de la derivación completa de nuevas
ecuaciones. El control difuso no necesita de la etapa de obtención del modelo matemático
del proceso.

Descripcion de la Estructura y Procesos de un Sistema de control borroso

Los sistemas expertos de control borroso basados en reglas, conocidos como


controladores borrosos o FLC (Fuzzy Logic Controllers), o también sistemas de inferencia
borrosa o FIS (Fuzzy lnference Systems, FIS), son sin duda la aplicación más extendida de
la lógica borrosa.

Control de un proceso

Página 19 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig5: Estructura del controlador (el núcleo FLC es el controlador borroso)

Para controlar un proceso o sistema se hace uso de un módulo controlador, que recibe
como entradas una o varias variables de control, llamadas generalmente referencias, R, y
una o varias variables de salida del propio proceso, S, produciendo como salida una o
varias variables, que se conocen como actuadores A. Normalmente, el objetivo del control
es mantener R = S. Por ejemplo, en el caso de una calefacción doméstica, el controlador
recibe una consigna de temperatura que fija el usuario, y mide la temperatura de la
habitación por medio de un sensor. En función de los valores de estas dos entradas, el
controlador de temperatura conecta o desconecta el sistema de calentamiento, si la
calefacción es eléctrica, actuando sobre los radiadores de cada habitación, y si es de gas o
fuel, encendiendo o apagando el quemador.

La estructura típica de un controlador basado en un sistema borroso consta de un primer


bloque que realiza un preprocesado de las variables de entrada, que proporciona el vector
de entradas al controlador borroso o FLC. El controlador borroso aplica la entrada que
recibe a la base de reglas para obtener la salida. Finalmente, esta salida puede requerir un
procesado final (post procesado) con el fin de adecuarla al proceso que se ha de controlar.
El tipo de preprocesado y post procesado determina la clase de controlador, e influye de
forma considerable en sus propiedades.

La estructura interna de un controlador borroso o FLC consta de un primer elemento,


llamado borrosificador, realiza la conversión de valores discretos a términos borrosos. Su
salida es utilizada por el dispositivo de inferencia borrosa para aplicarla a cada una de las
reglas de la base de reglas, siguiendo el método de inferencia seleccionado. La salida de
este bloque pueden ser M conjuntos borrosos Bl, con l=1, 2.... M, reglas del tipo Mamdani,
o también de tipo Sugeno o bien un único conjunto borroso B', que es la unión de los M
conjuntos borrosos. Finalmente, el desborrosificador transformará estos conjuntos borrosos
en un valor no borroso y  V.

Página 20 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 6: Estructura de un controlador borroso o FLC

En términos generales y resumiendo el uso de técnicas difusas para el control


automático, trata de imitar el comportamiento consciente de un operador humano,
controlando procesos no-lineales complejos o plantas de producción las cuales difícilmente
pueden ser modeladas por reflexiones físico-matemáticas. Estas circunstancias deshabilitan
el diseño sistemático de un controlador basado en modelos convencionales. Ejemplos de
esta clase de procesos son procesos de producción bio-tecnológicos, procesos químicos,
procesamiento de imágenes, plantas de tratamiento de aguas residuales, entre otros…

Este controlador borroso entonces, consiste básicamente en tres elementos.

• Fuzzificación: La primer tarea de un controlador Difuso es la traducción de las


entradas numéricas en variables lingüísticas las cuales van a ser posteriormente utilizadas,
etiquetando el valor crisp de la variable de entrada (variable numérica) con un término
lingüístico y determinando el correspondiente grado de pertenencia, esto es llamado
fuzzificación. Se asume que la variable de salida y puede ser medida en un control estándar
de lazo cerrado, en los siguientes pasos solo las correspondientes variables lingüísticas con
términos como negativo grande, negativo pequeño, etc. serán procesados. Por tanto es
necesario que se definan funciones de pertenencia para la salida y.

• Inferencia: De acuerdo con las definiciones usadas en inteligencia artificial, la


determinación de conclusiones o la generación de hipótesis basados en el estado de una
entrada es llamado inferencia. Para la operación del control en lazo cerrado, esto significa,
que las reglas definen las dependencias entre los valores lingüísticos de entrada y los
valores lingüísticos de salida. El resultado una variable manipulada (µ) que varia de
acuerdo a una situación de entrada. Principalmente los componentes de la inferencia imitan
las estrategias de un operador humano, pero estas acciones simbólicas de control no pueden
ser usadas para una planta real, a menos que la variable lingüística obtenida sea
defuzzificada.

• Defuzzificación: La Defuzzificación es el proceso de llevar los resultados simbólicos


obtenidos a valores que puedan ser utilizados para que las acciones de control sean
activadas.

Página 21 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Capítulo 2. Implementación de sistemas borrosos


Se expondrán las diversas maneras disponibles para realizar en la práctica un sistema
basado en lógica borrosa. Se considerarán los entornos de desarrollo de sistemas borrosos,
mostrando el por qué son necesarios, así como algunos de los actualmente disponibles, que
serán descritos con cierto detenimiento. Se verán después diversos métodos de realización
hardware de sistemas borrosos, incluyendo los denominados aceleradores de
procesamiento.

1. Introduccion a la Implementacion de Sistemas Borrosos

El diseño de un controlador basado en lógica borrosa supone establecer un compromiso


entre diversos criterios de diseño: velocidad, precisión y flexibilidad. Para conseguir los
resultados deseados, debe plantearse la velocidad de respuesta del sistema de control, la
cual vendrá limitada por otros factores, como el grado de precisión requerido o la
flexibilidad del diseño. Así, si se desea una alta precisión en el control, se necesitará una
gran cantidad de conjuntos para cada variable y un alto número de reglas, lo que exigirá
una elevada cantidad de cálculos, causando aumento del tiempo de respuesta.

Si además el sistema de control tiene flexibilidad de adaptación a los caminos del


sistema y aprende de los errores cometidos, serán necesarios muchos más cálculos
adicionales, que también aumentarán el tiempo de respuesta. Evidentemente, estas opciones
influyen en el costo del sistema final, y en muchos casos será ésta la mayor restricción del
diseño.

Fig 7

Una vez decididas las prestaciones requeridas, se ha de utilizar una herramienta de


desarrollo para el diseño del sistema y seleccionar la plataforma de implementación
(entorno de desarrollo) adecuada que contengan a grandes rasgos los siguientes elementos:

Página 22 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 8: Prestaciones de un Sistema para el diseño de un controlador borroso

Las herramientas de desarrollo suelen utilizar un lenguaje de descripción para


independizar el diseño de la plataforma (C++, Mathlab, etc), pero también existen múltiples
aplicaciones o paquetes comerciales ya compilados (entornos de desarrollo), citando a
continuación alguno de los mas utilizados: FuzzyTECH, TILShell, AB-Flex y FIDE.

2. Entornos de desarrollo comerciales , academicos y gratuitos

El continuo aumento de complejidad de los sistemas de desarrollo ha forzado a


introducir el concepto de entorno de desarrollo. Los sistemas iniciales de base puramente
textual se limitaban a conjuntos de programas aislados que procesaban ficheros,
produciendo otros ficheros. Estos sistemas resultaban muy complejos de manejar, y
requerían un largo período de aprendizaje y de alta especialización. Todo ello limitaba la
productividad de los equipos de desarrollo y, en último término, la dimensión máxima de
los sistemas que pueden realizarse a un coste razonable. Los primeros entornos de
desarrollo se orientaban a lenguajes textuales, e incluían editores básicos y ayudas para
automatización de las tareas de depuración. Paulatinamente se han ido mejorando tanto las
herramientas de edición como las de depuración, y se han desarrollado sistemas
automáticos de optimización y depuración tanto de las fuentes como del código final
generado. Este continuo aumento del número de herramientas y utilidades implicadas en el
desarrollo de sistemas ha hecho cada vez más necesario el uso de entornos que integren y
faciliten la tarea del programador individual, y la integración del trabajo de los equipos de
desarrollo.

Las nuevas tecnologías de desarrollo de aplicaciones se han beneficiado de la


experiencia de los sistemas clásicos y, por orientarse a aplicaciones complejas y requerir la
integración con técnicas clásicas, se han diseñado mayoritariamente con el apoyo de
entornos de desarrollo más o menos elaborados. Por ser tecnologías recientes y de origen
diverso, apenas se dispone aún de sistemas que faciliten la integración en un mismo sistema
de las diversas metodologías de trabajo disponibles (redes neuronales, sistemas borrosos,
algoritmos genéticos, etc.).

Describiremos a continuación uno de los entornos comerciales más difundidos


orientados específicamente a lógica borrosa:

3. FuzzyTECH (INFORM Software Corp.)

El entorno fuzzyTECH fue desarrollado por la compañía INFORM Software Corp. Este
entorno surgió del trabajo de un grupo de investigadores dirigido por el profesor Hans
Zimmermann, de la Universidad de Aachen, Alemania. El profesor Zimmermann es uno de

Página 23 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

los pioneros de lógica fuzzy en Europa, presidente y fundador de la International Fuzzy


Systems Association (IFSA), la principal organización internacional para la investigación y
aplicación de los sistemas basados en lógica borrosa. Es también editor principal de la
revista Fuzzy Sets and Systems Journal, una de las principales publicaciones científicas del
sector.

El entorno fuzzyTECH está formado por un GUI común basado en MS-Windows que,
entre otras cosas, permite la edición gráfica de las variables lingüísticas para cada una de
las variables del sistema, permitiendo hasta 7 adjetivos por cada variable, con una precisión
seleccionable de 8 o 16 bits. Se pueden utilizar funciones de inclusión de tipo S, Z, Lambda
y Pi. Posee también un editor gráfico de reglas, con un formato similar al de una hoja de
cálculo. Se pueden asociar a las reglas diversos métodos de inferencia estándar, y también
pueden asignarse pesos individuales a cada una de las reglas. Admite hasta 8 variables de
entrada y 4 de salida por módulo, y permite el empleo de diversos tipos de
desborrosificación (máximo de centros, centro de áreas, singletons y área central).

Fig 9: Entorno FuzzyTECH

El entorno admite la simulación fuera de línea y en tiempo real. Dentro del primer tipo,
permite la depuración interactiva con visualización de los flujos de inferencia y
optimización interactiva de los parámetros del sistema. Admite también la simulación
basada en datos pregrabados del sistema, y visualiza la respuesta del sistema en tiempo real.

El modelado del sistema se realiza a través de la conexión por DDE con un programa
específico para cada aplicación que ha de ser creado por el usuario. Permite el análisis
gráfico, visualizando la superficie de control y la activación de las reglas.

Para la simulación en tiempo real permite la conexión en línea con sistemas basados en
diversos microprocesadores. El sistema así dispuesto recibe los datos del microprocesador,
que los transmite a la aplicación, ésta los procesa y actúa sobre las salidas del
microprocesador para controlar el sistema.

Página 24 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Como cualidad importante de este entorno, hay que destacar que dispone de un gran
número de versiones con una interfaz de usuario común, y adaptadas a un gran número de
implementaciones. La versión MCU-C produce código C según el estándar ANSI, para su
utilización en aplicaciones basadas en estaciones de trabajo o PC. Se dispone también de
versiones que generan código para los microcontroladores STO de SGS Thompson, 8051,
MCS-96 de Intel, 81C99 y 80C166 de Siemens, PIC de Microchip, e incluso para los DSP
de Texas Instruments (familias TMS320C2X Y TMS320C5X de coma fija, y TMS320C3X
y TMS320C4X de coma flotante). Esto supone una ampliación considerable de las
posibilidades de este entorno, dado el bajo costo de los primeros y la gran capacidad de
cálculo de estos últimos microprocesadores, orientados al procesamiento de señal. Además,
este entorno ha sido seleccionado por diversos fabricantes de sistemas industriales como
herramienta para el desarrollo de aplicaciones de control basadas en lógica borrosa sobre
sus sistemas. Entre éstos se encuentra la empresa japonesa OMRON, que lo utiliza para la
programación de sus autómatas programables o PLC.

Resumen de características principales:

- Desarrollado por la compañía INFORM Software GmbH

- Versiones para Windows y Linux

- Potente interfaz gráfico.

- Edición gráfica de las variables lingüísticas.

- Gran cantidad de funciones de inclusión para conjuntos borrosos.

- Editor gráfico de reglas.

- Ajuste automático de los pesos de las reglas.

- Diversos tipos de desborrosificación.

- Generación automática de documentación según formato estándar IEC1131-7.

- Depuración interactiva off-line con visualización de los flujos de inferencia y


activación de reglas.

- Optimización interactiva de los parámetros del sistema.

- Simulación en tiempo real con datos pregrabados.

- Modelado del sistema puede realizarse a través de una conexión DDE, DLL o Active X
(LabView, Matlab/Simulink, Excel, Access, VisualBasic, VisualC, etc).

Página 25 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

- Produce código C según el estándar ANSI, código VHDL, código para


microprocesadores (SGS-Thompson, 8051, MCS-96 de Intel, 81C99, 80C166 de Siemens,
PIC de Microchip, DSP de Texas Instruments, etc).

- Posibilidad de Debugger en tiempo real en sistemas con microprocesadores.

- Recomendable para el desarrollo de sistemas prácticos en tiempo real.

- Recomendable para Sistemas de mayor Complejidad, uso de variables Intermedias y


Generación de código JAVA y C++.

Existen también diversos entornos experimentales para el desarrollo de sistemas


borrosos propuestos por centros universitarios. Hasta el momento hay relativamente pocos
entornos académicos de dominio público en el área de los sistemas basados en lógica
borrosa. Es de destacar que la mayoría de los sistemas comerciales han surgido de grupos o
profesores universitarios, como TILSell, del profesor Togai, o fuzzyTECH, del profesor
Hans Zimmermann, que han fundado empresas para la comercialización de estas
tecnologías.

Algunos libros incluyen librerías o pequeños entornos, como el de Bart Kosko. Por
último, algunos grupos universitarios han elaborado entornos de dominio público, como es
el caso del profesor Herrera, de la Universidad de Granada.

En el caso de FuzzyTECH vemos la posibilidad de obtener gratuitamente una versión


STUDENT para estudiantes que permite solo 2 variables de entrada y 1 de salida, así como
limitaciones en números de reglas y preprocesados.

En particular para este trabajo final se utilizará A-B Flex que es un producto de uso
gratuito y con prestaciones suficientes para poder demostrar las bondades de la lógica
difusa en contraste con los métodos tradicionales.

4. A-B Flex (Rockwell Automation - Allen Bradley.)

Fig 10

En este trabajo final, la herramienta elegida fue Allen-Bradley Fuzzy Logic EXplorer
beta versión 2.50. (A-B Flex) para Windows 98 (no se asegura compatibilidad en
NT/2000/XP o Vista), esta aplicación permite el modelado simple y sencillo de
controladores difusos, para el armado del sistema experto que llevará a cabo la tarea
propuesta.

Página 26 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Describiremos a continuación un detalle de los elementos componentes del programa


AB-Flex, muchos de los cuales son conceptos genéricos y definiciones que deberán tenerse
en cuenta en la simulación, ya sea en AB-Flex como en FuzzyTech u otro Sistema de
Modelado de Lógica Difusa:

Fig 11
a) Entrada o Input: Una entrada es un valor medido desde el sistema a ser
controlado y pasado al controlador difuso como su información de entrada. Este
valor es usado para evaluar las reglas difusas para producir una salida del
controlador. Cada entrada definida en A-B Flex tiene los siguientes atributos:

- Un nombre que sirve como identificador de la entrada.

- Un intervalo que define el rango de valores supuestos a tener en cuenta, o Universo de discurso.

- Un valor por defecto usado como valor de estado inicial.

- Una breve descripción.

b) Función de Membresía o Membership function para las entradas: Una función


de Membresía o conjunto difuso es una función matemática que mapea valores
concretos desde un dominio específico a un número entre 0 y 1 (Grado de
Membresía). Cada función de Membresía definida en A-B Flex tiene un nombre
que es único en la totalidad de las funciones de Membresía definidas para un
puerto particular de entrada/salida.

Página 27 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

c) Fuzzificación: La Fuzzificación es el primer paso en el proceso del controlador


de lógica difusa. Comprende el cómputo de los grados de Membresía de los
valores de entrada respecto a las funciones de Membresía definidas para las
entradas:

Fig 12

Grados de pertenencia respecto a la función de Membresía zero y negative.

d) Grado de Membresía (Membership grade): El grado de Membresía o MG es un


número entre 0 y 1 que representa el grado en donde un valor concreto es
compatible con la función de Membresía.
e) Base de Reglas: Una regla difusa es una sentencia if-then que describe el
comportamiento de salida del controlador como una función de las entradas. Por
ejemplo: 1.00 if nivel is bajo and temperatura is not alta then interruptor is
prendido, válvula is abriendo.
Cada regla en A-B Flex consiste en tres partes básicas:

1.00 - El peso de la regla

if nivel is bajo and temperatura is not alta - El antecedente (preposición)

then interruptor is prendido, valve is abriendo - El consecuente (conclusión)

El antecedente es la parte de la regla que consiste en una palabra seguida por uno o
más preposiciones difusas combinadas con operadores difusos. La conclusión es la
parte de la regla que consiste en una palabra seguida por una o mas proposiciones
difusas combinadas con un operador, (coma).

Página 28 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

f) Operadores difusos: Estos son los operadores difusos definidos en A-B Flex:
is - El operador de evaluación del grado de Membresía.
is not - El complemento del operador de evaluación del grado de Membresía.
and - El operador conjunción.
or - El operador disyunción.

El operador and y or, Sintaxis:


Proposición difusa and Proposición difusa
Proposición difusa or Proposición difusa
El operador and tiene más alta precedencia que el operador or (como la
lógica booleana). Se utilizan los paréntesis para desestimar esta precedencia.
La asociatividad entre los operadores and y or es de izquierda a derecha.
Las palabras se definen como todos los símbolos que puedan aparecer en las
reglas difusas excepto los identificadores. Las palabras definidas en A-B
Flex son:

If - etiqueta predecesora de la preposición de una regla

then - etiqueta separadora de las preposiciones y conclusiones de una regla

is - operador de evaluación de un grado de membresía

is not - operador de evaluación de complemento de un grado de membresía

and - operador de conjunción difusa

or - operador de disyunción difusa

, - separador de proposiciones difusas de salida

( ) - paréntesis

g) Evaluación de las reglas: La evaluación de una regla puede ser dividida en dos
etapas:
(i) Evaluación del antecedente

Los operadores difusos, si existiesen, son aplicados (de acuerdo a su definición, precedencia y asociatividad) a las
proposiciones mencionadas en el antecedente. El resultado es multiplicado por el peso dando el grado de llenado de
la regla (DOF).
(ii) Evaluación de la conclusión

Las funciones de membresía referenciadas en las proposiciones difusas de la conclusión de una regla son aplicadas
al grado de llenado de todas las reglas haciendo referencia a la función de membresía en sus conclusiones.

Ejemplo de evaluación de reglas: La situación presenta dos reglas que describen la relación entre dos entradas
(error_nivel, cambio_nivel) y una salida (válvula).

0.30 if error_nivel is positivo and cambio_nivel is llenando then válvula is cerrando

1.00 if error_nivel is negativo or cambio_nivel is cero and cambio_nivel is llenando then válvula is cerrando

Asumimos que la función minimum es usada como operador and, la función maximum es usada como operador or y
vemos a continuación los grados de membresía para los valores de entrada anteriores:

Página 29 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Evaluación de reglas:

Paso 1) Descripta en la tabla anterior.

Paso 2) DOF regla1 = 0.3 * MIN( 0.25, 0.36 ) = 0.075

DOF regla2 = 1.0 * MAX( 0.0, MIN( 0.6, 0.36) ) = 0.36

Paso 3) Hay dos reglas con la misma proposición difusa en su conclusión, por lo tanto el operador or debe ser
aplicado al DOF regla1 y DOF regla2. El grado de membresía de los valores de salida de la válvula respecto a la
función de membresía cerrando es MAX( 0.075, 0.36 ) = 0.36 .

(iii) Regla inactiva, Inactive rule

Las reglas inactivas son aquellas reglas que están definidas en la base de reglas pero no son usadas por el
algoritmo difuso en el procesamiento. Esta es una manera sencilla de afinar el sistema sin borrar reglas.

h) Métodos de Defuzzificación: La Defuzzificación debe ser usada para encontrar


los valores instantáneos y concretos de salida de la válvula para la válvula. En esta
versión de A-B Flex se soporta los siguientes métodos de defuzzificación:

- Método del centroide: El método del centroide es un método de defuzzificación que calcula los valores de salida como
un peso de promedios de los centroides de cada función de membresía definida para las salidas. Los factores de peso son
grados de membresía de las correspondientes funciones de membresía.

- Método de pesos de centroide: El método de pesos de centroide es un método de defuzzificación que calcula los
valores instantáneos de salida como pesos del promedio del centroide de las funciones de membresía definidas para la
salida. Los factores de peso son productos del grado de membresía y del área total de la correspondiente función de
membresía.

i) Función de membresía para las salidas: Cada función de membresía definida en


A-B Flex tiene un nombre único dentro de todas las funciones de membresía
definidas para un puerto particular de entrada/salida.

Página 30 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

j) Defuzzificación: La defuzzificación es el último paso en el procesamiento del


controlador de lógica difusa. En este paso algunos métodos son usados para
derivar una salida concreta desde los grados de membresía respecto a las funciones
de membresía definidas para una salida. Las funciones de membresía que tienen
un grado de membresía de 1 en el rango de salida son extendidas por encima del
rango. La zona triangular de dicha función es un reflejo del centro de los picos y
está unida en el final de la función de membresía. Esto permite a los centroides de
estas funciones de membresía limitar los puntos del rango de salida.

k) Salida: Una salida es un valor concreto, una instantánea que es calculada por el
controlador difuso y usado luego como valor de entrada en combinación con algún
otro elemento del controlador. Cada salida definida en A-B Flex tiene los
siguientes atributos:

 Un nombre que sirve como identificador de la salida.

 Un intervalo que define el rango de los valores que puede tomar.

 Un valor por defecto que es usado si ninguna regla esta ejecutándose para proveerla de un valor.

 Una breve descripción.

l) Simulación con MS-Excel: A-B Flex fue provisto de una herramienta de


comunicación de datos con otras aplicaciones (en esta versión hojas de cálculo de
MS-Excel solamente), para que el módulo de simulación permita monitorear el
control del proceso. Esta opción tiene el propósito de la demostración de que el
modelo se ajusta a la solución buscada. Permite crear un modelo simple y discreto
de un sistema usando MS-Excel y proceder a una simulación dinámica de control
difuso. A-B Flex tiene el rol de servir como controlador al sistema dinámico
modelado en MS-Excel o en alguna aplicación desarrollada a tal efecto que le
asigna a MS-Excel el rol de intermediario en los vínculos de datos. A-B Flex es un
cliente en la comunicación que periódicamente lee los valores de salida desde el
modelo del sistema en Excel (Libro y Hoja de cálculo) llevando a cabo una
inferencia difusa y escribiendo los valores de entrada al modelo.
m) Excel DDE: Permite especificar puertos de entrada/salida hacia un Libro de
MS-Excel y mapear sus celdas para un intercambio de datos DDE.
(i) Tópicos:

Nombre de hoja de cálculo, campo de entrada. Los tópicos de entrada es donde se especifica la hoja de cálculo
(*.xls) con la que se quiere comunicar. Se puede explorar en el sistema para permitir la selección de la hoja de
cálculo en lugar de insertar el nombre del tópico directamente.
(ii) Lista de mapeos de Ítems:

El mapeo de ítems muestra el mapeo corriente le los puertos de entrada/salida de A-B Flex hacia los ítems
DDE etiquetados con strings. El formato es del tipo <nombre del puerto de E/S>-<Celda de la hoja de cálculo de
MS-Excel>. Se puede modificar el mapeo en cada ítem desde la lista.

Página 31 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

n) Gráficos: Los gráficos muestran las variables monitoreadas por el controlador


difuso durante el proceso de control. Las siguientes variables del controlador
difuso pueden ser monitoreadas:

- Valores de entrada y valores de salida

- Grados de pertenencia de estos valores respecto al conjunto difuso correspondiente

- Grado de llenado de cualquier regla definida en la base de reglas

Los valores a ser representados en pantalla son obtenidos en línea o


monitoreando desde un archivo Log que fue salvado desde un gráfico previo.
Hasta 32 valores podrán ser representados al mismo tiempo en la ventana del
gráfico. Los ejes verticales (Y) muestran información sobre los valores
seleccionados. Una descripción de cada valor es presentada cada vez. La
visualización del eje Y axis es opcional. Los valores numéricos visualizados en la
parte superior del gráfico son los valores de cada iteración determinados por el
valor de la posición del marcador en pantalla. El marcador es la línea vertical con
pequeños triángulos en las puntas, el cual se puede mover libremente. Los valores
numéricos correspondientes a las intersecciones del marcador y de los gráficos
seleccionados son visualizados conjuntamente según el tiempo transcurrido en la
barra superior de la ventana. La visualización de los valores numéricos del
marcador es opcional.

o) Gráfico de superficie (Mesh plot):


X : corresponde a la entrada que será graficada a lo largo del eje X
Y : corresponde a la entrada que será graficada a lo largo del eje Y
Z : corresponde a la salida que será graficada a lo largo del eje Z

Los valores de otras entradas pueden ser seleccionados de la lista y de sus


valores que serán usados para el gráfico de superficie. Pueden especificarse valores
constantes según sus rangos. Los valores iniciales son equivalentes a los valores
actuales para cada entrada.

X - From : entrada, valor mínimo del rango en el eje x

( X -) To : entrada, valor máximo del rango en el eje x

( X -) Grid : entrada, se especifica el numero de puntos de grilla (mas de 80) en el eje x

Y - From : entrada, es donde se especifica el mínimo del rango en el eje y

( Y -) To : entrada, valor máximo del rango en el eje y

( Y -) Grid : entrada, se especifica el numero de puntos de grilla (mas de 80) en el eje y.

Página 32 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Resumiendo, como todo Shell A-B Flex brinda el entorno completo y quizás gráfico para
la construcción del sistema experto de lógica difusa. Es el diseñador el responsable de
codificar el conocimiento del problema dado, acompañado generalmente por el uso de
sintaxis en lenguaje natural para la definición de reglas y algún método gráfico para la
definición de los conjuntos difusos.

Página 33 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Capítulo 3. Aplicaciones
de los sistemas de control
borroso para Soft Computing
Se señalarán a continuación algunas aplicaciones de los sistemas borrosos, tanto
académicas como reales, relacionadas con procesamiento de datos y control para Soft
Computing. Como vimos anteriormente, el campo que claramente cuenta con mayor
número de aplicaciones basadas en lógica borrosa es el de control, con muchas de ellas en
funcionamiento en la industria.

Se expondrá el caso del desarrollo del robot autónomo controlado con reglas borrosas
bautizado como PILAR, diseñado y realizado en la Universidad de Zaragoza.

Se hará un análisis de resultados que llevará a conclusiones comunes a todo sistema de


lógica difusa.

1. Soft Computing, o imitando a la naturaleza

Los nuevos modelos de procesamiento y control actuales como la lógica borrosa (fuzzy
logic), junto con algunos otros de relativa novedad, se engloban en la denominada soft
computing o tecnologías emergentes, que tienen en común el constituir paradigmas de
procesamiento muy diferentes a la convencional hard computing, basada en computadores
Von Neumann (serie) y la separación de hardware y software. Estas nuevas técnicas se
inspiran en las soluciones que la naturaleza ha encontrado durante millones de años de
evolución a numerosos problemas tecnológicos que involucran el tratamiento de cantidades
masivas de información, redundante, imprecisa y ruidosa, problemas a los que en la
actualidad se enfrenta el ser humano (visión, habla, control en ambiente natural). No
obstante, debe quedar perfectamente claro que estas nuevas técnicas no vienen a suplantar a
las más tradicionales, sino más bien a completarlas en aquellos problemas donde menos
eficacia proporciona.

Es fácil deducir que, tanto las redes neuronales artificiales como los sistemas borrosos,
constituyen en la actualidad áreas de investigación y desarrollo (I+D) muy activas, no sólo
desde un punto de vista académico, sino comercial e industrial. Recordemos que grandes
compañías del sector electrónico e informático, como Intel. Philips, Siemens, Motorola,
SGS-Thomson, Toshiba. National Semiconductors, OMROM, etc., trabajan en redes
neuronales y sistemas borrosos. No obstante, los sistemas borrosos cuentan sin duda con
un mayor número de aplicaciones reales actualmente en explotación.

Era la línea anterior, mención especial merece el interés del mundo empresarial japonés
en la aplicación de la lógica borrosa en la industria y en aparatos de consumo. En Estados
Unidos y Europa solamente se empezó a dar importancia a la lógica borrosa cuando desde

Página 34 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Japón empezó a llegar abundante información sobre numerosas aplicaciones prácticas de


esta técnica, desarrolladas y comercializadas por compañías japonesas.

2. Interés del empleo de la lógica borrosa. Fusión de tecnologías

Los sistemas basados en lógica borrosa pueden ser aplicados prácticamente a los mismos
problemas que las redes neuronales. De esta manera, resultarán especialmente interesantes
para los problemas no lineales o no bien definidos. Los sistemas basados en lógica borrosa,
igual que los neuronales, pueden modelar cualquier proceso no lineal y aprender de los
datos haciendo uso de determinados algoritmos de aprendizaje, a veces tomados de otros
campos, como las redes neuronales o los algoritmos genéticos.

El otro gran denominador común de ambas técnicas es su orientación hacia el


tratamiento de tareas que involucran el procesamiento de cantidades masivas de
información de tipo redundante, imprecisa y con ruido, que aparecen en problemas
tecnológicos cruciales a los que en la actualidad se enfrenta el ser humano.

La equivalencia que se establece entre ciertos modelos neuronales y borrosos puede ser
empleada para extraer las reglas que una red neuronal ha encontrado en el entrenamiento,
eliminando uno de los grandes problemas clásicamente atribuido a los sistemas neuronales
artificiales, su operación en forma de caja negra. Por todo ello, la combinación de redes
neuronales y sistemas borrosos es un campo de intenso trabajo en la actualidad del que
ambas técnicas se benefician.

No obstante, frente a las características comunes citadas, existen también importantes


diferencias. Por ejemplo, los sistemas basados en lógica borrosa permiten utilizar el
conocimiento de que disponen los expertos sobre un tema, bien directamente, bien como
punto de partida para una optimización automática. En el caso de las redes neuronales, esto
resulta más difícil o menos directo. La lógica borrosa permite formalizar tanto el
conocimiento ambiguo de un experto como el sentido común de una forma
tecnológicamente realizable.

Una importante ventaja de los sistemas borrosos es que, gracias a la simplicidad de los
cálculos requeridos (sumas y comparaciones, fundamentalmente), normalmente pueden
realizarse en sistemas baratos y rápidos, con lo que pueden implementarse en sistemas
específicos (por ejemplo, para el control inteligente de un horno microondas o de un
sistema de frenado ABS). Este es uno de los motivos fundamentales del hecho constatado
de la existencia en la actualidad de muchas aplicaciones prácticas en funcionamiento
basadas en lógica borrosa.

3. Robots móviles y navegación autónoma

Los robots móviles pueden caracterizarse en términos de su movilidad, autonomía,


inteligencia y conocimiento previo del entorno. El sistema de navegación del robot incluye

Página 35 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

tareas de planificación, percepción y control de movimientos. La primera comprende la


planificación de la misión, planificación de la ruta, planificación de la trayectoria y las
funciones específicas para evitar obstáculos imprevistos, no considerados en las
planificaciones anteriores.

La percepción se ocupa de las tareas relacionadas con la detección de obstáculos,


construcción de mapas, modelado del entorno y reconocimiento de objetos. Por último, el
control de movimientos convierte en acciones las órdenes de control, utilizando para ello la
diferencia (error) entre la posición deseada y la estimación de la posición actual del robot.
Se incluyen también tareas de monitorización de la ejecución.

Existen diversas posibilidades de aplicación de técnicas de control borroso. La mayoría


de los trabajos existentes parten de una identificación del escenario, con extracción de
características del entorno y obtención de valores de variables de situación del robot
(distancia a la pared, distancia a la entrada de estacionamiento, etc.). Las reglas de control
borroso relacionan valores cualitativos de estas variables con las acciones de control,
típicamente, el ángulo de dirección del vehículo.

En algunos casos, en vez de utilizarse directamente la variable de control en los


consecuentes de las reglas, se emplea una combinación lineal de los valores de las variables
de situación, empleando unos coeficientes que se calculan mediante la identificación de las
actuaciones de un operador humano trabajando en simulación. En este punto, conviene
mencionar el interés de la aplicación de técnicas de aprendizaje. En cualquier caso, una vez
obtenidos los valores inferidos por cada regla, la acción final de control resulta de una suma
ponderada normalizada de los resultados de cada regla.

Por otra parte, cabe mencionar que el conjunto de reglas puede descomponerse en
subconjuntos relativos a operaciones diferentes (conducir hacia adelante, girar a la
izquierda en intersección, etc.) o bien a maniobras. Se utiliza esta técnica para permitir que
un robot evolucione en el entorno de una oficina.

Las aplicaciones mencionadas anteriormente cabe considerarlas como de control borroso


directo. Otra posibilidad consiste en aplicar las técnicas de razonamiento aproximado para
seguir una trayectoria previamente definida. Considérese un sistema de navegación que
realiza sucesivamente los siguientes pasos: planificación de la ruta, generación de un
camino con buenas propiedades cinemáticas y, finalmente, control de seguimiento de la
trayectoria. Para este último paso existen, a su vez, diferentes métodos. En efecto, la
generación del ángulo de dirección (curvatura) puede realizarse mediante métodos
geométricos o considerando también la dinámica y la velocidad utilizando cinemática.

De acuerdo con el esquema anterior, la aplicación de métodos de control borroso puede


realizarse directamente (sustituyendo los métodos geométricos, dinámicos y cinemáticos) o
en combinación con ellos. De esta forma, es posible compensar errores de seguimiento

Página 36 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

mediante reglas que tienen como antecedentes la desviación de ángulo y la variación de la


desviación del ángulo, y como consecuentes, la modificación de la dirección para
compensar el error.

Asimismo, otra estrategia muy interesante consiste en seleccionar mediante técnicas de


razonamiento aproximado los parámetros del control, que típicamente se eligen mediante
consideraciones heurísticas. Por ejemplo, los métodos geométricos o dinámicos de
seguimiento de trayectorias tienen como parámetro importante el número de puntos o la
distancia sobre el camino que se pretende seguir (lookahead). Este parámetro puede
elegirse mediante técnicas de razonamiento aproximado, teniendo en cuenta las
características del camino, la velocidad y la posición del vehículo con respecto al camino.

Los comentarios anteriores se refieren fundamentalmente al control de la dirección.


Existe también el problema del control de la velocidad del vehículo. Aunque hay un
evidente acoplamiento cinemático y dinámico con el anterior, se ha demostrado que en
diversas aplicaciones prácticas pueden realizarse desacoplamientos. En cualquier caso, el
problema de planificación y control de velocidad es notablemente complejo, y suele
realizarse con criterios heurísticos. Por consiguiente, la aplicación de técnicas de
razonamiento aproximado resulta particularmente interesante.

Si bien la mayor parte de los robots autónomos se basan en topologías clásicas, haciendo
uso de ruedas, también se han estudiado otras posibilidades. Así, para el acceso a terrenos
agrestes resulta de interés el uso de robots con patas. Éstos son capaces de moverse también
en entornos de oficinas e industrias, por ser capaces de subir y bajar escaleras. En los robots
con patas se ha de prestar atención al control del movimiento de las patas para conseguir un
desplazamiento uniforme. Estos estudios se han basado habitualmente en el movimiento de
los animales.

4. El robot autónomo PILAR

El diseño del control de este robot autónomo en la Universidad de Zaragoza, se ha


realizado de forma completamente jerárquica, haciendo uso del modelo Sistema de
Respuesta Autónoma (ARS). El control de mayor nivel, el de navegación, implementa dos
comportamientos diferentes posibles:

a) Seguir a un objeto y detenerse a una distancia predefinida.

b) Movimiento libre en un entorno genérico, evitando obstáculos y tendiendo al área


libre más amplia.

En el contexto de este control jerárquico, se propone, además, un método para la


eliminación de bloqueos en el planeamiento de la trayectoria. El prototipo de robot
autónomo de seis patas ha sido bautizado PILAR (Programmable Intelligent Legged
Autonomous Robot), está ideado para que pueda moverse en cualquier ambiente, terreno

Página 37 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

natural, volcanes, minas, plantas nucleares, fábricas, etc. Cada una de sus patas es
controlada mediante dos servomotores eléctricos. El corazón de PILAR es un
microcontrolador 68HC11; todo el sistema es alimentado mediante una batería de níquel-
cadmio de 9.6 V. En la cabeza móvil incluye un sensor de ultrasonidos, mediante el cual

mide la distancia a los obstáculos; aunque su capacidad de giro es de -+80 °, solamente se

implementan -+45°. PILAR actúa en función de los obstáculos detectados y de las reglas
borrosas (programadas en el 68HC11) que codifican su comportamiento.

Fig 13: Robot autónomo PILAR, desarrollado en la Universidad de Zaragoza

El sistema se ha diseñado modularmente, de modo que pueda ser fácilmente expandible


y reconfigurable. Absolutamente autónomo, puede caminar en terrenos accidentados. De la
misma manera que el modelo ARS está inspirado en el sistema nervioso de los insectos, el
patrón de coordinación del movimiento de las seis patas de PILAR está basado en el de los
insectos, presentando su misma secuencia temporal.

Página 38 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Capítulo 4. Desarrollo
de una aplicación práctica de
Sistemas de Control para Navegación Autónoma
Para ilustrar el diseño de un sistema experto de lógica difusa se considerará el problema
de navegar un carrito por un campo con obstáculos, hasta llegar a destino. Se desarrollará
un sistema de lógica difusa utilizando ABFLEX, pretendiendo identificar y desarrollar cada
uno de los pasos concernientes a la construcción del prototipo. Se verá luego una
descripción de esta metodología que permite su aplicación a cualquier situación que
necesite de un controlador difuso.

Debido a la elección de un entorno de diseño del controlador difuso para el modelado y


prueba del controlador difuso, de forma paulatina se ira incorporando pantallas del entorno
gráfico elegido, acompañando los conceptos teóricos, a fin de resaltar los componentes del
proceso, la carga de datos y la construcción del modelo en el entorno. Se destaca así la
versatilidad del producto y la facilidad de uso, de esta forma se ilustra como llevar a la
práctica un modelo teórico.

Existen entonces ocho tareas primordiales que deberán llevarse a cabo para el desarrollo
de un sistema experto de lógica difusa:

1. Definición del problema

Describir un sistema experto de lógica difusa basado en un problema conciso y pasible


de ser llevado a la realidad mediante un robot, que consiste en guiar un carrito de golf por
ejemplo hasta la posición donde se encuentra el objetivo-destino, en este caso una pelota de
golf, a través de un campo donde hay obstáculos como árboles. El ejemplo se baso en un
ejemplo teórico de la cursada con el profesor Ing. Luis Arana, Profesor Titular de las
cátedras de Inteligencia Artificial de la Facultad de Ciencias de la Administración de la
Universidad Argentina de la Empresa, durante la cursada en el año 2000, y es el punto de
partida para ampliar el ejemplo y desarrollar adicionalmente el mismo con mas obstáculos,
con el modelado en un entorno difuso y con la simulación y ajuste final del modelo
implementado en un lenguaje de programación.

Página 39 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 14

Como todos los sistemas expertos, se necesitará primero de una fuente de conocimiento.
Usualmente esta fuente es un experto en el problema. En nuestro caso se contactará a un
empleado con vasta trayectoria en manejar carritos de golf. Esta persona asegura que el
problema básico es manejar el carrito eficientemente y de forma segura desde el punto
estacionario hasta llegar a la pelota. Se obtiene eficiencia minimizando la distancia
recorrida y el tiempo transcurrido. Se obtiene seguridad esquivando los árboles en el
camino. Para lograr ambos objetivos se necesitará de un sistema de lógica difusa con
control sobre la dirección y la velocidad del carrito. Este tipo de problema es básicamente
un problema de corrección de error. El carrito debe inicialmente girar hacia la pelota
minimizando el error entre la dirección angular del carrito y la dirección de la pelota. El
carrito debe también acelerar, logrando una velocidad máxima para luego disminuir la
misma y eventualmente parar cuando esté próximo a la pelota. Se fija esta distancia como
de 3 metros. Esto minimiza el error entre la ubicación del carrito y la de la pelota de una
forma rápida. Adicionalmente, cuando un árbol está en el camino, el carrito deberá doblar
alrededor del de forma lenta, para luego acelerar orientándose hacia la pelota.

2. Exhibición de las variables lingüísticas

Se trata de conducir al carrito de modo eficiente y seguro desde la posición donde se


encuentra hasta la pelota. Eficiente por el recorrido más corto y en menos tiempo. Seguro
porque va esquivando obstáculos como por ejemplo árboles.

El recorrido más corto se cumple ejerciendo un control sobre la dirección.

El recorrido en menos tiempo se cumple ejerciendo un control sobre la velocidad.

Esquivar los obstáculos se logra controlando la dirección y la velocidad.

Página 40 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Se le pide al experto las variaciones de estas variables lingüísticas, y sus rangos, a saber:

En nuestro caso puntual, ampliaremos el problema a la navegación del carrito por un


campo con tres obstáculos, puestos estos en cualquier posición que obstaculice el camino a
la pelota de golf, tenemos entonces 3 árboles:

Fig 15

3. Definición de los conjuntos difusos

Para ello se le pregunta al experto cuáles son los adjetivos que usa para identificar y
describir las reglas que representan su conocimiento sobre el tema. Se lleva a cabo este
procedimiento por cada variable lingüística y se arma un diccionario y un vocabulario
propio para este problema.

Se hacen preguntas como: ¿Qué velocidad se considera lenta?

Se asumen respuestas con cierto grado de vaguedad: “Entre 1 y 3 metros por segundo”.

Se continúa con una pregunta del tipo: ¿Hasta que grado considera que 1 metro por
segundo es lento?

Página 41 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Este procedimiento se lleva a cabo por cada variable lingüística hasta tener un mapa con
los valores de certeza en cada caso:

Fig 16

Estos últimos medidos en Grados.

Fig 17

En mts/seg, mts/seg2, mts y mts, respectivamente.

Estas funciones de membresía pueden variar en cada caso y según las descripciones y
detalles que brinda el experto, dando como resultado una variedad de figuras distintas,
siendo la más común y de fácil cómputo las trapezoidales. Un punto a tener en cuenta en la
definición de los conjuntos difusos es la necesidad de abarcar cada posible valor y asociarle
un valor de membresía al conjunto difuso, para que no existan valores que no sean
correspondidos.

Página 42 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Se utilizan segmentos de rectas lineales por tramo. Se identifican bien los adjetivos que
usa el experto:

Fig 18

Volcado al Entorno seria:

Fig 19

Página 43 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 20

Fig 21

Fig 22

Fig 23

Página 44 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 24

Fig 25

En el caso desarrollado como dijimos anteriormente se tendrán en cuenta la existencia de


tres árboles que serán ubicados en distintos lugares para posibilitar la construcción de un
escenario más real y complejo. Los adjetivos y los grados de pertenencia a tener en cuenta
para cada árbol son las mismas que para el Árbol_1.

Aquí vemos el primer caso volcado al entorno:

Página 45 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 26

Fig 27

Fig 28

Página 46 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 29

Fig 30

Fig 31

Página 47 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 31

Fig 32

Página 48 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 33

Fig 34

Fig 35

Fig 36

Página 49 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 37

Fig 38

Fig 39

Página 50 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 40

Dado la limitación de AB-Flex al utilizar figuras trapezoidales (4 puntos a definir) , en este


caso, se da el valor a Low Peak =0 y High Peak=0 para indicar que a velocidad cero la
función de membresía en cuestión, parte de la máxima pertenencia que es 1.

Fig 41

Fig 42

Página 51 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 43

Fig 44

Fig 45

Página 52 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 46

Fig 47

Fig 48

Página 53 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 49

Fig 50

Fig 51

Fig 52

Página 54 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 53

Fig 54

Fig 55

Página 55 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 56

Fig 57

Fig 58

Fig 59

Página 56 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 60

Fig 61

Fig 62

Página 57 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

4. Definición de las reglas

Se necesita a continuación la definición de las reglas difusas. Se hacen preguntas al


experto sobre cómo se controla la:

- Dirección del carrito hacia la pelota.

- Velocidad del carrito.

- Dirección del carrito para esquivar los árboles.

Reglas:

-- REGLAS para el manejo de la dirección

-- REGLA 1M - Mantener la dirección de marcha

1.00 if Angulo_error is cero and Distancia_arbol is not proxima and Angulo_arbol is not cero then
Angulo_direccion is cero

-- REGLA 2M - Modificar la dirección de marcha ligeramente hacia la derecha

1.00 if Angulo_error is poco_positivo and Distancia_arbol is not proxima and Angulo_arbol is not cero
then Angulo_direccion is poco_derecha

-- REGLA 3M - Modificar la dirección de marcha ligeramente hacia la izquierda

1.00 if Angulo_error is poco_negativo and Distancia_arbol is not proxima and Angulo_arbol is not cero
then Angulo_direccion is poco_izquierda

(NOTA: Angulo_arbol is not cero significa, a pesar de lo confuso que pueda resultar esta variable, que el
angulo_arbol que toma valores entre -180 grados y 180 grados, al ser not cero, significa que el Angulo al
árbol es cualquier valor que no implique que el carrito va en una exacta dirección hacia el árbol, en tal caso
seria Angulo_arbol = 0 grados. Es decir tratamos de significar con Angulo_arbol not 0 que el carrito tenga
una dirección respecto al Árbol que no sea una dirección que se dirija directamente hacia el mismo, sino que
se dirija hacia cualquier otro lado, es decir que no se interponga directamente en su camino hacia la pelota.,
de esta manera no nos importa el árbol, ya que no se encontrara en el camino que en esta regla evalúa el
carrito.)

-- REGLA 4M - Modificar la direcci6n de marcha ligeramente hacia la derecha

1.00 if Angulo_error is muy_positivo and Velocidad is rapida then Angulo_direccion is poco_derecha

-- REGLA 5M - Modificar la dirección de marcha mucho hacia la derecha

1.00 if Angulo_error is muy_positivo and Velocidad is not rápida then Angulo_direccion is


mucho_derecha

(NOTA: Velocidad es not rápida significa que una Velocidad es mediana a tan lenta que incluye el valor
cero, se utiliza esta variable para aquellas reglas que necesitan evaluar que aun no se alcanzo la velocidad
máxima, y por ejemplo se necesita corregir drásticamente la dirección del carrito, dado que como no

Página 58 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
desarrollo una velocidad máxima para operar cambios bruscos con la consecuencia de desviarse demasiado,
se pueden realizar desvíos bruscos sin que esto repercuta en un desvío de mucha magnitud en metros, dado
que la velocidad no es la máxima, los metros de desvío tampoco son de gran magnitud, también puede usarse
la Velocidad not rápida si se necesita seguir acelerando para alcanzar la Velocidad Máxima)

-- REGLA 6M - Modificar la dirección de marcha ligeramente hacia la izquierda

1.00 if Angulo_error is muy_negativo and Velocidad is rápida then Angulo_direccion is poco_izquierda

-- REGLA 7M - Modificar la direcci6n de marcha mucho hacia la izquierda

1.00 if Angulo_error is muy_negativo and Velocidad is not rápida then Angulo_direccion is


mucho_izquierda

-- REGLAS para la Aceleración

-- REGLA 1A – Frenar levemente

1.00 if Angulo_error is muy_positivo and Velocidad is rápida then Aceleración is frenar_levemente

-- REGLA 2A – Frenar levemente

1.00 if Angulo_error is muy_negativo and Velocidad is rápida then Aceleración is frenar_levemente

-- REGLA 3A - Acelerar a fondo

1.00 if Distancia_pelota is lejana and Velocidad is not rápida then Aceleración is a_fondo

-- REGLA 4A - Hacer Aceleración cero

1.00 if Distancia_pelota is lejana and Velocidad is rápida then Aceleración is cero

-- REGLA 5A - Aceleración leve

1.00 if Distancia_pelota is mediana and Velocidad is not rápida then Aceleración is leve

-- REGLA 6A - Hacer Aceleración cero

1.00 if Distancia_pelota is mediana and Velocidad is rápida then Aceleración is cero

-- REGLA 7A – Frenar levemente

1.00 if Distancia_pelota is próxima and Velocidad is rápida then Aceleración is frenar_levemente

-- REGLA 8A - Aceleración leve

1.00 if Distancia_pelota is próxima and Velocidad is cero then Aceleración is leve

-- REGLA 9A - Frenar fuerte

1.00 if Distancia_pelota is muy_proxima and Velocidad is rápida then Aceleración is frenar_fuerte

-- REGLA 10A – Frenar levemente

1.00 if Distancia_pelota is muy_proxima and Velocidad is mediana then Aceleración is frenar_levemente

Página 59 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
-- REGLA 11A - Marcha libre

1.00 if Distancia_pelota is muy_proxima and Velocidad is lenta then Aceleración is marcha_libre

-- REGLA 12A - Aceleración cero

1.00 if Distancia_pelota is muy_proxima and Velocidad is muy_lenta then Aceleración is cero

-- REGLA 13A - Aceleración leve

1.00 if Distancia_pelota is muy_proxima and Velocidad is cero then Aceleración is leve

-- REGLA 14A – Frenar fuerte

1.00 if Distancia_pelota is cero and Velocidad is not cero then Aceleración is frenar_fuerte

(NOTA: la Velocidad is not Cero. Velocidad es no Cero significa que existe algo de velocidad, mucha o
poca, pero permite esto un frenado brusco si el carrito se paso del objetivo y aun sigue avanzando.)

-- REGLA 15A - Marcha libre

1.00 if Distancia_pelota is proxima and Velocidad is mediana then Aceleración is marcha_libre

-- REGLA 16A - Aceleración cero

1.00 if Distancia_pelota is próxima and Velocidad is lenta then Aceleración is cero

-- REGLAS para esquivar el árbol

-- REGLA 1T - Girar ligeramente hacia la izquierda para esquivar el árbol

1.00 if Distancia_arbol is próxima and Angulo_arbol is cero and Angulo_arbol is poco_positivo then
Angulo_direccion is poco_izquierda

-- REGLA 2T - Girar ligeramente hacia la derecha para esquivar el árbol

1.00 if Distancia_arbol is próxima and Angulo_arbol is cero and Angulo_arbol is poco_negativo then
Angulo_direccion is poco_derecha

-- REGLA 2T – Frenar fuerte para esquivar el árbol

1.00 if Distancia_arbol is proxima and Angulo_arbol is cero then Aceleracion is frenar_fuerte

Se considera la utilización de los adjetivos definidos previamente y de la inclusión de


nuevos adjetivos si fuesen necesarios, creando un conjunto difuso nuevo por cada uno.

Se definen las reglas entonces agrupando las mismas en función de las características
anteriores.

Se tienen en cuenta al principio solo reglas difusas para cada conjunto difuso sin el
agregado de adverbios. Cuando llegue el momento de testear el sistema se harán cambios y
agregaran adverbios o ponderaciones a cada regla, se podrán agregar o eliminar reglas, con
el único propósito de aumentar la performance del sistema.

Página 60 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 64

Fig 65

Página 61 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 66

5. Probar el sistema

El Código Fuente del prototipo se adjunta en el Anexo del presente trabajo, tanto de las
funciones como de los formularios y pantallas del prototipo.

A continuación vemos como se puede testear distintas situaciones particulares aunque


no esto exactamente lo que entendemos por simulación, sino el paso previo.

Como primera aproximación vamos a ver un caso de prueba para una situación
particular, estática, con un solo árbol.

Todos los tests fueron corridos utilizando inferencia Max-Producto.

a. Caso de prueba 1

Para el primer caso de prueba consideramos una situación donde el árbol no está en el
camino hacia la pelota. El carrito se dirige hacia la pelota en un ángulo_auto de –45º.

A continuación vemos el camino del carrito durante la simulación bosquejada y notamos


que tiene una pequeña dificultad en el momento inicial para maniobrar y situarse en
posición hacia el objetivo, hasta que lo logra y a partir de allí sigue en línea recta hacia la
pelota. No existen desviaciones dada la lejanía del árbol. El carrito se detiene a unos 3
metros de la pelota:

Página 62 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 67

Vemos también como varía la velocidad durante la prueba, comenzando desde una
posición estacionaria, el carrito rápidamente aumenta su velocidad por el componente
aceleración, hasta una velocidad de 5mts/s. A medida que aumentan los ciclos o sea el
tiempo, y de esta forma el carrito se aproxima a la pelota este rápidamente desacelera. En
este punto la velocidad empieza a oscilar, siendo esta una situación no deseada que
comentaremos luego:

Fig 68

Página 63 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Para demostrar cuál es el proceso de inferencia que se lleva a cabo dentro del sistema,
analizaremos una situación particular y veremos como se disparan las reglas difusas. Las
condiciones en este caso son:

Distancia a la Pelota = 28,5 mts. (Próxima, Mediana)

Velocidad = 4,5 m/s (Rápida)

Angulo del error = Cero (No interviene)

Distancia Árbol = Lejos (No interviene)

Angulo de árbol = Muy Positivo (No interviene)

Angulo dirección = Cero (No interviene)

Se procede a recorrer las reglas aplicables:

a- La regla 1M es aplicable.

b- La regla 5A es aplicable así como también la 6A y 7A.

Distancia de la pelota = 28.5 mts. (Próxima = 0.625 ; Mediana = 0.125)

Velocidad = (Rápida = 0.8 ; No Rápida = 0.2)

Aceleración = Marcha_libre = 1

Asumimos que la función minimum es usada como operador and, la función maximum
es usada como operador or. Este operador MAX-MIN se eligió como Operador Difuso, de
forma arbitraria para este ejemplo, pudiendo elegirse sino el operador Producto:

Fig 69

Página 64 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Bajo estas condiciones solo cuatro reglas se aplican:

Analizando la Regla 1M (1,2,3 de A-B Flex), vemos que:

1.00 if Angulo_error is cero and Distancia_arbol is not proxima and Angulo_arbol is not cero then
Angulo_direccion is cero

Se cumple el Angulo_error is cero, se cumple Distancia_Arbol is not proxima, dado que


interviene el valor Distancia_Arbol es Lejos.

Reglas 5A, 6A y 7A (18, 19 y 20 para A-B Flex)

Para evaluar la regla 5A, las funciones de membresía “mediana” de “Distancia_pelota” y


“rápida” de “Velocidad” deben ser evaluadas.

La “Distancia_pelota” de 28.5 mts pertenece a la clasificación de “mediana” en un grado


de 0.125.

Fig 70

La “Velocidad” de 4.5 m/s es considerada “rápida” en un grado de 0.8

Fig 71

Asimismo es “NOT rápida” en un grado de 0.2.

Página 65 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Cuando se unen estas dos sentencias con el operador AND, el operador minimum
produce un grado de 0.125 como verdad de los antecedentes.

Usando la técnica de inferencia max-min, este valor es usado para medir la escala de la
función de membresía de la conclusión de la regla 5A “leve” de “Aceleración”. Así
tenemos:

Regla 5A:

-- REGLA 5A - Aceleraci6n leve

1.00 if Distancia_pelota is mediana and Velocidad is not rápida then Aceleración is leve

grado de llenado de la regla (DOF): 1.00 * MIN(0.125,0.2) = 0.125

Cuando la regla 6A es evaluada, usando los valores de verdad de “mediana” y “rápida”


para las mismas variables lingüísticas anteriores, los antecedentes se combinan nuevamente
y se obtiene un valor de verdad de 0.125. El valor de pertenencia de “cero” de
“Aceleración” es medida en escala por este valor.

-- REGLA 6A - Hacer Aceleración cero

1.00 if Distancia_pelota is mediana and Velocidad is rápida then Aceleración is cero

grado de llenado de la regla (DOF): 1.00 * MIN(0.125,0.8) = 0.125

Cuando se evalúa la regla 7A, la distancia a la pelota de 28.5 mts es considerada


“próxima” en un grado de 0.625 y la “Velocidad” es “rápida” en un grado de 0.8.
Consecuentemente “frenar_levemente” se convierte en un valor de 0.625.

-- REGLA 7A – Frenar levemente

1.00 if Distancia_pelota is proxima and Velocidad is rapida then Aceleracion is frenar_levemente

grado de llenado de la regla (DOF): 1.00 * MIN(0.625,0.8) = 0.625

La ejecución en paralelo de estas tres reglas se pueden ver a continuación:

Página 66 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 72

Los tres conjuntos difusos inducidos para “Aceleración” también son combinados usando el
operador union. Un centroide de este resultado es computado para actualizar la aceleración
del carrito y la instantánea para la aceleración para el modelo dado es - 0,643. Como el
valor final es negativo, el simulador decrementa la velocidad del carrito y el proceso
continúa.

Para las reglas utilizadas en A-B Flex, vemos el mismo comportamiento, pero para tres
árboles.

Página 67 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 73

Fig 74

Y en Excel:

Página 68 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 75

También podemos observar el grafico 3D que denota la superficie de decisión o relación


entre las tres variables que estamos estudiando en este caso de prueba.

Fig 76

Podemos ver sencillamente aquí como a medida que hay mayor distancia a la pelota
empieza a haber velocidad y aceleración. También se ve como a mayor distancia a la pelota
la aceleración encuentra un valor de reposo=0 y se mantiene, ya que no hace falta acelerar
cuando la velocidad es la máxima (lejos de la pelota), pero si se acelera e incluso frena si la
velocidad va llegando a 0.

Página 69 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 77

Rotando el Grafico vemos claramente el problema de la oscilación creciente a medida


que la velocidad llega a 0 (que es nuestro problema de oscilación brusca cuando se llega a
la pelota) inherente al problema de correlación entre estas tres variables. Ya desde el
Grafico anticipamos un problema. Lo resolveremos luego estudiando esta oscilación y
tratando de menguarla.

b. Caso de prueba 2

En el próximo caso de prueba se considerará la situación donde un árbol está en el


camino hacia el carrito. El carrito se ubica en un Angulo_auto de 60 º respecto a la pelota.

Fig 78

Página 70 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

El carrito en un primer momento debe maniobrar para situarse en dirección hacia la pelota
y sigue una trayectoria recta hasta que se aproxima al árbol, en ese momento, vira alrededor
del mismo y luego continúa en línea recta para aproximarse a la pelota hasta unos 3 mts de
la misma.

Fig 79

El carrito rápidamente aumenta la velocidad hasta que se aproxima al árbol, donde


disminuye cautelosamente la velocidad mientras lo esquiva, para luego acelerar
nuevamente hasta su aproximación final a la pelota. Aquí este reduce significativamente la
velocidad para detenerse. Desafortunadamente, tal como se observó en el caso de prueba 1,
la velocidad del carrito oscila cuando se aproxima demasiado a la pelota, antes de
detenerse. También resolveremos esto a continuación, esta vez ampliando los casos de
estudio para conocer cual es el origen del problema.

6. Simulación dinámica del sistema

Para observar innumerables casos de prueba y evaluar como se comporta el modelo, es


casi ineludible realizar una simulación dinámica, para lo cual se desarrolló un programa en
Visual Basic y AB-Flex que envía los datos de entrada según el estado actual del sistema a
Excel y este hace de interfase hacia el controlador difuso, el programa compilado en Visual
Basic (.exe) recibe los datos de Excel, los interpreta, los transforma en datos representativos
y computa el nuevo estado del sistema, para enviar así los nuevos valores de entrada. Este

Página 71 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

procedimiento iterativo se repite hasta alcanzar el estado final estipulado como fin de la
simulación. Dada la característica de la solución los tiempos de respuesta no son óptimos,
pero permite una clara representación del problema físico, en un espacio virtual.

El desarrollo de la simulación se hizo como prototipo, y vemos a continuación un


resumen de los elementos y de su comportamiento que dio origen a la aplicación. En cuanto
al código fuente en Visual Basic y macros de MS Excel, se adjuntan en el Anexo y en el
CD Adjunto al trabajo final.

a. Borrador del problema

A continuación se detallan elementos que acompañan al borrador que fue confeccionado


para llegar a una primera aproximación informal al problema.

Vemos a continuación un gráfico en el plano, que indica centralmente, como se miden


los ángulos respecto al carrito de golf, la pelota y el árbol (único hasta el momento).

Tienen una distancia medida respecto al carrito y se obtiene su magnitud utilizando


funciones trigonométricas, según los datos aportados por la posición de cada elemento en el
campo.

Fig 80

A continuación vemos como el tiempo teórico que equivale a cada iteración es de 1


segundo y por lo tanto corresponde a un cambio de estado.

A cada segundo se obtienen los ángulos correspondientes por medio de la función


ArcoTangente respecto a las coordenadas del carrito, pelota y árbol en cada caso. Con esta
información se permite calcular las magnitudes de las distancias (diagonales en el gráfico).

Página 72 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 81

En esta aplicación se debe seguir una convención de medida de ángulos, para la cual se
bosquejan los dos tipos de medidas propuestas, para cada variable lingüística.

Esta conversión es de 360º a un valor entre un rango definido según cada tipo. Esta
conversión se revisa y ejecuta dependiendo del cuadrante desde donde se comenzará la
conversión.

Fig 81

Página 73 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 82

El estado inicial fue definido como un angulo_auto de 0º respecto al sistema de


coordenadas, de velocidad cero y una ubicación determinada, a partir de la cual se obtienen
los datos necesarios para establecer el estado inicial de partida para la simulación.

Fig 83

Aquí se listan las variables de entrada, las cuales deben tener datos para exportar a Excel
y comenzar cada iteración en búsqueda de la respuesta borrosa. Esta información se obtiene
a partir del estado inicial y se va modificando con cada iteración.

Fig 84

Las variables de salida son aquellas de las cuales se encarga A-B Flex, que en base a los
datos de entrada, calcula esta salida, que llega al programa de simulación pasando por MS
Excel.

Página 74 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 85

Cuando los valores nuevos de las variables de salida son incorporados al sistema, pasan
a ser la información necesaria para analizar y convertir las mismas en nuevas variables de
entrada al controlador difuso, por medio de una transformación.

Esta transformación es llevada a cabo cada segundo teórico y por lo tanto, norma el tipo
de ecuaciones físicas necesarias para (solamente) ubicar el carrito en una nueva posición en
el plano, para la cual se calculan las nuevas variables de entrada que realimentará el ciclo
hasta llegar al estado final.

Para el caso de la aceleración, la transformación es encontrar la nueva velocidad, y


consecuentemente mover el carrito hasta la posición indicada por la magnitud del vector.

El espacio recorrido en ese lapso (según la velocidad) es necesario descomponerlo en


desplazamiento sobre X e Y en el campo de Golf.

El ángulo de la dirección indica una corrección al estado inmediatamente anterior, en


particular al ángulo del auto. Por este motivo el signo del ángulo de la dirección es
cambiado, en lugar de expresar la transformación del ángulo del auto como el ángulo del
auto anterior menos el ángulo de dirección.

Este nuevo ángulo de dirección propuesto por el controlador difuso, es el que pasa a ser
el actual ángulo del auto.

Fig 86

El estado final indica, según las pruebas llevadas a cabo, que se alcanzará cuando la
distancia a la pelota sea de 3 metros, con lo cual la velocidad será 0 m/s. Llegado este
momento (o alguna combinación de distancia pelota y velocidad definida por el usuario), la

Página 75 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

simulación finalizará siendo el estado último el que quedará almacenado en el controlador


difuso.

Si el estado final fuese de características más exquisitas que lo aceptado según la


realidad planteada por el experto, la naturaleza del sistema será continuar con la iteración
indefinidamente hasta llegar a ese punto, y si no llegase nunca se estará en una situación de
inestabilidad infinita por no satisfacer la demanda del usuario, hasta que se lleve a cabo
alguna modificación al controlador o se de por terminada la simulación de forma forzosa.

Probablemente este escenario de mayor precisión ocasione numerosas iteraciones de


orden distinto a las observadas antes, pues estas ultimas serán aceleraciones y frenadas
brevísimas, dado que el tiempo de proceso y de decisión es mayor que el tiempo manejado
por el vinculo DDE con Excel y su posterior proceso por la Aplicación VB.

Entonces en estos casos, es decir cuando se decide no frenar a los 3 mts y si hacerlo a
10 cm por ejemplo, de forma mas precisa, probablemente mientras el conjunto de
aplicaciones linkeadas por DDE tratan de evaluar el paso (correcto) siguiente a dar después
de conocer la cercanía de 10 cm, ocurrirá un error no previsto por tiempo de procesamiento
de la Aplicación, no un error del Modelo, entonces se obtenga el consecuente y la decisión
de frenar definitivamente, y efectivamente se realizara el frenado pero el simulador se habrá
pasado a 12,15 20 cm. del carrito, por tener esta reacción a destiempo, entonces ocurrirá la
iteración insalvable.

Por eso recomendamos parar el carrito a 3 mts. Ahora bien la oscilación previa a los
3mts. si es problemática y debe resolverse a continuación.

b. Seguimiento de un ciclo completo

Para efectuar el seguimiento en tiempo real, se lleva a cabo la ejecución de una serie de
aplicaciones que fueron relacionadas a fin de simular dinámicamente y gráficamente el
problema de la navegación autónoma del carrito de golf. Para ello el necesario un perfil de
hardware mínimo y software que describimos a continuación:

PC IBM compatible Pentium III de 500 MHz, con 256 MB de memoria. El sistema
operativo propuesto es Windows 98 (no se asegura compatibilidad en NT/2000/XP o
Vista). Es necesario tener instalado Microsoft Excel 97 ó 5 en castellano (no se asegura
compatibilidad en MS Excel de Office 2000/2003/XP), y el entorno de desarrollo A-B Flex,
suministrado de forma adjunta a este Trabajo Final en el CD, con el instalador de la
aplicación a simular, fuentes .vbp de Visual Basic para ejecutarlo mediante Visual Basic o
en todo caso la alternativa de ejecutarlo mediante el ejecutable .exe compilado, el archivo
Excel del modelo .xls y por ultimo el archivo de proyecto a modelar en A-B Flex , .abf.

Inicialmente, debemos destacar la importancia de configurar las opciones internacionales


de Windows para lograr una compatibilidad con los productos necesarios para llevar a cabo

Página 76 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

la simulación. El tipo de punto decimal debe ser  un punto(.) y el separador de miles ser 
coma(,). Una vez configurado es sistema, se podrá proceder a la simulación.

Fig 87

Se deberá ejecutar la aplicación A-B Flex y abrir el archivo golf.abf, que es el proyecto a
simular.

Fig 88

Para comenzar la comunicación DDE con Excel, se procederá a abrir el Libro golf.xls
con Excel y ejecutar en A-B Flex el ítem de menú correspondiente para establecer el
diálogo:

Página 77 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 89

Aquí vemos como las variables ya están cargadas y si la ubicación del archivo golf.xls
fuera otra que la indicada en pantalla, se deberá apuntar al nuevo destino.

Las variables listadas se corresponden a nombres de celdas asignadas en la hoja de


cálculo Fuzzy, siendo “Tópicos” para DDE. En este caso sé de nombraron de la misma
forma (aparecen listados entre comillas).

Hasta aquí vemos como A-B Flex necesita conectarse a Excel por medio de canales o
tópicos, siendo necesario un tópico por cada variable de entrada/salida.

Una vez establecida la comunicación, se puede comenzar el envío y recepción de datos


para comenzar a simular.

Luego de esto y ya con la pantalla de Simulación Abierta (Simulación Manager), se


deberá establecer el tiempo de iteración para el intercambio de datos con DDE, que se
estableció de 1 milisegundo, y el tiempo real equivalente a cada milisegundo, el cual se
estableció de 1000 milisegundos, equivalente a un segundo de simulación.

Fig 90

A continuación y como tercer paso, previa instalación de la Aplicación de simulación


Golf06.exe, se debe ejecutar la misma y comenzar a establecer los parámetros
indispensables para establecer el estado inicial del sistema.

Para ello es necesario, desde el menú ejecutar el ítem “Ubicar”, que visualizará una
pantalla inicial donde de apreciará una vista desde arriba del campo de Golf, del carrito
(línea blanca), tres árboles y la Pelota de Golf (cuadrado blanco).

La utilidad que presenta esta opción es la de establecer diferentes ubicaciones para cada
elemento componente del problema. Se deberá arrastrar con el Mouse cada uno de ellos
hacia la disposición geográfica deseada:

Página 78 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 91

Una vez diseminados los elementos en la pantalla, se podrá comenzar con la simulación.

El programa requerirá información a ser suministrada por el usuario, a fin de establecer


los valores de los parámetros de corte en la simulación que por defecto serán los siguientes:

Para la distancia a la Pelota, 3mts.

Fig 92

Para la velocidad, 0 mts./s

Fig 93

Página 79 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Una vez establecida esta característica elemental, la aplicación ofrecerá la posibilidad al


usuario de manejar manualmente el carrito hacia la pelota y parar cuando se alcancen los
valores indicados anteriormente.

Fig 94

En este caso la dirección del carrito se llevará a cabo mediante las flechas izquierda y
derecha. Se podrá ver la variación del ángulo de la dirección en la ventana Fuzzy, así como
una representación gráfica e intuitiva de las ruedas del carrito (disponible también para la
navegación autónoma).

De igual manera se podrá visualizar la aceleración y permitir su variación por medio de


las teclas arriba y abajo.

Al llegar al estado final, se informarán algunas conclusiones estadísticas y se podrá


comenzar con una nueva simulación manual o automática a fin de establecer
comparaciones de rendimiento y por qué no, tratar de alcanzar el objetivo del problema en
menos y mejor forma, compitiendo así con el experto virtual.

Para la navegación autónoma, utilizando el controlador difuso, lo único necesario es


presionar una tecla y observar cómo el carrito llega al objetivo, esquivando los obstáculos y
en tiempo óptimo. Se deberá prestar atención a la dinámica de las variables, para así
entender el funcionamiento de la simulación y de los posibles ajustes a llevar a cabo para
depurar el sistema.

En la ventana Simulación, se puede apreciar cómo a medida que transcurre el tiempo, el


carrito varía su ángulo (representado por la línea blanca) para dirigirse directamente hacia
la pelota o en caso de tener próximo un árbol, esquivarlo.

También se procuró dejar un rastro de la trayectoria llevada a cabo, para notar el


comportamiento del carrito ante cada situación particular. Como elemento adicional, a fin
de proveer de mayor significado a la simulación gráfica, se incorporó a la traza del trayecto
efectuado por el carrito una serie de colores que indican:

Blanco: Aceleración nula

Rojo: Desaceleración

Azul: Aceleración

Página 80 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

En el borde del campo de Golf, se pueden divisar un marcador que indica la posición
del carrito en cada momento, facilitando así la compensión del ángulo del auto:

Fig 95

En el gráfico anterior para un momento en particular, cuando el carrito se va acercando a


un árbol que se encuentra en su camino, comienza a virar en un ángulo de 1,07 para
esquivarlo y también disminuye su velocidad, primero con aceleración cero para que en el
instante visualizado desacelere a razón de –0,31 m/s2.

Los valores de las variables de salida y de entrada se pueden corroborar accediendo a


Excel, en la hoja Fuzzy.

Página 81 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 96

Dado que el intercambio de datos es intenso, es probable que la pantalla parpadee, pero
esto es un detalle adicional, que no debería causar inconvenientes, salvo los visuales. Para
este gráfico cabe aclarar que los valores representados corresponden a los visualizados en la
aplicación de Visual Basic, pero aquellos que no concuerdan es debido a una demora en la
comunicación con la simulación, que luego de algunos instantes se verán refrescados en la
pantalla. En el caso que el hardware utilizado sea de menores prestaciones que los
recomendados, es probable que la simulación termine abruptamente con un error de
expiración de tiempo de espera para la comunicación DDE entre aplicaciones, en tal caso se
recomienda correr la misma en otra plataforma más rápida.

Retomando el momento específico para el cual estamos analizando el comportamiento


del sistema, vemos que parando la simulación en A-B Flex se obtienen datos gráficos
relevantes, como ser valores puntuales de las variables linguísticas:

Página 82 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 97

Aquí vemos el valor de la variable Velocidad, que es igual a 4.63 m/s y su significación
representada sobre el rango de valores definido para esa variable.

También se puede observar la base de reglas definida para el problema y en especial,


cómo se ven activadas, cada una de ellas, con su diferente afectación pero conjuntamente,
por la situación actual o estado de observación:

Fig 98

Vemos en este caso como las reglas 1,2,3, que son ” -- REGLAS para el manejo de la
dirección “ y que corresponden al conjunto de reglas que fue denominada “-- REGLA 1M -
Mantener la dirección de marcha”, se ven activadas, pero con preponderancia de “1.00 if
Angulo_error is cero and Distancia_arbol_2 is not proxima and Angulo_arbol_2 is not cero
then Angulo_direccion is cero”, debido a que si bien el Angulo_error es casi cero (-1,43), la

Página 83 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

relación con el árbol 3 es de proximidad y se ve en la pobre activación de la regla 1;


también es baja la afectación de la regla 3 debido a que el ángulo de error al mismo es casi
cero (-2.15) aunque su distancia sea no próxima.

La regla de mayor activación se debe entonces a que el árbol 2 no es próximo y está


significativamente apartado del camino que pretende seguir el carrito.

Una sumatoria de la afectación de cada una de estas reglas, mas otras reglas afectadas,
nos indica como resultante el valor instantáneo de la dirección del carrito y su aceleración,
obtenidas por el controlador difuso.

Se continúa analizando las otras reglas activadas.

Las reglas 16 y 17, que son “ -- REGLAS para la Aceleración ” y correspondientes al


grupo “ -- REGLA 3A - Acelerar a fondo “ y “-- REGLA 4A - Hacer Aceleración cero “, se
activan porque:

“1.00 if Distancia_pelota is lejana and Velocidad is not rapida then Aceleracion is


a_fondo ” es medianamente cierta, dado que la velocidad es medianamente rápida.

“1.00 if Distancia_pelota is lejana and Velocidad is rapida then Aceleracion is cero “ es


bastante acertada por la misma condición de la regla 16.

Para finalizar vemos que la regla 35 y 38 están activadas levemente, debido a que es
necesario “-- REGLA 2T - Girar ligeramente hacia la derecha para esquivar el árbol “,
porque se cumple levemente la regla “1.00 if Distancia_arbol_3 is proxima and
Angulo_arbol_3 is cero and Angulo_arbol_3 is poco_negativo then Angulo_direccion is
poco_derecha ”, y porque también hay que “-- REGLA 2T - Frenar fuerte para esquivar el
árbol “ , debido a que “1.00 if Distancia_arbol_3 is proxima and Angulo_arbol_3 is cero
then Aceleracion is frenar_fuerte ”, es también medianamente cierto.

Se recuerda la importancia conceptual que tiene la necesidad de tomar en cuenta la


sumatoria de todas estas activaciones para obtener un valor central (centroide).

Vale la pena dejar en claro, la excelente prestación que tiene esta herramienta para poder
ver no un momento particular, sino la simulación en tiempo real, donde se aprecia a cada
instante cómo las reglas se van activando ante distintas circunstancias y observar
gráficamente los valores puntuales de las variables linguísticas:

Página 84 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 99

Los gráficos de superficie, permiten ver la superficie de decisión de dos variables de


entrada contra una de salida.

Vemos por ejemplo, cómo actúa la aceleración en función de la distancia a la pelota y la


velocidad.

Una aceleración baja y casi constante se da cuando la distancia a la pelota es cercana a


cero y para cualquier velocidad.

Cuando la distancia a la pelota se incrementa la aceleración tiende (oscilando) a


disminuír ante una velocidad alta. Vemos cómo la relación velocidad-aceleración es
fluctuante innecesariamente al aproximarse a la pelota. Analíticamente nos damos cuenta
de una oscilación indeseada, objeto de análisis posterior e identificada en los casos de
Prueba. Si esta deficiencia no es corregida, la simulación responderá consecuentemente,
acelerando y desacelerando en los últimos metros. Denotamos la importancia de un análisis
detallado de estas superficies de decisión que nos previenen de problemas futuros.

Este analisis una vez mas nos puede advertir sobre correctos o incorrectos valores de las
variables, reglas mal conformadas, innecesarias o faltantes, para optimizar el sistema, como
cuando la distancia a la pelota es lejana, vemos como a baja velocidad, la aceleración es
constantemente alta, pero tiende desacelerar a medida que la velocidad aumenta. Este sera
el centro del analisis del problema de la oscilacion detectado en el presente modelo.

Página 85 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 100

Si este análisis lo extendemos a otros gráficos, se pueden obtener valiosas conclusiones,


para cada combinación de variables linguísticas y valores puntuales de las otras variables
de entrada.

Fig 101

Página 86 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Como complemento destacamos la existencia de una herramienta que permite distinguir


los valores de las variables linguísticas que no fueron explotados en profunddidad,
pudiendo agregar nuevas funciones de membresía para cubrir estos huecos, o bien ampliar
el rango de inclusión de las existentes:

Fig 102

Las posibilidades que presenta A-B Flex abarcan hasta la graficación de cada una de las
variables linguísticas o también de los grados de membresía de cada variable, a través del
tiempo. Permite seleccionar cada variable e identificarla por su color y rango de
graficación. Este gráfico se actualiza automáticamente al trabajar en forma estática o en
tiempo real. También es posible exportar los datos a un archivo de texto para posterior
graficación.

Página 87 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 103

Finalizada la simulación podemos observar un pequeño resumen estadístico que nos da


una primera pauta de la eficiencia del sistema.

Indica la velocidad promedio y el tiempo (iteraciones) necesarias para llegar al objetivo.


Estos datos pueden ser de utilidad al compararlos con una navegación manual y ver que tan
cercanos o distantes están los resultados entre sí, para obtener conclusiones del tipo Experto
Hombre vs. Experto Máquina Difusa y ver posibilidades de entenamiento y
perfeccionamiento de ambos.

Fig 104

También es posible observar la trayectoria completa y los tramos de aceleración, frenado


y aceleración constante.

Finalizada la simulación, se dispone a exportar los datos recolectados en cada iteración


para llevar a cabo un análisis estadístico más exhaustivo con la ayuda de MS Excel. Para
esto es preponderante detener un instante la simulación de A-B Flex hasta terminado este
proceso de envío de datos de forma masiva a Excel.

Página 88 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 105

A continuación se aprecia el estado final de aproximación deseada a la pelota y los


resultados gráficos de la simulación. La barra de estado informa el porcentaje de
completitud del proceso de exportación de datos:

Fig 106

En el gráfico siguiente vemos cómo los datos pueden ser visualizados para realizar con
ellos cálculos, gráficos, sumatorias o promedios. Las posibilidades de manipulación de los
mismos se ven limitadas solamente por la imaginación del usuario.

Página 89 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 107

Una vez finalizado el proceso de exportación de datos, se informa el procedimiento a


seguir para la graficación de las variables Velocidad, Aceleracion y Distancia_pelota que
fueron seleccionadas arbitrariamente para su análisis en Excel, para demostrar la capacidad
que tienen estas herramientas cuando trabajan conjuntamente.

Fig 108

Para esto es necesario presionar en la hoja de cálculo Fuzzy el botón correspondiente.


Seguidamente, respecto al programa de simulación en Visual Basic, se puede proceder a
iniciar una nueva simulación o bien salir de la aplicación definitivamente.

Página 90 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 109

El gráfico para la aceleración es basado en los valores que toma la variable cada segundo
de simulación.

En los primeros segundos se nota claramente necesidad de que la aceleración inicial sea
fuerte para tomar velocidad considerable, dada las distancias a todos los objetos.

Promediando los 30 segundos de comenzada la misma, se observa ante la proximidad


del Arbol 3, como la aceleración disminuye primero hasta hacerse constante, para luego
frenar cuando se lo está esquivando y retomar velocidad, acelerando una vez sorteado el
obstáculo.

El segundo árbol no afecta demasiado a la variable, pero con el tercero se nota una
situación similar a la comentada para el primer árbol.

Terminando la simulación, vemos nuevamente el problema de la oscilación indeseada


ante la proximidad de la pelota ( frena, acelera, frena, acelera, etc.), que fue detectada
previamente en el análisis de los gráficos y de las reglas, como así también en los casos de
prueba. Es evidente la necesidad de corregir este problema, ya que fue identificado y lograr
que desacelere lenta y suavemente hasta disminuir la velocidad a cero, llegado a los 3
metros o menos (situación ideal). Esta corrección es comentada debidamente en otros
párrafos y pasaremos ahora si a corregirla y comentarla.

Página 91 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 110

La variable velocidad tiene una característica gráfica similar a la anterior, ya que es una
variable de entrada que se ve afectada directamente por la aceleración:

Fig 111

Página 92 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

La distancia a la pelota, se comporta a primera vista de forma correcta. Pero se debe


notar dos pequeñas oscilaciones al aproximarse a los árboles 3 y 1, ya que tuvo que alejarse
un poco de su curso y distanciarse un poco de la pelota al momento de esquivarlos.

En cuanto a la pendiente de la curva, significativamente menos pronunciada al final de la


simulación, se debe decir que este comportamiento es atribuído al hecho de acompañar a
las oscilaciones indeseadas de las otras variables que cambian de posición al carrito y lo
alejan o acercan repetidamente al objetivo. Por consiguiente llega a la pelota más
lentamente y la distancia a la pelota disminuye en menor magnitud.

Fig 112

Aquí vemos como se selecciona una línea de tendencia Polinomial de grado 6 y se


procede a su graficación y cálculo para la variable distancia a la pelota:

Página 93 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 113

Si bien es probable que en este caso no tenga aplicación práctica y real, el hecho de
obtener el coeficiente de correlación ó la curva de regresión de alguna de estas variables, es
provechoso dejar asentado la simplicidad de su obtención utilizando Excel y dar al usuario
una impresión de expansión casi ilimitada de las posibilidades y conclusiones que se
pueden obtenerse y predecir para problemas de distinta naturaleza.

Fig 114

De esta manera damos fin al proceso de simulación dinámica, brindando la posibilidad


de ejecutar estos programas y modificarlos o analizar diversas situaciones posibles. Para
ello se adjunta al trabajo, el CD necesario para la instalación de los programas utilizados,
salvo el caso de Microsoft Excel que es una aplicación registrada y de dominio comercial.

Página 94 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

A. Ajustar el sistema, el problema de la Oscilación Final

Este es un proceso que comienza con una comparación entre la respuesta del sistema y el
comportamiento esperado, esforzándose por corregir los desvíos.

En la mayoría de los desarrollos el tiempo que demanda la construcción de conjuntos y


reglas difusas, es pequeño comparado con el que se destina a la afinación del sistema.

Usualmente la primera versión de conjuntos y reglas se obtiene rápidamente, ésta es una


de las principales ventajas de los sistemas de lógica difusa, las bases de conocimiento que
tienden a proporcionar resultados rápidos y razonables se forman usando sentido común, en
este caso el examen de los resultados de las pruebas, satisfacen la mayor parte de las
expectativas iniciales, el carrito llega exitosamente hacia la pelota y evite los choques con
árboles y obstáculos, pero el estudio de las gráficas muestra que podemos estar frente a un
problema, cuando el carrito está próximo a la pelota, la velocidad oscila entre cero y algún
valor, para corregir este problema, examinamos las reglas de control de velocidad, en
particular las reglas que controlan la velocidad cuando el carrito está muy próximo a la
pelota.

Las reglas 9A hasta 13A cubren esta situación. La regla 13A causa un incremento de la
velocidad cuando la velocidad se aproxima a cero, se inicia entonces una oscilación. Para
prevenir esta situación se elimina la regla.

Cabe mencionar que el motivo por el cual esta regla es eliminada es por su inclusión
evitable por parte de un experto, que puede prescindir de ella o tal vez simplemente es
errónea. Esta situación puede presentarse aunque en la práctica la afinación de las reglas se
lleve a cabo con intentos de agregar sólo las reglas necesarias para un funcionamiento del
sistema que cumpla con las expectativas del caso.

Se ve a continuación la variación de la velocidad con la regla 13A eliminada, para el


caso de prueba 1. La eliminación de esta regla ha prevenido la oscilación de la velocidad. A
consecuencia de esto, la simulación nos muestra que el carrito se detiene a 7 mts de la
pelota contra los 3 mts anteriores.

Podemos decir entonces que esta no es una solución a nuestro problema. En la práctica,
los pasos a tener en cuenta dada esta situación serían volver atrás para hacer algunos
ajustes a los conjuntos difusos o a las reglas para corregir este nuevo problema:

Página 95 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 115

Se da por resultado una mejora a la oscilación, pero el hecho que se para a los siete
metros es una clara muestra de que la solución no es tal porque se pierde efectividad.

Antes de visualizar la solución óptima para esta oscilación, definimos la afinación o


Tunning de un sistema en lógica difusa como la ejecución de una o más de las siguientes
operaciones:

Reglas

Con respecto a las reglas, agregar las reglas necesarias para situaciones especiales o
agregar premisas o precondiciones para otras variables lingüísticas, o utilización de
adverbios mediante los operadores:

- Eliminación de reglas prescindibles o que provocan oscilaciones en el rendimiento.

- Modificación de Reglas, en particular las intervinientes identificadas en el problema.

- Agregado de reglas para una situación especial.

Página 96 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

- Agregado de premisas para otras variables lingüísticas.

- Uso de adverbios para los operadores o pesos de llenado en las reglas.

Vemos entonces como modificamos las reglas para que no exista oscilación:

NOTA: Cada Regla es comentada a fin de observar donde se realizaron cambios y


porque.

Fig 116

Desde el sentido común, vemos que el problema de la oscilación es debido a que se


frena antes de lo necesario ante la aproximación al objetivo, por lo cual la solución seria
ajustar las decisiones en esta instancia, tratando de no frenar tan bruscamente para luego

Página 97 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

acelerar cíclicamente y en lugar de esto suavizar la llegada. Vemos a continuación la


solución:

En la Regla 7A, en lugar de frenar levemente, se modifica la misma y en lugar de frenar


levemente se deja en marcha libre, esto es una desaceleración muy leve, la cual se ejercería
por la fuerza de rozamiento.

En la Regla 9A, se cambia el Frenado Fuerte cuando la pelota es muy próxima y a alta
velocidad, por frenar levemente, logrando una aproximación mas suave al objetivo.

En la Regla 10A, se cambia el Frenado Leve al aproximarse muy próximamente a la


pelota pero a velocidad mediana, por marcha libre, logrando una aproximación mas suave
al objetivo. También se corrige el peso de la regla de 1 a 0,75.

En la Regla 11A, se cambia la marcha libre cuando la velocidad es lenta y la distancia


muy próxima a la pelota, por una aceleración cero que es equivalente a una aceleración
constante que no incremente la velocidad, contrarrestando apenas a la fuerza de rozamiento.

En la Regla 13A, cuando se esta prácticamente sobre el objetivo, y no hay velocidad, se


debe frenar fuertemente para no avanzar mas Se supone que apenas una frenada bastaría,
por lo cual para evitar decisiones débiles, ya que el objetivo es detenerse del todo, se frena
fuertemente. Esta regla reemplaza a la regla que analizaba una proximidad muy próxima, y
aceleraba levemente a velocidad cero. Esto es porque las reglas de frenado total, eran
insuficientes. También se corrige el peso de 0,5 de la regla a 1.

En la Regla 14A, se frena fuerte cuando se llega al objetivo y hay algo de velocidad,
cualquier valor sea este, hay movimiento por lo cual se debe detener urgentemente la
marcha frenando fuertemente. Esta regla se logra precisar aun mas especificando que dicha
acción no se realiza ante cualquier velocidad sino cuando esta es muy lenta, porque no tiene
mucho asidero llegar a la pelota a una velocidad que no sea mínima, por esto esta regla se
refiere a estas velocidades mínimas, desestimando al resto.

En la Regla 15A, cuando se aproxima a la Pelota y la Velocidad es mediana, se cambia


la aceleración de marcha libre por la aceleración en Cero. Preservando la velocidad y no
disminuyéndola. Se trata de mantener constante la Velocidad hasta un estadio de mayor
proximidad donde otras decisiones ya se deban tomar y abandonar la Velocidad constante.

Las Reglas de Girar Ligeramente se mantienen, aunque se desestima la evaluación de


Angulo Árbol 2 y 3 cuando es cero y se evalúan solo si son poco positivos o negativos.

Página 98 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Conjuntos difusos

En materia de conjuntos difusos, agregando conjuntos a una determinada variable


lingüística, dilatar o estrechar los conjuntos existentes, desplazamiento lateral de los puntos
o mediante el ajuste de la forma de los subconjuntos, en general cuando se requiere un
valor fino sobre una variable, conviene agregar conjuntos difusos estrechos centrados
alrededor de un conjunto de interés, los conjuntos difusos anchos proporcionan un control
grueso.

- Agregado de conjuntos en una variable lingüística particular.

- Aproximación o distanciamiento de conjuntos difusos existentes con respecto a


sus rangos.

- Ajustes laterales de los conjuntos existentes, estiramiento o encogimiento.

En esta afinación no se requirió la modificación de los conjuntos difusos.

Mostramos a continuación pantallas que evidencian la mejora, para lo cual se modificó


la Aplicación VB y se agregaron las siguientes funciones:

- Se elimina la opción de manejo manual, ya que nos interesa resolver la oscilación.

- Pausa para analizar las variables y ejecución de Reglas, por medio de un Doble
Clic

- Posibilidad de mover los objetos del escenario para evaluar múltiples situaciones
cambiantes y movibles en una misma simulación. Por medio de Drag and Drop.

Así podemos ver cuales reglas se ejecutan en cada situación relevante:

Situación 1: Esquivar el primer Árbol:

Página 99 de 141
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 117

Situación 2: Esquivar el último Árbol:

Fig 118

Página 100 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Situacion3: Proximidad al objetivo:

Fig 119

Situación 4: Se llego a la pelota con una precisión de medio metro:

Página 101 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 120

Ahora vemos si hubo o no oscilación analizando los gráficos de Excel:

Página 102 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 121

Fig 122

Fig 123

Por ultimo vemos el Grafico 3D de superficie de decisión para las tres variables
involucradas y como esto vario respecto del modelo anterior.

Página 103 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 124

Podemos afirmar viendo este grafico que no hay oscilación, que la velocidad disminuye
sin valores abruptos y que la velocidad también disminuye una vez sorteados los obstáculos
de forma suave y sin cambios bruscos.

La Aceleración nuevamente decimos no sufre oscilación alguna, cuando se aproxima al


objetivo, nunca acelera, nunca supera el eje x=0, siempre desacelera mas o menos, frenando
mas o menos, hasta que esta tan cerca del objetivo que frena abruptamente hasta detener la
marcha, tal cual lo haría un Chofer que lentamente va presionando mas o menos el pedal
del freno del carrito hasta frenar fuertemente al llegar a destino.

Consideramos resuelto el problema de oscilación.

Por ultimo veamos las nuevas posibilidades de análisis de escenarios a partir de las
modificaciones realizadas a la aplicación VB para pausar y relocalizar los elementos del
escenario:

Situación 1: Variación de la ubicación de la pelota:

Página 104 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 125

Este grafico muestra que hubo 3 pausas con 3 movimientos del objetivo pelota.

Página 105 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 126

Velocidad fluctuando ante los 3 movimientos de la ubicación de la pelota.

Fig 127

Aceleración acorde a los 3 movimientos de la pelota.

Situación 2: Variación de la posición de los árboles:

Página 106 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Fig 128

Cambiamos aquí la ubicación de los 3 árboles y de la pelota también. Así podemos


establecer numerosas situaciones de prueba.

Finalizando, debemos afirmar que se demostró fehacientemente la simpleza y enorme


utilidad de la lógica difusa en una aplicación real de Control.

B. Conclusiones y trabajo futuro

Este trabajo presenta una aportación importante para el desarrollo de sistemas de control
difuso, proveyendo el motor de inferencia difuso, el cual puede ser utilizado en una
aplicación real, con la ventaja de que su memoria de control puede ser definida por el
usuario. Aunque existen microprocesadores difusos como el FC110 de Togai Infralogic,
estos por lo general son caros y difíciles de conseguir; por lo tanto utilizando este diseño y
una computadora personal, es posible lograr la implementación de un sistema de control,
utilizando los beneficios que proporciona la lógica difusa.

Se pueden mencionar las siguientes propuestas de mejora:

- Mezclar funciones de membresía triangular con trapezoidal, o utilizar otra de las


formas conocidas.

Página 107 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

- Realizar la definición de funciones de membresía utilizando técnicas de inteligencia


artificial, tal como algoritmos genéticos.

- Permitir al usuario elegir entre diferentes métodos de defuzzificación.

- Utilizar redes neuronales artificiales y algoritmos genéticos para la definición de la


base de reglas lingüísticas y para su evaluación.

El paso inmediato en cuanto a la mejora de la simulación es utilizar una interfase de


adquisición de datos, para proporcionar las lecturas de los sensores, utilizando los puertos
de entrada de la misma y utilizar los puertos de salida de la interfase para las acciones del
controlador.

Página 108 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Bibliografía
 Redes Neuronales y Sistemas Borrosos. Introducción teórica y práctica. B.
Martín del Brío - A. Sanz Molina. RA-MA. Textos Universitarios, 1997.

 Applied Fuzzy Systems. Toshiro Terano, Kiyoji Asai, Michio Sugeno. Ap.
Proffesional. 1994.

 Fuzzy Logic & Neurofuzzy Applications Explained. Constantin Von Altrock.

 Pensamiento borroso: La nueva ciencia de la lógica borrosa, Barcelona,


Grijalbo/Mondadori.

 G. Fernández y F. Sáez-Vacas. Fundamentos de Informática, Alianza-


Informática, Madrid, 1987.

 Arquitectura para sistemas expertos con razonamiento aproximado, Tesis


Doctoral, J. C. González. Dpto. Ing. Sistemas Telemáticos, E.T.S.I.
Telecomunicación, Universidad Politécnica, Madrid, 1989.

 An Interface Between Logic and Human Reasoning. Kosko, B. 1995.

 Ingeniería de Control Moderna, Ogata, Katsuhiko, Prentice Hall


Hispanoamericana, México, D.F., 1980.

 Fuzzy Logic: Concepts to constructs , Viot Greg, AI Expert, Noviembre 1993.

 La Física en preguntas y respuestas. J. Goldstein, E. Insogna. Buenos Aires


1953.

 Diseño de un controlador difuso para temperatura, Tesis profesional, Andrade


G. Enrique, Ingenieria en Electrónica y Computadoras, Universidad de las
Américas, Puebla, México, 1996.

 La esencia del caos, Lorenz, E. N. Madrid, Debate. 1995.

 Fuzzy Expert Systems, E. Horstkotte. 1996.

 Desarrollo del software para controlar la temperatura y humedad relativa en


invernaderos usando logica difusa. J.Isabel Galvez Esteban, Universidad
Autonoma de Tlaxcala, Mexico, 1997.

 Abstracts y Articulos varios en IEEE Expert, Intelligent Systems & Their


Applications. A Fuzzy Logic Symposium.

Página 109 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Anexos
Proyecto A-B Flex
Nombre: Fuzzy.abf
[InferenceOptions]
FuzzyAlgorithm=And=0,Or=0,Defuzz=0
KeywordSet=0

[SystemParameters]
NumberOfInputs=9
NumberOfOutputs=2
NumberOfRules=38
TimeOfLastChange=1157004394

[Input#0]
Name=Velocidad
Range=0,5
DefaultValue=0
Description=Velocidad del carrito
NumberOfMFs=5
MF#0=cero:0,0,0,0.854839
MF#1=muy_lenta:0,0.804839,0.804839,1.87094
MF#2=lenta:0.854839,1.94758,1.94758,3.14919
MF#3=mediana:1.87097,3.17742,3.17742,4.57258
MF#4=rapida:3.14113,5,5,5

[Input#1]
Name=Angulo_arbol_3
Range=-180,180
DefaultValue=0
Description=Angulo al arbol 3
NumberOfMFs=5
MF#0=muy_negativo:-180,-180,-90,-30
MF#1=poco_negativo:-60,-30,-30,0
MF#2=cero:-30,0,0,30
MF#3=poco_positivo:0,30,30,60
MF#4=muy_positivo:30,90,180,180

[Input#2]
Name=Angulo_arbol_2
Range=-180,180
DefaultValue=0
Description=Angulo al arbol
NumberOfMFs=5
MF#0=muy_negativo:-180,-180,-90,-30
MF#1=poco_negativo:-60,-30,-30,0
MF#2=cero:-30,0,0,30
MF#3=poco_positivo:0,30,30,60
MF#4=muy_positivo:30,90,180,180

[Input#3]
Name=Angulo_arbol_1
Range=-180,180
DefaultValue=0
Description=Angulo al arbol 1
NumberOfMFs=5
MF#0=muy_negativo:-180,-180,-90,-30
MF#1=poco_negativo:-60,-30,-30,0
MF#2=cero:-30,0,0,30
MF#3=poco_positivo:0,30,30,60
MF#4=muy_positivo:30,90,180,180

[Input#4]
Name=Distancia_arbol_2
Range=0,1000
DefaultValue=0
Description=Distancia al arbol 2

Página 110 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
NumberOfMFs=1
MF#0=proxima:0,0,0,70

[Input#5]
Name=Distancia_arbol_1
Range=0,1000
DefaultValue=0
Description=Distancia al arbol 1
NumberOfMFs=1
MF#0=proxima:0,0,0,70

[Input#6]
Name=Distancia_arbol_3
Range=0,1000
DefaultValue=0
Description=Distancia al arbol 3
NumberOfMFs=1
MF#0=proxima:0,0,0,70

[Input#7]
Name=Distancia_pelota
Range=0,600
DefaultValue=0
Description=Distancia a la pelota
NumberOfMFs=5
MF#0=cero:0,0,3,9
MF#1=muy_proxima:0.483871,12.9677,13.4516,27.6774
MF#2=proxima:11.0323,46.8733,46.8733,90.6614
MF#3=mediana:36.712,115.629,115.629,208.05
MF#4=lejana:127.55,217.55,560.265,560.265

[Input#8]
Name=Angulo_error
Range=-180,180
DefaultValue=0
Description=Angulo de error
NumberOfMFs=5
MF#0=muy_negativo:-180,-180,-90,-30
MF#1=poco_negativo:-60,-30,-30,0
MF#2=cero:-30,0,0,30
MF#3=poco_positivo:0,30,30,60
MF#4=muy_positivo:30,90,180,180

[Output#0]
Name=Aceleracion
Range=-2,1
DefaultValue=0
Description=Aceleracion del carrito
NumberOfMFs=6
MF#0=frenar_fuerte:-2,-2,-1.5,-1
MF#1=frenar_levemente:-1.5,-1,-1,-0.5
MF#2=marcha_libre:-1,-0.5,-0.5,0
MF#3=cero:-0.5,0,0,0.5
MF#4=leve:0,0.5,0.5,1
MF#5=a_fondo:0.5,1,1,1

[Output#1]
Name=Angulo_direccion
Range=-45,45
DefaultValue=0
Description=Angulo de direccion
NumberOfMFs=5
MF#0=mucho_derecha:-44.881,-44.881,-37.9762,-27.1429
MF#1=poco_derecha:-35.9524,-17.8334,-17.5953,-0.928605
MF#2=cero:-16.6913,0.119048,0.119048,16.9294
MF#3=poco_izquierda:1.16379,17.8777,17.8777,35.6835
MF#4=mucho_izquierda:26.7857,35,45,45

[Text]
NumberOfItems=69
I#0=C1:-- REGLAS para el manejo de la dirección
I#1=C1:-- REGLA 1M - Mantener la dirección de marcha

Página 111 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
I#2=C1:-- La Distancia_arbol is not proxima indica el complemento del unico valor para esta variable. Se
entiende por esto que Distancia_arbol es Lejana
I#3=C1:-- El Angulo_arbol is not cero indica que el carrito no tiene en su camino ningun arbol, si lo tuviese
enfrente el angulo seria cero y no podria mentener la marcha
I#4=R1:1.00 Angulo_error = cero & Distancia_arbol_1 <> proxima & Angulo_arbol_1 <> cero -->
Angulo_direccion = cero
I#5=R1:1.00 Angulo_error = cero & Distancia_arbol_2 <> proxima & Angulo_arbol_2 <> cero -->
Angulo_direccion = cero
I#6=R1:1.00 Angulo_error = cero & Distancia_arbol_3 <> proxima & Angulo_arbol_3 <> cero -->
Angulo_direccion = cero
I#7=C1:-- REGLA 2M - Modificar la dirección de marcha ligeramente hacia la derecha
I#8=R1:1.00 Angulo_error = poco_positivo & Distancia_arbol_1 <> proxima & Angulo_arbol_1 <> cero -->
Angulo_direccion = poco_derecha
I#9=R1:1.00 Angulo_error = poco_positivo & Distancia_arbol_2 <> proxima & Angulo_arbol_2 <> cero -->
Angulo_direccion = poco_derecha
I#10=R1:1.00 Angulo_error = poco_positivo & Distancia_arbol_3 <> proxima & Angulo_arbol_3 <> cero
--> Angulo_direccion = poco_derecha
I#11=C1:-- REGLA 3M - Modificar la dirección de marcha ligeramente hacia la izquierda
I#12=R1:1.00 Angulo_error = poco_negativo & Distancia_arbol_1 <> proxima & Angulo_arbol_1 <> cero
--> Angulo_direccion = poco_izquierda
I#13=R1:1.00 Angulo_error = poco_negativo & Distancia_arbol_2 <> proxima & Angulo_arbol_2 <> cero
--> Angulo_direccion = poco_izquierda
I#14=R1:1.00 Angulo_error = poco_negativo & Distancia_arbol_3 <> proxima & Angulo_arbol_3 <> cero
--> Angulo_direccion = poco_izquierda
I#15=C1:-- REGLA 4M - Modificar la dirección de marcha ligeramente hacia la derecha, no hace falta doblar
mucho porque si la velocidad es rapida es porque esta lejos de la pelota.
I#16=R1:1.00 Angulo_error = muy_positivo & Velocidad = rapida --> Angulo_direccion = poco_derecha
I#17=C1:-- REGLA 5M - Modificar la dirección de marcha mucho hacia la derecha, hace falta doblar mucho
porque si la velocidad no es rapida es porque esta cerca de la pelota.
I#18=R1:1.00 Angulo_error = muy_positivo & Velocidad <> rapida --> Angulo_direccion = mucho_derecha
I#19=C1:-- REGLA 6M - Modificar la dirección de marcha ligeramente hacia la izquierda
I#20=R1:1.00 Angulo_error = muy_negativo & Velocidad = rapida --> Angulo_direccion = poco_izquierda
I#21=C1:-- REGLA 7M - Modificar la dirección de marcha mucho hacia la izquierda
I#22=R1:1.00 Angulo_error = muy_negativo & Velocidad <> rapida --> Angulo_direccion =
mucho_izquierda
I#23=C1:-- REGLAS para la Aceleración
I#24=C1:-- REGLA 1A - Frenar levemente porque se aleja
I#25=R1:1.00 Angulo_error = muy_positivo & Velocidad = rapida --> Aceleracion = frenar_levemente
I#26=C1:-- REGLA 2A - Frenar levemente porque se aleja
I#27=R1:1.00 Angulo_error = muy_negativo & Velocidad = rapida --> Aceleracion = frenar_levemente
I#28=C1:-- REGLA 3A - Acelerar a fondo porque la pelota esta lejos y puede alcanzar mas velocidad
I#29=R1:1.00 Distancia_pelota = lejana & Velocidad <> rapida --> Aceleracion = a_fondo
I#30=C1:-- REGLA 4A - Hacer Aceleración cero, no acelera mas porque va a velocidad maxima
I#31=R1:1.00 Distancia_pelota = lejana & Velocidad = rapida --> Aceleracion = cero
I#32=C1:-- REGLA 5A - Aceleración leve, aun faltando llegar a la pelota, se acelera levemente porque hay
velocidad que incrementar
I#33=R1:1.00 Distancia_pelota = mediana & Velocidad <> rapida --> Aceleracion = leve
I#34=C1:-- REGLA 6A - Hacer Aceleración cero, no acelera mas porque va a velocidad maxima
I#35=R1:1.00 Distancia_pelota = mediana & Velocidad = rapida --> Aceleracion = cero
I#36=C1:-- REGLA 7A - Frenar levemente, como se aproxima al objetivo, desacelera muy poco dejando en
marcha_libre, suponiendo que se frena por rozamiento.
I#37=R1:1.00 Distancia_pelota = proxima & Velocidad = rapida --> Aceleracion = marcha_libre
I#38=C1:-- REGLA 8A - Aceleración leve, cerca de la pelota, y al quedarse sin velocidad, acelera levemente
I#39=R1:1.00 Distancia_pelota = proxima & Velocidad = cero --> Aceleracion = leve
I#40=C1:-- REGLA 9A - Frenar fuerte, casi en el objetivo y con velocidad rapida, va frenando
I#41=R1:1.00 Distancia_pelota = muy_proxima & Velocidad = rapida --> Aceleracion = frenar_levemente
I#42=C1:-- REGLA 10A - Frenar levemente, casi en el objetivo y con velocidad mediana, frena de a poco
I#43=R1:0.75 Distancia_pelota = muy_proxima & Velocidad = mediana --> Aceleracion = marcha_libre
I#44=C1:-- REGLA 11A - Marcha libre, casi en el objetivo y con velocidad lenta, minima aceleracion para
detenerse por rozamiento.
I#45=R1:1.00 Distancia_pelota = muy_proxima & Velocidad = lenta --> Aceleracion = cero
I#46=C1:-- REGLA 12A - Aceleración cero, casi en el objetivo, y casi sin velocidad, mantiene la misma al no
acelerar.
I#47=R1:1.00 Distancia_pelota = muy_proxima & Velocidad = muy_lenta --> Aceleracion = cero
I#48=C1:-- REGLA 13A - Aceleración leve, cuando llego al objetivo sin velocidad, freno apenas para
detenerme.
I#49=R1:1.00 Distancia_pelota = cero & Velocidad = cero --> Aceleracion = frenar_fuerte
I#50=C1:-- REGLA 14A - Frenar fuerte, cuando llego asl objetivo con minima velocidad, freno para
detenerme.
I#51=R1:1.00 Distancia_pelota = cero & Velocidad = muy_lenta --> Aceleracion = frenar_fuerte
I#52=C1:-- REGLA 15A - Marcha libre, si falta poco para llegar al objetivo y tengo algo de velocidad,
acelero poco.

Página 112 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
I#53=R1:1.00 Distancia_pelota = proxima & Velocidad = mediana --> Aceleracion = cero
I#54=C1:-- REGLA 16A - Aceleración cero, si estoy proximo a llegar y la velocidad es lenta, no innovo y
mantengo velocidad crucero.
I#55=R1:1.00 Distancia_pelota = proxima & Velocidad = lenta --> Aceleracion = cero
I#56=C1:-- REGLAS para esquivar el árbol
I#57=C1:-- REGLA 1T - Girar ligeramente hacia la izquierda para esquivar el árbol, al comenzar a
aproximarse al arbol
I#58=R1:1.00 Distancia_arbol_1 = proxima & Angulo_arbol_1 = poco_positivo --> Angulo_direccion =
poco_izquierda
I#59=R1:1.00 Distancia_arbol_2 = proxima & Angulo_arbol_2 = poco_positivo --> Angulo_direccion =
poco_izquierda
I#60=R1:1.00 Distancia_arbol_3 = proxima & Angulo_arbol_3 = poco_positivo --> Angulo_direccion =
poco_izquierda
I#61=C1:-- REGLA 2T - Girar ligeramente hacia la derecha para esquivar el árbol, al comenzar a aproximarse
al arbol
I#62=R1:1.00 Distancia_arbol_1 = proxima & Angulo_arbol_1 = poco_negativo --> Angulo_direccion =
poco_derecha
I#63=R1:1.00 Distancia_arbol_2 = proxima & Angulo_arbol_2 = poco_negativo --> Angulo_direccion =
poco_derecha
I#64=R1:1.00 Distancia_arbol_3 = proxima & Angulo_arbol_3 = poco_negativo --> Angulo_direccion =
poco_derecha
I#65=C1:-- REGLA 2T - Frenar fuerte para esquivar el árbol, que esta cerca y en el camino del carrito.
I#66=R1:1.00 Distancia_arbol_1 = proxima & Angulo_arbol_1 = cero --> Aceleracion = frenar_fuerte
I#67=R1:1.00 Distancia_arbol_2 = proxima & Angulo_arbol_2 = cero --> Aceleracion = frenar_fuerte
I#68=R1:1.00 Distancia_arbol_3 = proxima & Angulo_arbol_3 = cero --> Aceleracion = frenar_fuerte

Página 113 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Archivo de Inicialización para proyecto A-B Flex


Nombre: Fuzzy.ini
[ProjectWindow]
Window=X=149,Y=33,W=415,H=302,Iconic=0,Zoomed=0
ProjectWindowState=SelInput=8,SelOutput=0
[LastMatlabGen]
TargetFile=c:\guille\fuzzyl~1\tesis\fuzzy.m
Template=
LastChangeTime=117901063
HasRangeMap=0
[RuleWindow]
Window=X=125,Y=102,W=680,H=484,Iconic=0,Zoomed=0
RuleWindowState=ShowGraph=1,TextRatio=0.7
[InputWindow:Velocidad]
Window=X=148,Y=330,W=199,H=179,Iconic=0,Zoomed=0
PortState=MF=1,ViewRange=0,5
[InputWindow:Angulo_arbol_1]
Window=X=92,Y=100,W=199,H=179,Iconic=0,Zoomed=0
PortState=MF=0,ViewRange=-180,180
[InputWindow:Distancia_arbol_1]
Window=X=23,Y=25,W=199,H=179,Iconic=0,Zoomed=0
PortState=MF=0,ViewRange=0,1000
[InputWindow:Distancia_pelota]
Window=X=0,Y=0,W=199,H=179,Iconic=0,Zoomed=0
PortState=MF=3,ViewRange=0,600
[OutputWindow:Aceleracion]
Window=X=537,Y=233,W=199,H=179,Iconic=0,Zoomed=0
PortState=MF=0,ViewRange=-2,1
[OutputWindow:Angulo_direccion]
Window=X=598,Y=73,W=199,H=179,Iconic=0,Zoomed=0
PortState=MF=0,ViewRange=-45,45

Página 114 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Código Fuente de Visual Basic para los Formularios del


Proyecto
Nombre: MDIFuzzy.frm
VERSION 5.00
Object = "{0BA686C6-F7D3-101A-993E-0000C0EF6F5E}#1.0#0"; "THREED32.OCX"
Begin VB.MDIForm MDIFuzzy
BackColor = &H8000000C&
Caption = "Carrito de Golf"
ClientHeight = 6555
ClientLeft = 1215
ClientTop = 2205
ClientWidth = 10530
LinkTopic = "MDIFuzzy"
Begin VB.Timer Timer1
Left = 0
Top = 330
End
Begin Threed.SSPanel Barra_est
Align = 1 'Align Top
Height = 315
Left = 0
TabIndex = 0
Top = 0
Width = 10530
_Version = 65536
_ExtentX = 18574
_ExtentY = 556
_StockProps = 15
Caption = "Exportando datos al Excel"
BackColor = 9476264
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BorderWidth = 1
BevelInner = 1
FloodType = 1
End
Begin VB.Menu Ubicar
Caption = "Ubicar"
End
Begin VB.Menu Comenzar
Caption = "Comenzar"
End
Begin VB.Menu Salir
Caption = "Salir"
End
Begin VB.Menu Reiniciar
Caption = "Reiniciar"
End
End
Attribute VB_Name = "MDIFuzzy"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Private Sub Comenzar_Click()


'ACEPTA SEGUIR SI FUERON UBICADOS LOS OBJETOS
If Ubica = False Then Exit Sub
On Error Resume Next
'ACEPTA ENTRADA DE DISTANCIA MINIMA Y VELOCIDAD MINIMA PARA PARAR LA
SIMULACION

Página 115 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
'Dist_ini = InputBox("Ingrese distancia minima a la pelota para parar la simulacion:", "Distancia Pelota",
Str(5))
Dist_ini = 5

'Vel_ini = InputBox("Ingrese velocidad minima para parar la simulacion:", "Velocidad", Str(0))


Vel_ini = 0
On Error GoTo 0
'SETEA POSICION Y TAMAÑO FORMULARIO FUZZY
Fuzzy2.Top = 100
Fuzzy2.Left = 6600
'REDEFINE X E Y SEGUN EL TAMAÑO DEL CUERPO DEL CARRITO
X = Fuzzy1.Carrito.Left + Fuzzy1.Carrito.Width / 2
Xinicial = X
Y = Fuzzy1.Carrito.Top + Fuzzy1.Carrito.Height / 2
Yinicial = Y
'GUARDA EN LAS VARIABLES LAS POSICIONES DE LOS OBJETOS
X11 = Fuzzy1.Arbol_1.Left + Fuzzy1.Arbol_1.Width / 2
Y11 = Fuzzy1.Arbol_1.Top + Fuzzy1.Arbol_1.Height / 2
X12 = Fuzzy1.Arbol_2.Left + Fuzzy1.Arbol_2.Width / 2
Y12 = Fuzzy1.Arbol_2.Top + Fuzzy1.Arbol_2.Height / 2
X13 = Fuzzy1.Arbol_3.Left + Fuzzy1.Arbol_3.Width / 2
Y13 = Fuzzy1.Arbol_3.Top + Fuzzy1.Arbol_3.Height / 2
X2 = Fuzzy1.Pelota.Left + Fuzzy1.Pelota.Width / 2
Y2 = Fuzzy1.Pelota.Top + Fuzzy1.Pelota.Height / 2
'ACEPTA ENTRADA PARA MANEJO MANUAL O POR EL CONTROLADOR DIFUSO
' RESPUESTA = MsgBox("¿Desea manejar el carrito de forma manual?", vbYesNo + vbCritical +
vbDefaultButton2, "Seleccionar opcion de comienzo: ")
RESPUESTA = 1
If RESPUESTA = 6 Then
'SI ES MANUAL DETECTA EVENTOS DEL TECLADO PARA LA NAVEGACION CADA SEGUNDO
Manual = True
Timer1.Interval = 1000
Fuzzy1.KeyPreview = True
Fuzzy2.KeyPreview = True
Else
'SI ES POR MEDIO DEL CONTROLADOR DIFUSO NO DETECTA EVENTOS DEL TECLADO
Manual = False
Timer1.Interval = 0
Fuzzy1.KeyPreview = False
Fuzzy2.KeyPreview = False
'ESTABLECE LA COMUNICACION DDE CON EXCEL
Fuzzy2.Text_Velocidad.LinkMode = 2
Fuzzy2.Text_Angulo_arbol_1.LinkMode = 2
Fuzzy2.Text_Distancia_arbol_1.LinkMode = 2
Fuzzy2.Text_Angulo_arbol_2.LinkMode = 2
Fuzzy2.Text_Distancia_arbol_2.LinkMode = 2
Fuzzy2.Text_Angulo_arbol_3.LinkMode = 2
Fuzzy2.Text_Distancia_arbol_3.LinkMode = 2
Fuzzy2.Text_Angulo_error.LinkMode = 2
Fuzzy2.Text_Distancia_pelota.LinkMode = 2
Fuzzy2.Label_Angulo_direccion.LinkMode = 2
Fuzzy2.Label_Aceleracion.LinkMode = 2
'COMIENZA EL CICLO DE SIMULACION
Call iteracion
End If
End Sub

Private Sub MDIForm_Load()


Ubica = False
'OCULTA BARRA DE ESTADO PARA ESTADISTICAS
MDIFuzzy.Barra_est.Visible = False
Call Ubicar_Click
Call Comenzar_Click
End Sub

Private Sub Reiniciar_Click()


Call MDIForm_Load
X = Xinicial
Y = Yinicial
End Sub

Página 116 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Private Sub Salir_Click()
'TERMINA LA APLICACION
End
End Sub

Private Sub Timer1_Timer()


'POR CADA SEGUNDO LLAMA AL ALGORITMO DE SIMULACION, AUNQUE NO
'SE HAYA PRESIONADO UNA TECLA PARA CAMBIOS EN LA NAVEGACION
Call iteracion
End Sub

Private Sub Ubicar_Click()


Ubica = True
'MAXIMIZA FORMULARIO PRINCIPAL
'Me.WindowState = 2
'SETEA POSICION Y TAMAÑO DEL FORMULARIO SIMULACION
Fuzzy1.Left = 0
Fuzzy1.Top = 0
Fuzzy1.Show
Fuzzy1.ScaleMode = 0
'TAMAÑO DEL CAMPO DE GOLF
Fuzzy1.ScaleHeight = 600
Fuzzy1.ScaleWidth = 600
Fuzzy1.Refresh
End Sub

Página 117 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Nombre: Fuzzy1.frm
VERSION 5.00
Object = "{7A080CC8-26E2-101B-AEBD-04021C009402}#1.0#0"; "GAUGE32.OCX"
Begin VB.Form Fuzzy1
Appearance = 0 'Flat
AutoRedraw = -1 'True
BackColor = &H00000000&
BorderStyle = 3 'Fixed Dialog
Caption = "Simulacion (Doble Click Pausa para Reubicar)"
ClientHeight = 5565
ClientLeft = 1680
ClientTop = 2460
ClientWidth = 5880
ForeColor = &H00000000&
LinkTopic = "Fuzzy1"
LockControls = -1 'True
MaxButton = 0 'False
MDIChild = -1 'True
PaletteMode = 1 'UseZOrder
ScaleHeight = 200
ScaleMode = 0 'User
ScaleWidth = 200
ShowInTaskbar = 0 'False
Begin VB.PictureBox Arbol_1
BackColor = &H0000FF00&
DragIcon = "Fuzzy1.frx":0000
DragMode = 1 'Automatic
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
ForeColor = &H00008000&
Height = 135
Left = 1950
ScaleHeight = 0.132
ScaleMode = 0 'User
ScaleWidth = 0.132
TabIndex = 5
Top = 2850
Width = 135
End
Begin VB.PictureBox Arbol_3
BackColor = &H00FF0000&
DragIcon = "Fuzzy1.frx":0442
DragMode = 1 'Automatic
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
ForeColor = &H00FFFFFF&
Height = 135
Left = 3090
ScaleHeight = 0.132
ScaleMode = 0 'User
ScaleWidth = 0.132
TabIndex = 4
Top = 1680
Width = 135
End
Begin VB.PictureBox Arbol_2
BackColor = &H0000FFFF&
DragIcon = "Fuzzy1.frx":0884
DragMode = 1 'Automatic
FillColor = &H000000FF&
FillStyle = 0 'Solid
ForeColor = &H000000FF&
Height = 135
Left = 2190
ScaleHeight = 0.132
ScaleMode = 0 'User
ScaleWidth = 0.132
TabIndex = 3
Top = 1950
Width = 135
End

Página 118 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Begin VB.PictureBox Pelota
BackColor = &H00FFFFFF&
DragIcon = "Fuzzy1.frx":0CC6
DragMode = 1 'Automatic
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
ForeColor = &H00FFFFFF&
Height = 135
Left = 660
ScaleHeight = 0.132
ScaleMode = 0 'User
ScaleWidth = 0.132
TabIndex = 2
Top = 4140
Width = 135
End
Begin GaugeLib.Gauge Carrito
DragIcon = "Fuzzy1.frx":1108
DragMode = 1 'Automatic
Height = 330
Left = 4140
TabIndex = 8
Top = 210
Width = 360
_Version = 65536
_ExtentX = 635
_ExtentY = 582
_StockProps = 73
ForeColor = 65280
InnerTop = 0
InnerRight = 0
InnerBottom = 0
Max = 360
Style = 3
NeedleWidth = 2
End
Begin VB.Label Label1
BackStyle = 0 'Transparent
Caption = "Angulo_auto="
ForeColor = &H00FFFFFF&
Height = 255
Left = 4230
TabIndex = 10
Top = 5280
Width = 1065
End
Begin VB.Label Label_angulo_auto
BackStyle = 0 'Transparent
ForeColor = &H00FFFFFF&
Height = 255
Left = 5370
TabIndex = 9
Top = 5280
Width = 495
End
Begin VB.Label Label4
BackStyle = 0 'Transparent
Caption = "Y="
ForeColor = &H00FFFFFF&
Height = 255
Left = 5010
TabIndex = 7
Top = 300
Width = 225
End
Begin VB.Label Label3
BackStyle = 0 'Transparent
Caption = "X="
ForeColor = &H00FFFFFF&
Height = 255
Left = 5010
TabIndex = 6

Página 119 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Top = 30
Width = 225
End
Begin VB.Label Label_y
BackStyle = 0 'Transparent
ForeColor = &H00FFFFFF&
Height = 255
Left = 5310
TabIndex = 1
Top = 300
Width = 495
End
Begin VB.Label Label_x
BackStyle = 0 'Transparent
ForeColor = &H00FFFFFF&
Height = 255
Left = 5310
TabIndex = 0
Top = 30
Width = 495
End
End
Attribute VB_Name = "Fuzzy1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Private Sub Form_DblClick()


If Ubica = True Then
Ubica = False
Else
Ubica = True
End If

Do While Ubica = False


DoEvents
Loop
End Sub

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)


'CAMBIA POSICION DEL OBJETO ARRASTRADO SOBRE EL FORMULARIO
Source.Left = X + Source.Width / 2
Source.Top = Y + Source.Height / 2
X11 = Fuzzy1.Arbol_1.Left + Fuzzy1.Arbol_1.Width / 2
Y11 = Fuzzy1.Arbol_1.Top + Fuzzy1.Arbol_1.Height / 2
X12 = Fuzzy1.Arbol_2.Left + Fuzzy1.Arbol_2.Width / 2
Y12 = Fuzzy1.Arbol_2.Top + Fuzzy1.Arbol_2.Height / 2
X13 = Fuzzy1.Arbol_3.Left + Fuzzy1.Arbol_3.Width / 2
Y13 = Fuzzy1.Arbol_3.Top + Fuzzy1.Arbol_3.Height / 2
X2 = Fuzzy1.Pelota.Left + Fuzzy1.Pelota.Width / 2
Y2 = Fuzzy1.Pelota.Top + Fuzzy1.Pelota.Height / 2

DoEvents
End Sub

Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer)


''
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


'SI SE PRESIONA UNA TECLA EN LA MODALIDAD MANUAL:
Select Case KeyCode
'ACELERA=FLECHA ARRIBA

Página 120 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Case 38
If Aceleracion < 1 Then Aceleracion = Format(Aceleracion + 0.1, "0.00")
'DOBLA IZQUIERDA=FLECHA IZQUIERDA
Case 37
If Angulo_direccion > -45 Then Angulo_direccion = Angulo_direccion - 1
'DOBLA DERECHA=FLECHA DERECHA
Case 39
If Angulo_direccion < 45 Then Angulo_direccion = Angulo_direccion + 1
'DESACELERA=FLECHA ABAJO
Case 40
If Aceleracion > -2 Then Aceleracion = Format(Aceleracion - 0.1, "0.00")
End Select
End Sub

Página 121 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Nombre: Fuzzy2.frm
VERSION 5.00
Object = "{7A080CC8-26E2-101B-AEBD-04021C009402}#1.0#0"; "GAUGE32.OCX"
Object = "{0BA686C6-F7D3-101A-993E-0000C0EF6F5E}#1.0#0"; "THREED32.OCX"
Begin VB.Form Fuzzy2
AutoRedraw = -1 'True
BorderStyle = 1 'Fixed Single
Caption = "Fuzzy"
ClientHeight = 5760
ClientLeft = 6585
ClientTop = 1815
ClientWidth = 2460
DrawWidth = 1000
LinkTopic = "Fuzzy2"
LockControls = -1 'True
MaxButton = 0 'False
MDIChild = -1 'True
PaletteMode = 1 'UseZOrder
ScaleHeight = 5760
ScaleWidth = 2460
Begin VB.Frame Frame_salidas
Caption = "Salidas"
Height = 2445
Left = 0
TabIndex = 0
Top = 3300
Width = 2445
Begin Threed.SSPanel Aceleracion_flow
Height = 315
Left = 1800
TabIndex = 4
Top = 1020
Width = 375
_Version = 65536
_ExtentX = 661
_ExtentY = 556
_StockProps = 15
Caption = "Aceleracion"
ForeColor = 16777088
BackColor = 12632256
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BorderWidth = 1
BevelOuter = 1
FloodType = 4
End
Begin Threed.SSPanel Frenado_flow
Height = 555
Left = 1800
TabIndex = 5
Top = 1620
Width = 375
_Version = 65536
_ExtentX = 661
_ExtentY = 979
_StockProps = 15
Caption = "Frenado"
ForeColor = 16777088
BackColor = 12632256
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 400

Página 122 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BorderWidth = 1
BevelOuter = 1
FloodType = 3
FloodColor = 255
End
Begin Threed.SSPanel Constante_flow
Height = 255
Left = 1800
TabIndex = 7
Top = 1350
Width = 375
_Version = 65536
_ExtentX = 661
_ExtentY = 450
_StockProps = 15
ForeColor = 16777215
BackColor = 12632256
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BorderWidth = 1
BevelOuter = 1
Begin VB.Label Label36
BackStyle = 0 'Transparent
Caption = "0"
Height = 195
Left = 120
TabIndex = 47
Top = 30
Width = 165
End
End
Begin GaugeLib.Gauge Rueda1
Height = 405
Left = 390
TabIndex = 51
Top = 990
Width = 495
_Version = 65536
_ExtentX = 873
_ExtentY = 714
_StockProps = 73
BackColor = 4210752
InnerBottom = 10
Max = 90
Style = 2
NeedleWidth = 4
End
Begin GaugeLib.Gauge Rueda2
Height = 405
Left = 870
TabIndex = 52
Top = 990
Width = 495
_Version = 65536
_ExtentX = 873
_ExtentY = 714
_StockProps = 73
BackColor = 4210752
InnerBottom = 10
Max = 90
Style = 2

Página 123 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Autosize = -1 'True
NeedleWidth = 4
End
Begin VB.Shape Shape5
FillColor = &H00C0C0C0&
FillStyle = 0 'Solid
Height = 225
Left = 1110
Shape = 4 'Rounded Rectangle
Top = 1890
Width = 105
End
Begin VB.Shape Shape3
FillColor = &H0080FFFF&
FillStyle = 0 'Solid
Height = 165
Left = 1020
Shape = 2 'Oval
Top = 930
Width = 255
End
Begin VB.Shape Shape4
FillColor = &H00C0C0C0&
FillStyle = 0 'Solid
Height = 225
Left = 510
Shape = 4 'Rounded Rectangle
Top = 1890
Width = 105
End
Begin VB.Shape Shape14
BackColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 855
Left = 390
Top = 1380
Width = 975
End
Begin VB.Shape Shape6
FillColor = &H0080FFFF&
FillStyle = 0 'Solid
Height = 165
Left = 480
Shape = 2 'Oval
Top = 930
Width = 255
End
Begin VB.Label Label14
Caption = "0"
Height = 195
Left = 810
TabIndex = 55
Top = 750
Width = 105
End
Begin VB.Label Label12
Caption = "45"
Height = 195
Left = 1380
TabIndex = 54
Top = 1260
Width = 225
End
Begin VB.Label Label11
Caption = "-45"
Height = 195
Left = 120
TabIndex = 53
Top = 1260
Width = 285
End
Begin VB.Label Label37

Página 124 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Caption = "-2"
Height = 195
Left = 1890
TabIndex = 48
Top = 2190
Width = 285
End
Begin VB.Label Label35
Caption = "1"
Height = 255
Left = 1920
TabIndex = 46
Top = 780
Width = 225
End
Begin VB.Label Label8
Caption = "Angulo_direccion"
ForeColor = &H000000FF&
Height = 255
Left = 270
TabIndex = 30
Top = 270
Width = 1305
End
Begin VB.Label Label_Angulo_direccion
ForeColor = &H00000000&
Height = 255
Left = 1620
LinkItem = "Angulo_direccion"
LinkTopic = "Excel|fuzzy"
TabIndex = 29
Top = 270
Width = 435
End
Begin VB.Label Label13
Caption = "º"
ForeColor = &H00000000&
Height = 195
Left = 2040
TabIndex = 28
Top = 300
Width = 165
End
Begin VB.Label Label1
Caption = "m/s2"
ForeColor = &H00000000&
Height = 255
Left = 1800
TabIndex = 6
Top = 510
Width = 405
End
Begin VB.Label Label7
Caption = "Aceleracion"
ForeColor = &H000000FF&
Height = 255
Left = 270
TabIndex = 2
Top = 510
Width = 885
End
Begin VB.Label Label_Aceleracion
ForeColor = &H00000000&
Height = 255
Left = 1290
LinkItem = "Aceleracion"
LinkTopic = "Excel|fuzzy"
TabIndex = 1
Top = 510
Width = 405
End
Begin VB.Shape Shape15

Página 125 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 165
Left = 480
Shape = 4 'Rounded Rectangle
Top = 2100
Width = 195
End
Begin VB.Shape Shape7
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 165
Left = 1080
Shape = 4 'Rounded Rectangle
Top = 2100
Width = 195
End
End
Begin VB.Frame Frame_entradas
Caption = "Entradas"
Height = 3315
Left = 0
TabIndex = 3
Top = -30
Width = 2445
Begin VB.TextBox Text_Velocidad
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
Height = 285
Left = 1590
LinkItem = "Velocidad"
LinkTopic = "excel|fuzzy"
TabIndex = 43
Top = 2940
Width = 435
End
Begin VB.TextBox Text_Distancia_pelota
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Distancia_pelota"
LinkTopic = "excel|fuzzy"
TabIndex = 40
Top = 1500
Width = 675
End
Begin VB.TextBox Text_Angulo_error
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Angulo_error"
LinkTopic = "excel|fuzzy"
TabIndex = 37
Top = 1710
Width = 675
End
Begin VB.TextBox Text_Angulo_arbol_1
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Angulo_arbol_1"
LinkTopic = "excel|fuzzy"

Página 126 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
TabIndex = 20
Top = 240
Width = 675
End
Begin VB.TextBox Text_Distancia_arbol_1
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Distancia_arbol_1"
LinkTopic = "excel|fuzzy"
TabIndex = 19
Top = 450
Width = 675
End
Begin VB.TextBox Text_Distancia_arbol_2
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Distancia_arbol_2"
LinkTopic = "excel|fuzzy"
TabIndex = 18
Top = 870
Width = 675
End
Begin VB.TextBox Text_Angulo_arbol_2
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Angulo_arbol_2"
LinkTopic = "excel|fuzzy"
TabIndex = 17
Top = 660
Width = 675
End
Begin VB.TextBox Text_Distancia_arbol_3
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Distancia_arbol_3"
LinkTopic = "excel|fuzzy"
TabIndex = 16
Top = 1290
Width = 675
End
Begin VB.TextBox Text_Angulo_arbol_3
Appearance = 0 'Flat
BackColor = &H00C0C0C0&
BorderStyle = 0 'None
ForeColor = &H00000000&
Height = 195
Left = 1470
LinkItem = "Angulo_arbol_3"
LinkTopic = "excel|fuzzy"
TabIndex = 15
Top = 1080
Width = 675
End
Begin GaugeLib.Gauge Velocimetro
Height = 495
Left = 735

Página 127 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
TabIndex = 8
Top = 2385
Width = 870
_Version = 65536
_ExtentX = 1535
_ExtentY = 873
_StockProps = 73
ForeColor = 0
BackColor = 0
Max = 5
Style = 2
NeedleWidth = 2
End
Begin VB.Label Label3
Caption = "Velocidad"
ForeColor = &H00FF00FF&
Height = 255
Left = 90
TabIndex = 45
Top = 2940
Width = 795
End
Begin VB.Label Label25
Caption = "m/s"
ForeColor = &H00000000&
Height = 255
Left = 2100
TabIndex = 44
Top = 2940
Width = 315
End
Begin VB.Shape Shape2
BackColor = &H00FFFFFF&
BorderStyle = 0 'Transparent
FillColor = &H00C0C0C0&
FillStyle = 0 'Solid
Height = 375
Left = 60
Top = 2880
Width = 2355
End
Begin VB.Label Label34
Caption = "m"
Height = 255
Left = 2190
TabIndex = 42
Top = 1500
Width = 195
End
Begin VB.Label Label5
Caption = "Distancia_pelota"
ForeColor = &H00FF00FF&
Height = 195
Left = 90
TabIndex = 41
Top = 1500
Width = 1455
End
Begin VB.Label Label33
Caption = "º"
Height = 255
Left = 2190
TabIndex = 39
Top = 1740
Width = 165
End
Begin VB.Label Label6
Caption = "Angulo_error"
ForeColor = &H00FF00FF&
Height = 165
Left = 90
TabIndex = 38

Página 128 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Top = 1710
Width = 1005
End
Begin VB.Label Label32
Caption = "m"
Height = 255
Left = 2190
TabIndex = 36
Top = 1290
Width = 195
End
Begin VB.Label Label31
Caption = "m"
Height = 255
Left = 2190
TabIndex = 35
Top = 870
Width = 195
End
Begin VB.Label Label30
Caption = "m"
Height = 255
Left = 2190
TabIndex = 34
Top = 450
Width = 225
End
Begin VB.Label Label29
Caption = "º"
Height = 255
Left = 2190
TabIndex = 33
Top = 1110
Width = 165
End
Begin VB.Label Label28
Caption = "º"
Height = 255
Left = 2190
TabIndex = 32
Top = 690
Width = 165
End
Begin VB.Label Label27
Caption = "º"
Height = 255
Left = 2190
TabIndex = 31
Top = 270
Width = 165
End
Begin VB.Label Label26
BackColor = &H00404040&
Caption = "m/s"
BeginProperty Font
Name = "Small Fonts"
Size = 6.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00FFFFFF&
Height = 255
Left = 1020
TabIndex = 27
Top = 2220
Width = 285
End
Begin VB.Label Label2
Caption = "Distancia_arbol_1"

Página 129 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
ForeColor = &H0000FF00&
Height = 195
Left = 90
TabIndex = 26
Top = 450
Width = 1455
End
Begin VB.Label Label4
Caption = "Angulo_arbol_1"
ForeColor = &H0000FF00&
Height = 225
Left = 90
TabIndex = 25
Top = 240
Width = 1185
End
Begin VB.Label Label15
BackColor = &H00C0C0C0&
Caption = "Angulo_arbol_2"
ForeColor = &H0000FFFF&
Height = 225
Left = 90
TabIndex = 24
Top = 660
Width = 1215
End
Begin VB.Label Label16
BackColor = &H00C0C0C0&
Caption = "Distancia_arbol_2"
ForeColor = &H0000FFFF&
Height = 195
Left = 90
TabIndex = 23
Top = 870
Width = 1455
End
Begin VB.Label Label17
Caption = "Angulo_arbol_3"
ForeColor = &H00FF0000&
Height = 165
Left = 90
TabIndex = 22
Top = 1080
Width = 1215
End
Begin VB.Label Label18
Caption = "Distancia_arbol_3"
ForeColor = &H00FF0000&
Height = 165
Left = 90
TabIndex = 21
Top = 1290
Width = 1455
End
Begin VB.Label Label24
BackColor = &H00404040&
BackStyle = 0 'Transparent
Caption = "4"
ForeColor = &H00FFFFFF&
Height = 255
Left = 1620
TabIndex = 14
Top = 2250
Width = 165
End
Begin VB.Label Label23
BackColor = &H00404040&
BackStyle = 0 'Transparent
Caption = "3"
ForeColor = &H00FFFFFF&
Height = 255
Left = 1290

Página 130 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
TabIndex = 13
Top = 2040
Width = 165
End
Begin VB.Label Label22
BackColor = &H00404040&
BackStyle = 0 'Transparent
Caption = "2"
ForeColor = &H00FFFFFF&
Height = 255
Left = 870
TabIndex = 12
Top = 2040
Width = 165
End
Begin VB.Label Label21
BackColor = &H00404040&
BackStyle = 0 'Transparent
Caption = "1"
ForeColor = &H00FFFFFF&
Height = 255
Left = 540
TabIndex = 11
Top = 2250
Width = 165
End
Begin VB.Label Label19
BackColor = &H00404040&
BackStyle = 0 'Transparent
Caption = "0"
ForeColor = &H00FFFFFF&
Height = 255
Left = 510
TabIndex = 10
Top = 2610
Width = 165
End
Begin VB.Label Label20
BackColor = &H00404040&
BackStyle = 0 'Transparent
Caption = "5"
ForeColor = &H00FFFFFF&
Height = 255
Left = 1650
TabIndex = 9
Top = 2580
Width = 165
End
Begin VB.Shape Shape1
FillStyle = 0 'Solid
Height = 1155
Left = 360
Shape = 2 'Oval
Top = 1980
Width = 1545
End
End
Begin VB.Label Label_ref
ForeColor = &H00808080&
Height = 255
Left = 630
LinkTopic = "Excel|estadisticas"
TabIndex = 50
Top = 0
Visible = 0 'False
Width = 465
End
Begin VB.Label Label_est
ForeColor = &H00808080&
Height = 255
Left = 30
LinkTopic = "Excel|estadisticas"

Página 131 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
TabIndex = 49
Top = 30
Visible = 0 'False
Width = 465
End
End
Attribute VB_Name = "Fuzzy2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


'SI SE PRESIONA UNA TECLA EN LA MODALIDAD MANUAL:
Select Case KeyCode
'ACELERA=FLECHA ARRIBA
Case 38
If Aceleracion < 1 Then Aceleracion = Format(Aceleracion + 0.1, "0.00")
'DOBLA IZQUIERDA=FLECHA IZQUIERDA
Case 37
If Angulo_direccion > -45 Then Angulo_direccion = Angulo_direccion - 1
'DOBLA DERECHA=FLECHA DERECHA
Case 39
If Angulo_direccion < 45 Then Angulo_direccion = Angulo_direccion + 1
'DESACELERA=FLECHA ABAJO
Case 40
If Aceleracion > -2 Then Aceleracion = Format(Aceleracion - 0.1, "0.00")
End Select
End Sub

Página 132 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Código Fuente de Visual Basic para el Módulo del


Proyecto
Nombre: Fuzzy.bas
Attribute VB_Name = "Fuzzy"
Global Ubica As Boolean
Global Dist_ini As Double
Global Vel_ini As Double
Global Veloc_prom As Double
Global Est_aceleracion(1 To 1000) As Double
Global Est_velocidad(1 To 1000) As Double
Global Est_distancia_pelota(1 To 1000) As Double
Global Angulo_nuevo As Double
Global Espacio As Double
Global Manual As Boolean
Global Tiempo As Integer
Global X As Double
Global Y As Double
Global Xinicial As Double
Global Yinicial As Double
Global X11 As Double
Global Y11 As Double
Global X12 As Double
Global Y12 As Double
Global X13 As Double
Global Y13 As Double
Global X2 As Double
Global Y2 As Double
Global A As Double
Global B As Double
Global C1 As Double
Global D1 As Double
Global C2 As Double
Global D2 As Double
Global C3 As Double
Global D3 As Double
Global Angulo_pelota_aux As Double
Global Angulo_auto_aux As Double
Global Angulo_arbol_1_aux As Double
Global Angulo_arbol_2_aux As Double
Global Angulo_arbol_3_aux As Double
Global Angulo_arbol_1 As Double
Global Distancia_arbol_1 As Double
Global Angulo_arbol_2 As Double
Global Distancia_arbol_2 As Double
Global Angulo_arbol_3 As Double
Global Distancia_arbol_3 As Double
Global Distancia_pelota As Double
Global Angulo_error As Double
Global Angulo_direccion As Double
Global Aceleracion As Double
Global Velocidad As Double

Public Function Angulo_180(ANGULO As Double) As Double


'CONVERSION DE ANGULOS DE 360º A (-180º;+180º)
If ANGULO > 0 Then
If ANGULO > 180 Then
Angulo_180 = (360 - ANGULO) * -1
Else
Angulo_180 = ANGULO
End If
ElseIf ANGULO < 0 Then
If ANGULO < -180 Then
Angulo_180 = (360 + ANGULO)
Else
Angulo_180 = ANGULO
End If
Else
Angulo_180 = 0
End If
End Function

Página 133 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Public Function grados(var As Double) As Double


'CONVERSION DE RADIANES EN GRADOS
grados = var * 180 / 3.14159265358979
End Function

Public Function radianes(var As Double) As Double


'CONVERSION GRADOS EN RADIANES
radianes = 3.14159265358979 * var / 180
End Function

Public Function Angulo_180_auto(ANGULO As Double) As Double


'SE CALCULAN LOS ANGULOS A PARTIR DEL ANGULO DEL AUTO COMO REFERENCIA DE 0º
GRADOS
If Angulo_auto_aux > ANGULO Then
Angulo_180_auto = (Angulo_auto_aux - ANGULO) * -1
ElseIf Angulo_auto_aux < ANGULO Then
Angulo_180_auto = ANGULO - Angulo_auto_aux
Else
Angulo_180_auto = 0
End If
Angulo_180_auto = Angulo_180(Angulo_180_auto)
End Function
Public Sub actualizar()
'SETEA GROSOR DEL PINCEL PARA EL GRAFICO DE COORDENADAS DE GUIA
Fuzzy1.DrawWidth = 1
'GRAFICA COORDENADAS DE GUIA
Fuzzy1.Line (0, Y)-(10, Y), QBColor(0)
Fuzzy1.Line (X, 10)-(X, 0), QBColor(0)
Fuzzy1.Line (Fuzzy1.ScaleWidth, Y)-(Fuzzy1.ScaleWidth - 10, Y), QBColor(0)
Fuzzy1.Line (X, Fuzzy1.ScaleHeight - 10)-(X, Fuzzy1.ScaleHeight), QBColor(0)
'CALCULA LA NUEVA VELOCIDAD
Velocidad = Velocidad + Aceleracion * 1
'LIMITA LA VELOCIDAD A LOS LIMITES DEFINIDOS
If Velocidad > 5 Then Velocidad = 5
If Velocidad < 0 Then Velocidad = 0
'CARGA MATRIZ UNIDIMENSIONAL PARA LAS VARIABLES ESTADISTICAS
Est_velocidad(Tiempo) = Velocidad
Est_aceleracion(Tiempo) = Aceleracion
Est_distancia_pelota(Tiempo) = Distancia_pelota
'CALCULA EL ESPACIO RECORRIDO POR ECUACION DE CINEMATICA
'PARA MOVIMIENTO UNIFORMEMENTE VARIADO
Espacio = Velocidad * 1 + 1 / 2 * Aceleracion * 1
'CALCULA NUEVO ANGULO DEL AUTO (VARIABLE INTERNA AUXILIAR) A PARTIR DEL
'ANGULO DEL AUTO ANTERIOR Y EL CAMBIO DE DIRECCION RECIBIDO
Angulo_auto_aux = Angulo_180(Angulo_auto_aux + Angulo_direccion)
'CALCULO DE LA NUEVA COORDENADA PARA LA POSICION DEL CARRITO
X = X - Espacio * Cos(radianes(Angulo_auto_aux))
Y = Y - Espacio * Sin(radianes(Angulo_auto_aux))
'ESTABLECE LA NUEVA DIRECCION DEL CARRITO EN EL FORMULARIO DE SIMULACION
If Angulo_auto_aux > 0 Then
Fuzzy1.Carrito = Angulo_auto_aux
ElseIf Angulo_auto_aux < 0 Then
Fuzzy1.Carrito = 360 + Angulo_auto_aux
Else
Fuzzy1.Carrito = 0
End If
'ESTABLECE EN EL FORMULARIO DE SIMULACION EL VALOR DEL ANGULO DEL AUTO
Fuzzy1.Label_angulo_auto.Caption = Angulo_auto_aux
'ESTABLECE EN EL FORMULARIO DE SIMULACION LAS COORDENADAS DEL CARRITO
Fuzzy1.Label_x.Caption = X
Fuzzy1.Label_y.Caption = Y
'ESTABLECE EN EL FORMULARIO FUZZY LA INCLINACION DE LAS RUEDAS SEGUN EL
'ANGULO DE DIRECCION
Fuzzy2.Rueda1 = Angulo_direccion + 45
Fuzzy2.Rueda2 = Angulo_direccion + 45
'POSICIONA EL CARRITO EN LA NUEVA UBICACION DE COORDENADAS,
'TENIENDO EN CUENTA EL GROSOR Y LA ESCALA DEL CARRITO
Fuzzy1.Carrito.Left = X - Fuzzy1.Carrito.Width / 2
Fuzzy1.Carrito.Top = Y - Fuzzy1.Carrito.Height / 2
'ESTABLECE LAS NUEVAS COORDINADAS GUIA
Fuzzy1.Line (0, Y)-(10, Y), QBColor(10)

Página 134 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Fuzzy1.Line (X, 10)-(X, 0), QBColor(10)
Fuzzy1.Line (Fuzzy1.ScaleWidth, Y)-(Fuzzy1.ScaleWidth - 10, Y), QBColor(10)
Fuzzy1.Line (X, Fuzzy1.ScaleHeight - 10)-(X, Fuzzy1.ScaleHeight), QBColor(10)
'CAMBIA EL GROSOR DEL PINCEL PARA GRAFICAR LA TRAYECTORIA
Fuzzy1.DrawWidth = 3
'GRAFICA LA TRAYECTORIA CON DISTINTOS COLORES:
If Aceleracion < 0 Then
'BLANCO PARA LA ACELERACION NULA
Fuzzy1.PSet (X, Y), QBColor(12)
ElseIf Aceleracion > 0 Then
'AZUL PARA LA ACELERACION POSITIVA
Fuzzy1.PSet (X, Y), QBColor(9)
Else
'ROJO PARA LA DESACELERACION
Fuzzy1.PSet (X, Y), QBColor(15)
End If
'INICIALIZA LOS GRAFICOS DE ACELERACION
Fuzzy2.Aceleracion_flow.FloodPercent = 0
Fuzzy2.Frenado_flow.FloodPercent = 0
Fuzzy2.Constante_flow.BackColor = &HC0C0C0
'ESTABLECE GRAFICAMENTE EL GRADO DE ACELERACION EN EL FORMULARIO FUZZY
If Aceleracion > 0 Then
Fuzzy2.Aceleracion_flow.FloodPercent = Aceleracion * 100 / 1
ElseIf Aceleracion < 0 Then
Fuzzy2.Frenado_flow.FloodPercent = Abs(Aceleracion) * 100 / 2
Else
Fuzzy2.Constante_flow.BackColor = QBColor(15)
End If
'ESTABLECE GRAFICAMENTE LA VELOCIDAD EN EL FORMULARIO FUZZY
If Velocidad > 0 Then Fuzzy2.Velocimetro = Velocidad
End Sub

Public Sub iteracion()


Do
'SUMATORIA DEL TIEMPO O ITERACIONES TRANSCURRIDAS
Tiempo = Tiempo + 1
'LAS VARIABLES_AUX SON DE USO INTERNO EN LA SIMULACION
'CALCULA COORDENADAS DE LA PELOTA
A = X - X2
B = Y - Y2
'PARA CADA CUADRANTE SE CALCULA DESDE EL CARRITO:
'EL ANGULO A LA PELOTA Y LA DISTANCIA A LA PELOTA
'LAS VARIABLES_AUX SON DE USO INTERNO EN LA SIMULACION
If B > 0 And A > 0 Then
Angulo_pelota_aux = grados(Atn(B / A))
Distancia_pelota = B / Sin(radianes(Angulo_pelota_aux))
ElseIf B < 0 And A > 0 Then
Angulo_pelota_aux = grados(Atn(B / A))
Distancia_pelota = B / Sin(radianes(Angulo_pelota_aux))
ElseIf B < 0 And A < 0 Then
Angulo_pelota_aux = 180 + grados(Atn(B / A))
Distancia_pelota = B / Sin(radianes(Angulo_pelota_aux))
ElseIf B > 0 And A < 0 Then
Angulo_pelota_aux = 180 + grados(Atn(B / A))
Distancia_pelota = B / Sin(radianes(Angulo_pelota_aux))
End If
'EL ANGULO DE ERROR SE CALCULA A PARTIR DEL ANGULO DE LA PELOTA
Angulo_error = Angulo_180_auto(Angulo_pelota_aux)
'CALCULA COORDENADAS DEL ARBOL 1
C1 = X - X11
D1 = Y - Y11
'PARA CADA CUADRANTE SE CALCULA DESDE EL CARRITO:
'EL ANGULO AL ARBOL 1 Y LA DISTANCIA AL ARBOL 1
If D1 > 0 And C1 > 0 Then
Angulo_arbol_1_aux = grados(Atn(D1 / C1))
Distancia_arbol_1 = D1 / Sin(radianes(Angulo_arbol_1_aux))
ElseIf D1 < 0 And C1 > 0 Then
Angulo_arbol_1_aux = grados(Atn(D1 / C1))
Distancia_arbol_1 = D1 / Sin(radianes(Angulo_arbol_1_aux))
ElseIf D1 < 0 And C1 < 0 Then

Página 135 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Angulo_arbol_1_aux = 180 + grados(Atn(D1 / C1))
Distancia_arbol_1 = D1 / Sin(radianes(Angulo_arbol_1_aux))
ElseIf D1 > 0 And C1 < 0 Then
Angulo_arbol_1_aux = 180 + grados(Atn(D1 / C1))
Distancia_arbol_1 = D1 / Sin(radianes(Angulo_arbol_1_aux))
End If
'EL ANGULO DEL ARBOL 1 SE CALCULA A PARTIR DE LA VARIABLE AUXILIAR DE ANGULO
DEL ARBOL 1
Angulo_arbol_1 = Angulo_180_auto(Angulo_arbol_1_aux)
'CALCULA COORDENADAS DEL ARBOL 2
C2 = X - X12
D2 = Y - Y12
'PARA CADA CUADRANTE SE CALCULA DESDE EL CARRITO:
'EL ANGULO AL ARBOL 1 Y LA DISTANCIA AL ARBOL 2
If D2 > 0 And C2 > 0 Then
Angulo_arbol_2_aux = grados(Atn(D2 / C2))
Distancia_arbol_2 = D2 / Sin(radianes(Angulo_arbol_2_aux))
ElseIf D2 < 0 And C2 > 0 Then
Angulo_arbol_2_aux = grados(Atn(D2 / C2))
Distancia_arbol_2 = D2 / Sin(radianes(Angulo_arbol_2_aux))
ElseIf D2 < 0 And C2 < 0 Then
Angulo_arbol_2_aux = 180 + grados(Atn(D2 / C2))
Distancia_arbol_2 = D2 / Sin(radianes(Angulo_arbol_2_aux))
ElseIf D2 > 0 And C2 < 0 Then
Angulo_arbol_2_aux = 180 + grados(Atn(D2 / C2))
Distancia_arbol_2 = D2 / Sin(radianes(Angulo_arbol_2_aux))
End If
'EL ANGULO DEL ARBOL 2 SE CALCULA A PARTIR DE LA VARIABLE AUXILIAR DE ANGULO
DEL ARBOL 2
Angulo_arbol_2 = Angulo_180_auto(Angulo_arbol_2_aux)
'CALCULA COORDENADAS DEL ARBOL 3
C3 = X - X13
D3 = Y - Y13
'PARA CADA CUADRANTE SE CALCULA DESDE EL CARRITO:
'EL ANGULO AL ARBOL 1 Y LA DISTANCIA AL ARBOL 3
If D3 > 0 And C3 > 0 Then
Angulo_arbol_3_aux = grados(Atn(D3 / C3))
Distancia_arbol_3 = D3 / Sin(radianes(Angulo_arbol_3_aux))
ElseIf D3 < 0 And C3 > 0 Then
Angulo_arbol_3_aux = grados(Atn(D3 / C3))
Distancia_arbol_3 = D3 / Sin(radianes(Angulo_arbol_3_aux))
ElseIf D3 < 0 And C3 < 0 Then
Angulo_arbol_3_aux = 180 + grados(Atn(D3 / C3))
Distancia_arbol_3 = D3 / Sin(radianes(Angulo_arbol_3_aux))
ElseIf D3 > 0 And C3 < 0 Then
Angulo_arbol_3_aux = 180 + grados(Atn(D3 / C3))
Distancia_arbol_3 = D3 / Sin(radianes(Angulo_arbol_3_aux))
End If
'EL ANGULO DEL ARBOL 3 SE CALCULA A PARTIR DE LA VARIABLE AUXILIAR DE ANGULO
DEL ARBOL 3
Angulo_arbol_3 = Angulo_180_auto(Angulo_arbol_3_aux)
'ESCRIBE EN EL FORMULARIO FUZZY LAS VARIABLES DE ENTRADA
Fuzzy2.Text_Velocidad.Text = Velocidad
Fuzzy2.Text_Angulo_arbol_1.Text = Angulo_arbol_1
Fuzzy2.Text_Distancia_arbol_1.Text = Distancia_arbol_1
Fuzzy2.Text_Angulo_arbol_2.Text = Angulo_arbol_2
Fuzzy2.Text_Distancia_arbol_2.Text = Distancia_arbol_2
Fuzzy2.Text_Angulo_arbol_3.Text = Angulo_arbol_3
Fuzzy2.Text_Distancia_arbol_3.Text = Distancia_arbol_3
Fuzzy2.Text_Angulo_error.Text = Angulo_error
Fuzzy2.Text_Distancia_pelota.Text = Distancia_pelota
'SI EL PROCESO ES POR EL CONTROLADOR DIFUSO
If Manual = False Then
'ENVIA LOS DATOS DEL FORMULARIO FUZZY A EXCEL POR MEDIO DE DDE
Fuzzy2.Text_Velocidad.LinkPoke
DoEvents
Fuzzy2.Text_Angulo_arbol_1.LinkPoke
DoEvents
Fuzzy2.Text_Distancia_arbol_1.LinkPoke
DoEvents
Fuzzy2.Text_Angulo_arbol_2.LinkPoke
DoEvents

Página 136 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
Fuzzy2.Text_Distancia_arbol_2.LinkPoke
DoEvents
Fuzzy2.Text_Angulo_arbol_3.LinkPoke
DoEvents
Fuzzy2.Text_Distancia_arbol_3.LinkPoke
DoEvents
Fuzzy2.Text_Angulo_error.LinkPoke
DoEvents
Fuzzy2.Text_Distancia_pelota.LinkPoke
'DA LUGAR A LA CONVERSACION ENTRE APLICACIONES PARA QUE EL CONTROLADOR
DIFUSO RECIBA LOS DATOS DE EXCEL
DoEvents

'RECIBE LOS DATOS DESDE EXCEL QUE FUERON PROCESADOS ANTES POR EL
CONTROLADOR DIFUSO
Fuzzy2.Label_Angulo_direccion.Visible = False
Fuzzy2.Label_Angulo_direccion.LinkRequest
DoEvents
Fuzzy2.Label_Aceleracion.LinkRequest
DoEvents
'CONVIERTE ANGULO DE DIRECCION (+45;-45) A (-45;+45) PARA MANTENER LA
'UNIFORMIDAD CON OTRAS CONVENCIONES DE ANGULOS
'GUARDA ANGULO DE DIRECCION
Angulo_direccion = CDbl(Fuzzy2.Label_Angulo_direccion.Caption) * -1
Fuzzy2.Label_Angulo_direccion.Caption = Angulo_direccion
Fuzzy2.Label_Angulo_direccion.Visible = True
'GUARDA ACELERACION
Aceleracion = CDbl(Fuzzy2.Label_Aceleracion.Caption)
Else
'ESCRIBE EN EL FORMULARIO FUZZY LAS VARIABLES DE SALIDA
Fuzzy2.Label_Angulo_direccion.Caption = Angulo_direccion
DoEvents
Fuzzy2.Label_Aceleracion.Caption = Aceleracion
DoEvents
End If
'LLAMA AL ALGORITMO DE TRANSFORMACION AL NUEVO ESTADO
Call actualizar
DoEvents
'CONTINUA O TERMINA EL CICLO PARA EL NUEVO ESTADO, HASTA EL LIMITE DEFINIDO
'PARA EL ESTADO FINAL O HASTA UNA NUEVA PRESION DE UNA TECLA EN LA MODALIDAD
MANUAL
Loop Until (Distancia_pelota <= Dist_ini And Velocidad <= Vel_ini) Or Manual = True
DoEvents
If Distancia_pelota <= Dist_ini And Velocidad <= Vel_ini Then
'ACUMULA LA VELOCIDAD PARA CALCULO DEL PROMEDIO
For j = 1 To Tiempo
Veloc_prom = Veloc_prom + Est_velocidad(j)
Next j
'DESACTIVA EL TEMPORIZADOR PARA LA MODALIDAD MANUAL
MDIFuzzy.Timer1.Interval = 0
'BORRA GUIAS DE COORDENADAS
Fuzzy1.Line (0, Y)-(10, Y), QBColor(0)
Fuzzy1.Line (X, 10)-(X, 0), QBColor(0)
Fuzzy1.Line (Fuzzy1.ScaleWidth, Y)-(Fuzzy1.ScaleWidth - 10, Y), QBColor(0)
Fuzzy1.Line (X, Fuzzy1.ScaleHeight - 10)-(X, Fuzzy1.ScaleHeight), QBColor(0)
Beep
Beep
Beep
'CALCULA VELOCIDAD PROMEDIO
Veloc_prom = Veloc_prom / Tiempo
'MUESTRA MENSAJE DE FINALIZACION DE LA SIMULACION Y ESTADISTICAS
MsgBox "Llego a la pelota en " + Str(Tiempo) + " ciclos de iteracion a una velocidad promedio de " +
Format(Veloc_prom, "0.00") + " m/s"
'DESACTIVA COMUNICACION CON EXCEL PARA ENVIO DE ESTADISTICAS
Fuzzy2.Label_est.LinkMode = 0
Beep
'MENSAJE DE ALERTA PARA EL ENVIO DE ESTADISTICAS A EXCEL
MsgBox "Desactive por favor la comunicación de A-B Flex con Excel, para proceder con la exportacion de
datos y luego presione Aceptar "
'ACTIVA COMUNICACION CON EXCEL PARA ENVIO DE ESTADISTICAS
Fuzzy2.Label_est.LinkMode = 2
DoEvents

Página 137 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
On Error Resume Next
'EJECURA MACRO PARA BORRAR LOS DATOS ESTADISTICOS ANTERIORES EN EXCEL
'EXCEL 97 O 5 EN ESPAÑOL
Fuzzy2.Label_est.LinkExecute "[EJECUTAR(" & Chr$(34) & "MODULO_FUZZY.BORRAR_DATOS"
& Chr$(34) & ")]"
On Error GoTo 0
'MUESTRA BARRA DE ESTADO PARA EL ENVIO DE ESTADISTICAS
MDIFuzzy.Barra_est.Visible = True
For i = 1 To Tiempo
'CALCULA Y MUESTRA PORCENTAJE DE ENVIO DE ESTADISTICAS
MDIFuzzy.Barra_est.FloodPercent = i * 100 / Tiempo
On Error Resume Next
'ENVIA AL EXCEL POR MEDIO DE DDE, POR CADA ITERACION O SEGUNDO, LOS DATOS DE:
'LA ACELERACION
Fuzzy2.Label_est.Caption = Est_aceleracion(i)
'EXCEL 5 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "L" + Trim(i + 1) + "C1"
Fuzzy2.Label_est.LinkPoke
DoEvents
'EXCEL 97 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "F" + Trim(i + 1) + "C1"
Fuzzy2.Label_est.LinkPoke
DoEvents
'LA VELOCIDAD
Fuzzy2.Label_est.Caption = Est_velocidad(i)
'EXCEL 5 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "L" + Trim(i + 1) + "C2"
Fuzzy2.Label_est.LinkPoke
DoEvents
'EXCEL 97 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "F" + Trim(i + 1) + "C2"
Fuzzy2.Label_est.LinkPoke
DoEvents
'LA DISTANCIA A LA PELOTA
Fuzzy2.Label_est.Caption = Est_distancia_pelota(i)
'EXCEL 5 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "L" + Trim(i + 1) + "C3"
Fuzzy2.Label_est.LinkPoke
DoEvents
'EXCEL 97 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "F" + Trim(i + 1) + "C3"
Fuzzy2.Label_est.LinkPoke
DoEvents
Next i
'DESACTIVA COMUNICACION CON EXCEL PARA ENVIO DE ESTADISTICAS
Fuzzy2.Label_est.LinkMode = 0
'ACTIVA COMUNICACION CON EXCEL PARA ENVIO DE ESTADISTICAS
Fuzzy2.Label_est.LinkMode = 2
DoEvents
'ENVIA AL EXCEL POR MEDIO DE DDE, EL RANGO A TENER EN CUENTA PARA LA
ACELERACION
Fuzzy2.Label_est.Caption = "A2:A" + Trim(i + 1)
'EXCEL 5 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "L2C4"
Fuzzy2.Label_est.LinkPoke
DoEvents
'EXCEL 97 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "F2C4"
Fuzzy2.Label_est.LinkPoke
DoEvents
'ENVIA AL EXCEL POR MEDIO DE DDE, EL RANGO A TENER EN CUENTA PARA LA
VELOCIDAD
Fuzzy2.Label_est.Caption = "B2:B" + Trim(i + 1)
'EXCEL 5 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "L2C5"
Fuzzy2.Label_est.LinkPoke
DoEvents
'EXCEL 97 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "F2C5"
Fuzzy2.Label_est.LinkPoke
DoEvents

Página 138 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
'ENVIA AL EXCEL POR MEDIO DE DDE, EL RANGO A TENER EN CUENTA PARA LA DISTANCIA
A LA PELOTA
Fuzzy2.Label_est.Caption = "C2:C" + Trim(i + 1)
'EXCEL 5 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "L2C6"
Fuzzy2.Label_est.LinkPoke
DoEvents
'EXCEL 97 EN ESPAÑOL
Fuzzy2.Label_est.LinkItem = "F2C6"
Fuzzy2.Label_est.LinkPoke
DoEvents
'DESACTIVA COMUNICACION CON EXCEL PARA ENVIO DE ESTADISTICAS
Fuzzy2.Label_est.LinkMode = 0
Beep
'MENSAJE DE FIN DE ENVIO DE ESTADISTICAS A EXCEL
MsgBox "Proceso terminado: para ejecutar la graficación presione el boton en la hoja Fuzzy en Excel."
Fuzzy2.Label_est.LinkMode = 0
'BORRA BARRA DE ESTADISTICAS DEL FORMULARIO PRINCIPAL
MDIFuzzy.Barra_est.Visible = False
Beep
Beep
Beep
'INICIALIZACION DE LA VARIABLE TIEMPO
Tiempo = 0
'DESCARGA Y OCULTA LOS FORMULARIOS DE SIMULACION
Unload Fuzzy1
Unload Fuzzy2
End If
End Sub

Página 139 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado

Código Fuente de Macro para Microsoft Excel 5 97


Nombre: Fuzzy.xls (MODULO_FUZZY)
Sub Rectángulo1_AlHacerClic()
'GRAFICA ACELERACION
Call ACELERACION
'GRAFICA VELOCIDAD
Call VELOCIDAD
'GRAFICA DISTANCIA_PELOTA
Call DISTANCIA_PELOTA
End Sub

Sub BORRAR_DATOS()
'SELECCIONA LA HOJA ESTADISTICAS
Sheets("ESTADISTICAS").Select
'SELECCIONA EL RANGO HASTA EL FONDO DE LA HOJA
Range("A2:G65536").Select
'BORRA EL CONTENIDO DE LA SELECCION
Selection.ClearContents
Range("A2").Select
End Sub

Sub VELOCIDAD()
On Error Resume Next
'SELECCIONA LA HOJA DE ESTADISTICAS
Sheets("ESTADISTICAS").Select
'RECUPERA DE LA CELDA EL RANGO PASADO POR LA APLICACION
RANG = Range("E2")
'SELECCIONA LA HOJA, BORRA EL GRAFICO EXISTENTE Y HACE UN GRAFICO DE LINEAS
Sheets("VELOCIDAD").Select
ActiveChart.ChartArea.Select
Selection.Clear
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets("ESTADISTICAS").Range(RANG), _
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="VELOCIDAD"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "VELOCIDAD"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "segundos"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "m/s"
End With
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowNone, LegendKey:=False
ActiveChart.Legend.Select
End Sub

Sub DISTANCIA_PELOTA()
On Error Resume Next
'SELECCIONA LA HOJA DE ESTADISTICAS
Sheets("ESTADISTICAS").Select
'RECUPERA DE LA CELDA EL RANGO PASADO POR LA APLICACION
RANG = Range("F2")
'SELECCIONA LA HOJA, BORRA EL GRAFICO EXISTENTE Y HACE UN GRAFICO DE LINEAS
Sheets("DISTANCIA PELOTA").Select
ActiveChart.ChartArea.Select
Selection.Clear
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets("ESTADISTICAS").Range(RANG), _
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="DISTANCIA PELOTA"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "DISTANCIA PELOTA"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "segundos"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "mts"
End With

Página 140 de 141


Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa
Guillermo Gabriel Fernández Amado
ActiveChart.Legend.Select
End Sub

Sub ACELERACION()
On Error Resume Next
'SELECCIONA LA HOJA DE ESTADISTICAS
Sheets("ESTADISTICAS").Select
'RECUPERA DE LA CELDA EL RANGO PASADO POR LA APLICACION
RANG = Range("D2")
'SELECCIONA LA HOJA, BORRA EL GRAFICO EXISTENTE Y HACE UN GRAFICO DE LINEAS
Sheets("ACELERACION").Select
ActiveChart.ChartArea.Select
Selection.Clear
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets("ESTADISTICAS").Range(RANG), _
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="ACELERACION"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "ACELERACION"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "segundos"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "m/s2"
End With
ActiveChart.Legend.Select
End Sub

Página 141 de 141

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