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

Trabajo realizado por:

Iván Socolsky

Rodolfo Campero

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.

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

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:

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 m , así como el área relativa resultante con respecto a la original.

Gráficamente:

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:

m A = min {m 0, m 1, ..., m n}

siendo m i el grado de pertenencia del i-ésimo par (variable, conjunto_fuzzy) correspondiente al antecedente.

m C = max {m 0, m 1, ..., m n}

siendo m i el m 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:

a = å G / 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

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):

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.

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.

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.

V E L O C I D A D

GN MN PN AC PP MP GP

A

N

G

U

L

O

GN EP GP&EP GP&EP GP&EP GP&EP GP&EP GP&EP
MN MP&GP MP&GP MP MP MP MP MP
PN GP GP&MP MP&PP PP PP MN MN
AC GP GP PP AC PN GN GN
PP MP MP PN PN MN&PN GN&MN GN
MP MN MN MN MN MN MN&GN MN&GN
GP GN&EN GN&EN GN&EN GN&EN GN&EN GN&EN EN

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.

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 q y la fuerza F se dibujaron respetando las convenciones de sentido positivo.

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

Descripción

Mstick

Masa de la punta de la varilla

Mcart

Masa del carro

P

Peso de la punta de la varilla

PT

Componente de P perpendicular a la varilla

F

Fuerza aplicada al carro

FT

Componente de F perpendicular a la varilla

L

Longitud de la varilla

Ds

Distancia entre la punta de la varilla hasta el centro de gravedad

Dc

Distancia entre el carro y el centro de gravedad

q

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, q , F, g (gravedad).

Dado que

l = ds + dc

ds mStick = dc mCart

se encuentra

ds = l mCart / (mCart + mStick)

dc = l mStick / (mCart + mStick)

Sumando los torques ejercidos sobre el centro de masa:

å G = PT ds + FT dc

donde

PT = P seno(q ) = mStick g seno(q )

FT = F coseno(q )

y dado que

å G = I a

donde

I = momento de inercia del sistema respecto al eje de rotación (que pasa por el centro de gravedad).

a = aceleración angular de la varilla d2q /dt2.

al calcular el momento de inercia como

I = å mr2 = mStick ds2 + mCart dc2

se obtiene la descripción matemática del sistema:

a = å G / 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:

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.


Acerca de los autores

Iván Socolsky y Rodolfo Campero son estudiantes del 5to año de la carrera Ingeniería en Computación en la Facultad de Ciencias Exactas y Tecnología de la Universidad Nacional de Tucumán. Sus intereses incluyen el diseño y desarrollo de controladores con técnicas de inteligencia artificial. Actualmente se encuentran desarrollando un controlador adaptivo basado en redes neuronales de tipo fuzzy.

Para más información acerca de este trabajo o temas relacionados, así como comentarios y sugerencias, puede contactarse con los autores vía e-mail a las siguientes direcciones:

Iván Socolsky: isocolsky@geocities.com

Rodolfo Campero: rcampero@hotpop.com

1