Inverz inga állapot-visszacsatolás tervezés Matlab segédlet FIGYELEM: Az elektronikus labor 2 kérdésből álló (feleletválasztós) beugró teszttel indul (min. 6% kell a sikeres teljesítéshez), melynek anyaga a 5., 6.a., 6.b., 7. EA-k, ill. az addig megtartott GYAK órák anyaga! TIPP: Az E-labor elkezdése előtt indítsuk el a Matlabot, mert annak indulása több percig eltarthat! 1. Bevezetés A Moodle felületen végzendő elektronikus labor során az állapot-visszacsatolással történő szabályozás tervezése kerül bemutatásra. A módszer neve abból adódik, hogy rendszer bemenetére visszahat (visszacsatolt módon) az aktuális állapot egy k T erősítési vektorral súlyozva, azaz egy megfelelő szabályozó jel u = k T x + r alakú lesz, ahol a negatív előjel a negatív visszacsatolást valósítja meg, r pedig szabályozást módosító külső jel. Ezzel a szabályozással képesek vagyunk a rendszer pólusainak módosítására és így a rendszer stabilizálására, ezért ezt a technikát pólusallokációnak vagy pólusáthelyezésnek is nevezzük. A rendszer stabilizálása a nem zérus kezdeti állapot zérusba való konvergenciáját biztosítja (az r jel követését önmagában általában nem tudja biztosítani). A labor témája egy inverz inga stabilizáló szabályozása állapot-visszacsatolással. Az inverz inga egy egyenes pályán mozgó kocsiból és arra csuklóval felerősített, a kocsi mozgásának irányában elforgatható rúdból álló mechanikai rendszer (lásd az 1. ábra). Ez egy önmagában instabil rendszer, amely vegyesen stabil, instabil, ill. a stabilitás határán lévő pólusokkal rendelkezik (lásd alábbi ábra, ahol a pólusok x -szel jelöltek). 1. ábra: Az inverz inga zérusai (o) és pólusai (x) a komplex számsíkon, ahol a színezett félsík az instabil rész 1
A feladat során ennek megfelelően olyan szabályozást tervezünk, amely stabil pólusokat biztosít, és ezáltal képes az inga rúdját stabilan függőleges pozícióban tartani. Ezt a kocsira ható megfelelő irányú és nagyságú erővel érhetjük el, amely az u szabályozó bemenet. Az inverz inga esetében a cél a rendszer stabilizálása, ami állandósult állapotban zérus rúd szögkitérést és szögsebességet, ill. zérus kocsi pozíciót és sebességet fog eredményezni, ezért a külső r módosító jel alkalmazása nem szükséges. Így a keresendő u bemenő jel u = k T x alakra egyszerűsödik. 2. Az inverz inga modellje Legyen a kocsi tömege M, a rúd tömege m, a rúd hossza pedig h = 2 l! Az ingára rögzített rúd állandó keresztmetszetű és homogén anyagú, így a súlypontjába redukált pontszerű m tömeggel modellezhető, amely így l = h távolságra van a kocsitól. A kocsira u erő hat, míg a 2 merev rúdban u = F vagy u = F erők ébrednek. Az M tömegű kocsi x M irányú gyorsulása, valamint az m tömegű rúd x m és y m irányú gyorsulása az alábbi összefüggésekkel írható fel. Az inverz inga fizikai modellje a 2. ábrán látható. 2. ábr:a Az inverz inga modellje Mechanikai egyenletek (Newton II. törvénye): Mx M = u Fsinθ mx m = Fsinθ 2
Geometriai egyenletek: my M = Fcosθ mg x m = x M + lsinθ x m = x M lθ 2 sinθ + lθ cosθ y m = lcosθ y m = lθ 2 cosθ lθ sinθ Az ismeretlen F értékét kiküszöbölve és egy oldalra rendezve a következő egyenletrendszert kapjuk: Az x m és y m kifejezéseket behelyettesítve: Mx M + mx m u = my Msinθ mx m cosθ + mgsinθ = Mx M + mx M mlθ 2 cosθ + mlθ cosθ u = mlθ + mx M cosθ + mgsinθ = A következő lépésben a fenti nemlineáris egyenletrendszert mérnöki megfontolásokkal linearizáljuk. A szabályozási feladat a rúd θ(t) szögének minél kisebb értéken tartása, ezért a következő közelítéseket alkalmazzuk. Egyrészt kis szögekre sinθ θ és cosθ 1, másrészt a felső egyensúlyi ponton a rúd szögsebessége kicsi, így θ 2 =. Ezeket kihasználva a következő, jól használható közelítést kapjuk: Mx M + mx M + mlθ u = mlθ + mx M + mgθ = Ebből az egyenletrendszerből fejtsük ki x M és θ változókat, ami egyben az inga fizikai mozgásegyenleteiből álló egyenletrendszert jelenti: x M = mg M θ + 1 M u (M + m)g θ = θ 1 Ml Ml u = A fenti egyenletrendszer alapján írjuk fel az inverz inga állapottér reprezentációját. Legyenek az állapotvektor elemei a mechanikában megszokott általánosított pozíció és sebesség koordinátáknak megfelelően a következők: a kocsi elmozdulása: x M, a kocsi sebessége: x M, a rúd szögelfordulása: θ, a rúd szögsebessége: θ. x = [ Legyen az y kimenőjel a kocsi elmozdulása, azaz x M x M θ θ y = x M A rendszer állapottér reprezentációja az alábbi módon írható fel általánosan, amelyből a d u tag elhagyható, mivel d = (azaz az u szabályozó jelnek nincs közvetlenhatása a kimenetre, csak az állapot megváltozására): x = A x + b u y = c T x + d u = c T x 3
ahol A = [ m M g, b = M + m g ml 1 M [ 1 Ml, c T = [1, (d = ) 3. Mátrix definiálása Matlabban A Matlab ( MATrix LABoratory ) alapértelmezett változó struktúrája a mátrix, így elsőként áttekintjük a mátrixok definiálásának szabályait: A változók megadásakor ügyeljünk a betűméretre: a Matlab megkülönbözteti a kis- és nagybetűket! pl. az >> A_x=1; a_x=2 parancs két külön változót definiál: A_x=1 a_x=2 A mátrixok elemeit szögletes zárójelek között adjuk meg. A soron belüli elemeket vessző, vagy szóköz választja el egymástól, a sorokat pontosvessző választja el: pl. >> A=[1 4 5; 2 Ekkor az alábbi mátrixot kapjuk: A = [ 1 4 5 2 4. Állapot-visszacsatolt szabályozás tervezése Egy állapottér reprezentációban adott rendszer állapot-visszacsatolásának tervezése általánosságban a következő lépésekben történik. 1. Az irányíthatóság ellenőrzése az első lépés. Egy (A, b, c T ) állapottér-reprezentációval adott rendszer akkor irányítható, ha a rendszer véges T idő alatt az x() állapotból egy tetszőleges x(t), x(t) x() állapotba vihető az u(t), t szabályozó jellel. Ha a rendszer nem irányítható, akkor az állapot-visszacsatolás módszere nem alkalmazható. Az irányíthatósági mátrix rangját Matlabban két lépésben tudjuk meghatározni. Irányíthatósági mátrix számítása: >>C = ctrb(a,b); Rang számítása: >>n = rank(c); Ha n értéke megegyezik az állapotok számával, akkor az állapottér-reprezentáció irányítható és az állapottér-visszacsatolt szabályozó tervezése elvégezhető. A keresendő irányíthatósági mátrix alakja az inverz inga 4 dimenziós állapotterére (ezt számolja ki a Matlab ctrb parancsa): C = [b A b A 2 b A 3 b. 4
2. A rendszert irányíthatósági alakra hozzuk, azaz meghatározzuk azt a T c nemszinguláris (tehát invertálható) transzformációs mátrixot, amely a rendszert irányíthatósági alakúra transzformálja. Ha a rendszer eleve irányíthatósági alakban adott, akkor a T c mátrixot értelemszerűen egységmátrixnak választjuk. Megjegyezzük, hogy a szabályozás során az új állapottérbe való transzformálás tényleges elvégzésére nincs szükség, elegendő a transzformációs mátrix meghatározása: T c = (C τ) 1 ahol C az irányíthatósági mátrix (már kiszámoltuk) és τ egy speciális struktúrájú ún. Toeplitz (felső-háromszög) mátrix szintén 4 dimenziós állapottérre felírva: 1 a 3 a 2 a 1 τ = [ a 3 a 2 1 a 3 Matlabban τ-t kézzel kell létrehozni a rendszer karakterisztikus polinomjának együtthatói alapján: >>a_i = poly(a); függvény megadja a karakterisztikus polinom együtthatóit vektoros formában. Mivel a kapott mátrix 5 elemű, de a 4 = 1, ezért a kapott vektor 1. eleme levágható. >>a_i = a_i(2:5); Ezek után a τ mátrix: >>Tau = [1 a_i(3) a_i(2) a_i(1); a_i(3) a_i(2); 1 a_i(1); ; A T c mátrix ezek alapján: >>Tc = inv(c*tau); 3. Az eredeti rendszer és a tervezendő rendszer karakterisztikus polinomjainak meghatározása. Az eredeti rendszer karakterisztikus polinomjának együtthatóit és pólusait az A mátrix segítségével az alábbi módon határozhatjuk meg: a(s) = det (si A) = s 4 + a 3 s 3 + a 2 s 2 + a 1 s + a A rendszer pólusai a fenti egyenlet gyökei lesznek. p = [p 1 p 2 p 3 p 4 Az tervezendő rendszer pólusai (p ) az alábbi formában adottak: p = [p 1 p 2 p 3 p 4 p alapján a tervezett ( új ) rendszer a (s) karakterisztikus polinomja gyöktényezős alakban egyszerűen meghatározható: a (s) = (s p 1)(s p 2)(s p 3)(s p 4) = s 4 + a 3s 3 + a 2s 2 + a 1s + a Matlabban a fenti lépések az alábbi módon végezhetők el. Az eredeti rendszer pólusainak meghatározása a pole() vagy eig() parancsokkal történhet. A pole() parancs alkalmazása esetén először a rendszer mátrixok (A, b, c T, d) definiálására van szükség (esetünkben d = ), majd a mátrixokból az ss() (state-space) paranccsal hozunk létre állapottér alakú rendszermodellt a Matlabban: >>sys = ss(a, b, c, ); 5
Ezután már a sys nevű állapottér objektum közvetlenül használható a pole() paranccsal: >>p = pole(sys) Másik lehetőségként a Matlab sajátérték-számító (eigenvalue) függvénye az eig() alkalmazható csupán az A mátrix segítségével: >>p = eig(a) A karakterisztikus polinom együtthatói az előző pontban leírt megfontolások alapján: >>a_i = poly(a); >>a_i = a_i(2:5); A tervezendő rendszer karakterisztikus polinomjának együtthatóinak meghatározására egy lehetőség, hogy a p pólusok ismeretében felírjuk a rendszer A mátrixát diagonális alakban: p 1 p 2 A = [ p 3 p 4 majd ennek a mátrixnak a karakterisztikus polinomját számítjuk ki: Matlabban: >>A_diag = diag(p_uj); >>a_iuj = poly(a_diag); a (s) = det (si A ) = (s p 1)(s p 2) (s p 3)(s p 4) 4. A kompenzátort az irányíthatósági állapottérnek megfelelő értékekkel kapjuk: k c T = [a 3 a 3 a 2 a 2 a 1 a 1 a a A tervezendő kompenzátor a megfelelő állapottér transzformációval a következő alakra hozható: k T = k c T T c Matlabban a tervezés egyetlen lépésben is megoldható az acker() függvény alkalmazásával. A függvény szintaktikája a következő: >>k = acker(a,b,p_uj) ahol A, b a rendszermátrixok, míg p_uj az új pólusokat tartalmazó sorvektor. Az acker() függvény lefuttatása után eredményül kapott k erősítési vektor az eredeti rendszer állapotterére vonatkozik, így még az irányíthatósági transzformációs mátrixot sem kell megkeresni! 5. A zárt rendszer állapottér reprezentációja általánosan (esetünkben az r és d tagok nullák, így elhagyhatók): x = (A b k T ) x + b r = (A b k T ) x y = c T x + d u = c T x A zárt rendszer állapottere az alábbi módon kódolható: >>A_cl = (A-b*k); >>Sys_cl = ss(a_cl, b, c, ); 6
ahol az ss() függvény egy állapottér (A, b, c T, d) objektumot hoz létre (esetünkben d = ). 6. Vizsgáljuk meg a zárt (szabályozott) rendszer minőségi tulajdonságait az egységugrás vizsgálójel válaszfüggvényével: >>impulse(sys_cl) Ezzel a zárt rendszer egységimpulzusra adott válasza (súlyfüggvénye) rajzolható ki. A minőségi tulajdonságokat az lsiminfo() paranccsal írathatjuk ki: >> [y,t =impulse(sys_cl); >> perf = lsiminfo(y,t,) 5. Mintapélda Legyen a kocsi tömege M = 2 kg, a rúd tömege m =,1 kg, a rúd hossza l =,5 m! A szabályozott rendszer pólusai kerüljenek a p = [ 2 + 3,46i 2 3,46i 1 1 helyre! Az előző fejezet alapján az (A, b, c T ) állapottér reprezentáció a következő lesz: A = [ b = 1 M [ 1 Ml m M g M + m g ml = [,495 2,61,5 = [, c T = [1 1 A rendszer karakterisztikus polinomja: a(s) = det (si A) = s 4 + a 3 s 3 + a 2 s 2 + a 1 s + a = s 4 2,61s 2 azaz: a 3 =, a 2 = 2,61, a 1 =, a =. Az irányíthatósági mátrix: A τ mátrix:,5 C = [b A b A 2 b A 3,5 b = [ 1 a 3 τ = [ a 2 a 1 1 a 3 a 2 = [ 1 a 3,495,495 2,61 2,61 2,61 2,61 1 7
Ebből az irányíthatósági transzformációs mátrix:,5,495 1 T c = (C τ) 1,5,495 = ([ [ 2,61 2,61 1 1 = [,12,51,12,51 2,61 2,61 ) 1 1 A tervezendő rendszer karakterisztikus polinomja az előírt pólusok alapján: a (s) = (s p 1)(s p 2)(s p 3)(s p 4) = s 4 + a 3s 3 + a 2s 2 + a 1s + a = s 4 + 24s 3 + 196s 2 + 719,4s + 1597,2 azaz: a 3 = 24, a 2 = 196, a 1 = 719,4, a = 1597,2. A kompenzátor értéke az irányíthatósági állapottérben: k c T = [a 3 a 3 a 2 a 2 a 1 a 1 a a = [24 216,6 719,4 1597,2 Ezt visszatranszformálva az eredeti állapottérbe: k T = k c T T c = [ 162,8 73,4 297,9 6,7 A 2. ábra a kimenő jel (rúd szögelfordulása) egységimpulzus bemenetre adott súlyfüggvényét mutatja. A kimeneti jel átmeneti függvényére jellemző tranziens adatok a következők: Beállási idő: 2,47 s Minimum érték: -,2 rad Maximum érték:,14 rad 8
s 3. ábra: A zárt rendszer súlyfüggvénye A rendszer beavatkozó jele a fentiek alapján (r = miatt): u = k T x. Ez azt jelenti, hogy a szabályozójel előállításához szükség van a rendszer összes állapotára. Jelenleg a rendszernek egy kimenete van, a kocsi elmozdulása: y = x M. Ha a rendszer mind a négy állapotát szeretnénk kimenetként azaz y = x, akkor a rendszer c T vektora helyett egy egységmátrixot kell választani. Így egy SIMO (Single Input Multiple Output) rendszert kapunk. Megjegyzés: A rendszer (belső) állapotai x attól függetlenül léteznek, hogy azokat mérjük-e vagy sem (kiemenet lesz-e vagy sem). A fenti módosításra csak azért van szükség, hogy a rendszer beavatkozó jele egyszerűen vizsgálható legyen az u = k T x összefüggés segítségével. y = [1 [ x M x M θ θ 1 = x M y = [ 1 x M x M x M x M [ = [ 1 θ θ θ θ u = k T y = [ 162,8 73,4 297,9 x M 6,7 [ θ θ = 162,8 x M 73,4 x M 297,9 θ 6,7 θ skalár érték! x M 9
4. ábra: A beavatkozó jel A megfelelő kompenzátor kiválasztása valamilyen kompromisszum alapján történik, amelyben a minőségi jellemzők egy része javul a többiek rovására. A tervezési feladat a lényeges minőségi jellemzőket javítása úgy, hogy közben a kevésbé lényeges jellemzők minősége ne romoljon túlságosan, azaz a jellemzők közötti összhang megteremtése a cél. Emellett fontos kiemelni az u szabályozó jelre vonatkozó korlátozást a mérnöki gyakorlatban. Azaz a bemenő szabályozó energia korlátos, pl. az inverz inga megvalósítása esetén ezt a korlátot a kocsiban alkalmazott villamos motor maximális teljesítménye határozza meg. 6. Matlab implementáció (.m script fájl készítése) A tervezéshez célszerű egy Matlab scriptet létrehozni. Ekkor a scriptben levő kód egy lépésben lefuttatható, nem kell minden parancsot egyesével a Command Window-ba megadni. A feladatban szereplő paraméterek (pl. tömegek, rúdhossz, stb.) a program elején vannak deklarálva, így azok változása esetén elegendő csak azokat átírni. Új script-et a Ctrl+N gyorsbillentyűvel vagy a menüsorban a New script gombra kattintva lehet létrehozni Matlabban (lásd alábbi ábra). 1
5. ábra: Új Matlab script létrehozása A létrehozott script-et mentsük el (Ctrl+S vagy Save ikon)! A kód az F5 gombbal vagy a zöld Run gombra kattintva futtatható le. 6. ábra: A program futtatása A kódban szereplő változók a globális Workspace-ben jelennek meg. Ha valamelyik részeredményt ki szeretnénk íratni a Command Window-ba akkor elegendő a sor végéről elhagyni a ; -t. Ha a program futása során valamilyen hiba történik a hibaüzenet szintén a Command Window-ban jelenik meg (pirossal). A minta kód alább olvasható (egy az egyben másolható az üres Matlabba script fájlba). 11
InverzInga.m close all; clear all; clc; %Workspace és Command Window kitakaritasa M = 2; %[kg, Kocsi tomege m =.1; %[kg, Rud tomege l =.5; %[m, Rud modell szerinti hossza g = 9.81; %[m/s^2, Gravitacios gyorsulas %Az uj polusok p_uj = [-2+3.46*i, -2-3.46*i, -1, -1; %Inverz inga modellje A = [ ; -m/m*g ; ; (M+m)/(M*l)*g ; b = [; 1/M; ; -1/(M*l); c = [1 ; d = ; %a kimeneti egyenlet teljes alakja miatt: y=c* x+d*u %Allapotter (ss = state space) Inga = ss(a,b,c,d); %polusok p = eig(a); % instabil polusok megtekintese polar koordinata rsz.-ben pzmap(inga) %x: polusok; kor: zerusok %karakterisztikus polinom egyutthatoi a_i = poly(a); a_i = a_i(2:5); %legmagasabb elem nem kell C = ctrb(a,b) %Iranyithatosagi matrix Tau = [1 a_i(3) a_i(2) a_i(1); a_i(3) a_i(2); 1 a_i(3); ; Tc = inv(c*tau) %Transzformacios matrix %Az uj rendszer karakterisztikus polinomja A_diag = diag(p_uj); a_iuj = poly(a_diag); a_iuj = a_iuj(2:5); %legmagasabb elem nem kell 12
%Az erosites iranyithatosagi alakban kc = a_iuj-a_i; %Az eredeti rendszerbe transzformalva k1 = kc*tc; %a tervezes a fentiek nelkul is elvegezheto az acker fuggveny segitsegevel %hasonlitsuk ossze a kapott eredmenyt! k = acker(a,b,p_uj) %A zart renszer allapottere A_cl = A-b*k; Sys_cl=ss(A_cl,b,c,d); %A rendszer impulzusvalasza [y,t =impulse(sys_cl); perf = lsiminfo(y,t,) %minosegi tulajdonsagok kiiratasa figure; impulse(sys_cl); %diagram %Beavatkozo jel meghatarozasa c_full = eye(4); %egysegmatrix d_full = zeros(4,1); %a d matrix meretet hozza kell igazitani c_full-hoz %Allapotter Sys_cl_full = ss(a_cl,b,c_full,d_full); %impulzusvalasz fuggveny (y es t diszkret pontokkal) [y,t =impulse(sys_cl_full); %Nx4 matrix %impulse(sys_cl_full) %mind a 4 allapotra vonatkozo impulzusvalasz (diagram) %beavatkozo jel szamitas: u = -k*y'; %rajzolas figure; plot(t,u); xlabel('time [s') ylabel('control input F [N') grid 13