1. Simulaci´n de un p´ndulo invertido
o e
Proyecto fin de carrera
Titulaci´n: Ingeniero T´cnico en Inform´tica de Sistemas
o e a
Autor: Jose Luis Beltr´n Alonso
a
Director: Pascual P´rez Blasco
e
6 de Diciembre de 2010
7. Cap´
ıtulo 1
Introducci´n
o
El p´ndulo invertido es conocido por ser uno de los problemas m´s importantes y cl´sicos de
e a a
la teor´ de control. Se trata de un control inestable y no lineal. A menudo, es utilizado como
ıa
ejemplo acad´mico, principalmente por ser un sistema de control m´s accesible, y por otro lado,
e a
permite mostrar las principales diferencias de control de bucle abierto y de su estabilizaci´n a
o
bucle cerrado. Pese a existir diferentes t´cnicas a la hora de dise˜ar el regulador ´ptimo capaz
e n o
de estabilizar el p´ndulo, no todas representan la mejor opci´n. En la presente memoria se
e o
analizar´n alguno de los m´todos m´s conocidos.
a e a
1.1. Descripci´n del p´ndulo invertido
o e
El p´ndulo invertido es un servo mecanismo que consta de un carro en el cual est´ mon-
e a
tado un p´ndulo que puede girar libremente. El carro est´ controlado por un servomotor y su
e a
principal funci´n es la de aplicar fuerzas al p´ndulo. Como la finalidad de este proyecto es dar
o e
la posibilidad de ejecutar el algoritmo de control en un sistema real (como, por ejemplo, un
Segway), implica que el carro puede desplazarse sin limitaci´n alguna, es decir, que si estuviese
o
montado sobre un riel, ´ste no tendr´ topes.
e ıa
Si se considera al p´ndulo separado del carro, ´ste tiene dos puntos de equilibrio: uno estable,
e e
abajo; y otro inestable, arriba. El objetivo del control es cambiar la din´mica del sistema para
a
que en la posici´n vertical, arriba, se tenga un punto de equilibrio estable. En otras palabras, la
o
idea es encontrar la fuerza que ha de aplicarse al carro para que el p´ndulo no se caiga, incluso
e
7
8. si se le perturba con un empuj´n tipo escalera o impulso.
o
Figura 1.1: Esquema p´ndulo invertido
e
1.2. Objetivos
El proyecto que se presenta a continuaci´n permite la simulaci´n del comportamiento f´
o o ısico
de un sistema din´mico que evoluciona con el tiempo. El objetivo es dise˜ar un sistema de control
a n
o
´ptimo que permita estabilizar un p´ndulo invertido asi como el desarrollo de una aplicaci´n ca-
e o
paz de simularlo. Los sistemas de control requieren del hardware adecuado para obtener los datos
de forma precisa. Normalmente, se consigue con un microcontrolador o un DSP, pero en este ca-
so, se har´ mediante una simulaci´n. La aplicaci´n ha sido realizada en un Applet de Java lo que
a o o
facilita su ejecuci´n desde cualquier navegador web. Sin embargo, para el dise˜o del regulador se
o n
ha utilizado la herramienta Matlab, principalmente, por su f´cil manejo en el c´culo de matrices.
a a
Respecto al algoritmo de control, el objetivo es estabilizar el p´ndulo partiendo ´ste inicial-
e e
mente en la parte superior, por lo que no se contempla el algoritmo encargado de levantar el
p´ndulo y lograr estabilizarlo en su posici´n vertical.
e o
8
9. Cap´
ıtulo 2
Modelado Matem´tico del P´ndulo
a e
El objetivo de la fase de modelado, es encontrar una expresi´n matem´tica que represente el
o a
comportamiento f´
ısico del sistema. Para modelar el sistema existen dos estrategias. La primera
es tratar al sistema como un “caja negra” y realizar sobre ´l un conjunto de acciones (se˜ales de
e n
entrada) observando c´mo se comporta (estudiar las salidas) deduciendo un modelo matem´tico
o a
para ´ste. Un ejemplo ser´ la t´cnica de Ziegler-Nichols. La segunda consiste en estudiar los
e ıa e
procesos f´
ısicos que tienen lugar en el sistema para deducir su ley de comportamiento. El re-
sultado que se pretende es la identificaci´n del sistema a trav´s de su funci´n de transferencia.
o e o
2.1. An´lisis de las fuerzas y sistema de ecuaciones
a
La mayor parte del ´xito a la hora de dise˜ar un buen regulador pasa por tener un modelo
e n
del sistema correcto. Hallarlo es una tarea complicada, y por ello, a menudo es necesario recurrir
a la sencillez. En el caso del p´ndulo, se consigue con el an´lisis por separado de cada uno de
e a
los cuerpos.
9
10. Figura 2.1: Diagramas de cuerpo libre del sistema.
El p´ndulo invertido se puede concebir b´sicamente como un cuerpo r´
e a ıgido cuyo movimiento
se limita a dos dimensiones. Las ecuaciones fundamentales de movimiento plano de un cuerpo
r´
ıgido son:
Fi = mai (2.1)
Fj = maj (2.2)
FG = Iαg (2.3)
Sumando las fuerzas en el diagrama de cuerpo libre del carro en la direcci´n horizontal, se
o
obtiene la siguiente ecuaci´n del movimiento:
o
M x + bx + N = F
¨ ˙ (2.4)
Tambi´n se podr´ sumar las fuerzas en la direcci´n vertical, pero no se ganar´ ninguna
e ıa o a
informaci´n util. Por otro lado, sumando las fuerzas en el diagrama de cuerpo libre del p´ndulo
o ´ e
en la direcci´n horizontal, se puede obtener una ecuaci´n para N:
o o
¨ ˙
N = m¨ + mlθcosθ − mlθ2 sinθ
x (2.5)
Si se sustituye esta ecuaci´n en la (2.4), se obtiene la primera ecuaci´n del movimiento de
o o
este sistema:
x ˙ ¨ ˙
(M + m)¨ + bx + mlθcosθ − mlθ2 sinθ = F (2.6)
10
11. Para obtener la segunda ecuaci´n del movimiento, es necesario sumar las fuerzas perpendi-
o
culares al p´ndulo. Resolviendo el sistema a lo largo de este eje se simplifica el c´lculo algebraico.
e a
¨
P sinθ + N cosθ − mgsinθ = mlθ + m¨cosθ
x (2.7)
Para librarse de los t´rminos P y N en la ecuaci´n (2.7), se han sumado los momentos
e o
sobre el centroide del p´ndulo para obtener la primera ecuaci´n (2.8) mostrada a continuaci´n.
e o o
Finalmente, combinando dicha ecuaci´n con la (2.6), se obtiene la segunda ecuaci´n din´mica
o o a
(2.9).
¨
−P lsinθ − N lcosθ = I θ (2.8)
¨
(I + ml2 )θ + mglsinθ = −ml¨cosθ
x (2.9)
Para facilitar la labor, se puede trabajar solo con funciones lineales. Para ello, se asume que
theta = Pi + ø, donde ø representa un peque˜o ´ngulo en la direcci´n vertical. Por lo tanto, las
n a o
dos ecuaciones de movimiento ser´n:
a
¨
(I + ml2 )φ − mglφ = ml¨
x (2.10)
x ˙ ¨
(M + m)¨ + bx − mlφ = u (2.11)
2.2. Funci´n de transferencia
o
Cualquier sistema f´
ısico (mec´nico, el´ctrico, etc.) se puede traducir a una serie de valores
a e
matem´ticos a trav´s de los cuales se conoce el comportamiento de estos sistemas frente a valores
a e
concretos. Esto es lo que permite la funci´n de transferencia. Se trata de un modelo matem´tico
o a
que a trav´s de un cociente relaciona la respuesta de un sistema (salida) a una se˜al de entrada
e n
o excitaci´n. Por definici´n una funci´n de transferencia se puede determinar seg´n la expresi´n:
o o o u o
Y (s)
H(s) = (2.12)
U (s)
11
12. Donde H(s) es la funci´n de transferencia (tambi´n denotada como G(s)). Y(s) es la trans-
o e
formada de Laplace de la respuesta y U(s) es la trasformada de Laplace de la se˜al de entrada.
n
Aplic´ndolo al p´ndulo invertido, para obtener anal´
a e ıticamente la funci´n de transferencia de
o
las ecuaciones del sistema linealizado, se ha de tomar primero la transformada de Laplace de las
ecuaciones del sistema. Donde se obtienen las siguientes ecuaciones:
(I + ml2 )Φ(s)s2 − mglΦ(s) = mlX(s)s2 (2.13)
(M + m)X(s)s2 + bX(s)s − mlΦ(s)s2 = U (s) (2.14)
Dado que la salida de inter´s en este caso es el ´ngulo Phi, en primer caso se resuelve la primera
e a
ecuaci´n para X(s), donde posteriormente se sustituir´ en la segunda ecuaci´n:
o a o
(I + ml2 ) g
X(s) = − 2 Φ(s) (2.15)
ml s
(I + ml2 ) g (I + ml2 ) g
(M + m) + Φ(s)s2 + b + Φ(s)s − mlΦ(s)s2 = U (s) (2.16)
ml s ml s
Reordenando la funci´n de transferencia se obtiene:
o
ml 2
Φ(s) q s
= b(I+ml2 ) 3
(2.17)
U (s) s4 + q s − (M +m)mgl s2
q − bmgl
q s
q = (M + m)(I + ml2 ) − (ml)2
De la funci´n de transferencia de arriba puede verse que hay un polo y un cero en el origen.
o
Estos puede ser cancelados y la funci´n de transferencia ser´:
o a
ml
Φ(s) q s
= b(I+ml2 ) 2
(2.18)
U (s) s3 + q s − (M +m)mgl s
q − bmgl
q
q = (M + m)(I + ml2 ) − (ml)2
12
13. En este punto ya se tiene calculada la funci´n de transferencia que representa al sistema f´
o ısico
del p´ndulo invertido. Mediante esta ecuaci´n ya se puede realizar pruebas para comprobar si
e o
el sistema es estable a lazo abierto (v´ase 2.4 “Respuesta a lazo abierto”)
e
2.3. Ecuaci´n de estado
o
El espacio de estados es otro m´todo que permite modelar un sistema f´
e ısico. Se representa por
un conjunto de entradas, salidas y variables de estado relacionadas por ecuaciones diferenciales
de primer orden que se combinan en una ecuaci´n diferencial matricial de primer orden. A esta
o
representaci´n se le llama ecuaci´n de estado. Una forma general de expresar la din´mica de un
o o a
sistema lineal es:
x = Ax + Bu
y = Cx + Du
Donde el vector x es el estado del sistema y contiene n elementos para un sistema de orden
n. u es el vector de entrada y contiene m elementos. y contiene p elementos y es el vector de
salida. A, de dimensi´n n x n es la matriz del sistema. B, de dimensi´n n x m es la matriz de
o o
entrada. C, de dimensi´n p x n es la matriz de salida y D es una matriz de dimensi´n p x m.
o o
Este tipo de representaci´n tiene la ventaja de que permite conocer el comportamiento in-
o
terno del sistema, adem´s de que se puede trabajar con sistemas cuyas condiciones iniciales sean
a
diferentes de cero. Otra ventaja es que se facilita el dise˜o asistido por computadora, ya que los
n
paquetes de software normalmente dependen de esta representaci´n.
o
El vector x que determina el estado del sistema contendr´ cuatro elementos (posici´n del
a o
carro, primera derivada, posici´n del ´ngulo y su derivada). En el caso del vector y se ha con-
o a
siderado que el p´ndulo consta de tres sensores, uno para la posici´n del carro r, otro para el
e o
a
´ngulo φ y el ultimo para la velocidad del carro r. El vector u tiene un unico elemento que es la
´ ˙ ´
fuerza aplicada al carro. Una vez conocida esta informaci´n se pueden determinar las matrices
o
de C y D (donde D=0).
13
14.
x1 r
x1 1 0 0 0
x2 Φ
x= = y = x2 C= 0 1 0 0 u=F
x3 r
˙
x3 0 0 1 0
x4 ˙
Φ
Para obtener A y B es necesario expresar las ecuaciones 2.1 y 2.6 en la forma:
x = f (x, u)
˙ (2.19)
de tal forma que:
x1 = f1 (x, u) = x3
˙ (2.20)
x2 = f2 (x, u) = x4
˙ (2.21)
de la ecuaci´n 2.6 y haciendo α = M1 ls
o
αx4 cosx2 − αx4 2 senx2 − Fr x3 + u
˙
x3 =
˙ (2.22)
M
αx3 cosx2 + αgsenx2 − Cx4
˙
x4 =
˙ (2.23)
Θ
Sustituyendo 2.22 en 2.19 se obtiene x3 = f3 (x, u) pero la ecuaci´n resultante no es lineal. Para
˙ o
poder representarla como ecuaci´n de estado lineal debe tener la siguiente forma:
o
n
xi =
˙ aij xj + bi u (2.24)
j=1
Donde aij y bi son constantes. Para linealizar la ecuaci´n x3 = f3 (x, u) se puede expresar f3 (x, u)
o ˙
como una serie de Taylor y utilizar unicamente el primer t´rmino.
´ e
4
x3 ≈
˙ ∂f3 (x, u)) ∆xi +
∂f3 (x, u)
∆u (2.25)
∂xi ∂u
i=1 x=0,u=0 x=0,u=0
Al calcular las derivadas parciales y hacer β = ΘM − α2 se tiene:
14
15. ∂f3 (x, u)
a31 = =0 (2.26)
∂x1
x=0,u=0
∂f3 (x, u) α2 g
a32 = = (2.27)
∂x2 β
x=0,u=0
∂f3 (x, u) ΘFr
a33 = = (2.28)
∂x3 β
x=0,u=0
∂f3 (x, u) αC
a34 = =− (2.29)
∂x1 β
x=0,u=0
∂f3 (x, u) Θ
b3 = =− (2.30)
∂u β
x=0,u=0
Para el caso de x4 hay que seguir el mismo procedimiento que el realizado para x3 . A partir de
˙ ˙
este punto, ya se pueden determinar los coeficientes de A y B.
0 0 1 0 0
0 0 0 1 0
A=
B=
0 a32 a33 a34 b3
0 a42 a43 a44 b4
Finalmente, ya puede expresarse en la forma de espacio de estados:
˙
Xn = An xn + Bn u
Yn = Cxn
x
˙ 0 1 0 0 x
˙ 0
−(I+ml2 )b m2 gl2 I+ml2
x 0
¨ 0 x
¨
I(M +m)+M ml2 ) I(M +m)+M ml2 ) I(M +m)+M ml2 )
˙ = ˙ + (2.31)
Φ 0 0 0 1 Φ 0
¨ −mlb mgl(M +m) ¨ ml
Φ 0 I(M +m)+M ml2 ) I(M +m)+M ml2 )
0 Φ I(M +m)+M ml2 )
1 0 0 0
y=
0 0 1 0
15
16. 2.4. Respuesta a lazo abierto
Una vez obtenidos los modelos matem´ticos y antes de comenzar con el dise˜o de un regu-
a n
lador, es necesario comprobar si el sistema es estable a lazo abierto. Para ello, se har´ una
a
simulaci´n con Matlab donde se asumir´n los siguientes valores que se mantendr´n durante
o a a
todos los ejercicios pr´cticos:
a
M: Masa del carro = 0.5 Kg
m: Masa del p´ndulo = 0.5 Kg
e
b: Fricci´n del carro = 0.1 N/m/seg
o
l: Longitud p´ndulo = 0.3 m
e
I: Inercia del p´ndulo = 0.006 Kg*m2
e
F: Fuerza aplicada al carro
x: Coordenadas de posici´n del carro
o
´
Θ: Angulo del p´ndulo
e
Dado que se han obtenido dos modelos matem´ticos diferentes por m´todos distintos, el
a e
siguiente paso ser´ hacer una simulaci´n para cada uno de ellos. Cada simulaci´n har´ uso de
a o o a
unos requerimientos de dise˜o diferentes debido al tipo de variables con el que trabaja.
n
2.4.1. Soluci´n: Mediante funci´n de transferencia
o o
En el caso de la funci´n de transferencia solo se va a tratar con una sistema de unica salida
o ´
(el ´ngulo del p´ndulo), y por lo tanto, los requerimientos de dise˜o son:
a e n
- Tiempo de establecimiento menor a 5 segundos.
´
- Angulo del p´ndulo siempre menor que 0.05 radianes de la vertical.
e
El numerador y denominador de la funci´n de transferencia se almacenaran en vectores de
o
tal forma que el c´digo quedar´ as´
o ıa ı:
1 M = 0.5;
2 m = 0.2;
3 b = 0.1;
4 i = 0.006;
16
17. 5 g = 9.8;
6 l = 0.3;
7 q = ( M + m ) *( i + m * l ^2) -( m * l ) ^2;
8 num = [ m * l / q 0]
9 den = [1 b *( i + m * l ^2) / q -( M + m ) * m * g * l / q -b * m * g * l / q ]
Donde su salida deber´ ser:
ıa
num =
4.5455 0
den =
1.0000 0.1818 -31.1818 -4.4545
Para observar la respuesta del sistema a una fuerza impulsiva de 1N aplicada al carro, se in-
troducir´ un impulso a la entrada mediante la funci´n impulse. Para ello es necesario a˜adir el
a o n
siguiente c´digo:
o
11 t =0:0.01:5;
12 impulse ( num , den , t )
13 axis ([0 1 0 60])
La funci´n axis se encarga de dibujar los ejes que aparecer´n en la gr´fica. En este caso, el eje X
o a a
representa el tiempo en segundos y el vector Y la amplitud. Como resultado de la simulaci´n se
o
obtiene la gr´fica donde puede observarse como la respuesta es totalmente insatisfactoria. Como
a
era de esperar no es estable a lazo abierto y por lo tanto ser´ necesario dise˜ar un regulador
a n
capaz de estabilizar el p´ndulo (ver cap´
e ıtulo 3).
17
18. Figura 2.2: Respuesta F.D.T en lazo abierto
2.4.2. Soluci´n: Mediante espacio de estados
o
En este caso los requerimientos de dise˜o son distintos pues se trata de un sistema multisa-
n
lida y el objetivo ya no es solo controlar el ´ngulo del p´ndulo sino tambi´n la posici´n del carro.
a e e o
Por lo tanto, los requerimientos de dise˜o a tener en cuenta son:
n
- Tiempo de establecimiento de x y θ menor a 5 segundos.
- Tiempo de subida para x menor que 0.5 segundos.
- Sobrepico de θ menor que 20 grados.
En primer lugar hay que calcular las matrices A,B,C y D a partir de la expresi´n obtenida
o
en 2.31
1 M = 0.5;
2 m = 0.2;
3 b = 0.1;
4 i = 0.006;
5 g = 9.8;
6 l = 0.3;
7
8 p = i *( M + m ) + M * m * l ^2; %denominador para las matrices A y B
18
19. 9 A = [0 1 0 0;
10 0 -( i + m * l ^2) * b / p ( m ^2* g * l ^2) / p 0;
11 0 0 0 1;
12 0 -( m * l * b ) / p m * g * l *( M + m ) / p 0]
13 B = [0;
14 ( i + m * l ^2) / p ;
15 0;
16 m*l/p]
17 C = [1 0 0 0;
18 0 0 1 0]
19 D = [0; 0]
Como resultado se obtiene:
A =
0 1.0000 0 0
0 -0.1818 2.6727 0
0 0 0 1.0000
0 -0.4545 31.1818 0
B =
0
1.8182
0
4.5455
C =
1 0 0 0
0 0 1 0
D =
0
0
Al igual que en el caso anterior hay que introducir una entrada que en este caso ser´ un
a
escal´n de 0,2 metros. A˜adiendo el siguiente c´digo:
o n o
21 T =0:0.05:10;
22 U =0.2* ones ( size ( T ) ) ;
23 [Y , X ]= lsim (A ,B ,C ,D ,U , T ) ;
24 plot (T , Y )
25 axis ([0 2 0 100])
19
20. Se observa la salida donde la l´
ınea azul representa la posici´n del carro y la l´
o ınea verde el ´ngulo
a
del p´ndulo. Al igual que en la figura anterior, para mejorar la din´mica del sistema es necesario
e a
incluir alguna clase de control. Este regulador se dise˜ar´ en el apartado 3.2.
n a
Figura 2.3: Respuesta mediante espacio de estados
20
21. Cap´
ıtulo 3
Estabilizaci´n del p´ndulo
o e
Llegados a este punto se ha comprobado que la din´mica del sistema por si sola no es
a
capaz de mantener el p´ndulo estable. Aqu´ nace la necesidad de incluir un regulador capaz
e ı
de “decidir” en cada momento cu´l es la acci´n a realizar sobre el carro para que el p´ndulo
a o e
no se desestabilice. Existen distintos m´todos para dise˜ar un regulador. En este cap´
e n ıtulo se
abordar´ concretamente el dise˜o en espacio de estados mediante la creaci´n de un regulador
a n o
LQR. Tambi´n se mostrar´ otras tres posibles soluciones al problema del p´ndulo invertido,
e a e
mediante el m´todo del Lugar de las Ra´
e ıces, haciendo uso de un control PID, y con el m´todo
e
de respuesta en frecuencia.
3.1. Controlador PID
Los controladores PID han logrado colocarse en un sector importante en la industria pues
han demostrado ser muy robusto para muchas de sus aplicaciones. El objetivo de este apartado
es lograr dise˜ar un PID capaz de estabilizar el p´ndulo invertido y analizar posteriormente si
n e
el controlador dise˜ado ser´ el m´s adecuado para el sistema.
n a a
3.1.1. Estructura
La estructura de un controlador PID es simple pero en ocasiones su sencillez puede ser
tambi´n su debilidad. Considerando un lazo de control de una entrada y una salida (SISO) de
e
un grado de libertado obtenemos el siguiente diagrama:
21
22. Figura 3.1: Diagrama en bloques
A diferencia del cap´
ıtulo anterior, ahora se est´ trabajando con sistemas a lazo cerrado, es
a
decir, con realimentaci´n. Donde restando el valor de la referencia a la salida anterior se obtiene
o
el error que el PID ir´ tratando hasta que sea nulo. Los miembros de la familia de controladores
a
PID, incluyen tres acciones: proporcional (P), integral (I) y derivativa (D). Estos controladores
son los denominados P, I, PI, PD y PID.
P: Acci´n de control proporcional da una salida del controlador que es proporcional
o
al error, es decir: u(t) = KP e(t). Un controlador proporcional puede controlar cualquier
planta estable, pero posee desempe˜o limitado y error en r´gimen permanente.
n e
I: Acci´n de control integral da una salida del controlador que es proporcional al error
o
acumulado, lo que implica que es un modo de controlar lento.
t
u(t) = Ki e(τ )dτ
0
La se˜al de control u(t) tiene un valor diferente de cero cuando la se˜al de error e(t) es
n n
cero. Por lo que se concluye que dada una referencia constante, o perturbaciones, el error
en r´gimen permanente es cero.
e
I: Acci´n de control proporcional-integral se define mediante
o
t
Kp
u(t) = Kp e(t) + e(τ )dτ
Ti 0
donde Ti se denomina tiempo integral y es quien ajusta la acci´n integral. Con un control
o
proporcional, es necesario que exista error para tener una acci´n de control distinta de
o
cero. Con acci´n integral, un error peque˜o positivo siempre nos dar´ una acci´n de control
o n a o
creciente, y si fuera negativo la se˜al de control ser´ decreciente. Este razonamiento sencillo
n a
muestra que el error en r´gimen permanente ser´ siempre cero.
e a
22
23. I: Acci´n de control proporcional-derivativa se define mediante:
o
de(t)
u(t) = Kp e(t) + Kp Td
dt
donde Td es una constante denominada tiempo derivativo. Esta acci´n tiene car´cter
o a
de previsi´n, lo que hace m´s r´pida la acci´n de control, aunque tiene la desventaja
o a a o
importante que amplifica las se˜ales de ruido y puede provocar saturaci´n en el actuador.
n o
La acci´n de control derivativa nunca se utiliza por s´ sola, debido a que s´lo es eficaz
o ı o
durante per´
ıodos transitorios.
PID: Acci´n de control proporcional-integral-derivativa, esta acci´n combinada
o o
re´ne las ventajas de cada una de las tres acciones de control individuales. La ecuaci´n de
u o
un controlador con esta acci´n combinada se obtiene mediante:
o
t
Kp de(t)
u(t) = Kp e(t) + e(τ )d(τ ) + Kp Td
Td 0 dt
1
CP ID (s) = kp 1 + + Td s
Ti s
3.1.2. Dise˜ o PID
n
El objetivo de este apartado es calcular manualmente la funci´n de transferencia que repre-
o
sente el regulador ´ptimo. Normalmente, el procedimiento v´lido a la hora de dise˜ar un PID
o a n
es comenzar utilizando s´lo el control proporcional. De forma que el diagrama de bloques ser´
o ıa:
Figura 3.2: Regulador P
23
24. La ecuaci´n caracter´
o ıstica del bucle cerrado viene dada por:
Ku G(z)
M (z) = (3.1)
1 + Ku G(z)
El denominador aparece sumado ya que la realimentaci´n es negativa, en caso de ser positiva
o
habr´ que sustituirlo por 1 - Ku G(z). Para entender mejor la teor´ a continuaci´n, se detalla
ıa ıa, o
un ejemplo manual sencillo. En el caso del p´ndulo invertido se har´ uso de la herramienta
e a
Matlab tal y como se detalla en el apartado 3.1.3.
La forma de dise˜ar este PID es haciendo uso del m´todo de ajuste de Nichols-Ziegler.
n e
B´sicamente consiste en lograr unos valores para la I (integral) y D (derivados) de modo que la
a
ganancia sea cero. La funci´n de transferencia del regulador tiene la siguiente estructura:
o
a0 z 2 + a1 z + a2
Gr (z) = (3.2)
z(z − 1)
Td T 2Td Td
ao = kc 1 + ; a1 = Kc −1 + − ; a2 = kc (3.3)
T Ti T T
Para cada tipo de controlador se sigue los siguientes par´metros:
a
- Controlador P: Kc =0.5Ku
- Controlador PI: Kc =0.45Ku Ti = Tu /1,2
- Controlador PID: Kc =0.6Ku Ti = Tu /2Td = Tu /8
Donde,
2π 1 β
Tu = Wu = arctg
Wu T α
24
25. Para este ejemplo, se va a asumir que se tiene la siguiente funci´n de transferencia:
o
1
G(z) = (3.4)
z2 − 0,87
• Paso 1 Calcular Ku
Conociendo la ecuaci´n caracter´
o ıstica en bucle cerrado se puede igualar a cero el denominador
para despejar Ku:
1 + KuG(z) = 0 (3.5)
1
1 + Ku =0 (3.6)
z2 − 0, 87
El siguiente paso ser´ resolver la ecuaci´n de segundo grado manteniendo la inc´gnita Ku y
a o o
forzando a que el m´dulo de los polos sea 1.
o
0, 8 ± 0, 82 − 4Ku
z= (3.7)
2
2
0, 8 4Ku − 0, 82
|z| = 1 = + (3.8)
2 2
4Ku − 0, 82
1 = 0, 42 + (3.9)
4
Finalmente, despejando se obtiene que Ku=1
• Paso 2. Obtener polos para Ku
Una vez obtenida Ku ya se puede sustituir en la ecuaci´n de segundo grado (3.7):
o
√
0, 8 ± 0, 82 − 4 0, 8 ± 0, 64 − 4 0, 8 ± 1, 83j
z= = = = 0, 4 ± 0, 916j (3.10)
2 2 2
25
26. • Paso 3. Calculo de Tu
Se supone que el valor de periodo es de 0.1. Es importante destacar que la divisi´n entre
o
α y β se calcula en radianes.
1 0, 4
Wu = arctg = 11, 593
0,1 0, 916
2π
Tu = = 0, 542 (3.11)
11, 593
• Paso 4. Obtener regulador discreto.
- Kc = 0, 6Ku = 0, 6 ∗ 1 = 0, 6
- Ti = Tu /2 = 0, 271
- Td = Tu /8 = 0, 06775
• Paso 5. Obtener fdt del regulador discreto.
En este punto, sustituyendo los valores obtenidos en la funci´n 3.3 se puede hallar los valores
o
para a0 , a1 y a2 .
1, 0065z 2 − 1, 1916z + 0, 4065
Gr (z) = (3.12)
z(z − 1)
• Paso 6. Obtener ecuaci´n en diferencia para implementar en PC
o
Llegados a este punto ya se ha obtenido el regulador que se estaba buscando y no es necesario
continuar. No obstante, se va a detallar como obtener la ecuaci´n en diferencia, es decir, sacar
o
la expresi´n capaz de ser interpretada por un ordenador.El procedimiento a seguir ser´ obtener
o a
la antitransformada a partir de la f.d.t calculada en el anterior apartado.
26
27. M (z) a0 z 2 + a1 z + a2
Gr (z) = = (3.13)
E(z) z2 − z
(a0 z 2 + a1 z + a2 )E(z) = (z 2 − z)U (z) (3.14)
a0 e(k) + a1 (l − 1) + a2 e(k − 2) = u(k) − u(k − 1) (3.15)
u(k) = a0 e(k) + a1 e(k − 1) + a2 (k − 2) + u(k − 1) (3.16)
3.1.3. Ejemplo p´ndulo invertido.
e
En el caso del p´ndulo invertido, como ya se ha mencionado anteriormente, se va a hacer
e
uso de la herramienta Matlab. Asi que partiendo del c´digo ya utilizado en el apartado 2.4.1
o
y siguiendo con los requerimientos de dise˜o especificados en el mismo apartado ya se puede
n
comenzar a realizar pruebas:
1 M = .5;
2 m = 0.2;
3 b = 0.1;
4 i = 0.006;
5 g = 9.8;
6 l = 0.3;
7
8 q = ( M + m ) *( i + m * l ^2) -( m * l ) ^2; %simplifica entrada
9
10 num = [ m * l / q 0]
11 den = [1 b *( i + m * l ^2) / q -( M + m ) * m * g * l / q -b * m * g * l / q ]
En ocasiones la mejor forma de obtener un regulador ´ptimo es a base de prueba y error, por
o
ello, en principio, se asume que el valor proporcionar, integral y derivativo valdr´ 1:
a
27
28. 13 kd = 1;
14 k = 1;
15 ki = 1;
16 numPID = [ kd k ki ];
17 denPID = [1 0];
18 numc = conv ( num , denPID )
19 denc = polyadd ( conv ( denPID , den ) , conv ( numPID , num ) )
La funci´n polyadd no existe en Matlab pero ha sido creada en un fichero ’m’ distinto con el
o
prop´sito de sumar dos polinomios aun cuando no tuviesen la misma longitud. A continuaci´n,
o o
se muestra el c´digo del fichero polyadd.m 1 .
o
1 %Copyright 1996 Justin Shriver
2 %POLYADD ( poly1 , poly2 ) : suma dos polinomios posiblemente no apareados
3 if length ( poly1 ) 0
4 poly =[ zeros (1 , mz ) , short ]+ long ;
5 else
6 poly = long + short ;
7 end
Ahora ya se puede comenzar con la simulaci´n real donde introduciendo un impulso a la entrada
o
la salida es:
21 t =0:0.01:5;
22 impulse ( numc , denc , t )
23 axis ([0 1.5 0 40])
1
No es necesario importar el fichero a Matlab si se encuentra en el mismo directorio que el proyecto con el que
se est´ trabajando.
a
28
29. Figura 3.3: PID: Respuesta ante impulso de entrada
Como se observa la respuesta a´n no es estable. Como primera prueba, se incrementa la pro-
u
porcional dando un valor k=100. Y su salida es:
Figura 3.4: PID: Respuesta ante incremento proporcional
Se puede observar que el tiempo de establecimiento empieza a ser aceptable pues es cercano
a los 2 segundos. Adem´s, el error estacionario es cero, as´ que no es necesario ning´n control
a ı u
integral.
29
30. El siguiente paso es intentar reducir el sobrepico, para ello, se prueba con un valor Kd de 20:
Figura 3.5: PID: Respuesta ante incremento derivativo
Como se puede ver, el sobrepico se redujo de modo que el p´ndulo no se mueve m´s que 0.05
e a
radianes de la vertical. Se han satisfecho todos los criterios de dise˜o, as´ que ya no se necesita
n ı
m´s iteraciones. Al parecer ya se ha obtenido un PID capaz de hacer estable el p´ndulo pero no
a e
se ha tenido en cuenta que ocurre con la posici´n del carro. Simulando el sistema con la funci´n
o o
de transferencia en lazo cerrado que incluye la posici´n del carro, se obtiene:
o
1 M = 0.5;
2 m = 0.2;
3 b = 0.1;
4 i = 0.006;
5 g = 9.8;
6 l = 0.3;
7
8 q = ( M + m ) *( i + m * l ^2) -( m * l ) ^2;
9 num1 = [ m * l / q 0 0];
10 den1 = [1 b *( i + m * l ^2) / q -( M + m ) * m * g * l / q -b * m * g * l / q 0];
11 num2 = [( i + m * l ^2) / q 0 -m * g * l / q ];
12 den2 = den1
30
31. 13 kd = 20;
14 k = 100;
15 ki = 1;
16 numPID = [ kd k ki ];
17 denPID = [1 0];
18
19 numc = conv ( num2 , denPID ) ;
20 denc = polyadd ( conv ( denPID , den2 ) , conv ( numPID , num1 ) ) ;
21 t =0:0.01:5;
22 impulse ( numc , denc , t )
Figura 3.6: PID: Respuesta carrito ante impulso
Como se observa, el carro se desplaza a una velocidad constante y nunca se detiene. A pesar
de que el controlador PID estabiliza el ´ngulo del p´ndulo, este dise˜o no es util para el objetivo
a e n ´
que se pretende alcanzar. Por ello, el siguiente paso es intentar un dise˜o en espacio de estado.
n
31
32. 3.2. Regulador LQR
La ventaja de tener el sistema representado en el espacio de estados es que el dise˜o de
n
un controlador LQR resulta m´s sencillo. La idea es establecer una retroalimentaci´n completa
a o
mediante una combinaci´n lineal de las variables de estado. A pesar de ser lo ideal, la realidad
o
es que el estado que se mide no es completo, por lo que ser´ conveniente utilizar un observador
ıa
de orden reducido para estimar parte del estado. En este caso, se asume que todos los estados
son medibles. El resultado final del algoritmo de control ser´ el siguiente:
ıa
Figura 3.7: Regulador LQR
3.2.1. Base te´rica
o
En la figura 3.7 se puede ver un esquema del algoritmo de control. K es la matriz que retroali-
menta el estado para obtener la se˜al de control, es decir: u(k)= -Kx(k). El siguiente paso en el
n
proceso de dise˜o es encontrar el vector K que determina la ley de control para la realimentaci´n.
n o
Esto puede hacerse de varias formas. La primera opci´n es asignar arbitrariamente el patr´n de
o o
polos que se desee que tenga el sistema en lazo cerrado. Y la otra opci´n es hacer uso de un
o
control ´ptimo variable en el tiempo. En este caso la opci´n elegida es un control ´ptimo LQR.
o o o
Se trata de minimizar la funci´n:
o
N
J= Xn (k)QXn (k) + uT (k)Ru(k)
T
(3.17)
k=0
32
33. J es una funci´n de costo que generalmente est´ asociada con la energ´ del sistema. Se trata
o a ıa
o ıa. o T
de un control ´ptimo en el sentido de que busca minimizar la energ´ La expresi´n Xn (k)QXn (k)
representa la energ´ que aporta cada estado, Q es una matriz no negativa definida (una posi-
ıa
bilidad es una matriz diagonal, cuyos elementos sean positivos). A trav´s de Q se puede elegir
e
T
el peso que tiene cada estado en la funci´n J. Se puede conceptualizar Xn (k)QXn (k), como
o
una x2 (la energ´ normalizada) en un sistema con una sola variable. Como en este caso u(k)
ıa
contiene un s´lo elemento, R ≥ 0 es un elemento que indica el peso que se le quiere dar a la
o
energ´ asociada con la se˜al de control.
ıa n
La ecuaci´n 3.13 est´ sujeta a la restricci´n impuesta por el sistema (ver funcion 2.31).
o a o
Xn (k + 1) = Ad Xn (k) + Bd u(k) (3.18)
Resolver estas ecuaciones requiere de la utilizaci´n de m´todos num´ricos. Dado que el resultado
o e e
es dif´ de obtener, solo mencionar que la soluci´n resulta de una ley de control variable en
ıcil o
tiempo:
u(k) = −K(k)Xn (k)
Para sistemas con coeficientes constantes, K(k) permanece fija durante un periodo de tiempo
y luego decae a cero. Si se hace N → ∞ en 3.13 entonces la ganancia del controlador permanece
fija todo el tiempo:
K(k) = K
El valor exacto de J no es relevante, solo se pretende encontrar la K que asegure que sea
m´
ınimo. Lo importante es el valor relativo que tienen los elementos de Q y R entre s´ Dichos
ı.
par´metros ser´n los encargados de balancear la importancia relativa de la entrada y los estados
a a
en la funci´n de costo que se esta tratando de optimizar. El caso m´s simple es considerar R=1
o a
y proponer Q a partir de ah´
ı.
33
34. 3.2.2. Dise˜ o en espacio de estados
n
Una vez analizada la parte te´rica ya se puede completar el regulador al que se hac´ refe-
o ıa
rencia en el apartado 2.4.2. En dicho apartado se tomaban los siguientes criterios de dise˜o:
n
- Tiempo de establecimiento de x y theta menor que 5 segundos.
- Tiempo de Subida para x menor que 0.5 segundos.
- Sobrepico de theta menor que 20 grados (0.35 radianes).
A los cuales adem´s se incluye un cuarto criterio, un error estacionario entre el 2 %. Las
a
caracter´
ısticas del p´ndulo siguen siendo las mismas:
e
1 M = 0.5;
2 m = 0.2;
3 b = 0.1;
4 i = 0.006;
5 g = 9.8;
6 l = 0.3;
Echando un vistazo a la simulaci´n se determinaron que las ecuaciones de estado para este
o
problema son:
x
˙ 0 1 0 0 x
˙ 0
x 0 −0,1818 2,6727 0 x 1,8182
¨ ¨
˙ = ˙ + (3.19)
Φ 0 0 0 1 Φ 0
¨
Φ 0 −0,4545 31,1818 0 ¨
Φ 4,5455
x
˙
1 0 0 0 x
¨ 0
y=
˙ +
u
0 0 1 0 Φ 0
¨
Φ
34
35. Para la obtenci´n del regulador se va a utilizar la funci´n “lqr” que dar´ el controlador
o o a
o
´ptimo. Esta funci´n permite elegir dos par´metros, R y Q, donde, como ya se dijo anterior-
o a
mente, el caso m´s simple es considerar R=1, y Q, por ejemplo, valdr´ Q=C’*C. El m´todo
a a e
LQR, b´sicamente permite el control de ambas salidas. Para obtener una respuesta deseable, el
a
controlador puede sintonizarse cambiando los elementos no nulos en la matriz Q. Para obtener
la matriz Q es suficiente con introducir el comando C’*C
Q =
1 0 0 0
0 0 0 0
0 0 1 0
0 0 0 0
El elemento en la posici´n 1,1 se usar´ para la posici´n del carro y el elemento en la posici´n
o a o o
3,3 para el ´ngulo del p´ndulo. El valor de la entrada R permanecer´ en 1. Ahora que se conoce
a e a
la matriz Q ya se puede calcular el valor de K y mostrar gr´ficamente el resultado.
a
1 x =1;
2 y =1;
3 Q =[ x 0 0 0;
4 0 0 0 0;
5 0 0 y 0;
6 0 0 0 0];
7 R = 1;
8 K = lqr (A ,B ,Q , R )
9 Ac = [( A - B * K ) ];
10 Bc = [ B ];
11 Cc = [ C ];
12 Dc = [ D ];
13
14 T =0:0.01:5;
15 U =0.2* ones ( size ( T ) ) ;
16 [Y , X ]= lsim ( Ac , Bc , Cc , Dc ,U , T ) ;
17 plot (T , Y )
18 legend ( ’ Carrito ’ , ’ P´ ndulo ’)
e
35
36. K =
-1.0000 -1.6567 18.6854 3.4594
Figura 3.8: Respuesta controlador LQR
La curva en verde representa el ´ngulo del p´ndulo, en radianes y la curva azul representa la
a e
posici´n del carro en metros. Como se puede ver, este gr´fico no es satisfactorio. Los sobrepicos
o a
del p´ndulo y del carro parecen estar bien, pero debe mejorarse sus tiempos de asentamiento, y
e
debe bajarse el tiempo de subida del carro.
Tambi´n puede observarse que el carrito no se halla cerca de la ubicaci´n deseada sino que
e o
de hecho se ha movido en la direcci´n contraria. Este error ser´ tratado en la secci´n siguiente,
o a o
en este momento hay que resolver los tiempos de subida y de establecimiento.
Para ello hay que variar los valores de las variables x e y para modificar as´ la matriz Q. Por
ı
ejemplo, incrementando la variable x, se consigue que los tiempos de establecimiento disminuyan,
por otro lado, incrementando ’y’ se reduce el movimiento angular del p´ndulo.
e
36
37. Para valores x=5000; y=100 se obtiene la siguiente respuesta:
K =
-70.7107 -37.8345 105.5298 20.9238
Figura 3.9: Respuesta controlador LQR ante incremento de x,y
Como se puede ver si se sigue incrementando x e y, se podr´ mejorar aun m´s la respuesta
ıa a
pero tambi´n ser´ mayores los esfuerzos de control usados. La respuesta del sistema tiene un
e ıan
tiempo de establecimiento por debajo de los 2 segundos. Llegados a este punto se ha cumplido
el objetivo de dise˜ar un regulador capaz de estabilizar tanto el ´ngulo del p´ndulo como la
n a e
posici´n del carro.
o
37
38. 3.3. Observadores
En el control con realimentaci´n de estados se asum´ la disponibilidad de las variables de
o ıa
estado. En la pr´ctica este caso no siempre es posible, ya sea porque ciertos estados no son
a
medibles, bien porque es muy dif´ o muy caro medirlos. Para implementar una realimentaci´n
ıcil o
completa de estados, entonces, es necesario a˜adir un dispositivo din´mico, llamado observador
n a
o estimador de estados, cuya salida sea una estimaci´n del vector de estados. En esta secci´n
o o
se introduce observadores de orden completo, donde el observador tiene el mismo orden que la
planta,es decir, se estima todo el vector de estados. Se considera entonces el sistema:
x(t) = Ax(t) + Bu(t)
˙
y(t) = Cx(t)
donde A,B y C son conocidas, y la entrada u(t) y la salida y(t) son medibles, aunque no el es-
tado x(t). El problema es estimar x(t) de esta informaci´n. Para ello hay dos soluciones posibles:
o
- Observador a lazo abierto.
- Observador de orden reducido.
3.3.1. Observador a lazo abierto
Conociendo A y B, es posible duplicar la ecuaci´n de estados original construyendo el sistema:
o
x(t)=Aˆ(t)+Bu(t)
ˆ x
Esta duplicaci´n es un observador a lazo abierto, donde si se tuvieran las mismas condiciones
o
inciales, entonces para toda entrada u(t) se tiene que x(t)=x(t), ∀T ≥ 0. B´sicamente si el
ˆ a
sistema es observable se puede utilizar un observador en lazo abierto para estimar el vector de
estados. Sin embargo, el observador en lazo abierto tiene la desventaja de tener que calcular el
estado inicial cada vez que se utilice el estimador.
38
39. Figura 3.10: Observador a lazo abierto
3.3.2. Observador de orden reducido
Si el par (A,C) es observable, usando la matriz no singular:
En estas coordenadas la salida queda como el primer estado, y as´ no es necesario construir
ı,
un observador para estimar todo el estado, sino solamente los n-1 restantes. Este observador es
de orden reducido.
39
41. Cap´
ıtulo 4
Implementaci´n
o
La aplicaci´n que se presenta en este cap´
o ıtulo permite la simulaci´n del comportamiento
o
f´
ısico de un sistema din´mico, sistema que evoluciona con el tiempo. Dicha aplicaci´n ha sido
a o
desarrollada en forma de applet Java utilizando la programaci´n orientada a objetos. Para ello,
o
se han utilizado tanto los entornos de desarollo integrado (IDE) de NetBeans, como Eclipse,
ambos proyectos de c´digo abierto fundado por Sun MicroSystems.
o
Como producto final, el applet tiene el objetivo de permitir estudiar el comportamiento del
p´ndulo invertido de un modo visual, permitiendo al usuario interactuar sobre ´l en tiempo real.
e e
Gracias a la portabilidad que Java ofrece, es posible integrar dicho applet a una p´gina Web y
a
visualizarlo desde cualquier navegador compatible con java (Internet Explorer, Mozilla Firefox,
Google Chrome, etc).
4.1. P´ndulo invertido en Matlab
e
En los cap´
ıtulos anteriores, se ha estudiado como obtener el modelo del p´ndulo invertido
e
as´ como el controlador capaz de estabilizarlo. La herramienta que se utiliz´ entonces para ir
ı o
realizando las pruebas era Matlab. El motivo de utilizar ´sta herramienta y no otra, es b´sica-
e a
mente, por las altas prestaciones para el c´lculo num´rico y la facilidad que Matlab ofrece a la
a e
hora de trabajar con matrices. Por este motivo, una vez terminado todo el proceso de dise˜o,
n
el resultado obtenido se ha almacenado en un fichero ’m’ al que se le ha llamado “pendulo.m”
(v´ase Ap´ndice A).
e e
41
42. Al ejecutar el fichero puede observarse como el p´ndulo va estabiliz´ndose de forma gradual
e a
ante una inclinaci´n inicial de once grados. El resultado final es el mostrado en la siguiente
o
gr´fica donde el eje x representa la distancia y el eje y la altura (ambos en metros).
a
Figura 4.1: Representaci´n p´ndulo invertido en Matlab
o e
Naturalmente esta representaci´n se puede mejorar, aunque no hay que olvidar que el obje-
o
tivo es la comprobaci´n del correcto funcionamiento del regulador. No obstante, en internet se
o
pueden encontrar ejemplos de reguladores que muestran al usuario una simulaci´n m´s comple-
o a
ta, donde, no solo se puede comprobar el estado del p´ndulo sino tambi´n la fuerza aplicada al
e e
carro as´ como el ´ngulo y la posici´n que ´ste mantiene en cada momento (v´ase Ap´ndice B).
ı a o e e e
Por usar un ejemplo, a continuaci´n se muestra la simulaci´n de un p´ndulo invertido que parte
o o e
de inclinaci´n de 15o :
o
42
44. ´
Figura 4.4: Angulo y posici´n del carro
o
4.2. Conversi´n ’Matlab to Java’
o
Una vez obtenido el c´digo en Matlab y comprobada su correcta funcionalidad, se ha deci-
o
dido portarlo a Java. El motivo de esta decisi´n, es la intenci´n de integrar la aplicaci´n applet
o o o
en un servidor Web. De este modo, se facilita su acceso desde cualquier equipo con acceso a
internet y, por otro lado, evita la necesidad de tener un Matlab instalado en la m´quina.
a
Los principales inconvenientes encontrados a la hora de pasar a Java el c´digo con el que se
o
trabaj´ en Matlab son:
o
- El tratamiento con matrices.
- Las funciones de control.
El problema para tratar con matrices (sobre todo a la hora de operar con ellas) viene da-
do porque Java no ofrece herramientras concretas para trabajar con matrices. Para resolver el
problema, es necesario acudir a librer´ creadas por terceros que implementan con ´xito las
ıas e
operaciones b´sicas con las que se va a trabajar. En el “Cap´
a ıtulo 5. Librer´
ıas” se detalla cada
una de las librer´ utilizadas, as´ como que funcionalidad tiene cada una de ellas y cu´l se ha
ıas ı a
44
45. adaptado mejor a las necesidades del proyecto.
En lo que respecta a las funciones de control, al igual que el problema de las matrices, no
existen en Java funciones ya creadas con las que se pueda trabajar. Esto crea la necesidad de
empezar desde cero aquellas funciones que sean necesarias. Para el proyecto en cuesti´n ha sido
o
necesario crear:
- Funci´n c2d.
o
- Funci´n expm.
o
- Funci´n dlqr.
o
4.2.1. Funci´n c2d
o
La funci´n “continuous to discrete” (c2d) es necesaria para obtener la discretizaci´n del sis-
o o
tema cont´
ınuo en espacio de estados. El c´digo fuente puede obtenerse del fichero c2d.m donde
o
principalmente se encuentra:
f unction[P hi, Gamma] = c2d(a, b, t)
...
[m, n] = size(a);
[m, nb] = size(b);
s = expm([[ab] ∗ t; zeros(nb, n + nb)]);
P hi = s(1 : n, 1 : n);
Gamma = s(1 : n, n + 1 : n + nb);
La funci´n recibe como argumentos las matrices A y B del espacio de estados y un tercer
o
argumento t que es el tiempo de muestreo. Como argumentos de salida devuelve dos matrices
Phi y Gamma que son las que se utilizar´n posteriormente para el observador y el c´lculo
a a
del regulador ´ptimo. La principal complicaci´n de esta funci´n es la obtenci´n de la matriz s
o o o o
resultante de la llamada a expm.
45
46. 4.2.2. Funci´n expm
o
Es utilizada desde la funci´n c2d. El c´digo fuente puede obtenerse del fichero Matlab
o o
expm.m. Echando un vistazo al c´digo, ´ste puede parecer un poco engorroso, no obstante,
o e
la idea principal para resolverlo reside en calcular lo siguiente:
EIG(X) and EXPM(X) = V*diag(exp(diag(D)))/V
X es la matriz que la funci´n recibe como argumento. V corresponde a los eigenvectores de
o
la matriz X y D es la matriz con los eigenvalues. Matlab cuenta con una funci´n llamada eig()
o
que devuelve las dos matrices (V,D) con el resultado. En el caso de Java, esta funci´n viene
o
incorporada en la librer´ Jama de modo que no ha sido necesario implementarla.
ıa
4.2.3. Funci´n dlqr
o
Al igual que anteriores casos, ha sido necesario crearse una funci´n partiendo desde cero. En
o
este caso se trata de la funci´n dlqr, la cu´l, en Matlab se encarga de obtener el regulador lqr
o a
o
´ptimo.
function [K,K1]=regulador(G,H,C,D,Peso)
G1= [ G zeros(4,1); -C* G 1];
H1= [H; -C*H];
Q= [Peso(1) 0 0 0 0; 0 Peso(2) 0 0 0 ; 0 0 Peso(3) 0 0 ; 0 0 0 Peso(4) 0; 0 0 0 0 1]
R= [1];
Pact=diag(0,4);
var=1;
i=0;
while ((abs(var)¿0.0001) && (i¡6000 ))
Pant=Pact;
Pact=Q+G1’*Pant*G1-G1’*Pant*H1*inv(R+H1’*Pant*H1)*H1’*Pant*G1;
Pact-Pant;
var=sum(sum(Pact-Pant));
i=i+1;
end
46
47. P=Pact;
KK=inv(R+H1’*P*H1)*H1’*P*G1;
K=[KK(1) KK(2) KK(3) KK(4)];
K1=-KK(5);
4.3. Aplicaci´n Java
o
4.3.1. Dise˜ o
n
El applet a desarrollar es un peque˜o programa hecho en Java que puede incrustarse en un
n
documento HTML lo que permite crear programas que cualquier usuario puede ejecutar desde
su navegador. En el dise˜o del applet, Java proporciona dos paquetes gr´ficos: AWT y Swing. En
n a
la aplicaci´n se ha decidido utilizar Swing por tener mayor cantidad de controles y componentes
o
prefabricados que facilitan el dise˜o a la vez que enriquecen la interfaz.
n
Panel par´metros actuales
a
La funcionalidad de este panel reside en mostrar al usuario los par´metros actuales con los
a
que el p´ndulo est´ en ese momento. El valor de cada par´metro es editable lo que permite hacer
e a a
una simulaci´n bajo distintas situaciones.
o
Figura 4.5: Par´metros p´ndulo
a e
47
48. Panel Iniciar/Detener
Sirve para iniciar o detener la simulaci´n del p´ndulo. Para introducir nuevos valores en el
o e
panel de “Par´metros actuales”, es necesario detener la simulaci´n e iniciarla de nuevo para que
a o
´stos tengan efecto.
e
Figura 4.6: Panel arranque p´ndulo
e
Panel control autom´tico/manual
a
Formado por dos checkbox donde solo puede estar activo uno al mismo tiempo, su fun-
cionalidad consiste en decidir si el p´ndulo se ejecuta en modo autom´tico o manual. En modo
e a
autom´tico, el p´ndulo se ejecuta con los par´metros del panel “Par´metros actuales”, en modo
a e a a
manual, se controla mediante la barra de scroll. Inicialmente el p´ndulo aparece estabilizado
e
formando un ´ngulo de 90o respecto al carro.
a
Figura 4.7: Panel control Autom´tico/Manual
a
48
49. Estado p´ndulo
e
Consta de dos JTextField que muestran el valor de la posici´n y ´ngulo en cada instante.
o a
Figura 4.8: Posici´n y ´ngulo del p´ndulo
o a e
Panel de dibujo
Fijado en la parte superior del applet es la zona donde aparece representado el p´ndulo.
e
Est´ compuesto por un JPanel de fondo blanco. La funci´n “paint(Graphics g)”, dibuja 3 figuras
a o
(cuadrado, l´
ınea y c´
ırculo) con la siguiente uni´n:
o
g.fillRect(xx, 250, 70, 30);
g.fillOval((375+Math.sin(radianes)*150),(250-Math.cos(radianes)*150), 20, 20);
g.drawLine((385+Math.sin(radianes)*150),100,xx+35,250);
Figura 4.9: Panel de dibujo
49
50. Interaz del applet
La vista completa de la interfaz queda de la siguiente forma:
Figura 4.10: Interfaz applet
50
51. 4.3.2. C´digo
o
El applet se ha creado en un fichero de tipo “Visual Class” llamado “simulador.java”que
permite el dise˜o de la interfaz de forma visual, generando autom´ticamente el c´digo de los
n a o
objetos a˜adidos. La clase extiende de JApplet e implementa Runnable para el uso de hilos.
n
Como todo applet, ´ste cuenta con un m´todo init() encargado de inicializar los componentes
e e
del mismo. Adem´s, se utiliza el m´todo para establecer un tama˜o fijo de la ventana (800x600).
a e n
Por otro lado, se crea un hilo independiente llamado “Timer” que se encargar´ de todo el c´culo
a a
num´rico del p´ndulo mientras que el hilo principal ser´ el encargado del refresco de imagen.
e e a
Con el inicio del hilo “Timer.start()” se lanza el m´todo run() que contiene tanto la dis-
e
cretizaci´n del espacio de estados as´ como la obtenci´n del regulador ´ptimo. Como ultima
o ı o o ´
tarea, se ejecuta un bucle “while” encargado de obtener la posici´n y ´ngulo del p´ndulo en
o a e
cada instante de tiempo. Tras cada iteraci´n, el hilo se duerme durante un periodo de 2 milise-
o
gundos, tiempo suficiente para que el otro hilo pueda refrescar la imagen con los nuevos valores.
51
53. Cap´
ıtulo 5
Librer´
ıas
En este cap´
ıtulo se presentan las distintas librer´ utilizadas durante el proyecto. En cap´
ıas ıtu-
los anteriores, se mencionaba la necesidad de recurrir a ´stas librer´ para solventar las deficien-
e ıas
cias de Java respecto al tratamiento con matrices. En secciones siguientes se describe brevemente
en que consiste cada una de ellas. Aunque solo Jama ha sido implantada finalmente en el proyec-
to, las dem´s se incluyen porque en un principio se estudi´ la posibilidad de comunicar el applet
a o
con Matlab para que este ultimo se encargara del c´lculo num´rico.
´ a e
5.1. Librer´ Jama
ıa
Se trata de un paquete b´sico de ´lgebra lineal que ofrece clases de nivel de usuario para con-
a a
struir y manipular matrices reales. Tiene como objetivo servir como matriz de la clase est´ndar
a
para Java. La librer´ ha sido desarrollada por The MathWorks y por el Instituto Nacional de
ıa
Est´ndares y Tecnolog´ “National Institute of Standards and Technology”, NIST.
a ıa
Jama se compone de seis clases Java:
- CholeskyDecomposition.
- EigenvalueDecomposition.
- LUDecomposition.
- Matrix.
- QRDecomposition.
- SingularValueDecomposition.
53