ALGORITMI EVOLUATI DE REGLARE NUMERICA




UNIVERSITATEA POLITEHNICA BUCURESTI

FACULTATEA DE AUTOMATICA SI CALCULATOARE










ALGORITMI EVOLUATI DE REGLARE NUMERICA




COMANDA NELINIARA A PENDULULUI INVERS










Cuprins


Introducere

Preliminarii

Ecuatiile sistemului

Functia de transfer

Spatiul starilor

Raspunsul sistemului in bucla deschisa

Functia de transfer

Spatiul starilor

Construirea controller-ului

LQR

Referinta

Construirea observatorului











Introducere


Pendulul invers este o problema clasica de control. Procesul este neliniar si instabil, cu un singur semnal de intrare si mai multe semnale de iesire. Scopul este de a balansa pendulul vertical pe un carucior cu motor.

Figura alaturata reprezinta un pendul invers. Scopul: miscarea caruciorului pe axa x pana la o pozitie dorita fara ca pendulul sa cada. Pozitia caruciorului, x, si unghiul pendulului cu verticala, , sunt masurate si furnizate unui sistem de control. Forta disturbatoare F poate fi aplicata caruciorului.


inapoi



Preliminarii


<TBODY>M

Masa caruciorului

0.5 kg

m

Masa pendulului

0.5 kg

b

Frecarea caruciorului

0.1 N/m/sec

l

Lungimea pana la centrul de greutate al pendulului

0.3 m

I

Inertia pendulului

0.006 kg*m^2

F

Forta aplicata caruciorului


x

Coordinata pozitiei caruciorului


theta  ()

Unghiul facut de pendul cu verticala


Folosind reglarea cu PID, alocarea de poli sau raspunsul in frecventa se poate controla numai pozitia pendulului. (sistem siso). Se presupune ca sistemul porneste in stare de echilibru, primeste un impuls de 1 N. Pendulul ar trebui sa se revina la pozita verticala in maxim 5 secunde si sa nu oscileze fata de verticala cu mai mult de 0,005 radiani.

Criteriile de performanta ale sistemului:

Revenire in pozitia verticala in mai putin de 5 secunde.

Unghiul pendulului cu verticala sa nu fie mai mare de 0.05 radiani.

Reprezentarea sistemului in timp continuu este recomandata acestei probleme (sistem cu mai multe iesiri). La aplicarea unui semnal treapta caruciorul ar trebui sa ajunga in pozitia dorita in mai putin de 5 secunde, sa aiba un timp de crestere mai mic de 0,5 secunde si pendululsa aiba o limita de oscilare de 20o (0,35 radiani) si sa se stabilizeze tot sub 5 secunde.

Criteriile de performanta ale sistemului folosind metoda variabilelor de stare:

Timpul de stabilizare pentru x si mai mic de 5 secunde.

Timpul de crestere pentru x mai mic de 0.5 secunde.

Oscilarea maxima a pendului mai mica de 20o (0,35 radiani).

inapoi


Ecuatiile sistemului


Insumand fortele ce actioneaza asupra caruciorului se obtine ecuatia de miscare:

Insumand fortele ce actioneaza asupra pendulului se poate obtine o ecuatie pentru N:

Prin inlocuirea acestei ecuatii in prima se obtine prima ecuatie de miscare a sistemului:

(1)

A doua ecuatie de miscare a sistemului se obtine insumand fortele perpendiculare pe pendul:

Rezulta:

A doua ecuatie de miscare a sistemului:

(2)

Aceste ecuatii trebuie liniarizate cu . Presupunand ca (unde reprezinta un unghi mic fata de verticala), se obtine cos() = -1, sin() = - si . Dupa liniarizare, cele doua ecuatii de miscare devin:

(unde u reprezinta comanda)

inapoi



Functia de transfer


Obtinerea pe cale analitica a functiei de transfer corespunzatoare ecuatiilor sistemului liniarizate ale sistemului se face aplicand transformata Laplace ecuatiilor:



Conditiile initiale se presupune ca sunt egale cu 0.


Se rezolva ecuatia in X(s),

se inlocuieste in a doua ecuatie:

Rezulta:

unde,

Functia de transfer are si pol si zero in origine.Functia de transfer poate deveni:

inapoi


Spatiul starilor

Ecuatiile sistemului liniarizat pot fi reprezentate in spatiul starilor sub urmatoarea forma:

Matricea C este 2 pe 4 deoarece si pozitia caruciorului si pozitia pendulului fac parte din iesirea sistemului. Prima linie corespunde pozitiei caruciorului, iar cea de-a doua pozitiei pendulului.

inapoi


Raspunsul sistemului in bucla deschisa

1. Functia de transfer

Functia de transfer a sistemului in bucla deschisa este obtinuta in Matlab:

M = .5;

m = 0.2;

b = 0.1;

i = 0.006;

g = 9.8;

l = 0.3;


q = (M+m)*(i+m*l^2)-(m*l)^2;  


num = [m*l/q 0]

den = [1 b*(i+m*l^2)/q -(M+m)*m*g*l/q -b*m*g*l/q]


t=0:0.01:5;

impulse(num,den,t)


 






:














num =

4.5455 0


den =

1.0000 0.1818 -31.1818 -4.4545


Dupa cum se vede si in figura alaturata, sistemul nu este stabil in bucla deschisa.








inapoi



2. Spatiul starilor


In Matlab se obtin matricile A, B, C, si D si raspunsul sistemului la aplicarea unui semnal treapta de 0.2 m caruciorului.


Matricile arata astfel:



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


Text Box: M = .5;
m = 0.2;
b = 0.1;
i = 0.006;
g = 9.8;
l = 0.3;
p = i*(M+m)+M*m*l^2; 
A = [0 1 0 0; 0 -(i+m*l^2)*b/p (m^2*g*l^2)/p 0; 0 0 0 1; 0 -(m*l*b)/p m*g*l*(M+m)/p 0]
B = [ 0; (i+m*l^2)/p; 0;m*l/p]
C = [1 0 0 0; 0 0 1 0]
D = [0;0]
T=0:0.05:10;
U=0.2*ones(size(T));
[Y,X]=lsim(A,B,C,D,U,T);
plot(T,Y)
axis([0 2 0 100])




Linia albastra (a doua) reprezinta pozitia caruciorului, iar cea verde (prima) reprezinta unghiul pendulului.




inapoi


Construirea controller-ului


Ecuatiile sistemului:

Sistemul se poate schita ca mai jos:


R - referinta

y - raspunsul sistemului (contine si pozitia caruciorului si unghiul pendulului)

K - controller-ul



inapoi






Polii in bucla deschisa


Se doreste construirea unui controller astfel incat la aplicarea unui semnal treapta sistemului, pendulul sa ramana in pozitia verticala, iar caruciorul sa se mute la noua pozitie comandata.

Primul pas in construirea unui astfel de controller este determinarea polilor in bucla deschisa ai sistemului.

Text Box: p = eig(A)adaugat la programul Matlab din Functia de transfer calculeaza polii sistemului in bucla deschisa:





p =

0

-0.1428

5.5651

-5.6041


Se observa ca exista un pol in semiplanul pozitiv. Deci sistemul este instabil in bucla deschisa.

inapoi



LQR


Urmatorul pas este presupunerea ca se pot masura toate cele 4 stari si gasirea vectorului K ce determina legea de control. Folosirea "lqr" permite controlul ambelor iesiri. Cel mai simplu caz este cel in care R = 1 si Q = C ' * C.

Text Box: C'*CIntrodus in linia de comanda in Matlab calculeaza matricea Q:


ans =


1 0 0 0

0 0 0 0

0 0 1 0

0 0 0 0


Elementul din pozitia (1,1) este folosit pentru masurarea pozitiei caruciorului, iar elementul (3,3) pentru masurarea unghiului pendulului.


Text Box: x=1;
y=1;
Q=[x 0 0 0;
   0 0 0 0;
   0 0 y 0;
   0 0 0 0];
R = 1;
K = lqr(A,B,Q,R)
Ac = [(A-B*K)];
Bc = [B];
Cc = [C];
Dc = [D];

T=0:0.01:5;
U=0.2*ones(size(T));
[Y,X]=lsim(Ac,Bc,Cc,Dc,U,T);
plot(T,Y)
legend('Carucior','Pendul')


Se obtin vectorul K si raspunsul sistemului la treapta cu controller LQR:



K =


-1.0000 -1.6567 18.6854 3.4594


Curba verde (cea de sus) reprezinta unghiul pendulului (in radiani), iar cea albastra reprezinta pozitia caruciorului (in metri). Raspunsul nu este satisfacator. Timpul de stabilizare al caruciorului si al pendulului trebuie micsorat. Timpul de crestere al caruciorului trebuie sa scada.

Schimband valorile x si y din matricea Q se pot aduce imbunatatiri. Cresterea lui x scade timpii de stabilizare si de crestere si micsoreaza unghiul sub care se misca pendulul.

Text Box: x=5000;
y=100;

Se obtin:


K =

-70.7107 -37.8345 105.5298 20.9238


Raspunsul sistemului are un timp de stabilizare sub 2 secunde.









inapoi


Referinta


Trebuie gasit un factor de amplificare care elimina eroarea steady-state la o referinta treapta

Nbar poate fi calculat folosind o functia:

Text Box: function[Nbar]=rscale(A,B,C,D,K)
s = size(A,1);
Z = [zeros([1,s]) 1];
N = inv([A,B;C,D])*Z';
Nx = N(1:s);
Nu = N(1+s);
Nbar=Nu + K*Nx


Text Box: [Y,X]=lsim(Ac,Bc,Cc,Dc,U,T);

Text Box: Cn=[1 0 0 0]; 
Nbar=rscale(A,B,Cn,0,K)
Bcn=[Nbar*B];
[Y,X]=lsim(Ac,Bcn,Cc,Dc,U,T);
plot(T,Y)
legend('Carucior','Pendul')
Se inlocuieste linia :




cu cea din stanga. Matricea C devine Cn, deoarece functia rscale nu functioneaza pentru iesiri multiple. Cu toate acestea, valoarea Nbar cautata este corecta.





Nbar =


-70.7107









inapoi


Construirea observatorului


Este nevoie de un estimator pentru acele stari care nu pot fi masurate.




Text Box: p = eig(Ac)Polii controller-ului:



p =

-8.4910 + 7.9283i

-8.4910 - 7.9283i

-4.7592 + 0.8309i

-4.7592 - 0.8309i


Se doreste construirea unui estimator ai carui poli sa fie de 4-10 ori mai rapizi decat cel mai lent pol, fie el -40.

P = [-40 -41 -42 -43];

L = place(A',C',P)'


 
Se inlocuieste linia "lsim" cu




L =

1.0e+03 *


0.0826 -0.0010

1.6992 -0.0402

-0.0014 0.0832

-0.0762 1.7604


Compensatorul este obtinut din combinatia legii de comanda cu estimatorul:

Text Box: Ace = [A-B*K             B*K;
        zeros(size(A)) (A-L*C)];
Bce = [       B*Nbar;
      zeros(size(B))];
Cce = [Cc zeros(size(Cc))];
Dce = [0;0];
T = 0:0.01:5;
U = 0.2*ones(size(T));
[Y,X] = lsim(Ace,Bce,Cce,Dce,U,T);








Raspunsul sistemului cu estimator de stare:


inapoi