Diseño de un controlador fuzzy para el problema del péndulo invertido Cátedra de Inteligencia Computacional Facultad de Ciencias Exactas y Tecnología − Universidad Nacional de Tucumán Argentina, Mayo de 1999 Contenido Descripción del problema Diagrama en bloques y descripción del controlador Especificación de modelos matemáticos Modelo conceptual e implementación Configuración y parametrización del sistema Resultados de las simulaciones Conclusiones Apéndice A − Desarrollo matemático del Simulador Apéndice B − Utilización de un esquema de caching para exploración de reglas. Acerca de los Autores Descripción del problema El sistema que se intenta controlar consiste de un carro que tiene adosada una varilla en cuyo extremo se encuentra un cuerpo de cierta masa. El carro solo puede moverse hacia delante y hacia atrás en una línea recta, al aplicársele una fuerza F. La varilla está unida al centro del carro mediante una juntura sin rozamiento, que le permite girar sobre un eje situado en la juntura y con un grado de libertad sobre el plano determinado por la dirección de movimiento del carro y la normal al suelo. Puede considarse que la varilla no tiene masa. 1 Los datos del problema son la masa del carro y del extremo de la varilla, la longitud de la varilla, y el ángulo y la velocidad angular en cualquier momento. Se necesita controlar la fuerza F para llevar la varilla a posición vertical. El ángulo y la velocidad angular inicial pueden ser cualesquiera dentro de los rangos que la solución especifique. La solución debe implementar un sistema experto con conjuntos fuzzy. Diagrama en bloques y descripción del controlador Diagrama general Diagrama detallado del controlador 2 El controlador está compuesto por un fuzzificador (fuzzificator), que se encuentra a la entrada del mismo y que convierte los valores de naturaleza nítida que provienen de los sensores en variables de tipo fuzzy. El proceso se realiza mapeando los valores tomados (una vez normalizados a una escala de 0 a 100) en una familia de conjuntos fuzzy que el fuzzificador posee para cada tipo de dato que maneja. Una vez obtenidos los hechos tomados del proceso mismo, se almacenan en una base de hechos (fact base) de donde son tomados por el motor de inferencia (inference engine) que puede considerarse el cerebro del controlador. El motor de inferencia realiza una exploración en la base de conocimientos (knowledge base) −que contiene las reglas necesarias para controlar el proceso− en busca de reglas cuyos antecedentes coincidan con los hechos en la base de hechos. Las reglas obtenidas de este proceso de exploración son "disparadas", es decir, de ellas se infieren nuevos hechos que el sistema debe convertir en valores nítidos (para llevar a cabo esta tarea, se utiliza el defuzzificador, que en términos generales posee un funcionamiento inverso al del fuzzificador). Algunos detalles a notar son los siguientes: • Una vez que las variables son capturadas por los sensores, éstas poseen una forma poco conveniente para su tratamiento dentro del controlador, por lo cual se introduce un módulo de acondicionamiento (conditioner) que lleva a cabo una tarea de normalización. Idéntica función cumple el bloque situado en el defuzzificador. • Debido a que, en nuestro caso, la exploración en la base de conocimiento se realiza de una manera secuencial, se dispone de una cache que actúa como memoria intermedia entre el controlador y la base de conocimiento acelerando el proceso de exploración. La performance obtenida con la implementación de esta cache es muy superior a la versión de búsqueda puramente secuencial. Esto es así porque el proceso que se desea controlar es un proceso analógico, y como consecuencia de su continuidad inherente, los cambios en las condiciones iniciales (una vez fuzzificadas las variables capturadas de los sensores) son poco frecuentes. • En el diagrama se muestra un solo sensor y un solo actuador, pero el controlador fue desarrollado para soportar cualquier cantidad de dichos elementos. Se conserva el diagrama en esta forma por claridad. 3 Para la simulación del sistema se debe reemplazar el bloque de proceso (process) por un bloque simulador. El simulador posee una descripción matemática del proceso a controlar. Especificación de modelos matemáticos Es necesario especificar cuatro modelos matemáticos a ser utilizados en el proyecto: el método de fuzzificación, el método de defuzzificación, el método para evaluación de consecuentes y el modelo de comportamiento del péndulo invertido. Función de fuzzificación Comenzaremos por la función de fuzzificación. Esta función toma una variable nítida y sobre la base de su tipo escoge la familia de funciones de pertenencia correspondiente. Para cada una de las funciones, revisa si el valor de la variable está dentro del rango de valores de abscisas cuyas ordenadas son distintas de cero (este rango es un dato de la función). En caso de pertenecer a este rango, se evalúa la función para obtener el grado de pertenencia de la variable al conjunto fuzzy definido por la función. Gráficamente: Cabe destacar que una variable puede pertenecer a varios conjuntos fuzzy. El resultado de esta operación es un conjunto de pares ordenados de la forma (conjunto, grado de pertenencia). En realidad lo que se obtiene es una fact base, conjunto de objetos fact cuyos atributos son (variable, conjunto, grado de pertenencia). En nuestro sistema hemos implementado dos tipos de funciones: triangular y trapezoidal. La combinación de ambos tipos de funciones ofrece una mayor riqueza descriptiva en la fase de fuzzificación. Función de defuzzificación La función de defuzzificación es la centroide. Consiste en calcular, para cada hecho, el centro de masa de la figura que resulta de un corte horizontal de la función de fuzzificación a la altura ð , así como el área relativa resultante con respecto a la original. Gráficamente: 4 Una vez que se obtienen estos datos, se considera cada hecho como una masa puntual y se calcula el centro de masa del cuerpo dado por todos los hechos de la fact base. La posición resultante sobre el eje x es el valor defuzzificado de la variable en cuestión (valor nítido o crisp). Método de evaluación de consecuentes El método elegido para la evaluación de una regla es el método MIN−MAX que se describe a continuación: • Se calcula el ð resultante del antecedente con la siguiente función: ð A = min {ð 0, ð 1, ..., ð n} siendo ð i el grado de pertenencia del i−ésimo par (variable, conjunto_fuzzy) correspondiente al antecedente. • Una vez calculado ð A para cada consecuente, se evalúa el ð C que se asignará finalmente al par (variable, conjunto_fuzzy) resultante de la regla (consecuente). ð C se calcula de la siguiente manera: ð C = max {ð 0, ð 1, ..., ð n} siendo ð i el ð A obtenido para cada regla en la que el consecuente coincida. Desarrollo matemático del simulador La expresión que describe al sistema es la siguiente: ð = ð ð / I = (PT ds + FT dc) / (mStick ds2 + mCart dc2) Para una descripción detallada del desarrollo matemático, consulte el Apéndice A. A la hora de resolver esta fórmula en la computadora, se escogió el método de Ralston (Runge−Kutta de segundo orden). Modelo conceptual e implementación El modelo conceptual se realizó siguiendo el paradigma objeto, en particular utilizando la notación UML. El controlador y el simulador fueron codificados en Java. Configuración y parametrización del sistema Elección de funciones de pertenencia 5 Las funciones de pertenencia elegidas para cada una de las variables intervinientes en el controlador son las siguientes: Se utilizan 7 funciones de pertenencia (7 conjuntos fuzzy) en las variables ángulo y velocidad. En la variable de salida fuerza, se agregan 2 funciones adicionales para lograr una reacción rápida y decisiva en situaciones de condiciones críticas del sistema. Las funciones reciben los siguientes nombres (de izquierda a derecha): ♦ Grande Negativa ♦ Mediana Negativa ♦ Pequeña Negativa ♦ Aproximadamente Cero ♦ Pequeña Positiva ♦ Mediana Positiva ♦ Grande Positiva En el caso de la fuerza, se agregan en los extremos: Enorme Negativa y Enorme Positiva. El eje de las abscisas está normalizado y expresado porcentualmente sobre el rango de la correspondiente variable. Esto es una buena característica del sistema ya que facilita su sintonización al tener que cambiar solamente el dominio de las variables. Además, esta característica encuentra fundamento en el hecho de que la distribución y geometría de las funciones de pertenencia son propias de las variables insertadas en el entorno del proceso. 6 Puede notarse que las funciones no se encuentran equidistantes ni tienen idéntica forma, sino que presentan una separación relativa mayor a medida que su centro se aleja del punto medio de la gráfica. Asimismo, el área de las funciones se hace cada vez mayor hacia los extremos y tiene su valor mínimo en la función central. Esta distribución se asemeja a una "sintonía" que se hace más fina a medida que los valores medidos de ángulo y velocidad se aproximan a cero, permitiendo al controlador un mejor desempeño y brindando al sistema una mayor convergencia. Dicho de otra manera: cuando ángulo y velocidad son grandes, el controlador hace hincapié en una rápida recuperación por medio de la aplicación de una fuerza grande. En cambio, cuando ángulo y velocidad se hacen pequeños, el sistema trata de proporcionar una fuerza pequeña, tomando muy en cuenta pequeños cambios que puedan producirse en las variables de entrada y así logrando una gran estabilidad y precisión en el punto de equilibrio. Determinación del dominio de las variables Para determinar el dominio de las variables, tanto de entrada como de salida, es necesario tener conocimiento de las características físicas del péndulo. Nosotros utilizamos los siguientes parámetros: Masa del péndulo: 1 kg. Masa del carro: 10 kg. Longitud del péndulo: 1 m. También establecimos que la fuerza máxima que puede proporcionar el motor es de 100 N. Mediante estimación y simulación concluimos que el ángulo máximo del cual puede recuperarse el sistema (cuando la velocidad es cero) es de ð 45º y la velocidad máxima que puede desarrollar el péndulo durante el proceso es de ð 100 º/s. Se debe notar que estos valores obtenidos para las variables ángulo y velocidad son muy dependientes de la frecuencia de sampleo de los sensores. En nuestro caso, el tiempo entre samples debe ser menor a 200 ms, equivalente a una frecuencia de sampleo superior a los 5 Hz. Establecimiento y sintonización de la base de conocimiento Para la confección de reglas en nuestro sistema utilizamos el siguiente formato: IF a IS b AND c IS d AND ... THEN x IS y (1) O bien, para facilitar la escritura, tamaño y claridad de la base de conocimiento: IF a IS b AND ... AND h IS i OR j IS k THEN x IS y (2) Que puede interpretarse como un conjunto de reglas de la forma (1): IF a IS b AND ... AND h IS i THEN x IS y IF a IS b AND ... AND j IS k THEN x IS y De esta manera, la base de conocimiento puede escribirse de forma más compacta y más entendible. 7 La matriz utilizada fue generada a partir del conocimiento no−experto de los autores, pero el primer resultado fue sorprendentemente positivo por lo cual solo hicieron falta algunos ajustes que fueron derivados directamente del análisis de las gráficas obtenidas de la simulación. VELOCIDAD Se debe notar que algunas entradas poseen un doble valor correspondiente a la fuerza. Este tipo de reglas resultan en valores aproximadamente intermedios entre los conjuntos intervinientes, por lo que se puede lograr una aproximación más fina ofreciendo un mejor resultado. Resultados de las simulaciones A continuación se muestran gráficas que ilustran el comportamiento del controlador ante diferentes condiciones iniciales. El código de colores es el siguiente: fuerza en azul, ángulo en rojo y velocidad angular en verde. Las pruebas se hicieron solo para ángulos positivos ya que el sistema es completamente simétrico. Las unidades son: fuerza en newton, ángulo en grados y velocidad angular en grados / segundo. Las gráficas están a escala e indican las condiciones iniciales. 8 9 10 11 Conclusiones Los controladores basados en sistemas expertos de tipo fuzzy ofrecen muy buen desempeño en sistemas tanto lineales como no lineales, incluso en aquellos sistemas donde es difícil (o incluso imposible) encontrar un modelo matemático exacto del proceso a controlar. Actúan de manera totalmente predecible y además es posible conocer el estado del sistema en cualquier momento y las razones por las que tomó una determinada decisión. La estructura del controlador propuesta en este trabajo, y en general la de todos los controladores de este tipo, permite su fácil adaptación a nuevos problemas ahorrando tiempo de desarrollo en el controlador. Apéndice A Desarrollo matemático del simulador A continuación se realiza un modelo matemático del comportamiento del sistema. Se presenta un esquema para introducir las variables y símbolos utilizados en el desarrollo. El ángulo ð y la fuerza F se dibujaron respetando las convenciones de sentido positivo. 12 El diagrama se simplificó concentrando la masa del carro en un punto. Sobre este diagrama se realizó la descomposición de fuerzas. Descripción de las variables Nombre Mstick Mcart P PT F FT L Ds Dc ð Descripción Masa de la punta de la varilla Masa del carro Peso de la punta de la varilla Componente de P perpendicular a la varilla Fuerza aplicada al carro Componente de F perpendicular a la varilla Longitud de la varilla Distancia entre la punta de la varilla hasta el centro de gravedad Distancia entre el carro y el centro de gravedad Angulo entre la varilla y la normal al suelo Se analiza el movimiento angular del cuerpo al girar en torno a su centro de gravedad. Datos: mStick, mCart, l, ð , F, g (gravedad). Dado que l = ds + dc ds mStick = dc mCart se encuentra 13 ds = l mCart / (mCart + mStick) dc = l mStick / (mCart + mStick) Sumando los torques ejercidos sobre el centro de masa: ð ð = PT ds + FT dc donde PT = P seno(ð ) = mStick g seno(ð ) FT = F coseno(ð ) y dado que ðð=Ið donde I = momento de inercia del sistema respecto al eje de rotación (que pasa por el centro de gravedad). ð = aceleración angular de la varilla d2ð /dt2. al calcular el momento de inercia como I = ð mr2 = mStick ds2 + mCart dc2 se obtiene la descripción matemática del sistema: ð = ð ð / I = (PT ds + FT dc) / (mStick ds2 + mCart dc2) No se analiza la posición del carro en el tiempo porque el enunciado del problema solo hace referencia a controlar la posición angular de la varilla. Aunque la deducción de la fórmula puede tener imprecisiones tales como fuerzas no contempladas, las simulaciones muestran un comportamiento bastante aceptable y cercano a la realidad. Apéndice B Utilización de un esquema de caching para exploración de reglas. Aprovechando la naturaleza continua de las variables ángulo y velocidad en el presente sistema, decidimos incorporar una cache en el controlador para agilizar la búsqueda de reglas en la base de conocimiento. La cache seleccionada es de tamaño 1 y posee una estructura interna como la mostrada en la tabla 1: 14 El campo Tag se utiliza para realizar la comparación entre los pares (variable, conjunto_fuzzy) que provienen del fuzzificador y los pares que hacen que una regla contenida en la cache se dispare. El campo Rules contiene las reglas a disparar. Ya que es una cache unitaria, no se requiere especificar un algoritmo de reemplazo de páginas. Los resultados de la implementación de la cache son muy buenos. La performance global del sistema se ve notablemente mejorada. Resultados de simulaciones efectuadas en el controlador presentado en este informe muestran que el número de cache misses es de tan solo 11 en un total de 500 muestras. Al analizar mejor estos resultados, observamos que en las primeras 100 muestras se producen los 11 misses: más allá de este tiempo, el controlador logra llevar al proceso a un punto de equilibrio y lo mantiene con gran estabilidad (las condiciones varían muy poco). En este sistema, que consta con una base de conocimiento de unas 50 reglas, se realizaron en total 775 iteraciones aproximadamente contra unas 12500 necesarias en un esquema de búsqueda puramente secuencial. 15