Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de...

48
UNIVERSIDAD NACIONAL DE TUCUMÁN -FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGÍA DEPARTAMENTO DE ELECTRICIDAD,ELECTRÓNICA Y COMPUTACIÓN I NGENIERÍA EN C OMPUTACIÓN J UNIO 2016 Trabajo de Graduación D ESARROLLO DE UN FRAMEWORK EN LENGUAJE C PARA CONTROLADORES DIFUSOS REVISIÓN 1 autor Franco Javier S ALINAS MENDOZA CX1416301 tutor Ing. Esteban VOLENTINI co-tutor Dr. Adrián WILL

Transcript of Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de...

Page 1: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

UNIVERSIDAD NACIONAL DE TUCUMÁN - FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGÍA

DEPARTAMENTO DE ELECTRICIDAD, ELECTRÓNICA Y COMPUTACIÓN

INGENIERÍA EN COMPUTACIÓN

JUNIO 2016

Trabajo de Graduación

DESARROLLO DE UN FRAMEWORK EN LENGUAJE

C PARA CONTROLADORES DIFUSOSREVISIÓN 1

autorFranco Javier SALINAS MENDOZA

CX1416301

tutorIng. Esteban VOLENTINI

co-tutorDr. Adrián WILL

Page 2: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Agradecimientos

A Leandro Gutierrez, quien trabajó conmigo en los inicios de este proyecto, y a mis tutores,Esteban Volentini y Adrián Will, quienes me acompañaron durante todo el desarrollo.

1

Page 3: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Dedicatorias

Dedico este trabajo a mis padres, por su esfuerzo a lo largo de estos años, a mi abuela por suafecto incondicional, y a Lucía, quien me inspiró para seguir adelante.

2

Page 4: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Prólogo

A lo largo de este trabajo de graduación se describen los procesos de diseño, implementación yprueba de µFuzzy: un framework de lógica difusa pensado especialmente para sistemas embebidos.A su vez, se presentan dos ejemplos de aplicación sobre un robot móvil autónomo terrestre.

3

Page 5: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Índice general

1. Introducción 61.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2. Conceptos de lógica difusa 82.1. Conceptos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.1.1. Estructura de un sistema difuso . . . . . . . . . . . . . . . . . . . . . . . 82.1.2. Funciones de membresía . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1.3. Parámetros de los sistemas difusos . . . . . . . . . . . . . . . . . . . . . . 10

2.2. Construcción de un sistema difuso . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.1. Elección de las variables del sistema . . . . . . . . . . . . . . . . . . . . . 102.2.2. Definición de las reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2.3. Definición de las funciones de membresía . . . . . . . . . . . . . . . . . . 11

2.3. Proceso de inferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3. Diseño 143.1. Aspectos generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.1.1. Necesidad de un formato propio . . . . . . . . . . . . . . . . . . . . . . . 143.1.2. Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.2. µFuzzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2.1. Elección del lenguaje de desarrollo . . . . . . . . . . . . . . . . . . . . . 153.2.2. Consideraciones respecto al lenguaje . . . . . . . . . . . . . . . . . . . . 153.2.3. Utilización de aritmética de punto fijo . . . . . . . . . . . . . . . . . . . . 163.2.4. Limitaciones debidas al uso de punto fijo. . . . . . . . . . . . . . . . . . . 163.2.5. Características soportadas . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.3. cfsconvert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.3.1. Características generales . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.3.2. Elección del lenguaje de desarrollo . . . . . . . . . . . . . . . . . . . . . 18

4. Aplicación 204.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.2. Control de lazo cerrado para los motores . . . . . . . . . . . . . . . . . . . . . . . 20

4.2.1. Estudio de los motores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.2.2. Estructura del controlador . . . . . . . . . . . . . . . . . . . . . . . . . . 214.2.3. Diseño del sistema de control difuso . . . . . . . . . . . . . . . . . . . . . 21

4.3. Seguimiento de pared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4

Page 6: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

5. Resultados 265.1. Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5.1.1. Calidad del código fuente . . . . . . . . . . . . . . . . . . . . . . . . . . 265.1.2. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265.1.3. Integración a la CIAA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5.2. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.2.1. Control de velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.2.2. Seguimiento de pared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.3. Conclusiones y trabajos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Anexos 34

A. API de µFuzzy 35A.1. Tipos de dato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35A.2. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35A.3. Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39A.4. Códigos de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

B. Manual de cfsconvert 41

C. Especificación del formato CFS 42

D. Cálculo de los coeficientes de Sugeno-Takagi 46

ÍNDICE GENERAL 5

Page 7: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Capítulo 1

Introducción

1.1. Motivación

Desde su formulación en 1965, la lógica difusa se ha utilizado con éxito en inumerables apli-caciones tales como sistemas de predicción de clima, reconocimiento de patrones faciales, automa-tización industrial y robótica [7], aunque sin dudas, sus aplicaciones más destacadas pertenecen alcampo de los sistemas de control. El ejemplo más representativo es el sistema utilizado en el me-tro de Sendai, Japón. El mismo se encuentra operativo desde 1988 y su desempeño supera tanto aopeararios como a sistemas de control convencionales [5].

Por otro lado, desde hace más de cuatro décadas, la cantidad de transistores en los circuitosintegrados aumenta tal como lo establece la ley de Moore, y como consecuencia, su costo se reduce[1]. En el año 1997 Intel lanzó el microprocesador Pentium II 233 a un precio de mercado deUS$636. Dos décadas más tarde, en febrero de 2016, la fundación Raspberry PI lanzó la RaspberryPI 3 Model B, una Placa de Tamaño Reducido (SBC) de performance comparable al procesadorde Intel a un precio casi 20 veces menor. Por su parte, en el segmento de los sistemas embebidosde bajo costo, un microcontrolador con núcleo ARM Cortex-M0 puede adquirirse por centavos dedólar. Esto permite aplicaciones embebidas cada vez más complejas y abre la puerta a incorporarsoftware e inteligencia artificial a dispositivos que hoy no los tienen, por una fracción mínima de sucoste de producción.

En el marco del proyecto de investigación del CIUNT, Inteligencia Artificial y Aplicacionesa Robótica, surgió la necesidad de implementar sistemas de control complejos, y la lógica difusase eligió como herramienta para llevarlos a cabo. Hoy existen diversas librerías de lógica difusalibres y gratuitas tales como fuzzylite, Free Fuzzy Logic Library (FFLL), o Embedded Fuzzy LogicLibrary (eFLL), sin embargo solo esta última está pensada para sistemas embebidos, lo cual resultaun requisito indispensable para las necesidades del proyecto. Aún asi, esta librería tiene fuerteslimitaciones. En primer lugar, utiliza operaciones con punto flotante, lo cual repercute fuertementeen la performance en microcontroladores sin Unidad de Punto Flotante (FPU). En segundo lugar,reserva memoria dinámicamente, lo que la hace inadecuada para Sistemas Operativos en TiempoReal (RTOSs). Finalmente, no permite realizar ajustes al sistema sin recompilar, lo cual impactanegativamente en el flujo de trabajo. Esto plantea la necesidad de crear una nueva librería, liviana yflexible, que sea capaz de ejecutarse en la gama más económica de los microcontroladores.

CAPÍTULO 1. INTRODUCCIÓN 6

Page 8: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

1.2. Objetivos

El objetivo central de este proyecto es desarrollar un framework de lógica difusa, capaz defuncionar en microcontroladores de bajo costo independientemente de su arquitectura, y compatiblecon las herramientas más difundidas de lógica difusa de la actualidad. Dado el potencial de esteframework para ser utilizado en aplicaciones industriales en las que la seguridad es prioritaria, seplantea como una meta adicional someterlo a exhaustivas pruebas de funcionamiento.

Finalmente, el framework será aplicado en un robot para resolución de laberintos[3] desarrolla-do en el marco de otro trabajo de graduación. Este robot posee dos microcontroladores: uno parainteractuar con los sensores y actuadores, y otro para ejecutar algoritmos de alto nivel y tomas dedecisiones. µFuzzy se utilizará en el primero para efectuar control de lazo cerrado sobre las veloci-dades de los motores, mientras que en el segundo servirá para generar un comportamiento de wallfollower.

CAPÍTULO 1. INTRODUCCIÓN 7

Page 9: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Capítulo 2

Conceptos de lógica difusa

2.1. Conceptos básicos

En la lógica booleana o binaria, esencial para la electrónica digital y la programación de compu-tadoras, cada proposición o variable puede tomar uno de dos valores de verdad: verdadero o falso.Por ejemplo, París está en Francia es una proposición verdadera y Los perros son peces es unaproposición falsa. Sin embargo ciertas situaciones no pueden ser modeladas con precisión usandológica booleana. Considérese la proposición Juan es alto y supóngase que Juan mide 1.75 m. Nopuede decirse a ciencia cierta si la proposición es verdadera o falsa porque no existe una defini-ción nítida del concepto de altura. Dicho de otro modo, no existe una altura umbral que sirva paraclasificar a las personas como altas o bajas. En cambio, tenemos una noción de altura mucho másvaga, dependiente del contexto y cargada de subjetividad. La lógica difusa, que puede entendersecomo una extensión de la lógica binaria, modela estas situaciones imprecisas o ambiguas típicas delrazonamiento humano, permitiendo que las proposiciones en lugar de ser absolutamente verdaderaso absolutamente falsas puedan tener un cierto grado de verdad.

2.1.1. Estructura de un sistema difuso

La Fig. 2.1 ilustra la estructura básica de un sistema de inferencia basado en lógica difusa.Fundamentalmente, está compuesto por un conjunto de reglas, que permiten obtener el valor deciertas variables de salida a partir de una serie de variables de entrada. Estas reglas, al igual que lasde la lógica proposicional, están conformadas por un antecedente y un consecuente. Sin embargo,en la lógica difusa, el valor de verdad de las proposiciones se representa con un número real en elintervalo [0, 1]. Por ejemplo, una proposición con un valor de verdad de 0.8 puede entenderse comorazonablemente cierta, mientras que un grado de verdad 0 indica que la misma es absolutamentefalsa.

Otra diferencia respecto a la lógica clásica, es que las variables involucradas en el proceso deinferencia no son numéricas ni booleanas, sino que son variables lingüísticas. Por ejemplo, si unsistema utiliza la variable temperatura, entonces la misma tomaría valores tales como alta, bajao muybaja, en lugar de valores numéricos expresados en grados. No obstante, si dicho sistemanecesitara una medición de la temperatura para funcionar, probablemente la obtendría de un sen-sor cuya lectura sí sea numérica. Por esta razón, el primer paso en el proceso de inferencia difusaconsiste en convertir valores numéricos a valores difusos. Este paso recibe el nombre de fuzzifica-ción. Análogamente, el último paso consiste en realizar el proceso inverso, y se lo conoce comodefuzzificación.

CAPÍTULO 2. CONCEPTOS DE LÓGICA DIFUSA 8

Page 10: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 2.1: Estructura de un sistema de inferencia basado en lógica difusa

2.1.2. Funciones de membresía

Antes de poder efectuar la fuzzificación, es necesario dar un sentido a cada uno de los términoslingüísticos utilizados en el sistema. Para el ejemplo anterior, esto implica que se debe definir quésignifica que la temperatura sea alta, baja o muy baja. Cabe destacar que el significado de estosconceptos depende de cada sistema particular; lo que para un horno puede ser una temperatura muybaja, para una heladera podría resultar extremadamente alta.

Matemáticamente, cada término lingüístico puede entenderse como un conjunto, pero en el quela pertenencia al mismo no es booleana sino difusa. Para cierto sistema, una temperatura de 10 ◦Cpuede pertenecer en gran medida al conjunto de las temperaturas bajas, en menor medida al conjuntode las temperaturas muy bajas, y no pertenecer en absoluto al conjunto de las temperaturas altas.Estos conjuntos difusos se definen utilizando una función de pertenencia o membresía, que asignaa cada elemento del universo de discurso (en este caso el conjunto de temperaturas posibles), unvalor en el intervalo [0, 1] que representa el grado de pertenencia de dicho elemento al conjunto.Por ejemplo, para la variable temperatura podrían definirse las funciones de membresía que semuestran en la Fig. 2.2.

Figura 2.2: Funciones de membresía

CAPÍTULO 2. CONCEPTOS DE LÓGICA DIFUSA 9

Page 11: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

2.1.3. Parámetros de los sistemas difusos

En la lógica clásica, los operadores utilizados para la conjunción o la disyunción se definenmediante tablas de verdad. Esto es posible ya que operan sobre valores booleanos y solo puedenocurrir unas pocas combinaciones de entrada. En cambio, en la lógica difusa las proposicionespueden tomar cualquier valor en el intervalo [0, 1], por lo que los operadores deben definirse comofunciones. El operador conjuntivo puede escogerse de un conjunto de funciones denominadas T-normas, entre las cuales la más habitual es la función mínimo. Análogamente, el disyuntivo se eligede la familia de S-normas, y la elección más habitual es la función máximo.

A su vez, existen diferentes métodos de inferencia, entre los cuales probablemente los más di-fundidos son el método de Mamdani y el de Sugeno-Takagi. La principal diferencia entre estosmétodos es que en el método de Sugeno, los consecuentes de las reglas no utilizan variables lingüís-ticas, sino que son una constante, o bien una combinación lineal de las entradas. Así, una regla deun sistema basado en el método de Sugeno tiene la forma:

SI temperatura es alta Y humedad es baja ENTONCES y = aT + bh+ c

Donde T y h son los valores numéricos de la temperatura y la humedad respectivamente, a, b y cson constantes, y y es la variable de salida.

En la práctica, la ventaja del método de Mamdani es que, ya que los consecuentes utilizan varia-bles lingüísticas, la definición de las reglas resulta más intuitiva. Por su parte, el método de Sugeno-Takagi, es más eficiente, ya que al utilizar variables numéricas en los consecuentes, el proceso dedefuzzificación suele requerir menos operaciones.

Otro parámetro que debe definirse es qué método se utilizará para la defuzzificación, es decir,de qué manera se convertirán los conjuntos difusos producto del proceso de inferencia, a valoresnuméricos. Para el método de Mamdani, el más habitual es el centro de gravedad, mientras que paraSugeno-Takagi suele utilizarse la media ponderada.

2.2. Construcción de un sistema difuso

Supóngase que se desea desarrollar un sistema para controlar el nivel de agua en un tanque.El líquido ingresa al mismo a través de una cañería, cuyo caudal puede controlarse mediante unaelectroválvula. El fluído abandona el tanque a un ritmo variable que depende de un factor externo yno puede controlarse. A su vez, el sistema cuenta con un sensor que mide el nivel del tanque, y otroque mide la presión de agua en la cañería de alimentación. La apertura de la válvula puede ajustarseentre 0 mm2 y 100 mm2. El nivel de agua óptimo es 1 m.

En este caso, se desarrollará un sistema difuso basado en el método de Mamdani, dado que elplanteamiento del mismo resulta mucho más intuitivo que con el método de Sugeno. Asimismo, parasimplificar la explicación del proceso de inferencia, se utilizarán las funciones mínimo y máximopara la conjunción y la disyunción respectivamente. Como defuzzificador se utilizará el centro degravedad.

2.2.1. Elección de las variables del sistema

La construcción del sistema comienza con la elección de las variables de entada y salida. Setrata de una elección y no una identificación, porque además de la opción trivial de elegir la lecturade los sensores como variables de entrada, podría elegirse el error de los mismos respecto a unpunto de referencia; incluso podrían adicionarse variables de entrada tales como las derivadas o lasintegrales de las lecturas respecto del tiempo. Como salida, por ejemplo, podría elegirse la apertura

CAPÍTULO 2. CONCEPTOS DE LÓGICA DIFUSA 10

Page 12: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

de la válvula, o bien la corrección en la apertura respecto a un modelo ideal. Existen varios criteriospara decidir, por ejemplo: si la lectura de los sensores tuviera altos niveles de ruido probablementela derivada no podría utilizarse; si puede tolerarse cierto corrimiento en el valor de referencia osetpoint puede omitirse la integral; si el valor de referencia es variable posiblemente sea mejorutilizar el error en las lectura del nivel y no el nivel como variable de entrada. En este caso, porcuestiones de simplicidad, se utilizarán sólo las lecturas de los sensores como entradas, y la aperturade la válvula como salida.

2.2.2. Definición de las reglas

Las reglas se definen en base al conocimiento de un experto o al estudio del comportamientodel sistema. En este caso, se utilizarán las siguientes:

1. SI nivel es alto ENTONCES apertura es nula

2. SI nivel es normal Y presion es baja ENTONCES apertura es grande

3. SI nivel es normal Y presion es normal ENTONCES apertura es media

4. SI nivel es normal Y presion es alta ENTONCES apertura es chica

5. SI nivel es bajo Y presion es baja ENTONCES apertura es máxima

6. SI nivel es bajo Y presion es normal ENTONCES apertura es grande

7. SI nivel es bajo Y presion es alta ENTONCES apertura es media

Puede observarse que en la primera regla, la variable presion no interviene. Esto implica que siem-pre que el nivel sea alto, la apertura será nula, independientemente del valor de la presión.

2.2.3. Definición de las funciones de membresía

Las funciones de membresía, al igual que las reglas, se obtienen a partir de un estudio delsistema. En este caso, se definieron como se ilustra en la Fig. 2.3. Como puede observarse, si elnivel del agua es menor a 80 cm entonces se lo considera absolutamente bajo. A partir de estepunto, el nivel comienza a aproximarse a un nivel normal. Un nivel de 1 m es absolutamente normal,pero para alturas mayores comienza a ser alto. Si la altura es mayor a 120 cm entonces el nivel esabsolutamente alto. En cuanto a la presión, la misma se considera baja si es inferior 300 kPa, normalsi es aproximadamente 500 kPa, y absolutamente alta si supera los 700 kPa. Finalmente, para laapertura de la válvula se definen las etiquetas lingüísticas nula, chica,media, grande, ymaxima,que corresponden a aperturas de aproximadamente 0 %, 25 %, 50 %, 75 %, y 100 %.

2.3. Proceso de inferencia

Para el ejemplo dado en la sección anterior, se explicará gráficamente el proceso de inferenciacuando el nivel medido es de 105 cm y que la presión es de 400 kPa.

El primer paso consiste en la obtención del grado de verdad de cada uno de los antecedentesde las reglas, para el valor actual de las variables de entradas. Como se muestra en la Fig. 2.4, losvalores de verdad se obtienen evaluando la función de membresía asociada al término lingüísticoque aparece en la proposición. Puede observarse que, por ejemplo, la proposición nivel = altotiene un grado de verdad de 0.25, y como esa es la única proposición en el antecedente de la primera

CAPÍTULO 2. CONCEPTOS DE LÓGICA DIFUSA 11

Page 13: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

(a) Nivel del agua (b) Presión en la cañería

(c) Apertura de la válvula

Figura 2.3: Funciones de membresia para las variables del sistema

regla, 0.25 también es el peso o valor de verdad del antecedente. A su vez, para la segunda regla,los valores de verdad de las proposiciones nivel = normal y presion = baja son 0.75 y 0.50. Eneste caso, como se utiliza la función mínimo para la conjunción, el grado de verdad del antecedenteresulta ser 0.50. La tabla 2.1 muestra los grados de verdad de los antecedentes de cada regla.

regla 1 2 3 4 5 6 7grado de verdad 0.25 0.50 0.50 0.00 0.00 0.00 0.00

Cuadro 2.1: Grados de verdad de los antecedentes de las reglas.

Una vez que se conocen los pesos de los antecedentes de cada regla, se procede a truncar lasfunciones de membresía del correspondiente consecuente, siempre que el valor que tome la funciónexcede el peso del antecedente. El resultado de esta operación se muestra en la Fig. 2.5a. Comopuede observarse, las únicas funciones de pertenencia que tienen peso son las correspondientes alas aperturas media, grande y nula, siendo la última la menos relevante.

Luego, como se ilustra en la Fig. 2.5b, las funciones de membresía se combinan tomando en cadapunto el valor máximo entre ellas para formar un conjunto difuso. Finalmente, se utiliza el métodode defuzzificación, que en este caso es el centro de gravedad, para obtener el valor numérico de lavariable de salida. En este caso, el cálculo del centro de gravedad da como resultado una apertura

CAPÍTULO 2. CONCEPTOS DE LÓGICA DIFUSA 12

Page 14: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

(a) Nivel de agua (b) Presión en la cañería

Figura 2.4: Evaluación de las funciones de membresía de entrada

(a) Pesos de cada función de membresía (b) Conjunto difuso de salida y defuzzificación

Figura 2.5: Obtención del valor de la variable de salida

del 40 %, que representa la salida del sistema difuso.

CAPÍTULO 2. CONCEPTOS DE LÓGICA DIFUSA 13

Page 15: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Capítulo 3

Diseño

3.1. Aspectos generales

3.1.1. Necesidad de un formato propio

En la actualidad existen diversos formatos utilizados para definir sistemas difusos tales como elFuzzy Inference System (FIS) de MATLAB, el FuzzyLite Language (FLL) de fuzzylite o el FuzzyControl Language (FCL). Sin embargo, estos formatos no son los más adecuados para ser utilizadosen microcontroladores de bajo costo, dado que estan basados en texto y el análisis de estos archivosproduce una demanda de recursos computacionales que puede ser evitada. Una alternativa a estoes incorporar la definición del sistema difuso, es decir cantidad de entradas, salidas, reglas, etc.,al momento de la compilación. No obstante, esta solución requiere recompilar cada vez que sehaga un ajuste al sistema y se debe observar que, en la práctica, quien realiza dichos ajustes es unexperto en lógica difusa y no necesariamente un programador experimentado. La alternativa por laque finalmente se optó es definir un formato binario propio, denominado Compact Fuzzy System(CFS), que pueda ser incorporado en tiempo de compilación o tiempo de ejecución. Esta soluciónes flexible y notablemente más eficiente que usar archivos de texto.

3.1.2. Visión general

El framework está compuesto por dos módulos. El módulo principal, µFuzzy, es una librería delógica difusa pensada para ser utilizada en sistemas embebidos. Su principal objetivo es permitir laimplantación de sistemas de control difusos y sistemas expertos difusos en microcontroladores debajo costo con cantidades limitadas de memoria y baja velocidad de procesamiento. La librería noconstituye una herramienta para el diseño de sistemas basados en lógica difusa, sino para su im-plementación. El módulo secundario, cfsconvert, es un software de escritorio que permite convertirlos formatos de archivos difundidos de descripción de sistemas difusos, como ser el formato FIS, alformato CFS de µFuzzy.

Antes de entrar en los detalles del diseño de cada módulo, es necesario comprender cómo éstosinteractúan entre sí y cómo se integrarían a una aplicación que haga uso del framework (ver Fig.3.1). Supóngase que se desea implementar un sistema de control para un aire acondicionado usandoµFuzzy. En primer lugar, el modelador estudiará el problema, definirá cuáles son las entradas y sa-lidas del sistema, las reglas que rigen su comportamiento y otros parámetros que hacen al procesode inferencia difusa. Esta información debe plasmada ser por el modelador en un archivo FIS, FLLo FCL. Por otro lado, el implantador desarrollará el software que se instalará en el aire acondicio-nado utilizando la librería µFuzzy. Finalmente, deberá cargar el archivo creado por el modelador

CAPÍTULO 3. DISEÑO 14

Page 16: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

en la aplicación de escritorio cfsconvert para convertirlo a formato CFS e incorporarlo al softwaredesarrollado.

Figura 3.1: Módulos de µFuzzy

3.2. µFuzzy

3.2.1. Elección del lenguaje de desarrollo

Al desarrollar software para microcontroladores la elección del lenguaje de programación se velimitada por diversos factores. En primer lugar se descartaron los lenguajes interpretados tales comoPython dada la imposibilidad de instalar un intérprete en microcontroladores de bajo costo, e inclusopor la incompatibilidad de dichos intérpretes con ciertas arquitecturas de procesadores típicas delos sistemas embebidos. Por las mismas razones resulta inviable la instalación de una máquinavirtual que permita ejecutar código escrito en Java o similares. En segundo lugar, debió dejarsede lado la posibilidad de usar lenguaje ensamblador ya que desarrollar software multiplataformaimplicaría reescribirlo para cada Arquitectura del Set de Instrucciones (ISA) con la que se deseacompatibilidad. Las dos opciones más firmes fueron los lenguajes C y C++, favorecidas por laexistencia de compiladores para todas las familias de microcontroladores populares en el mercado,pero finalmente se eligió el lenguaje C por razones de performance.

3.2.2. Consideraciones respecto al lenguaje

El lenguaje C cuenta con varios estándares publicados desde su creación los cuales no fuerontotalmente implementados por todos los compiladores. Características incluidas en C99 (ISO/IEC9899:199) tales como funciones inline o la posibilidad de declarar variables en cualquier lugar delcuerpo de las funciones no están disponibles en muchos compiladores actualmente, por lo que seoptó por escribir código compatible con ANSI C. Además, muchos de los microcontroladores conlos que se busca compatibilidad no cuentan con un Sistema Operativo (OS), lo que implica quecaracterísticas tales como administración dinámica de memoria y E/S provistas por las libreríasestándar del lenguaje a través del OS no están disponibles. Para maximizar la compatibilidad sedecidió no hacer uso de dichas librerías. Asimismo, es frecuente encontrar microcontroladores sinsoporte para aritmética con punto flotante. Por esta razón µFuzzy utiliza operaciones con punto fijo.

CAPÍTULO 3. DISEÑO 15

Page 17: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

3.2.3. Utilización de aritmética de punto fijo

La aritmética de punto fijo se implementa con variables enteras destinando algunos bits para laparte entera y los restantes para la parte fraccionaria. La adición y la sustración se efectúan tal comose hace con enteros, pero no sucede lo mismo con el producto y el cociente. Si se utilizan n bits parala parte fraccionaria, después de un producto debe realizarse un desplazamiento de n bits hacia laderecha sobre el resultado para obtener el valor correcto. En el caso del cociente, el desplazamientodebe realizarse antes de dividir y hacia la izquierda. Cuando se utilizan enteros, el rango de valoresque pueden representarse con una variable de 32 bits habitualmente excede las necesidades de lasaplicaciones, y resulta poco frecuente necesitar variables de 64 bits o más. En cambio, si se trabajacon punto fijo y por ejemplo se destinan 16 bits para la parte entera y 16 bits para la fraccionaria,el valor máximo representable es 32535. Además debe tenerse en cuenta que al multiplicar o aldividir, por la forma en la que se efectúan estas operaciones, los valores intermedios son variosordenes de magnitud mayores al resultado. Como consecuencia, el uso de variables de 64 bits paraalmacenar estos valores intermedios puede ser necesario y acarrea dos problemas: performance ycompatibilidad. Es que para las arquitecturas a las que µFuzzy está destinada las operaciones de64 bits son naturalmente más lentas y de hecho, algunos compiladores para estas arquitecturas nisiquiera soportan variables de 64 bits.

Al momento de elegir la cantidad de bits para las variables de punto fijo, es necesario analizar elproceso de inferencia difusa. En este proceso, los números que intervienen provienen de las variablesde entrada y salida, y en particular las funciones de membresía definidas para estas. El dominio deestas funciones de membresía corresponde al de la variable para la que se definieron, mientras quesu rango (que representa un grado de pertenencia) es [0,1]. El dominio depende de la aplicación ydentro de una misma aplicación puede haber variables con dominios muy diferentes entre sí. Porconsiguiente, la elección del tamaño de la parte entera y fraccional se convierte en una decisión decompromiso; si se usan pocos para la parte entera se limita el valor máximo representable, mientrasque si se usan pocos para la parte fraccionaria se limita la precisión. Esa decisión puede evitarse silas variables y sus respectivas funciones de membresía se someten a un proceso de normalización taly como se muestra en la Fig. 3.2. Como se puedo observar, las variables de entrada son normalizadasal intervalo [0,1] antes del proceso de inferencia. Luego del proceso, se obtiene un resultado tambiéndentro del intervalo [0,1]. Finalmente, este resultado se convierte a su valor real. De esta manera, laparte entera puede ser pequeña y todos los bits restantes pueden usarse para la parte fraccionaria.

En vista de lo expuesto se decidió utilizar variables de 16 bits, con 2 bits para la parte realy 14 para la parte fraccionaria, las cuales permiten representar valores en el intervalo [-2, 2) conincrementos de 2−14. La ventaja de usar variables de 16 bits es que los valores intermedios cabenen variables de 32 bits, que pueden utilizarse en todas las arquitecturas. Se requiere el bit de signoporque cuando se usa el método de Sugeno-Takagi, los coeficientes de los consecuentes de las reglaspueden ser negativos.

3.2.4. Limitaciones debidas al uso de punto fijo.

Al margen de las pérdidas de precisión, existen otras límitaciones relacionadas con el uso dearitmética de punto fijo. En primer lugar, el rango de las variables de entrada y salida debe estarbien definido de modo que sea posible efectuar la normalización. Todos los formatos compatiblescon µFuzzy tienen campos destinados para esos efectos, sin embargo, en el caso de los sistemasbasados en el método de Sugeno-Takagi, el rango de las variables de salida es opcional. Para poderconvertirlos a formato CFS y utilizarlos con µFuzzy esa información debe ser provista. Dicho de otromodo, si el rango de una variable de salida no se especifica en el archivo que describe al sistema

CAPÍTULO 3. DISEÑO 16

Page 18: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 3.2: Proceso de inferencia con variables normalizadas

difuso, entonces ese archivo no es compatible con el framework.Otra limitación aparece cuando se analizan los coeficientes utilizados en los consecuentes de las

reglas de los sistemas de Sugeno-Takagi. El valor de estos coeficientes debe modificarse de maneraacorde a la normalización de las variables de entrada y de salida, para no alterar el comportamientodel sistema. En algunos casos, el nuevo valor de los coeficientes no pertenece al intervalo repre-sentable [-2, 2). Cuando eso sucede, la solución es sobredimensionar el rango de las variables desalida en forma proporcional al exceso en el valor del coeficiente, de modo que tras la normaliza-ción, los coeficientes sean representables. Dicho de otro modo, si el rango original de una variablede salida es [0, 100] y uno de los coeficientes luego de la normalización resulta 3, entonces redefi-niendo ese rango como [0, 200] el valor del coeficiente será 1.5 y podrá representarse. El procesode normalización de coeficientes se explica en el anexo D.

3.2.5. Características soportadas

Los sistemas de inferencia difusos cuentan con una gran cantidad de parámetros que pueden serajustados para lograr el comportamiento deseado. La Tabla 3.1 expone las características soportadaspor µFuzzy.

Las funciones de mebresía de µFuzzy ofrecen flexibilidad y eficiencia. Las funciones de per-tenencia trapezoidales, que también pueden ser utilizadas como triangulares o rectangulares, op-timizan el uso de memoria y son procesadas rápidamente. Por otro lado, las tabuladas, permitenrepresentar funciones arbitrarias y, aunque demandan más memoria que las anteriores, el tamañode las tablas es configurable. Ambos tipos de funciones de membresía pueden coexistir e incluso,los tamaños de las tablas pueden configurarse independientemente para cada una. A su vez, µFuzzypermite configurar independientemente métodos de inferencia, operadores de activación, operado-res de agregación y defuzzificadores para cada variable de salida. Es decir que un controlador podríacalcular el valor de una variable de salida utilizando el método de Sugeno y otras usando el métodode Mamdani.

CAPÍTULO 3. DISEÑO 17

Page 19: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Métodos de inferenciaSugenoMamdani

Funciones de membresíatrapezoidaltabulada

T-normas

mínimoproducto algebraicodiferencia acotadaproducto drásticoproducto de Einsteinproducto de Hamacher

S-normas

máximosuma algebraicasuma acotadasuma drásticasuma de Einsteinsuma de Hamacher

Métodos de defuzzificacióncentroidemedia ponderada

Conectivos lógicosconjuncióndisyunciónnegación

Cuadro 3.1: Características soportadas por µFuzzy

3.3. cfsconvert

3.3.1. Características generales

cfsconvert es un conversor de archivos FIS a formato CFS. Para agilizar el desarrollo de estaaplicación se la diseño como una herramienta por línea de comandos. Si bien el uso de este tipo deherramientas puede resultar poco intuitivo, cfsconvert ofrece funcionalidad Drag & Drop a fin desimplificar la tarea del usuario final. A su vez, al funcionar por línea de comandos, cfsconvert puedeintegrarse a cadenas de herramientas automatizadas.

El conversor genera dos tipos de salidas: código fuente C con los datos en formato CFS incrus-tados, o un archivo binario que puede ser interpretado por la librería. En el primer caso, el sistemadifuso se define en tiempo de compilación, es decir que para realizar ajustes el software debe serrecompilado. Esta opción es la más adecuada para proyectos simples, en los que recompilar norepresente un esfuerzo significativo. En el segundo caso, en cambio, el archivo binario generadopuede cargarse dinámicamente. Esto permite por ejemplo cargar el archivo CFS en una tarjeta SD otransferirlo a través de una red. La elección dependerá de cuál de las dos opciones se integre mejoral flujo de trabajo del proyecto.

3.3.2. Elección del lenguaje de desarrollo

La elección del lenguaje de desarrollo pudo efectuarse con mayor libertad que en el caso deµFuzzy, dado que el conversor es una aplicación de escritorio y su performance es un elementosecundario. Aunque podrían haberse escogido lenguajes ágiles tales como Python o Lua, finalmentese optó por C++. El factor clave a la hora de decidir fue que la librería fuzzylite es gratuita, de código

CAPÍTULO 3. DISEÑO 18

Page 20: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

abierto y provee funciones para leer archivos FIS. Es decir que haciendo uso de fuzzylite sólo esnecesario crear las funciones para exportar a formato CFS y programar la interfaz de comandos.

CAPÍTULO 3. DISEÑO 19

Page 21: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Capítulo 4

Aplicación

4.1. Introducción

A lo largo de este capítulo se describe una aplicación de µFuzzy en un robot móvil autónomoterrestre pensado para resolver laberintos. En esta aplicación el framework se emplea a dos niveles:en primer lugar se utiliza para efectuar control de lazo cerrado sobre la velocidad de las ruedas, yen segundo lugar para que el robot avance siguiendo una pared lateral (wall-following).

El robot consiste en una versión modificada del presentado en Robot para Laberintos[3]. Poseeuna placa principal, basada en un microcontrolador MC9S08JM32 de 8 bits que opera a una fre-cuencia de bus de 24 MHz y cuenta con 2 KB de memoria RAM y 32 KB de memoria flash. Sedesplaza usando motores de corriente continua que le permiten alcanzar velocidades de hasta 360mm/s, y cuenta con encoders incrementales de 30 pulsos por revolución en cada rueda. A su vez,dispone de tres sensores ultrasónicos de distancia: uno frontal y dos laterales a 90o del primero.Además posee una interfaz Arduino compatible que le permite comunicarse con una placa secun-daria a través del puerto serie y delegarle la toma de decisiones. En esta aplicación se usa para esepropósito una FRDM-KL25Z, una placa de desarrollo basada en un microcontrolador de 32 bits connúcleo Cortex-M0+ que trabaja a 48 MHz, y que cuenta con 16 KB de memoria RAM y 128 KB dememoria flash.

4.2. Control de lazo cerrado para los motores

4.2.1. Estudio de los motores

Como se mencionó anteriormente el robot cuenta con dos motores de corriente continua, loscuales se controlan mediante Modulación por Ancho de Pulsos (PWM). El primer paso en el diseñodel controlador fue obtener la relación entre el ciclo de trabajo ρ y la velocidad del robot v, la cualse muestra en la Fig. 4.1. En el intervalo [80, 380] la curva puede aproximarse mediante una funcióncuadrática, mientras que las velocidades inferiores a 80 mm/s no pueden lograrse.

Por otro lado, la Fig. 4.2 muestra la velocidad en función del tiempo para un ciclo de trabajodado, partiendo desde el reposo. Se puede observar que aunque el ciclo de trabajo se mantengaconstante, la respuesta tiene una cantidad considerable de ruido. Esto se debe a que el cálculo de lavelocidad se realiza tomando el tiempo entre pasos del encoder, y en el robot utilizado ese tiempo nopuede ser medido con más precisión ya que encoders están conectados a entradas analógicas. Estoimplica que los pasos deben ser detectados por software muestreando la señal, pero la frecuencia demuestreo (que determina el error de la medición) está fuertemente limitada por las capacidades del

CAPÍTULO 4. APLICACIÓN 20

Page 22: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 4.1: Ciclo de trabajo en función de la velocidad

procesador.

4.2.2. Estructura del controlador

En base a los datos obtenidos, se desarrolló el modelo de controlador que se muestra en la Fig.4.3. El mismo está basasdo en un controlador PI, en el cual la parte derivada se omite dado que elruido en la señal no permite utilizarla. Toma como entradas la velocidad de referencia o setpoint vr,el error e en la velocidad respecto al setpoint, y la integral de este error ie. A partir de la vr se calculaun ciclo de trabajo aproximado ρ0 utilizando la función cuadrática que se obtuvo anteriormente. Asu vez, las tres variables de entrada son sometidas al proceso de inferencia mediante lógica difusapara obtener como salida ρc, que constituye una corrección a la primera aproximación. El ciclo detrabajo ρ que finalmente se aplica al motor es la suma de estos dos factores. Usando los encoders,se mide la velocidad va y se la utiliza para realimentar el controlador.

4.2.3. Diseño del sistema de control difuso

El sistema de control difuso tiene como objetivo solventar las limitaciones de un controladorPI con ganancias constantes. Emplea el método de inferencia de Takagi-Sugeno, ya que resultanotablemente más eficiente que el método de Mamdani[4], y con este mismo criterio, utiliza losoperadores máximo y mínimo para implementar la unión y la intersección difusas respectivamente.El sistema utiliza tres reglas:

SI e no es chicoENTONCES ρc = kp0e

SI e es chico Y vr es bajaENTONCES ρc = kp1e+ ki1ie

CAPÍTULO 4. APLICACIÓN 21

Page 23: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 4.2: Velocidad del robot en función del tiempo para un ciclo de trabajo del 80 %

SI e es chico Y vr no es bajaENTONCES ρc = kp2e+ ki2ie

La primera diferencia entre el sistema difuso y el controlador PI es que el primero define lasganancias en función del setpoint, tal como puede apreciarse en la segunda y tercera regla. Paravelocidades bajas las ganancias son menores, ya que la pendiente de la curva del ciclo de trabajo enfunción de la velocidad es menor. Asimismo, para velocidades altas se utilizan ganancias mayores.Los valores constantes kp1 y kp2 corresponden aproximadamente a la pendiente de la curva paravelocidades bajas y altas respectivamente.

Por otro lado, se encontraron grandes dificultades a la hora de definir las ganancias del términointegral, especialmente para velocidades elevadas. Esto se debe a que en las pruebas, en las quese partió del reposo, el robot tardaba un tiempo considerable en vencer la inercia y durante esetiempo, la integral se acumulaba. Ganancias bajas del termino integral conducían a tiempos deconvergencia altos, mientras que ganancias altas implicaban mayor overshoot. Por este motivo seutiliza la primera regla, la cual establece que se la parte integral se use solo cuando la velocidadmedida se encuentre próxima al setpoint, es decir cuando el error sea pequeño. Cuando el errores grande, se utiliza solamente la parte proporcional. Esto permite asignar un valor alto a kp0 paraaproximarse rápidamente al valor deseado sin perder estabilidad, y a su vez, permite que ki1 y ki2relativamente altas sin el overshoot que habitualmente esto implica.

Las funciones de membresía utilizadas se muestran en la Fig. 4.4. Como puede observarse seutiliza sólo una para la velocidad de referencia y el error, mientras que para la integral no se usaninguna. Esta última variable se usa sólamente en el cálculo de los consecuentes. El rango de lavelocidad de referencia se limita al intervalo [80,400], porque velocidades menores que 80 no sonposibles. Asimismo, el rango del error del error se limita al intervalo [-50, 50] y si el error excedeese intervalo entonces se trunca.

CAPÍTULO 4. APLICACIÓN 22

Page 24: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 4.3: Proceso de control

(a) Velocidad de referencia (b) Error en la velocidad

Figura 4.4: Funciones de membresía para las variables de entrada

4.3. Seguimiento de pared

El objetivo de este controlador es que el robot avance manteniendo constante la distancia a unapared lateral valiéndose de un único sensor ultrasónico. En este caso, para disminuir la carga detareas en la placa principal, el programa se ejecuta en la placa de toma de decisiones. La Fig. 4.5muestra el esquema de funcionamiento de este controlador. Las entradas son la distancia da a lapared, y la derivada de esta distancia respecto al tiempo d′a. Las salidas son la velocidad v y lavelocidad angular ω que deben aplicarse al robot para corregir su dirección.

Esta aplicación, al igual que la anterior, utiliza el método de Takagi-Sugeno y los operadoresmáximo y mínimo para implementar las operaciones difusas. El diseño de las reglas y las funcionesde membresía se basa en la geometría del problema. Este sistema dista de ser lineal ya que ladistancia leída por el sensor no es proporcional a la distancia del robot a la pared, sino que estaafectada por la orientación del robot. Es decir que un cambio brusco en la lectura del sensor noimplica que el robot se haya alejado o acercado a la pared, sino que puede deberse a un cambio ensu orientación. A su vez, cuanto más lejos se encuentra el robot de la pared más sensible es a loscambios de orientación. A partir de este análisis se plantearon 3 reglas para controlar la velocidadangular:

CAPÍTULO 4. APLICACIÓN 23

Page 25: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 4.5: Proceso de control

SI da es pequeña Y d′a no es grande positivaENTONCES ω es lineal

SI da no es pequeña Y d′a no es grande positivaENTONCES ω es lineal suave

SI d′a es grande positivaENTONCES ω es nula

La primera regla emula el comportamiento de un controlador PD y actúa en la operación normaldel robot, es decir cuando se encuentra cerca de la pared y aproximadamente alineado con ésta. Lasegunda se activa cuando la distancia del robot a la pared es grande y se similar a la primera perocon menor ganancia. Finalmente, la última actúa cuando se detecta que la distancia a la pared crecebruscamente, es decir que el robot está girando alejándose de la pared. El propósito de esta regla esque el sistema no salga de la zona estable.

Para el control de la velocidad se utilizan dos reglas independientes de las anterirores:

SI da es muy pequeña Y d′a es grande negativaENTONCES v es nula

SI da no es muy pequeña O d′a no es grande negativaENTONCES v es constante

Cuando el robot se encuentra muy próximo a la pared y continúa aproximándose a ésta, lavelocidad tangencial debe hacerse nula para evitar una colisión. En otro caso, avanza con velocidadconstante. Las funciones de membresía definidas para este controlador se presentan en la Fig. 4.6.

CAPÍTULO 4. APLICACIÓN 24

Page 26: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

(a) Lectura del sensor (b) Derivada de la lectura

Figura 4.6: Funciones de membresía para las variables de entrada

CAPÍTULO 4. APLICACIÓN 25

Page 27: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Capítulo 5

Resultados

5.1. Framework

5.1.1. Calidad del código fuente

µFuzzy se desarrolló siguiendo el estándar de código fuente propusto en [2] y fue íntegramentedocumentada usando doxygen, una herramienta para generar documentación a partir de comentariosen el código fuente. La densidad de comentarios de la librería es del 92 %, lo que significa queprácticamente se escribió una línea de comentario por cada línea de código. Por otro lado, la libreríafue sometida a exhaustivas pruebas de funcionamiento. Tanto es así que la cantidad de líneas decódigo escritas para las pruebas unitarias es casi el doble que las escritas para la librería propiamentedicha. Estas estadísticas, generadas con la herramienta CLOC, se muestran en la Tabla 5.1.

archivos comentarios líneas de códigoLibrería 29 1405 1528Pruebas unitarias 13 424 2608Total 42 1829 4136

Cuadro 5.1: Estadísticas del código fuente

5.1.2. Pruebas

Para realizar las pruebas unitarias se utilizó Ceedling, un conjunto de herramientas y libreríaspara desarrollo basado en pruebas en lenguaje C. Se escribieron pruebas unitarias para todas lasfunciones externas de µFuzzy, y se logró una cobertura del 100 % de las líneas de código. Es decirque cada línea de código de la librería es ejecutada por al menos una función de prueba, o en otraspalabras, que cada posible camino de ejecución fue probado.

Adicionalmente, se diseñó un software para realizar pruebas funcionales automáticas, que pro-cesa un conjunto de archivos FIS con µFuzzy y fuzzylite, y compara los resultados. Este programaprueba n combinaciones de entrada uniformemente distribuidas para cada controlador, y calculapara todas las combinaciones el error normalizado e definido como:

e =|(oµ − of )|

(omax − omin)(5.1)

Donde oµ es el valor calculado por µFuzzy, of es el valor calculado por fuzzylite, y omax y ominson el máximo y el mínimo valor que puede tomar la variable de salida respectivamente. Como

CAPÍTULO 5. RESULTADOS 26

Page 28: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

resultado, presenta el error máximo emax y el error promedio e. Cabe destacar que este softwareprueba tanto µFuzzy como cfsconvert ya que todos los archivos son convertidos de formato FIS aCFS como parte del procedimiento.

Se realizaron pruebas funcionales sobre un conjunto de archivos FIS tomados de los ejemplosdistribuidos con MATLAB R2014a. Se utilizaron todos los ejemplos exceptuando dos, por hacer usode características incompatibles con cfsconvert: constantes simbólicas y funciones personalizadas.Para los controladores basados en el método de Sugeno, fue necesario redefinir los rangos de lasvariables de salida, tal como se explica en 3.2.4. Se probaron 100000 combinaciones de entrada paracada variable de salida de cada controlador, y los resultados utilizando tablas para las funciones demembresía de 512 y 4096 entradas se muestran en las Fig.5.1 y 5.2 respectivamente.

Figura 5.1: Errores con tablas de 512 entradas

Como puede observarse en la Fig.5.1, en general, el error máximo se ubica debajo del 0.5 %mientras que el medio no supera el 0.1 %. En el caso más desfavorable (fpeaks) se obtuvo un errorsignificativamente mayor. La diferencia se debe a la forma en la que está construido ese sistema.Utiliza el método de Sugeno y tiene definidas 16 reglas con dos variables de entrada y una de salida.Cada una de las variables de entrada tiene cuatro funciones de membresía gausianas, las cualesacarrean el error propio de la tabulación. Por otro lado, en este caso, los coeficientes utilizados enlos consecuentes de las reglas tienen magnitudes muy diferentes entre sí, por lo que el error debidoal uso de aritmética de punto fijo impacta directamente sobre los resultados. Finalmente, utilizacomo operador de conjunción el producto algebráico, lo cual ocasiona pérdidas de precisión que noocurrirían si se utilizara por ejemplo el mínimo como operador.

En la Fig. 5.2 se muestran los resultados de las pruebas cuando se aumenta la cantidad deentradas en las tablas de las funciones de membresía a 4096. En general, tanto errores máximoscomo medios se ubican debajo del 0.05 %. Con esta configuración, el error máximo de fpeaks se

CAPÍTULO 5. RESULTADOS 27

Page 29: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 5.2: Errores con tablas de 4096 entradas

redujo a la cuarta parte, y el error medio a menos de la mitad. El caso más desfavorable pasó a sertank2, y su error máximo es idéntico al obtenido con la configuración anterior porque este sistemautiliza sólo funciones de membresía trapezoidales las cuales no se tabulan. La razón por la cualpresenta un error máximo grande comparado con el resto es que utiliza los operadores algebráicospara la conjunción y la disyunción, y se pierde precisión tal y como ocurre con fpeaks.

5.1.3. Integración a la CIAA

La Computadora Industrial Abierta Argentina (CIAA) es una plataforma electrónica libre y gra-tuita desarrollada colaborativamente en Argentina con el apoyo de universidades y empresas de todoel país. Se distribuye con un RTOS y un conjunto de módulos orientados a aplicaciones industria-les, todos ellos desarrollados específicamente para esta plataforma y siguiendo estrictas normas decalidad. Por la potencial aplicabilidad de µFuzzy a la industria, se propuso a los responsables delproyecto CIAA incluirlo como módulo, y como fruto de los esfuerzos realizados en pos de la con-fiabilidad y mantenibilidad del framework, la propuesta fue aceptada. Esto significa que las futurasversiones del firmware de la CIAA incluirán una copia de µFuzzy lista para usarse.

5.2. Aplicaciones

5.2.1. Control de velocidad

Para evaluar la respuesta del controlador se midió la velocidad del robot en función del tiempopara distintos setpoints partiendo desde el reposo. Los resultados de los 7 casos de prueba, quecorresponden a velocidades entre 80 mm/s y 360 mm/s con incrementos de 40 mm/s, se presentan

CAPÍTULO 5. RESULTADOS 28

Page 30: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

en la Fig. 5.3a. Como puede observarse, en todos los casos la velocidad converge al valor deseado.Cuanto más bajo es el setpoint más rápida es la convergencia, y en ningún caso se observa overshoot.En el caso más desfavorable en término de tiempo de convergencia, es decir cuando la velocidaddeseada es de 360 mm/s, no pueden lograrse mejores resultados dado que para llegar a esa velocidadse utiliza un ciclo de trabajo del 100 %.

La Fig. 5.3b muestra una comparación de las respuestas usando el controlador difuso y usandocontrol de lazo abierto, para una velocidad de referencia de 240 mm/s. Puede observarse que usandocontrol de lazo cerrado la velocidad converge al valor deseado en menos de 400 ms, mientras queusando control de lazo abierto la velocidad nunca llega al setpoint y se estabiliza en 1 segundoaproximadamente.

5.2.2. Seguimiento de pared

Para el caso de este controlador, dada la imposibilidad de medir la distancia del robot a la pared,lo que se evaluó fue la lectura del sensor ultrasónico en función del tiempo. Nótese que la lectura delsensor está influenciada por la orientación del robot, es decir que la distancia medida no correspondea la distancia a la pared excepto cuando el robot avanza de forma paralela a la misma. El controladorfue probado para 4 condiciones inciales y una distancia objetivo de 47 mm.

La Fig. 5.4 muestra los resultados para un ángulo incial nulo, y dos distancias iniciales diferen-tes. En ambos casos hay overshoot en la lectura del sensor, aunque el overshoot en la distancia realdel robot a la pared es considerablemente menor. El tiempo de convergencia a la distancia objetivoes de aproximadamente 4 segundos en los dos casos.

El comportamiento del controlador también fue evaluado para ángulos iniciales distintos de 0.Las Fig. 5.5 y 5.6 muestran los resultados para ángulos iniciales de -22o (acercándose a la pared) y45o (alejándose de la pared). Ángulos mayores a 45o no son viables dado que en esos casos el sensorno es capaz de detectar las ondas reflejadas por la pared, por lo tanto la distancia no se puede medir.Ángulos menores a -22o con distancias iniciales pequeñas no pudieron lograrse con este controlador,dado que se requiere un tiempo de respuesta muy rápido y que la distancia real a la pared es muchomenor que la medida.

5.3. Conclusiones y trabajos futuros

A lo largo de este trabajo de graduación se expuso los procesos de diseño, desarrollo y pruebade µFuzzy. El funcionamiento del framework fue validado satisfactoriamente usándolo en un robotmóvil, para dos propositos diferentes en dos microcontroladores de bajo costo de arquitecturas to-talmente distintas entre sí. A futuro, se planea mejorar la librería ampliando la gama de métodosde defuzzificación y dando permitiendo asignar pesos a cada regla. Esta última característica es im-portante porque otorgaría total compatibilidad con Sistemas de Inferencia Adaptativos de InferenciaNeuro-Difusa (ANFIS).

En vista de los resultados, puede afirmarse que µFuzzy constituye una herramienta confiabley potente, que puede utilizarse en aplicaciones reales y complejas, y en entornos extremadamentelimitados en términos de recursos procesamiento.

CAPÍTULO 5. RESULTADOS 29

Page 31: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

(a) v(t) para distintos setpoints

(b) Control de lazo abierto vs control de lazo cerrado

Figura 5.3: Respuesta en velocidad usando control difuso

CAPÍTULO 5. RESULTADOS 30

Page 32: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

(a) Distancia inicial de 20 mm

(b) Distancia inicial de

Figura 5.4: Lectura del sensor en función del tiempo con ángulo inicial nulo

CAPÍTULO 5. RESULTADOS 31

Page 33: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Figura 5.5: Ángulo inicial de -22o

Figura 5.6: Ángulo incial de 45o

CAPÍTULO 5. RESULTADOS 32

Page 34: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Bibliografía

[1] David M Byrne, Stephen D Oliner, and Daniel E Sichel. How fast are semiconductor pricesfalling? Technical report, National Bureau of Economic Research, 2015.

[2] Jerry Doland and Jon Valett. C style guide. 1994.

[3] Martin Izquierdo and Gabriel A Parodi. Robot para resolución de laberintos. Tesis, UniversidadNacional de Tucumán, Tucumán, Argentina, 2015.

[4] Javad J Jassbi, SH Alavi, Paulo JA Serra, and Rita Almeida Ribeiro. Transformation of amamdani fis to first order sugeno fis. In FUZZ-IEEE, pages 1–6, 2007.

[5] Bart Kosko and Satoru Isaka. Fuzzy logic. Scientific American, 269(1):62–7, 1993.

[6] Timothy J Ross. Fuzzy logic with engineering applications. John Wiley & Sons, 2009.

[7] Harpreet Singh, Madan M Gupta, and Thomas et al. Meitzler. Real-life applications of fuzzylogic. Advances in Fuzzy Systems, 2013.

33

Page 35: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Anexos

34

Page 36: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Anexo A

API de µFuzzy

A.1. Tipos de dato

uF_controller_dt Objeto que contiene la información de un controlador. Son creados por lafunción uF_ufuzInit.

uF_fixed_point_dt Tipo de dato numérico representado en punto fijo. Pueden utilizarse lasfunciones uF_fixpToInt, uF_fixpFromInt, uF_fixpToLongInt y uF_fixpFromLongIntpara convertir entre este formato y tipos conocidos.

uF_error_dt Tipo de dato para representar códigos de error.

A.2. Funciones

uF_ufuzInit

Crea un nuevo controlador a partir de un bloque de datos con formato CFS.

prototipo

uF_controller_dt* uF_ufuzInit(uint8_t *controller_data, uint32_t data_size);

parámetros

controller_data Referencia al bloque de memoria que contiene la estructura CFS.

data_size Tamaño del bloque.

valor de retorno

En caso de éxito, devuelve un puntero a un controlador inicializado. En caso contrario devuelve 0,y el código de error puede obtenerse llamando a uF_ufuzError.

uF_ufuzClear

Libera los recursos utilizados por un controlador. En la implementación actual, sin reserva dinámicade memoria, esta función no efectúa ninguna acción.

ANEXO A. API DE µFUZZY 35

Page 37: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

prototipo

uF_ufuzClear(uF_controller_dt *controller);

parámetros

controller Puntero al controlador devuelto por uF_ufuzInit.

uF_ufuzProcess

Calcula la salida del controlador.

prototipo

uF_error_dt uF_ufuzProcess(uF_controller_dt *controller, uF_fixed_point_dt *inputs,

int inputs_size, uF_fixed_point_dt *outputs, int outputs_size);

parámetros

controller Puntero al controlador devuelto por uF_ufuzInit.

inputs Arreglo con los valores de las variables de entrada expresados en punto fi-jo. Pueden utilizarse las funciones uF_fixpFromInt y uF_fixpFromLongpara obtener valores en punto fijo a partir de los tipos int y long respec-tivamente.

inputs_size Tamaño del arreglo de entrada. Debe coincidir con la cantidad de variablesde entrada del controlador.

outputs Arreglo para devolver las salidas del controlador. Pueden utilizarse lasfunciones uF_fixpToInt y uF_fixpToLongInt para convertir estos va-lores a los tipos int y long respectivamente.

outputs_size Tamaño del arreglo de salida. Debe coincidir con la cantidad de variablesde salida del controlador.

valor de retorno

Devuelve el código de error si hubiera uno. En caso contrario devuelve uF_ERROR_NONE.

uF_ufuzError

Devuelve el código del último error registrado para un controlador en particular. Una llamada a estafunción también limpia el registro de errores para dicho controlador.

prototipo

uF_error_dt uF_ufuzError(uF_controller_dt *controller);

parámetros

controller Puntero al controlador devuelto por uF_ufuzInit.

ANEXO A. API DE µFUZZY 36

Page 38: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

valor de retorno

Si controller no es nulo, devuelve el último código de error producido sobre ese controlador.En caso contrario, devuelve el último error global. Esto es útil, cuando uF_ufuzInit devuelve unpuntero nulo.

uF_fixpFromInt

Convierte un número entero perteneciente al intervalo [range_min, range_max], a un valor depunto fijo normalizado.

prototipo

uF_fixed_point_dt uF_fixpFromInt(short i, short range_min, short range_max);

parámetros

i Número a convertir.

range_min Valor mínimo que puede tomar la variable a convertir.

range_max Valor máximo que puede tomar la variable a convertir.

valor de retorno

Devuelve el valor convertido a punto fijo.

uF_fixpFromLongInt

Convierte un número entero perteneciente al intervalo [range_min, range_max], a un valor depunto fijo normalizado.

prototipo

uF_fixed_point_dt uF_fixpFromLongInt(long i, long range_min, long range_max);

parámetros

i Número a convertir.

range_min Valor mínimo que puede tomar la variable a convertir.

range_max Valor máximo que puede tomar la variable a convertir.

valor de retorno

Devuelve el valor convertido a punto fijo.

uF_fixpToInt

Convierte un número en punto fijo, a un entero en el intervalo [range_min, range_max].

ANEXO A. API DE µFUZZY 37

Page 39: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

prototipo

short uF_fixpToInt(uF_fixed_point_dt fp, short range_min, short range_max);

parámetros

fp Número a convertir.

range_min Valor mínimo que puede tomar la variable a convertir.

range_max Valor máximo que puede tomar la variable a convertir.

valor de retorno

Devuelve el valor convertido a entero.

uF_fixpToLongInt

Convierte un número en punto fijo, a un entero en el intervalo [range_min, range_max].

prototipo

short long uF_fixpToLongInt(uF_fixed_point_dt fp, long range_min, long range_max);

parámetros

fp Número a convertir.

range_min Valor mínimo que puede tomar la variable a convertir.

range_max Valor máximo que puede tomar la variable a convertir.

valor de retorno

Devuelve el valor convertido a entero.

uF_poolSpace

Devuelve el espacio disponible en el pool de memoria.

prototipo

uint_fast32_t uF_poolSpace(void);

valor de retorno

La cantidad de bytes disponibles.

ANEXO A. API DE µFUZZY 38

Page 40: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

A.3. Macros

uF_POOL_SIZE Tamaño en bytes del pool de memoria. El valor por defecto es 1024.

uF_NO_INT64 Si se define, la librería no hace uso de enteros de 64 bits para las ope-raciones internas. Por defecto no esta definido. Esta opción es util paracompiladores sin soporte para enteros de 64 bits.

A.4. Códigos de error

uF_ERROR_NONE Ningún error.

uF_ERROR_UNKNOWN Error desconocido.

uF_ERROR_NULL_CFS_DATA La función de inicialización fue llamada con unpuntero nulo.

uF_ERROR_MEMORY_POOL_TOO_SMALL No hay suficiente espacio en el pool de memo-ria. uF_POOL_SIZE debe ser redefinido con unvalor mayor.

uF_ERROR_INPUT_ARRAY_TOO_SMALL El arreglo de valores de entrada pasado comoargumento a uF_ufuzProcess no tiene sufi-cientes elementos. Debe tener tantos elementoscomo variables de entrada tenga el sistema.

uF_ERROR_OUTPUT_ARRAY_TOO_SMALL El arreglo de valores de salida pasado como ar-gumento a uF_ufuzProcess no tiene suficien-tes elementos. Debe tener tantos elementos co-mo variables de salida tenga el sistema.

uF_ERROR_DATA_SIGNATURE El bloque de datos pasado como argumento auF_ufuzInit tiene una firma inválida. El pun-tero al bloque o los datos del mismo son inváli-dos.

uF_ERROR_RESERVED_FIELD_NOT_ZERO Los campos reservados en el bloque CFS debenser cero.

uF_ERROR_UNKNOWN_AND_OPERATOR El operador and en el bloque CFS no es válido.

uF_ERROR_UNKNOWN_OR_OPERATOR El operador or en el bloque CFS no es válido.

uF_ERROR_NO_INPUT_VARIABLES El controlador definido en el bloque CFS no tie-ne variables de entrada.

uF_ERROR_NO_OUTPUT_VARIABLES El controlador definido en el bloque CFS no tie-ne variables de salida.

uF_ERROR_UNKNOWN_ACTIVATION_OPERATOR El operador de activación definido para una va-riable de salida en el bloque CFS no es válido.

ANEXO A. API DE µFUZZY 39

Page 41: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

uF_ERROR_TABLE_INDEX_SIZE_TOO_BIG El tamaño del índice de una función de mem-bresía tabulada en el bloque de datos CFS esdemasiado grande.

uF_ERROR_SENSOR_RESERVED_FIELD_NOT_ZERO Uno de los campos reservados de una variablede entrada en el bloque CFS no es cero.

uF_ERROR_UNKNOWN_INFERENCE_METHOD El método de inferencia definido para una va-riable de salida en el bloque CFS no es válido.

uF_ERROR_UNKNOWN_AGGREGATION_OPERATOR El operador de agregación definido para una va-riable de salida en el bloque CFS no es válido.

uF_ERROR_UNKNOWN_DEFUZZIFICATION_METHOD El método de defuzzificación definido para unavariable de salida en el bloque CFS no es váli-do.

uF_ERROR_INVALID_TABLE_PARAMETERS Uno de los grados de verdad que definen unafunción de membresía tabulada no pertenenceal intervalo [0, 1].

uF_ERROR_INVALID_TRAPEZOID_PARAMETERS Uno de los puntos que definen una función demembresía trapezoidal no pertenence al inter-valo [0, 1].

uF_ERROR_MEM_FUNC_RESERVED_FIELD_NOT_ZERO

Uno de los campos reservados de una funciónde membresiía en el bloque CFS no es cero.

uF_ERROR_UNKNOWN_MEM_FUNC_TYPE Una de las funciones de membresía definidasen el bloque CFS tiene tipo inválido.

uF_ERROR_READER_OVERFLOW La función de inicialización intentó leer másallá de los límites del bloque CFS. Los datosdel bloque están dañados.

uF_ERROR_TOO_MANY_DEFUZZIFICATION_STEPS El campo del bloque CFS que define la cantidadde pasos en el proceso de defuzzificación tieneun valor mayor al permitido.

uF_ERROR_UNKNOWN_LOGICAL_CONNECTIVE Una de las reglas del bloque CFS tiene un co-nectivo lógico inválido.

uF_ERROR_INVALID_MEMBERSHIP_FUNCTION_ID Una de las reglas del bloque CFS hace referen-cia a una función de membresía inexistente.

uF_ERROR_CONTROLLER_NOT_INITIALIZED El controlador no fue inicializado antes de lla-mar a la función de procesamiento.

uF_ERROR_PADDING_NOT_ZERO Uno de los campos de relleno en el bloque CFSno es cero.

ANEXO A. API DE µFUZZY 40

Page 42: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Anexo B

Manual de cfsconvert

Descripción

cfsconvert es una herramienta por línea de comandos para convertir archivos FIS a formato CFS.

Utilización

cfsconvert [-d dsteps] [-s tsize] [-c] [-b] [-t] SOURCE [DESTINATION]

-d dsteps Logaritmo en base dos del número de pasos a realizar en el proceso dedefuzzificación. El valor por defecto es 8, que corresponde a 256 pasos.

-s tsize Logaritmo en base dos del número de entradas en las funciones de mem-bresía tabuladas. El valor por defecto es 8, que corresponde a 256 entradaspor tabla.

-c El conversor entrega como salida código fuente C. Esta opción es apro-piada para integrar el conversor en un toolchain.

-b El conversor entrega como salida un archivo binario con la estructuraCFS.

-t El conversor entrega como salida un archivo de texto con la estructuraCFS definida como un struct en C.

SOURCE Ruta al archivo FIS a convertir.

DESTINATION Nombre del archivo o los archivos de salida sin extensión. Si DESTINATIONse omite, entonces los archivos de salida tienen el mismo nombre que elarchivo FIS, pero diferente extensión.

Si no se especifica ninguno de los parámetros -c, -b o -t, entonces el conversor entrega un archivode texto.

ANEXO B. MANUAL DE CFSCONVERT 41

Page 43: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Anexo C

Especificación del formato CFS

Estructura

8 bytes x bytes y bytes z bytes w bytes

cabecera variable de

entrada 1

... variable de

entrada n

variable de

salida 1

... variable de

salida m

Cabecera

byte 0 byte 1 byte 2 byte 3

1 'C' 'F' 'S' RES:=0

2 AND_OP OR_OP INPUT_NUM OUTPUT_NUM

RES Campo reservado. Debe valer 0.

AND_OP Identificador del operador conjuntivo.

OR_OP Identificador del operador disyuntivo.

INPUT_NUM Cantidad de variables de entrada.

OUTPUT_NUM Cantidad de variables de salida.

ANEXO C. ESPECIFICACIÓN DEL FORMATO CFS 42

Page 44: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Variables de entrada

1 byte 1 byte x bytes y bytes

MF_NUM RES:=0 función de membresía 1 ... función de membresía n

MF_NUM Cantidad de funciones de membresía para esta variable.

RES Campo reservado. Debe valer 0.

Funciones de membresía trapezoidales

byte 0 byte 1 byte 2 byte 3

1 MF_TYPE:=0 RES:=0 X0

2 X1 X2

3 X3

MF_TYPE Tipo de función de membresía. 0 para trapezoidales.

RES Campo reservado. Debe valer 0.

X0 Coordenada x del primer punto del trapezoide. La coordenada y es 0.

X1 Coordenada x del segundo punto del trapezoide. La coordenada y es 1.

X2 Coordenada x del tercer punto del trapezoide. La coordenada y es 1.

X3 Coordenada x del cuarto punto del trapezoide. La coordenada y es 0.

Funciones de membresía tabuladas

byte 0 byte 1 byte 2 byte 3

1 MF_TYPE:=1 INDEX_SIZE Y0

...

m Yn

MF_TYPE Tipo de función de membresía. 1 para tabuladas.

ANEXO C. ESPECIFICACIÓN DEL FORMATO CFS 43

Page 45: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

INDEX_SIZE Tamaño del índice de la tabla. La cantidad de elementos en la tabla es 2i, dondei es el tamaño del índice.

Y0 Coordenada y del primer punto de la tabla.

Yn Coordenada y del último punto de la tabla.

Variables de salida calculadas por Mamdani

1 byte 1 byte x bytes y bytes z bytes

INF_TYPE:=0 MF_NUM función de

membresía 1

... función de

membresía n

parámetros

Mamdani

INF_TYPE Método de inferencia. 0 para Mamdani.

MF_NUM Cantidad de funciones de membresía para esta variable.

Parámetros Mamdani

1 byte 1 byte 1 byte 1 byte 1 byte 1 byte n bytes n bytes

ACT_OP AGG_OP DEFUZ STEPS RES:=0 RULE_NUM regla 1 ... regla n

ACT_OP Identificador del operador de activación.

AGG_OP Identificador del operador de agregación.

DEFUZ Identificador del método de defuzzificación.

STEPS Logaritmo en base 2 de la cantidad de pasos a realizar en el proceso de defuzzi-ficación. Se realizan 2d pasos, donde d=STEPS.

RES Campo reservado. Debe valer 0.

RULE_NUM Cantidad de reglas para calcular esta variable.

Reglas Mamdani

1 byte 1 byte 1 byte 1 byte 1 byte

CON MF1 ... MFn OMF [PAD]

ANEXO C. ESPECIFICACIÓN DEL FORMATO CFS 44

Page 46: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

CON Identificador del conectivo lógico de la regla.

MF1 Identificador de la función de membresía de la variable de entrada 1.

MFn Identificador de la función de membresía de la variable de entrada n.

OMF Identificador de la función de membresía de la variable de salida.

[PAD] Padding para alinear la regla a 16 bits si es necesario.

Variables de salida calculadas por Sugeno

1 byte 1 byte x bytes y bytes

INF_TYPE:=1 RULE_NUM regla 1 ... regla n

INF_TYPE Método de inferencia. 1 para Sugeno.

RULE_NUM Cantidad de funciones de reglas para calcular esta variable.

Reglas Sugeno

1 byte 1 byte 1 byte 1 byte 2 bytes 2 bytes 2 bytes

CON MF1 ... MFn [PAD] C0 C1 ... Cn

CON Identificador del conectivo lógico de la regla.

MF1 Identificador de la función de membresía de la variable de entrada 1.

MFn Identificador de la función de membresía de la variable de entrada n.

[PAD] Padding para alinear la regla a 16 bits si es necesario.

C0 Término independiente del consecuente en formato big-endian.

C1 Coeficiente de la variable 1 en formato big-endian.

Cn Coeficiente de la variable n en formato big-endian.

ANEXO C. ESPECIFICACIÓN DEL FORMATO CFS 45

Page 47: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Anexo D

Cálculo de los coeficientes deSugeno-Takagi

Considérese un sistema basado en el métdo de Sugeno-Takagi con n variables de entrada. Losconsecuentes de las reglas de este sistema tienen la forma:

y =n∑i=1

aixi + a0 (D.1)

Donde se utilizan los símbolos x para las entradas, y para las salidas y a para los coeficientes. Siymax e ymin son los valores máximo y mínimo que puede tomar y, entonces la variable normalizaday′ puede obtenerse como:

y′ =y − ymin

ymax − ymin=

n∑i=1

aiymax − ymin

xi +a0 − yminymax − ymin

(D.2)

Renombrando los coeficientes se obtiene:

y′ =

n∑i=1

bixi + b0 (D.3)

Por otro lado, las entradas del sistema no serán las variables xi, sino las variables normalizadasx′i, las cuales pueden definirse como:

x′i =xi − ximin

ximax − ximin(D.4)

Donde ximax e ximin son los valores máximo y mínimo que puede tomar la variable xi. Despejandoxi y reemplazando en la ecuación D.7 se obtiene:

y′ =

n∑i=1

bi[x′i(ximax − ximin) + ximin] + b0 (D.5)

Reordenando resulta:

y′ =n∑i=1

bi(ximax − ximin)x′i +

n∑i=1

biximin + b0 (D.6)

46

Page 48: Trabajo de Graduación - francosalinasmendoza.comfrancosalinasmendoza.com/ufuzzy/Trabajo de Graduacion.pdf · universidad nacional de tucumÁn - facultad de ciencias exactas y tecnologÍa

Desarrollo de un framework en lenguaje C para controladores difusos

Finalmente, esta ecuación puede escribirse como:

y′ =

n∑i=1

cix′i + c0 (D.7)

Donde:ci = bi(ximax − ximin) = ai

ximax − ximinymax − ymin

, i = 1..n (D.8)

c0 =n∑i=1

biximin + b0 =

∑ni=1 aiximin + a0 − ymin

ymax − ymin(D.9)

ANEXO D. CÁLCULO DE LOS COEFICIENTES DE SUGENO-TAKAGI 47