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 143
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 ap-
plication 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 al-
lows 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 tradi-
tional techniques of programmable control. The diffuse approach of the behavior of an in-
dependent robot allows to visualize to the real world based on rules expressed in linguistic
terms.
Página 3 de 143
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 SIS-TEMAS DE CONTROL PARA NAVEGACIÓN AUTÓNOMA...................................................4-38
Página 4 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Capítulo First. IntroducciónEn 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
Página 5 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
4. Definición de las reglas
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.
Página 6 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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…
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
Página 7 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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.
Página 8 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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.
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
Página 9 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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 143
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 143
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
Página 12 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
ciencias. Indiscutiblemente los computadores se han mostrado muy eficientes en relación a
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
Página 13 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
situaciones o estados son expresados en términos lingüísticos o vagos. Por esta razón el uso
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.
Fig3
Página 14 de 143
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
Página 15 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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.
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
Página 16 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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.
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
Página 17 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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.
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.
Página 18 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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.
Página 19 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Control de un proceso
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 143
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 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Capítulo Segundo. 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 143
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.).
Página 23 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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.
Página 24 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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.
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.
Página 25 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
- Depuración interactiva off-line con visualización de los flujos de inferencia y activa-
ció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).
- Produce código C según el estándar ANSI, código VHDL, código para microprocesa-
dores (SGS-Thompson, 8051, MCS-96 de Intel, 81C99, 80C166 de Siemens, PIC de Mi-
crochip, 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.
Página 26 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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.
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 Mo-
delado de Lógica Difusa:
Fig 11
a) Entrada o Input: Una entrada es un valor medido desde el sistema a ser controla-
do 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. Ca-
da 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.
Página 27 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
- 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 Mem-
bresí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 par-
ticular de entrada/salida.
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 valo-
res 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 compati-
ble con la función de Membresía.
e) Base de Reglas: Una regla difusa es una sentencia if-then que describe el com-
portamiento de salida del controlador como una función de las entradas. Por ejem-
plo: 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 143
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ógi-
ca 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 ve -
mos a continuación los grados de membresía para los valores de entrada anteriores:
Página 29 de 143
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 algorit -
mo 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 valo-
res 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 defi-
nidas para un puerto particular de entrada/salida.
Página 30 de 143
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 deri-
var 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 ran-
go. 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 siguien-
tes 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 comu-
nicació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 sis-
tema 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-Ex-
cel 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ál -
culo 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 143
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 difu-
so 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 monito-
reando 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 des-
cripció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 con-
juntamente según el tiempo transcurrido en la barra superior de la ventana. La vi-
sualizació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 ac-
tuales 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 143
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 codi-
ficar 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 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Capítulo Tercero. 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.
Página 34 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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.
Página 35 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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
Página 36 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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.
Página 37 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Capítulo Cuarto. Desarrollo de una apli-cació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 descrip-
ció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 ver -
satilidad 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áte-
dras de Inteligencia Artificial de la Facultad de Ciencias de la Administración de la Univer-
sidad 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 143
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 es-
tacionario 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 lo-
grar ambos objetivos se necesitará de un sistema de lógica difusa con control sobre la direc-
ción y la velocidad del carrito. Este tipo de problema es básicamente un problema de co-
rrección de error. El carrito debe inicialmente girar hacia la pelota minimizando el error en-
tre la dirección angular del carrito y la dirección de la pelota. El carrito debe también acele-
rar, 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, pa-
ra 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 en-
cuentra hasta la pelota. Eficiente por el recorrido más corto y en menos tiempo. Seguro por-
que 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.
Página 40 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Esquivar los obstáculos se logra controlando la dirección y la velocidad.
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 des-
cribir las reglas que representan su conocimiento sobre el tema. Se lleva a cabo este proce-
dimiento por cada variable lingüística y se arma un diccionario y un vocabulario propio pa-
ra 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 se-
gundo es lento?
Página 41 de 143
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, sien-
do la más común y de fácil cómputo las trapezoidales. Un punto a tener en cuenta en la de-
finició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 corres-
pondidos.
Página 42 de 143
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 143
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 143
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 143
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 143
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 143
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 143
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 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 37
Fig 38
Página 50 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 39
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 fun-
ción de membresía en cuestión, parte de la máxima pertenencia que es 1.
Fig 41
Página 51 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 42
Fig 43
Fig 44
Página 52 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 45
Fig 46
Fig 47
Página 53 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 48
Fig 49
Fig 50
Fig 51
Página 54 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 52
Fig 53
Página 55 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 54
Fig 55
Fig 56
Página 56 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 57
Fig 58
Fig 59
Página 57 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 60
Fig 61
Página 58 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 62
4. Definición de las reglas
Se necesita a continuación la definición de las reglas difusas. Se hacen preguntas al ex-
perto 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 An-
gulo_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.,
Página 59 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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
Página 60 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
-- 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
-- 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
Página 61 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
-- 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 an-
teriores.
Se tienen en cuenta al principio solo reglas difusas para cada conjunto difuso sin el agre-
gado 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.
Fig 64
Página 62 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 65
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.
Página 63 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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 particu-
lar, 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 posi-
ción hacia el objetivo, hasta que lo logra y a partir de allí sigue en línea recta hacia la pelo-
ta. No existen desviaciones dada la lejanía del árbol. El carrito se detiene a unos 3 metros
de la pelota:
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:
Página 64 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 68
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)
Página 65 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
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 An-
gulo_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.
Página 66 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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.
Cuando se unen estas dos sentencias con el operador AND, el operador minimum produ-
ce 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í tene-
mos:
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 “Acelera-
ción” es medida en escala por este valor.
Página 67 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
-- 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óxi-
ma” en un grado de 0.625 y la “Velocidad” es “rápida” en un grado de 0.8. Consecuente-
mente “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:
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
Página 68 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
del carrito y la instantánea para la aceleración para el modelo dado es - 0,643. Como el va-
lor 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.
Fig 73
Página 69 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 74
Y en Excel:
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.
Página 70 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fig 76
Podemos ver sencillamente aquí como a medida que hay mayor distancia a la pelota em-
pieza 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.
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 Grafi-
co anticipamos un problema. Lo resolveremos luego estudiando esta oscilación y tratando
de menguarla.
Página 71 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
b. Caso de prueba 2
En el próximo caso de prueba se considerará la situación donde un árbol está en el ca-
mino hacia el carrito. El carrito se ubica en un Angulo_auto de 60 º respecto a la pelota.
Fig 78
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.
Página 72 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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
procedimiento iterativo se repite hasta alcanzar el estado final estipulado como fin de la si-
mulación. Dada la característica de la solución los tiempos de respuesta no son óptimos, pe-
ro permite una clara representación del problema físico, en un espacio virtual.
Página 73 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
El desarrollo de la simulación se hizo como prototipo, y vemos a continuación un resu-
men 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 fun-
ciones 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 74 de 143
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 75 de 143
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.
Fig 85
Página 76 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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 dis-
tancia a la pelota sea de 3 metros, con lo cual la velocidad será 0 m/s. Llegado este momen-
to (o alguna combinación de distancia pelota y velocidad definida por el usuario), la simu-
lación finalizará siendo el estado último el que quedará almacenado en el controlador difu-
so.
Si el estado final fuese de características más exquisitas que lo aceptado según la reali-
dad planteada por el experto, la naturaleza del sistema será continuar con la iteración inde-
finidamente hasta llegar a ese punto, y si no llegase nunca se estará en una situación de
Página 77 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
inestabilidad infinita por no satisfacer la demanda del usuario, hasta que se lleve a cabo al-
guna 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 or-
den 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 aplica-
ciones 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 pro-
blema de la navegación autónoma del carrito de golf. Para ello el necesario un perfil de har-
dware mínimo y software que describimos a continuación:
PC IBM compatible Pentium III de 500 MHz, con 256 MB de memoria. El sistema ope-
rativo 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 compatibili-
dad en MS Excel de Office 2000/2003/XP), y el entorno de desarrollo A-B Flex, suminis-
trado de forma adjunta a este Trabajo Final en el CD, con el instalador de la aplicación a si -
mular, 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 mode-
lo .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
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.
Página 78 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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álo -
go:
Fig 89
Página 79 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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ál-
culo 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 de-
berá establecer el tiempo de iteración para el intercambio de datos con DDE, que se estable-
ció 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 indispensa-
bles para establecer el estado inicial del sistema.
Para ello es necesario, desde el menú ejecutar el ítem “Ubicar”, que visualizará una pan-
talla 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 ha-
cia la disposición geográfica deseada:
Página 80 de 143
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 81 de 143
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á co-
menzar 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í enten-
der 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 com-
portamiento 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 82 de 143
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 esquiv-
arlo 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 83 de 143
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 re-
comendados, es probable que la simulación termine abruptamente con un error de ex-
piració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 rele-
vantes, como ser valores puntuales de las variables linguísticas:
Página 84 de 143
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 di-
recció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
Página 85 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
then Angulo_direccion is cero”, debido a que si bien el Angulo_error es casi cero (-1,43), la
relación con el árbol 3 es de proximidad y se ve en la pobre activación de la regla 1; tam-
bié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á sig-
nificativamente 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_ar-
bol_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áfica-
mente los valores puntuales de las variables linguísticas:
Página 86 de 143
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 en-
trada 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 dismin-
uír ante una velocidad alta. Vemos cómo la relación velocidad-aceleración es fluctuante in-
necesariamente al aproximarse a la pelota. Analíticamente nos damos cuenta de una os-
cilació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 de-
sacelerando en los últimos metros. Denotamos la importancia de un análisis detallado de es-
tas 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 87 de 143
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 88 de 143
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, pudi-
endo 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 grafi-
cació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 89 de 143
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 perfec-
cionamiento 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 90 de 143
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 resul-
tados 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 91 de 143
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 92 de 143
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 previ-
amente 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 met-
ros 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 93 de 143
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 94 de 143
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 no-
tar 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 lenta-
mente 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 pro-
cede a su graficación y cálculo para la variable distancia a la pelota:
Página 95 de 143
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 96 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
B. 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 expec-
tativas 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 proble-
ma, 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 evi-
table 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 ca-
so 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 pelo-
ta 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 ajus-
tes a los conjuntos difusos o a las reglas para corregir este nuevo problema:
Página 97 de 143
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 me-
tros 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 adver-
bios 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 98 de 143
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 por-
que.
Fig 116
Desde el sentido común, vemos que el problema de la oscilación es debido a que se fre-
na antes de lo necesario ante la aproximación al objetivo, por lo cual la solución seria ajus-
Página 99 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
tar las decisiones en esta instancia, tratando de no frenar tan bruscamente para luego acele-
rar 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 pe-
lota 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 insu-
ficientes. 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 mar-
cha frenando fuertemente. Esta regla se logra precisar aun mas especificando que dicha ac-
ció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 100 de 143
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 lin-
güí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 101 de 143
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 102 de 143
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 103 de 143
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:
Fig 121
Página 104 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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 105 de 143
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 106 de 143
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 107 de 143
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 108 de 143
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.
C. 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 109 de 143
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 110 de 143
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 Appli-
cations. A Fuzzy Logic Symposium.
Página 111 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Anexos
Proyecto A-B FlexNombre: Fuzzy.abf[InferenceOptions]FuzzyAlgorithm=And=0,Or=0,Defuzz=0KeywordSet=0
[SystemParameters]NumberOfInputs=9NumberOfOutputs=2NumberOfRules=38TimeOfLastChange=1157004394
[Input#0]Name=VelocidadRange=0,5DefaultValue=0Description=Velocidad del carritoNumberOfMFs=5MF#0=cero:0,0,0,0.854839MF#1=muy_lenta:0,0.804839,0.804839,1.87094MF#2=lenta:0.854839,1.94758,1.94758,3.14919MF#3=mediana:1.87097,3.17742,3.17742,4.57258MF#4=rapida:3.14113,5,5,5
[Input#1]Name=Angulo_arbol_3Range=-180,180DefaultValue=0Description=Angulo al arbol 3NumberOfMFs=5MF#0=muy_negativo:-180,-180,-90,-30MF#1=poco_negativo:-60,-30,-30,0MF#2=cero:-30,0,0,30MF#3=poco_positivo:0,30,30,60MF#4=muy_positivo:30,90,180,180
[Input#2]Name=Angulo_arbol_2Range=-180,180DefaultValue=0Description=Angulo al arbolNumberOfMFs=5MF#0=muy_negativo:-180,-180,-90,-30MF#1=poco_negativo:-60,-30,-30,0MF#2=cero:-30,0,0,30MF#3=poco_positivo:0,30,30,60MF#4=muy_positivo:30,90,180,180
[Input#3]Name=Angulo_arbol_1Range=-180,180DefaultValue=0Description=Angulo al arbol 1NumberOfMFs=5MF#0=muy_negativo:-180,-180,-90,-30MF#1=poco_negativo:-60,-30,-30,0MF#2=cero:-30,0,0,30MF#3=poco_positivo:0,30,30,60MF#4=muy_positivo:30,90,180,180
[Input#4]Name=Distancia_arbol_2Range=0,1000DefaultValue=0
Página 112 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Description=Distancia al arbol 2NumberOfMFs=1MF#0=proxima:0,0,0,70
[Input#5]Name=Distancia_arbol_1Range=0,1000DefaultValue=0Description=Distancia al arbol 1NumberOfMFs=1MF#0=proxima:0,0,0,70
[Input#6]Name=Distancia_arbol_3Range=0,1000DefaultValue=0Description=Distancia al arbol 3NumberOfMFs=1MF#0=proxima:0,0,0,70
[Input#7]Name=Distancia_pelotaRange=0,600DefaultValue=0Description=Distancia a la pelotaNumberOfMFs=5MF#0=cero:0,0,3,9MF#1=muy_proxima:0.483871,12.9677,13.4516,27.6774MF#2=proxima:11.0323,46.8733,46.8733,90.6614MF#3=mediana:36.712,115.629,115.629,208.05MF#4=lejana:127.55,217.55,560.265,560.265
[Input#8]Name=Angulo_errorRange=-180,180DefaultValue=0Description=Angulo de errorNumberOfMFs=5MF#0=muy_negativo:-180,-180,-90,-30MF#1=poco_negativo:-60,-30,-30,0MF#2=cero:-30,0,0,30MF#3=poco_positivo:0,30,30,60MF#4=muy_positivo:30,90,180,180
[Output#0]Name=AceleracionRange=-2,1DefaultValue=0Description=Aceleracion del carritoNumberOfMFs=6MF#0=frenar_fuerte:-2,-2,-1.5,-1MF#1=frenar_levemente:-1.5,-1,-1,-0.5MF#2=marcha_libre:-1,-0.5,-0.5,0MF#3=cero:-0.5,0,0,0.5MF#4=leve:0,0.5,0.5,1MF#5=a_fondo:0.5,1,1,1
[Output#1]Name=Angulo_direccionRange=-45,45DefaultValue=0Description=Angulo de direccionNumberOfMFs=5MF#0=mucho_derecha:-44.881,-44.881,-37.9762,-27.1429MF#1=poco_derecha:-35.9524,-17.8334,-17.5953,-0.928605MF#2=cero:-16.6913,0.119048,0.119048,16.9294MF#3=poco_izquierda:1.16379,17.8777,17.8777,35.6835MF#4=mucho_izquierda:26.7857,35,45,45
[Text]NumberOfItems=69
Página 113 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
I#0=C1:-- REGLAS para el manejo de la direcciónI#1=C1:-- REGLA 1M - Mantener la dirección de marchaI#2=C1:-- La Distancia_arbol is not proxima indica el complemento del unico valor para esta variable. Se en-tiende por esto que Distancia_arbol es LejanaI#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 marchaI#4=R1:1.00 Angulo_error = cero & Distancia_arbol_1 <> proxima & Angulo_arbol_1 <> cero --> Angulo_direccion = ceroI#5=R1:1.00 Angulo_error = cero & Distancia_arbol_2 <> proxima & Angulo_arbol_2 <> cero --> Angulo_direccion = ceroI#6=R1:1.00 Angulo_error = cero & Distancia_arbol_3 <> proxima & Angulo_arbol_3 <> cero --> Angulo_direccion = ceroI#7=C1:-- REGLA 2M - Modificar la dirección de marcha ligeramente hacia la derechaI#8=R1:1.00 Angulo_error = poco_positivo & Distancia_arbol_1 <> proxima & Angulo_arbol_1 <> cero --> Angulo_direccion = poco_derechaI#9=R1:1.00 Angulo_error = poco_positivo & Distancia_arbol_2 <> proxima & Angulo_arbol_2 <> cero --> Angulo_direccion = poco_derechaI#10=R1:1.00 Angulo_error = poco_positivo & Distancia_arbol_3 <> proxima & Angulo_arbol_3 <> cero --> Angulo_direccion = poco_derechaI#11=C1:-- REGLA 3M - Modificar la dirección de marcha ligeramente hacia la izquierdaI#12=R1:1.00 Angulo_error = poco_negativo & Distancia_arbol_1 <> proxima & Angulo_arbol_1 <> cero --> Angulo_direccion = poco_izquierdaI#13=R1:1.00 Angulo_error = poco_negativo & Distancia_arbol_2 <> proxima & Angulo_arbol_2 <> cero --> Angulo_direccion = poco_izquierdaI#14=R1:1.00 Angulo_error = poco_negativo & Distancia_arbol_3 <> proxima & Angulo_arbol_3 <> cero --> Angulo_direccion = poco_izquierdaI#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_derechaI#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_derechaI#19=C1:-- REGLA 6M - Modificar la dirección de marcha ligeramente hacia la izquierdaI#20=R1:1.00 Angulo_error = muy_negativo & Velocidad = rapida --> Angulo_direccion = poco_izquierdaI#21=C1:-- REGLA 7M - Modificar la dirección de marcha mucho hacia la izquierdaI#22=R1:1.00 Angulo_error = muy_negativo & Velocidad <> rapida --> Angulo_direccion = mucho_izquier-daI#23=C1:-- REGLAS para la AceleraciónI#24=C1:-- REGLA 1A - Frenar levemente porque se alejaI#25=R1:1.00 Angulo_error = muy_positivo & Velocidad = rapida --> Aceleracion = frenar_levementeI#26=C1:-- REGLA 2A - Frenar levemente porque se alejaI#27=R1:1.00 Angulo_error = muy_negativo & Velocidad = rapida --> Aceleracion = frenar_levementeI#28=C1:-- REGLA 3A - Acelerar a fondo porque la pelota esta lejos y puede alcanzar mas velocidadI#29=R1:1.00 Distancia_pelota = lejana & Velocidad <> rapida --> Aceleracion = a_fondoI#30=C1:-- REGLA 4A - Hacer Aceleración cero, no acelera mas porque va a velocidad maximaI#31=R1:1.00 Distancia_pelota = lejana & Velocidad = rapida --> Aceleracion = ceroI#32=C1:-- REGLA 5A - Aceleración leve, aun faltando llegar a la pelota, se acelera levemente porque hay velocidad que incrementarI#33=R1:1.00 Distancia_pelota = mediana & Velocidad <> rapida --> Aceleracion = leveI#34=C1:-- REGLA 6A - Hacer Aceleración cero, no acelera mas porque va a velocidad maximaI#35=R1:1.00 Distancia_pelota = mediana & Velocidad = rapida --> Aceleracion = ceroI#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_libreI#38=C1:-- REGLA 8A - Aceleración leve, cerca de la pelota, y al quedarse sin velocidad, acelera levementeI#39=R1:1.00 Distancia_pelota = proxima & Velocidad = cero --> Aceleracion = leveI#40=C1:-- REGLA 9A - Frenar fuerte, casi en el objetivo y con velocidad rapida, va frenandoI#41=R1:1.00 Distancia_pelota = muy_proxima & Velocidad = rapida --> Aceleracion = frenar_levementeI#42=C1:-- REGLA 10A - Frenar levemente, casi en el objetivo y con velocidad mediana, frena de a pocoI#43=R1:0.75 Distancia_pelota = muy_proxima & Velocidad = mediana --> Aceleracion = marcha_libreI#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 = ceroI#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 = ceroI#48=C1:-- REGLA 13A - Aceleración leve, cuando llego al objetivo sin velocidad, freno apenas para dete-nerme.I#49=R1:1.00 Distancia_pelota = cero & Velocidad = cero --> Aceleracion = frenar_fuerteI#50=C1:-- REGLA 14A - Frenar fuerte, cuando llego asl objetivo con minima velocidad, freno para detener-me.
Página 114 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
I#51=R1:1.00 Distancia_pelota = cero & Velocidad = muy_lenta --> Aceleracion = frenar_fuerteI#52=C1:-- REGLA 15A - Marcha libre, si falta poco para llegar al objetivo y tengo algo de velocidad, acele-ro poco.I#53=R1:1.00 Distancia_pelota = proxima & Velocidad = mediana --> Aceleracion = ceroI#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 = ceroI#56=C1:-- REGLAS para esquivar el árbolI#57=C1:-- REGLA 1T - Girar ligeramente hacia la izquierda para esquivar el árbol, al comenzar a aproxi-marse al arbolI#58=R1:1.00 Distancia_arbol_1 = proxima & Angulo_arbol_1 = poco_positivo --> Angulo_direccion = po-co_izquierdaI#59=R1:1.00 Distancia_arbol_2 = proxima & Angulo_arbol_2 = poco_positivo --> Angulo_direccion = po-co_izquierdaI#60=R1:1.00 Distancia_arbol_3 = proxima & Angulo_arbol_3 = poco_positivo --> Angulo_direccion = po-co_izquierdaI#61=C1:-- REGLA 2T - Girar ligeramente hacia la derecha para esquivar el árbol, al comenzar a aproximarse al arbolI#62=R1:1.00 Distancia_arbol_1 = proxima & Angulo_arbol_1 = poco_negativo --> Angulo_direccion = po-co_derechaI#63=R1:1.00 Distancia_arbol_2 = proxima & Angulo_arbol_2 = poco_negativo --> Angulo_direccion = po-co_derechaI#64=R1:1.00 Distancia_arbol_3 = proxima & Angulo_arbol_3 = poco_negativo --> Angulo_direccion = po-co_derechaI#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_fuerteI#67=R1:1.00 Distancia_arbol_2 = proxima & Angulo_arbol_2 = cero --> Aceleracion = frenar_fuerteI#68=R1:1.00 Distancia_arbol_3 = proxima & Angulo_arbol_3 = cero --> Aceleracion = frenar_fuerte
Página 115 de 143
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 FlexNombre: Fuzzy.ini[ProjectWindow]Window=X=149,Y=33,W=415,H=302,Iconic=0,Zoomed=0ProjectWindowState=SelInput=8,SelOutput=0[LastMatlabGen]TargetFile=c:\guille\fuzzyl~1\tesis\fuzzy.mTemplate=LastChangeTime=117901063HasRangeMap=0[RuleWindow]Window=X=125,Y=102,W=680,H=484,Iconic=0,Zoomed=0RuleWindowState=ShowGraph=1,TextRatio=0.7[InputWindow:Velocidad]Window=X=148,Y=330,W=199,H=179,Iconic=0,Zoomed=0PortState=MF=1,ViewRange=0,5[InputWindow:Angulo_arbol_1]Window=X=92,Y=100,W=199,H=179,Iconic=0,Zoomed=0PortState=MF=0,ViewRange=-180,180[InputWindow:Distancia_arbol_1]Window=X=23,Y=25,W=199,H=179,Iconic=0,Zoomed=0PortState=MF=0,ViewRange=0,1000[InputWindow:Distancia_pelota]Window=X=0,Y=0,W=199,H=179,Iconic=0,Zoomed=0PortState=MF=3,ViewRange=0,600[OutputWindow:Aceleracion]Window=X=537,Y=233,W=199,H=179,Iconic=0,Zoomed=0PortState=MF=0,ViewRange=-2,1[OutputWindow:Angulo_direccion]Window=X=598,Y=73,W=199,H=179,Iconic=0,Zoomed=0PortState=MF=0,ViewRange=-45,45
Página 116 de 143
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.frmVERSION 5.00Object = "{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" EndEndAttribute VB_Name = "MDIFuzzy"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = False
Private Sub Comenzar_Click()'ACEPTA SEGUIR SI FUERON UBICADOS LOS OBJETOSIf Ubica = False Then Exit SubOn Error Resume Next
Página 117 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
'ACEPTA ENTRADA DE DISTANCIA MINIMA Y VELOCIDAD MINIMA PARA PARAR LA SIMULA-CION'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 = 0On Error GoTo 0'SETEA POSICION Y TAMAÑO FORMULARIO FUZZYFuzzy2.Top = 100Fuzzy2.Left = 6600'REDEFINE X E Y SEGUN EL TAMAÑO DEL CUERPO DEL CARRITOX = Fuzzy1.Carrito.Left + Fuzzy1.Carrito.Width / 2Xinicial = XY = Fuzzy1.Carrito.Top + Fuzzy1.Carrito.Height / 2Yinicial = Y'GUARDA EN LAS VARIABLES LAS POSICIONES DE LOS OBJETOSX11 = Fuzzy1.Arbol_1.Left + Fuzzy1.Arbol_1.Width / 2Y11 = Fuzzy1.Arbol_1.Top + Fuzzy1.Arbol_1.Height / 2X12 = Fuzzy1.Arbol_2.Left + Fuzzy1.Arbol_2.Width / 2Y12 = Fuzzy1.Arbol_2.Top + Fuzzy1.Arbol_2.Height / 2X13 = Fuzzy1.Arbol_3.Left + Fuzzy1.Arbol_3.Width / 2Y13 = Fuzzy1.Arbol_3.Top + Fuzzy1.Arbol_3.Height / 2X2 = Fuzzy1.Pelota.Left + Fuzzy1.Pelota.Width / 2Y2 = 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 + vbDefaul-tButton2, "Seleccionar opcion de comienzo: ")RESPUESTA = 1If 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 = TrueElse'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 iteracionEnd IfEnd Sub
Private Sub MDIForm_Load()Ubica = False'OCULTA BARRA DE ESTADO PARA ESTADISTICASMDIFuzzy.Barra_est.Visible = FalseCall Ubicar_ClickCall Comenzar_ClickEnd Sub
Private Sub Reiniciar_Click()Call MDIForm_LoadX = Xinicial
Página 118 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Y = YinicialEnd Sub
Private Sub Salir_Click()'TERMINA LA APLICACIONEndEnd Sub
Private Sub Timer1_Timer()'POR CADA SEGUNDO LLAMA AL ALGORITMO DE SIMULACION, AUNQUE NO'SE HAYA PRESIONADO UNA TECLA PARA CAMBIOS EN LA NAVEGACIONCall iteracionEnd Sub
Private Sub Ubicar_Click()Ubica = True'MAXIMIZA FORMULARIO PRINCIPAL'Me.WindowState = 2'SETEA POSICION Y TAMAÑO DEL FORMULARIO SIMULACIONFuzzy1.Left = 0Fuzzy1.Top = 0Fuzzy1.ShowFuzzy1.ScaleMode = 0'TAMAÑO DEL CAMPO DE GOLFFuzzy1.ScaleHeight = 600Fuzzy1.ScaleWidth = 600Fuzzy1.RefreshEnd Sub
Página 119 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Nombre: Fuzzy1.frmVERSION 5.00Object = "{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
Página 120 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
End 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
Página 121 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Left = 5010 TabIndex = 6 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 EndEndAttribute VB_Name = "Fuzzy1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = False
Private Sub Form_DblClick()If Ubica = True Then Ubica = FalseElse Ubica = TrueEnd If
Do While Ubica = False DoEventsLoopEnd Sub
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)'CAMBIA POSICION DEL OBJETO ARRASTRADO SOBRE EL FORMULARIOSource.Left = X + Source.Width / 2Source.Top = Y + Source.Height / 2X11 = Fuzzy1.Arbol_1.Left + Fuzzy1.Arbol_1.Width / 2Y11 = Fuzzy1.Arbol_1.Top + Fuzzy1.Arbol_1.Height / 2X12 = Fuzzy1.Arbol_2.Left + Fuzzy1.Arbol_2.Width / 2Y12 = Fuzzy1.Arbol_2.Top + Fuzzy1.Arbol_2.Height / 2X13 = Fuzzy1.Arbol_3.Left + Fuzzy1.Arbol_3.Width / 2Y13 = Fuzzy1.Arbol_3.Top + Fuzzy1.Arbol_3.Height / 2X2 = Fuzzy1.Pelota.Left + Fuzzy1.Pelota.Width / 2Y2 = Fuzzy1.Pelota.Top + Fuzzy1.Pelota.Height / 2
DoEventsEnd 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)
Página 122 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
'SI SE PRESIONA UNA TECLA EN LA MODALIDAD MANUAL:Select Case KeyCode'ACELERA=FLECHA ARRIBACase 38 If Aceleracion < 1 Then Aceleracion = Format(Aceleracion + 0.1, "0.00")'DOBLA IZQUIERDA=FLECHA IZQUIERDACase 37 If Angulo_direccion > -45 Then Angulo_direccion = Angulo_direccion - 1'DOBLA DERECHA=FLECHA DERECHACase 39 If Angulo_direccion < 45 Then Angulo_direccion = Angulo_direccion + 1'DESACELERA=FLECHA ABAJOCase 40 If Aceleracion > -2 Then Aceleracion = Format(Aceleracion - 0.1, "0.00")End SelectEnd Sub
Página 123 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Nombre: Fuzzy2.frmVERSION 5.00Object = "{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
Página 124 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Weight = 400 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
Página 125 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Max = 90 Style = 2 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
Página 126 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Width = 285 End Begin VB.Label Label37 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
Página 127 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Top = 510 Width = 405 End Begin VB.Shape Shape15 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
Página 128 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
ForeColor = &H00000000& Height = 195 Left = 1470 LinkItem = "Angulo_arbol_1" LinkTopic = "excel|fuzzy" 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
Página 129 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Top = 1080 Width = 675 End Begin GaugeLib.Gauge Velocimetro Height = 495 Left = 735 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
Página 130 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
End Begin VB.Label Label6 Caption = "Angulo_error" ForeColor = &H00FF00FF& Height = 165 Left = 90 TabIndex = 38 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&
Página 131 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Height = 255 Left = 1020 TabIndex = 27 Top = 2220 Width = 285 End Begin VB.Label Label2 Caption = "Distancia_arbol_1" 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
Página 132 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Width = 165 End Begin VB.Label Label23 BackColor = &H00404040& BackStyle = 0 'Transparent Caption = "3" ForeColor = &H00FFFFFF& Height = 255 Left = 1290 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"
Página 133 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
TabIndex = 50 Top = 0 Visible = 0 'False Width = 465 End Begin VB.Label Label_est ForeColor = &H00808080& Height = 255 Left = 30 LinkTopic = "Excel|estadisticas" TabIndex = 49 Top = 30 Visible = 0 'False Width = 465 EndEndAttribute VB_Name = "Fuzzy2"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute 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 ARRIBACase 38 If Aceleracion < 1 Then Aceleracion = Format(Aceleracion + 0.1, "0.00")'DOBLA IZQUIERDA=FLECHA IZQUIERDACase 37 If Angulo_direccion > -45 Then Angulo_direccion = Angulo_direccion - 1'DOBLA DERECHA=FLECHA DERECHACase 39 If Angulo_direccion < 45 Then Angulo_direccion = Angulo_direccion + 1'DESACELERA=FLECHA ABAJOCase 40 If Aceleracion > -2 Then Aceleracion = Format(Aceleracion - 0.1, "0.00")End SelectEnd Sub
Página 134 de 143
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.basAttribute VB_Name = "Fuzzy"Global Ubica As BooleanGlobal Dist_ini As DoubleGlobal Vel_ini As DoubleGlobal Veloc_prom As DoubleGlobal Est_aceleracion(1 To 1000) As DoubleGlobal Est_velocidad(1 To 1000) As DoubleGlobal Est_distancia_pelota(1 To 1000) As DoubleGlobal Angulo_nuevo As DoubleGlobal Espacio As DoubleGlobal Manual As BooleanGlobal Tiempo As IntegerGlobal X As DoubleGlobal Y As DoubleGlobal Xinicial As DoubleGlobal Yinicial As DoubleGlobal X11 As DoubleGlobal Y11 As DoubleGlobal X12 As DoubleGlobal Y12 As DoubleGlobal X13 As DoubleGlobal Y13 As DoubleGlobal X2 As DoubleGlobal Y2 As DoubleGlobal A As DoubleGlobal B As DoubleGlobal C1 As DoubleGlobal D1 As DoubleGlobal C2 As DoubleGlobal D2 As DoubleGlobal C3 As DoubleGlobal D3 As DoubleGlobal Angulo_pelota_aux As DoubleGlobal Angulo_auto_aux As DoubleGlobal Angulo_arbol_1_aux As DoubleGlobal Angulo_arbol_2_aux As DoubleGlobal Angulo_arbol_3_aux As DoubleGlobal Angulo_arbol_1 As DoubleGlobal Distancia_arbol_1 As DoubleGlobal Angulo_arbol_2 As DoubleGlobal Distancia_arbol_2 As DoubleGlobal Angulo_arbol_3 As DoubleGlobal Distancia_arbol_3 As DoubleGlobal Distancia_pelota As DoubleGlobal Angulo_error As DoubleGlobal Angulo_direccion As DoubleGlobal Aceleracion As DoubleGlobal 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 IfElseIf ANGULO < 0 Then If ANGULO < -180 Then Angulo_180 = (360 + ANGULO) Else Angulo_180 = ANGULO End IfElse Angulo_180 = 0
Página 135 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
End IfEnd Function
Public Function grados(var As Double) As Double'CONVERSION DE RADIANES EN GRADOSgrados = var * 180 / 3.14159265358979End Function
Public Function radianes(var As Double) As Double'CONVERSION GRADOS EN RADIANESradianes = 3.14159265358979 * var / 180End 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º GRADOSIf Angulo_auto_aux > ANGULO Then Angulo_180_auto = (Angulo_auto_aux - ANGULO) * -1ElseIf Angulo_auto_aux < ANGULO Then Angulo_180_auto = ANGULO - Angulo_auto_auxElse Angulo_180_auto = 0End IfAngulo_180_auto = Angulo_180(Angulo_180_auto)End FunctionPublic Sub actualizar()'SETEA GROSOR DEL PINCEL PARA EL GRAFICO DE COORDENADAS DE GUIAFuzzy1.DrawWidth = 1'GRAFICA COORDENADAS DE GUIAFuzzy1.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 VELOCIDADVelocidad = Velocidad + Aceleracion * 1'LIMITA LA VELOCIDAD A LOS LIMITES DEFINIDOSIf Velocidad > 5 Then Velocidad = 5If Velocidad < 0 Then Velocidad = 0'CARGA MATRIZ UNIDIMENSIONAL PARA LAS VARIABLES ESTADISTICASEst_velocidad(Tiempo) = VelocidadEst_aceleracion(Tiempo) = AceleracionEst_distancia_pelota(Tiempo) = Distancia_pelota'CALCULA EL ESPACIO RECORRIDO POR ECUACION DE CINEMATICA'PARA MOVIMIENTO UNIFORMEMENTE VARIADOEspacio = 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 RECIBIDOAngulo_auto_aux = Angulo_180(Angulo_auto_aux + Angulo_direccion)'CALCULO DE LA NUEVA COORDENADA PARA LA POSICION DEL CARRITOX = 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 SIMULACIONIf Angulo_auto_aux > 0 Then Fuzzy1.Carrito = Angulo_auto_auxElseIf Angulo_auto_aux < 0 Then Fuzzy1.Carrito = 360 + Angulo_auto_auxElse Fuzzy1.Carrito = 0End If'ESTABLECE EN EL FORMULARIO DE SIMULACION EL VALOR DEL ANGULO DEL AUTOFuzzy1.Label_angulo_auto.Caption = Angulo_auto_aux'ESTABLECE EN EL FORMULARIO DE SIMULACION LAS COORDENADAS DEL CARRITOFuzzy1.Label_x.Caption = XFuzzy1.Label_y.Caption = Y'ESTABLECE EN EL FORMULARIO FUZZY LA INCLINACION DE LAS RUEDAS SEGUN EL'ANGULO DE DIRECCIONFuzzy2.Rueda1 = Angulo_direccion + 45Fuzzy2.Rueda2 = Angulo_direccion + 45'POSICIONA EL CARRITO EN LA NUEVA UBICACION DE COORDENADAS,'TENIENDO EN CUENTA EL GROSOR Y LA ESCALA DEL CARRITOFuzzy1.Carrito.Left = X - Fuzzy1.Carrito.Width / 2
Página 136 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fuzzy1.Carrito.Top = Y - Fuzzy1.Carrito.Height / 2'ESTABLECE LAS NUEVAS COORDINADAS GUIAFuzzy1.Line (0, Y)-(10, Y), QBColor(10)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 TRAYECTORIAFuzzy1.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 ACELERACIONFuzzy2.Aceleracion_flow.FloodPercent = 0Fuzzy2.Frenado_flow.FloodPercent = 0Fuzzy2.Constante_flow.BackColor = &HC0C0C0'ESTABLECE GRAFICAMENTE EL GRADO DE ACELERACION EN EL FORMULARIO FUZZYIf Aceleracion > 0 Then Fuzzy2.Aceleracion_flow.FloodPercent = Aceleracion * 100 / 1ElseIf Aceleracion < 0 Then Fuzzy2.Frenado_flow.FloodPercent = Abs(Aceleracion) * 100 / 2Else Fuzzy2.Constante_flow.BackColor = QBColor(15)End If'ESTABLECE GRAFICAMENTE LA VELOCIDAD EN EL FORMULARIO FUZZYIf Velocidad > 0 Then Fuzzy2.Velocimetro = VelocidadEnd 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))
Página 137 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
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 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
Página 138 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
DoEvents Fuzzy2.Text_Distancia_arbol_1.LinkPoke DoEvents Fuzzy2.Text_Angulo_arbol_2.LinkPoke DoEvents 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 DI-FUSO RECIBA LOS DATOS DE EXCEL DoEvents 'RECIBE LOS DATOS DESDE EXCEL QUE FUERON PROCESADOS ANTES POR EL CONTROLA-DOR 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 MANUALLoop Until (Distancia_pelota <= Dist_ini And Velocidad <= Vel_ini) Or Manual = TrueDoEventsIf 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 " + For-mat(Veloc_prom, "0.00") + " m/s"'DESACTIVA COMUNICACION CON EXCEL PARA ENVIO DE ESTADISTICAS Fuzzy2.Label_est.LinkMode = 0 Beep
Página 139 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
'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 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 ACELERA-CION 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 VELOCI-DAD Fuzzy2.Label_est.Caption = "B2:B" + Trim(i + 1)'EXCEL 5 EN ESPAÑOL Fuzzy2.Label_est.LinkItem = "L2C5"
Página 140 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
Fuzzy2.Label_est.LinkPoke DoEvents'EXCEL 97 EN ESPAÑOL Fuzzy2.Label_est.LinkItem = "F2C5" Fuzzy2.Label_est.LinkPoke DoEvents'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 Fuzzy2End IfEnd Sub
Página 141 de 143
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 97Nombre: Fuzzy.xls (MODULO_FUZZY)Sub Rectángulo1_AlHacerClic()'GRAFICA ACELERACIONCall ACELERACION'GRAFICA VELOCIDADCall VELOCIDAD'GRAFICA DISTANCIA_PELOTACall DISTANCIA_PELOTAEnd 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").SelectEnd 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.SelectEnd 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"
Página 142 de 143
Sistema de Navegación Autónoma para un robot utilizando Lógica Difusa Guillermo Gabriel Fernández Amado
.Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "mts" End With ActiveChart.Legend.SelectEnd 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.SelectEnd Sub
Página 143 de 143