Malliprediktiivinen säädin konttinosturille. Väliraportti

Samankaltaiset tiedostot
Malliprediktiivinen säädin konttinosturille. Laboratoriotyön ohje. Olli Sjöberg Eero Vesaoja

Malliprediktiivinen säädin konttinosturille

Dynaamisten systeemien teoriaa. Systeemianalyysilaboratorio II

Harjoitus 6: Simulink - Säätöteoria. Syksy Mat Sovelletun matematiikan tietokonetyöt 1

Säätötekniikkaa. Säätöongelma: Hae (mahdollisesti ulostulon avulla) ohjaus, joka saa systeemin toimimaan halutulla tavalla

SIMULINK S-funktiot. SIMULINK S-funktiot

Säätötekniikkaa. Säätöongelma: Hae (mahdollisesti ulostulon avulla) ohjaus, joka saa systeemin toimimaan halutulla tavalla

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Ratkaisuehdotukset LH 7 / vko 47

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

MATLAB harjoituksia RST-säädöstä (5h)

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

1 Komparatiivinen statiikka ja implisiittifunktiolause

(s 2 + 9)(s 2 + 2s + 5) ] + s + 1. s 2 + 2s + 5. Tästä saadaan tehtävälle ratkaisu käänteismuuntamalla takaisin aikatasoon:

Y (s) = G(s)(W (s) W 0 (s)). Tarkastellaan nyt tilannetta v(t) = 0, kun t < 3 ja v(t) = 1, kun t > 3. u(t) = K p y(t) K I

Säätötekniikan matematiikan verkkokurssi, Matlab tehtäviä ja vastauksia

Ratkaisuehdotukset LH 10 / vko 48

Luento 5: Suurten lineaaristen yhtälöryhmien ratkaiseminen iteratiivisilla menetelmillä

Tehtävä 4.7 Tarkastellaan hiukkasta, joka on pakotettu liikkumaan toruksen pinnalla.

Zeon PDF Driver Trial

Matriisilaskenta Laskuharjoitus 5 - Ratkaisut / vko 41

Numeerinen analyysi Harjoitus 3 / Kevät 2017

Numeeriset menetelmät

Osakesalkun optimointi. Anni Halkola Turun yliopisto 2016

Numeeriset menetelmät

Numeerinen analyysi Harjoitus 1 / Kevät 2017

ax + y + 2z = 0 2x + y + az = b 2. Kuvassa alla on esitetty nesteen virtaus eräässä putkistossa.

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 7: Pienimmän neliösumman menetelmä ja Newtonin menetelmä.

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 5 / vko 48

Määritelmä Olkoon T i L (V i, W i ), 1 i m. Yksikäsitteisen lineaarikuvauksen h L (V 1 V 2 V m, W 1 W 2 W m )

Numeeriset menetelmät

6. Differentiaaliyhtälösysteemien laadullista teoriaa.

2. kierros. 2. Lähipäivä

Differentiaaliyhtälöt II, kevät 2017 Harjoitus 5

. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

Dynaamisten systeemien identifiointi 1/2

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

S Laskennallinen Neurotiede

JAKSO 2 KANTA JA KOORDINAATIT

Matriisilaskenta (TFM) MS-A0001 Hakula/Vuojamo Ratkaisut, Viikko 47, 2017

S Laskennallinen Neurotiede

Matematiikka ja teknologia, kevät 2011

PID-sa a timen viritta minen Matlabilla ja simulinkilla

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

Oppimistavoitematriisi

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Kanta ja Kannan-vaihto

Mat Dynaaminen optimointi, mallivastaukset, kierros Vaimennetun heilurin tilanyhtälöt on esitetty luennolla: θ = g sin θ r θ

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Kokonaislukuoptiomointi Leikkaustasomenetelmät

Johdatus tekoälyn taustalla olevaan matematiikkaan

1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI

Numeeriset menetelmät

Osakesalkun optimointi

Tilayhtälötekniikasta

MS-A0202 Differentiaali- ja integraalilaskenta 2 (SCI) Luento 4: Ketjusäännöt ja lineaarinen approksimointi

S09 04 Kohteiden tunnistaminen 3D datasta

Ratkaisuehdotukset LH 8 / vko 47

MS-A0107 Differentiaali- ja integraalilaskenta 1 (CHEM)

= 2 L L. f (x)dx. coshx dx = 1 L. sinhx nπ. sin. sin L + 2 L. a n. L 2 + n 2 cos. tehdään approksimoinnissa virhe, jota voidaan arvioida integraalin

TEKNILLINEN KORKEAKOULU Systeemianalyysin laboratorio. Mat Systeemien Identifiointi. 4. harjoitus

ẋ(t) = s x (t) + f x y(t) u x x(t) ẏ(t) = s y (t) + f y x(t) u y y(t),

MS-C1340 Lineaarialgebra ja

1. OHJAAMATON OPPIMINEN JA KLUSTEROINTI

1 WKB-approksimaatio. Yleisiä ohjeita. S Harjoitus

Y (z) = z-muunnos on lineaarinen kuten Laplace-muunnoskin

MS-A0004/MS-A0006 Matriisilaskenta Laskuharjoitus 6 / vko 42

Numeeriset menetelmät TIEA381. Luento 5. Kirsi Valjus. Jyväskylän yliopisto. Luento 5 () Numeeriset menetelmät / 28

Aki Taanila YHDEN SELITTÄJÄN REGRESSIO

Talousmatematiikan perusteet: Luento 11. Lineaarikuvaus Matriisin aste Käänteismatriisi

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 1 / vko 44

Ennustaminen ARMA malleilla ja Kalmanin suodin

Missä mennään. systeemi. identifiointi. mallikandidaatti. validointi. malli. (fysikaalinen) mallintaminen. mallin mallin käyttötarkoitus, reunaehdot

S11-09 Control System for an. Autonomous Household Robot Platform

Matematiikan tukikurssi

Aki Taanila AIKASARJAENNUSTAMINEN

MS-A0207 Differentiaali- ja integraalilaskenta 2 (Chem) Yhteenveto, osa I

Numeeriset menetelmät TIEA381. Luento 8. Kirsi Valjus. Jyväskylän yliopisto. Luento 8 () Numeeriset menetelmät / 35

Lineaarinen yhtälöryhmä

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

ACKERMANNIN ALGORITMI. Olkoon järjestelmä. x(k+1) = Ax(k) + Bu(k)

3 = Lisäksi z(4, 9) = = 21, joten kysytty lineaarinen approksimaatio on. L(x,y) =

Inversio-ongelmien laskennallinen peruskurssi Luento 4

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

x = x x 2 + 2y + 3 y = x + 2y f 2 (x, y) = 0. f 2 f 1

Matriisi-vektori-kertolasku, lineaariset yhtälöryhmät

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 4 / vko 47

6. Tietokoneharjoitukset

4.3.7 Epäoleellinen integraali

Epälineaaristen yhtälöiden ratkaisumenetelmät

Harjoitustyö 3. Heiluri-vaunusysteemin parametrien estimointi

Matematiikan tukikurssi

Dynaamiset regressiomallit

Tilaesityksen hallinta ja tilasäätö. ELEC-C1230 Säätötekniikka. Luku 6: Tilasäätö, tilaestimointi, saavutettavuus ja tarkkailtavuus

Matriisit ja vektorit Matriisin käsite Matriisialgebra. Olkoon A = , B = Laske A + B, , 1 3 3

Näihin harjoitustehtäviin liittyvä teoria löytyy Adamsista: Ad6, Ad5, 4: 12.8, ; Ad3: 13.8,

mlvektori 1. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä

s = 11 7 t = = 2 7 Sijoittamalla keskimmäiseen yhtälöön saadaan: k ( 2) = 0 2k = 8 k = 4

Tietokoneavusteinen säätösuunnittelu (TASSU)

Transkriptio:

Malliprediktiivinen säädin konttinosturille Väliraportti Olli Sjöberg Eero Vesaoja 67167C 67330B

1 Johdanto Järjestelmästä luodun mallin avulla voidaan simuloida ja ennustaa järjestelmän toimintaa eri tilanteissa. Säädön kannalta mallin tärkeä ominaisuus on sen ennustuskyky. Mallin avulla voidaan ennustaa järjestelmän toimintaa erilaisten syötteiden funktiona ja tämän avulla syötteet voidaan valita siten, että järjestelmän toiminta saadaan halutuksi. Tässä voidaan käyttää esimerkiksi jotakin matemaattista kriteeriä, jonka suhteen mallin toimintaa halutaan optimoida. Juuri tähän perustuu malliprediktiivinen säädin (MPC), jossa järjestelmästä tehtyä mallia käytetään tulevien ulostulojen ennustamiseen. Ulostulot sitten optimoidaan herätteiden suhteen siten, että järjestelmä saadaan toimimaan halutulla tavalla. Tässä projektissa toteutettiin malliprediktiivinen säädin konttinosturille ja säädin optimoitiin käyttäen neliöllistä kustannusfunktiota. 2 Malli Pohjana toimi alkuperäinen konttinosturin malli ja siihen toteutettu PID säädin, jotka oli toteutettu Simulinkin avulla. Alkuperäinen malli on kuvassa 1. Referenssit lasketaan kuvan vasemmassa laidassa, säätimet on toteutettu kuvan keskiosassa ja Konttinosturi1 on nosturia kuvaava malli. Tehtävämme oli korvata PID-säätimet malliprediktiivisellä säätimellä. Figure 1: PID-säätimillä toteutettu järjestelmän ohjaus. Kuvassa 2 näkyy muokattu malli, jossa PID-säätimet on korvattu malliprediktiivisellä säätimellä. Säädin on toteutettu erillisellä Matlab-funktiolla, jonka toteutuksen voi nähdä liitteistä. Alkuperäinen konttinosturin malli pysyy täten samana kuin aikaisemminkin, vain säädin toteutetaan uudestaan. Malli toteuttaa epälineaarisen ja rajoitetun dynamiikan prosessille. Se on validoitu ja sellaisenaan hyvin käyttökelpoinen vaikkei sisälläkään kitkoja eri 1

liikkuville osille. Figure 2: Malliprediktiivisellä säätimellä toteutettu järjestelmän ohjaus. Ensimmäiseksi mallipohjaista säädinta varten on muodostettava malli ohjattavasta järjestelmästä. Mallina käytettiin konttinosturin Simulink-mallin pohjalta linearisoitua mallia. Tilaesitykseen valittiin kuitenkin samat tilat kuin alkuperäisessä mallissa oli valittu, jotta esityksestä tulisi mahdollisimman samankaltainen ja epälineaarisen tilaesityksen derivaatat olisi helppo laskea. Dynamiikan yhtälöt voidaan helposti lukea mallista ja linearisoida näistä tarvittava lineaarinen malli. Linerisoidut järjestelmämatriisit näkee liitteenä olevasta Matlab-koodista. Koska kunkin tilan toinen derivaatta on tietenkin ensimmäisen derivaatan derivaatta, voidaan linearisointi kullekin tilaesityksen matriisille (dynamiikka, ohjaus ja ulostulo) tehdä suoraan Jacobin matriisin avulla: Tämän jälkeen meillä on kullekin toimintapistelle laskettavissa jatkuvaaikainen dynamiikka yhtälö. Koska säädin on kuitenkin diskreettiaikainen tulee koko prosessi säätimen sisällä toteuttaa diskreettinä approksimaationa todellisesta jatkuvasta prosessista. Diskretointiaikamme on tässä vaiheessa 0.1 sekuntia, mutta luultavasti muuttuu vielä, jos säädin joskus toteutetaan oikeaan järjestelmään. Järjestelmä saadaan helposti diskretoitua Matlabissa c2d-funktion avulla. Muunnosten jälkeen voidaan jatkuvaa epälineaarista prosessia mallintaa lineaarisella, vaihtuvassa pisteessä toimivalla diskretoidulla tilaesityksellä. Tutkimme mallimme toimintaa kokeilemalla miten se toimii verrattuna todelliseen malliin, jos molemmille laitetaan sama heräte. Se vastasi epälineaarista mallia hyvin ja pysyi melkotarkasti samoissa arvoissa, kun ohjaus oli riittävän rauhallinen ja toimittiin suunnilleen lineaarisella alueella. 2

3 Säätimen toiminta Kuten edellä on jo todettu, MPC on mallipohjainen säädin. Järjestelmästä luodun mallin avulla pyritään ennustamaan prosessin toimintaa pidemmälle tulevaisuuteen ja optimoimaan ohjaus tämän ennusteen mukaisesti. Säätimen toteuttamisessa voidaan soveltaa neliöllistä kustannusfunktiota samalla tavoin kuin LQ-säätimessä, mutta tässä ohjaus optimoidaan ennustettujen ohjausten ja vasteiden perusteella. Säätimen toimintaperiaate tulee hyvin esille kuvasta 3. Säätimelle on määritetty erikseen ohjaushorisontti ja ennustushorisontti. Mallia käyttämällä ennustetaan mallin toimintaa ja pyritään saamaan aikaan sellaiset ohjaukset, että järjestelmä käyttäytyisi halutulla tavalla. Tässä tapauksessa halutaan minimoida neliöllinen kustannusfunktio. Kuvasta näkee, kuinka ohjaushorisontti voidaan asettaa huomattavasti lyhyemmäksi kuin ennustehorisontti. Ajalle, jossa ei ole ohjausta, käytetään yleensä viimeisintä ennustettua ohjausta. Figure 3: MPC:n toiminta. Malli ei kuitenkaan koskaan ole täydellinen, vaan ennusteessa on jonkin verran virhettä verrattuna todelliseen järjestelmään. Virheet kasautuu sitä suuremmiksi, mita kauemmaksi järjestelmän toimintaa ennustetaan. Lisäksi ulkoiset häiriöt voivat vaikuttaa ohjattavan prosessin toimintaan. Tämän vuoksi jokaisella iteraatiokierroksella lasketaan järjestelmän ennuste uudestaan ja näistä ennusteista käytetään vain ensimmäistä ohjausta varsinaisen prosessin ohjaukseen. Toisin sanoen mallin avulla ennustetaan jokaisella it- 3

eraatiokierroksella optimaalinen ohjaussarja, mutta näistä ohjauksista vain ensimmäinen toteutetaan. Sama logiikka toteutetaan myös seuraavalla kierroksella. Minivoitavana kustannuksena käytetään tässä projektissa neliöllistä kustannusfunktiota, joka on käytännössäkin hyvin yleinen kriteeri: V (k) = H p i=h w ẑ(k + i k) ˆr(k + i k) 2 Q(i) + = Z(k) T (k) 2 Q + U(k) 2 R H u 1 i=0 û(k + i k) 2 R(i), (1) missä vektori Z(k) sisältää ennustetut vasteet, T (k) halutun trajektorin ja U(k) ohjaukset, jotka toteuttavat halutun vasteen. Kaavan perusteella nähdään, että tarkoituksena on saada ohjaus mahdollisimman lähelle referenssisignaalia, mutta samanaikaisesti halutaan varmistaa, että ohjaukset eivät kasva liian suuriksi. Kustannuksen painoa ohjauksen ja vasteen välillä voidaan muuttaa säätämällä Q ja R matriiseja. Säätimen kaavoista ei suoraan näe, että niiden avulla minimoidaan kyseinen kustannusfunktio, sillä kustannuksen toteuttava ohjaus voidaan laskea analyyttisesti, jolloin ohjauksesta tulee tavallinen tilatakaisinkytkentä. Toiminta ja käytetyt muuttujat tulevat luultavasti parhaiten selville, jos niitä käy järjestyksessä läpi. Säätimen toiminta lähtee liikkeelle mallin ennustaman trajektorin laskemisesta: Z(k) = Ψˆx(k k) + Γu(k 1) + Θ U(k), (2) missä matriisi Ψ kuvaa sitä, miten ulostulot muodostuvat tiloista eri tuleville hetkille, Γ kuvaa miten edellinen ohjaus vaikuttaa tuleviin ulostuloihin ja Θ kuvaa sitä, miten tulevat ohjauksen vaihtelut vaikuttavat tuleviin ulostulohoin. Ψ on kahden lohkomatriisin tulo. Ensimmäisessä on diagonaalilla C matriiseja ja muuten nollia. Tämä kuvaa siis kunkin tilavektorin ulostuloksi. Toisessa on nousevia potensseja A matriisista. Se kuvaa miten tila autoregressiivisesti muuttuu alussa olevasta eteenpäin. Tämän matriisin alkiot saattavat helposti divergoida, mikäli tilansiirtomatriisin ominaisarvot ovat liian suuria. C z 0 0. Ψ = 0 C.. A z..... 0 A Hp 0 0 C z ˆx(k k) (3) Matriisissa Γ myöskin on edessä vastaava C matriisien lohkodiagonaali. Sen toinen osa on B matriisi kerrottuna nousevilla potensseilla A matriisista. 4

C z 0 0. Γ = 0 C.. z.... 0 0 0 C z Lopuksi vielä tulee laskea Θ matriisi: B. Hp 1 i=0 A i B u(k) (4) C z 0 0. Γ = 0 C.. B 0 û(k k) z............ u(k). 0 Hp 1 i=0 A i Hp H B u i=0 A i B û(k + H u 1 k) 0 0 C z (5) Näiden matriisien avulla säädin osaa estimoida tulevia aika-askelia. Matriisien dimensiot määrittyvät horisonttien ja järjestelmän dimensioiden mukaan. Seuraavaksi alkaa optimaalisen ohjauksen laskeminen. Se saadaan tutkimalla tulevia erosuureita. Erosuureen laskeminen voidaan esittää käyttämällä yllä olevia merkintöjä seuraavasti: ε(k) = T (k) Ψˆx(k k) Γu(k 1). (6) Tämän jälkeen voidaan optimaalinen ohjauksen muutos laskea käyttämällä seuraavia kaavoja: U (k) = 1 2 H 1 G G = 2Θ T Qε. (7) H = Θ T QΘ + R Konttinosturin säädin toteutettiin käyttäen apuna saamaamme esimerkkiä malliprediktiivisestä säätimestä. Esimerkissä näytetään miten säätimeen kuljetetaan signaalit prosessin edellisestä ohjauksesta, kellonajasta, sekä vanhoista tiloista. Esimerkissä prosessi oli kohinainen, viiveellinen ja sen tilat eivät olleet suoraan mitattavissa, mutta säädin toimi silti kiitettävästi. Dynamiikka tosin oli lineaarinen ja yksinkertainen verrattuna konttinosturiin. Alkuperäinen MPC esimerkki käytti vakiokertoimista approksimaatiota prosessista. Koska meidän prosessimme dynamiikka muuttuu toimintapisteen mukaan, joudumme laskemaan säätimen käyttämää mallia jatkuvasti uudelleen. Päätimme kuitenkin rajottaa mallin linearisoinnin yhdeksi kerraksi per askel, emmekä siis esimerkiksi prediktiossa kutsu aina uudelleen mallin linearisointia koko horisointin ajalle,sillä tämä olisi aivan liian raskasta. Voidaan kuitenkin olettaa, että prediktiohorisontti on suhteellisen lyhyt, jolloin järjestelmä ei ole prediktion aikanakaan kovin kaukana linearisoidusta toimintapisteestä. 5

4 Käyttöliittymä Käyttöliittymän toteuttamista ei vielä varsinaisesti ole aloitettu, sillä tavoitteena on saada varsinainen malli toimimaan ennen tätä. Toteuttamiseen ajattelimme käyttää Matlabin tarjoamaa graasten käyttöliittymien kehitysympäristöä GUIDE:a. Tällä onnistuu helposti yksinkertaisen käyttöliittymän teko, jossa voidaan asettaa säätimen parametreja sekä tarkkailla, miten ne vaikuttavat säätimen toimintaan. 5 Testiajoja 6 Ajankäyttö ja suunnitelman toteutuminen Projekti jatkui suunnitelman jälkeen järjestelmään ja toteuttettavaan säätimeen tutustumisella. Järjestelmään tutustuimme saatujen materiaalien ja mallien avulla. Säätimestä luimme tietoja ja hahmottelimme toimintaa saamiemme dokumenttien, esimerkkien ja aihetta käsittelevien kirjojen avulla. Tämän jälkeen aloitimme mallin muodostamisen. Ensimmäiseksi päädyimme linearisoimaan käytetyn mallin, jotta voisimme käyttää laskennallisesti selvästi nopeampaa versiota MPCstä. Sen jälkeen yhdistimme säätimen ja epälineaarisen fysikaalisen mallin toisiinsa alustavasti. Tässä vaiheessa lähinnä ohjelma rakenne oli päätetty, yksittäisiä funktioita ei vielä ollut määritetty. Tämän jälkeen aloitimme mallin muokkaamisen ja laskentaan vaadittavien algoritmien toteuttamisen. Hyvänä pohjana toimivat saamamme m-tiedostot, joilla muun muassa pystyi laskemaan säätimessä tarvittavia matriiseja. Projektin päämäärät ja tämän myötä myös aikataulu ovat muuttuneet suunnitelman laatimisen jälkeen. Tavoitteena ei enää ole säätimen implementoiminen todelliselle laitteelle vaan toimivan simulaattorin tekeminen, sekä harjoitustyömateriaalin tuottaminen. Säätimen toteuttaminen todelliseen laitteeseen jätettiin pois konttinosturin toimilaiteuudistuksen takia. Tällä hetkellä vaikuttaa siltä, että olemme ihan hyvin aikataulussa ja aikaa on käytetty suunnilleen odotetty määrä. Säätimen toimintaan saattamisessa kului odotetusti reilusti aikaa, mutta saatiin kuitenkin toimimaan ja testiajoja päästiin suorittamaan simulaattorilla. Alkuperäinen projektisuunnitelma, jossa työtunnit ilmoitettu henkilöä kohden. 6

VKO 3 VKO 4-5 VKO 6-9 VKO 10 VKO 11-12 VKO 13-16 VKO 17-18 VKO 19 Työn aloittaminen ja alustava tutustuminen (8h) Suunnitelman tekeminen ja tarkempi materiaaleihin tutustuminen (12h) Mallin käyttö, säätimen suunnittelu ja toteutus alustavasti (15h) Tenttiviikko (0h) Säätimen vienti järjestelmään, xpc:hen tutustuminen, väliraportti (15h) Säätimen toiminnan optimointi ja vikojen korjaus (20h) Viilausta, lopullisen raportin tekoa ja materiaalien tekoa labratyöhön (20h) Dokumentaation ja labratyön ohjeiden viimeitely (10h) Yhteensä 100 tuntia henkilöä kohden. Uudessa suunnitelmassa on panostettu enemmän simulaattorin toteuttamiseen ja laboratoriotyön materiaalin luomiseen. VKO 3 VKO 4-5 VKO 6-9 VKO 10 VKO 11-12 VKO 13-16 VKO 17-18 VKO 19 Työn aloittaminen ja alustava tutustuminen (8h) Suunnitelman tekeminen ja tarkempi materiaaleihin tutustuminen (12h) Mallin käyttö, säätimen suunnittelu ja toteutus alustavasti (15h) Tenttiviikko (0h) Säätimen toteutus ja toiminnan tutkiminen, väliraportti (15h) Säätimen toiminnan optimointi ja mahdollisten vikojen korjaus, käyttöliittymän teko (20h) Viilausta, lopullisen raportin tekoa ja materiaalien tekoa labratyöhön (20h) Dokumentaation ja labratyön ohjeiden viimeitely (10h) Ajankäyttö suunniteltiin vastaavaksi kuin aikaisemmassa suunnitelmassa, mutta prioriteetteinä loppuaikana on hieman eri asiat kuin alkuperäisessä suunnitelmassa. Tähän mennessä suunniteltu ja todellinen ajankäyttö ovat toteutuneet kuvaajan 4 mukaisesti. Aikaa tällä hetkellä on käytetty hieman vähemmän kuin oli suunniteltu, mutta kulutettua aikaa on melko hyvin onnistuttu ennustamaan. 7

Figure 4: Suuniteltu ja toteutunut ajankäyttö. 8

7 Liitteet %%%%%%%%%%%% % runmpc.m % %%%%%%%%%%%% clear all; close all; clc; h = 0.1; % sample time tsim = 10; % simulation time init2; y1 = M/(m+J1/r1^2); y2 = M/(M+J2/r2^2); c1 = 1/(m+J1/r1^2+M); c2 = 1/(M+J2/r2^2); % Horisonttiparametrit Hw = 1; Hp = 10; Hu = 7; k = log(10)/hp; Q = 100*diag(ones(2*Hp,1))*diag(exp(k*linspace(0,Hp,2*Hp)),0); R = 0.1*diag(ones(2*Hu, 1)); sim('simulate_reference', tsim + Hp*h); yr(:,2) = 0.6 - yr(:,2); x = [0.2 ;0.6; 0; 0;0;0]; u = [0;0]; sim('konttinosturi_control2.mdl', tsim); figure; subplot(2, 2, 1); plot(tout,x(1:length(tout))); title('x'); subplot(2, 2, 2); plot(tout,th(1:length(tout))); title('th'); subplot(2, 2, 3); plot(tout,l(1:length(tout))); title('l'); subplot(2, 2, 4); plot(tout,yr(1:length(tout))); title('yr') %%%%%%%%%%%%%%%%%%%%%% % calculatecontrol.m % 9

%%%%%%%%%%%%%%%%%%%%%% function U = calculatecontrol(in) % calculate the optimal control signal U % psii, gamma, theta = estimation matrices calculated with % calculatematrices(a,b,c,hp,hu)-function % Q = weighting matrix of tracking error % R = weighting matrix of control increments % Hw = prediction horizon start point % Hp = prediction horizon end point % yr = reference signals yr(k+1):yr(k+hp) each input in separate columns Q = evalin('base','q'); R = evalin('base','r'); yr = evalin('base','yr'); h = evalin('base','h'); y1 = evalin('base', 'y1'); y2 = evalin('base', 'y2'); c1 = evalin('base', 'c1'); c2 = evalin('base', 'c2'); M = evalin('base', 'M'); m = evalin('base', 'm'); g = evalin('base', 'g'); Hu = evalin('base', 'Hu'); Hw = evalin('base', 'Hw'); Hp = evalin('base', 'Hp'); [n, ms] = size(yr); %mg = number of input variables mg = 2; %in: [F1(t-1) F2(t-1) t x L Th dx dl dth] % x = system current states x_hat(k k) % t = simulation time % u = previous control signal u(k-1) u = in(1:mg); t = in(mg+1); x = in(mg+2:end); u = u(:); x = x(:); ct = 2 * round(t/h); F1 = u(1); 10

F2 = u(2); L = x(2); theta = x(3); dl = x(5); dtheta = x(6); thetadotdot = -(c1*f1-(y1*(c2*(m*g-f2)))*theta + g*(theta*(1+y1))+2*dl*dtheta)/l; A = [ 0 0 0 1 0 0;... 0 0 0 0 1 0;... 0 0 0 0 0 1;... 0 0 (-y1*(m*g-f2)*c2+g*y1) 0 0 0;... 0 0 -c1*f1*y2 0 0 0;... 0 -(thetadotdot)/l -(-y1*(c2*(m*g-f2))+g*(1+y1))/l 0-2*dtheta/L -2*dL/L... ] ; B = [0 0; 0 0; 0 0; c1 y1*c2*theta ; -theta*c1*y2 -c2; -c1/l -c2*y1*theta/l]; % x L Th dx dl dth C = [1 sin(theta) L*cos(theta) 0 0 0; 0 cos(theta) -L*sin(theta) 0 0 0]; %Discretation sysc = ss(a, B, C, zeros(2,2)); sysd = c2d(sysc, h, 'zoh'); A = sysd.a; B = sysd.b; C = sysd.c; [psii,gam,eta] = calculatematrices(a,b,c,hw,hp,hu); %Stack yr yr_new = zeros(n*ms, 1); yr_new(1:ms:end) = yr(:,1); yr_new(2:ms:end) = yr(:,2); e = yr_new(ct+hw:ct+ms*hp,1) - psii*x-gam*u; G = 2*eta'*Q*e; H = eta'*q*eta+r; du = 0.5*H^(-1)*G; U = du(1:ms,:)+u; end %%%%%%%%%%%%%%%%%%%%%%% % calculatematrices.m % %%%%%%%%%%%%%%%%%%%%%%% 11

function [psii,gamma,theta] = calculatematrices(a,b,c,hw,hp,hu) [na, ma] = size(a); % size of A matrix [nb, mb] = size(b); % size of B matrix [nc, mc] = size(c); % size of C matrix nouts = nc; % number of outputs nstates = na; % number of states psii = zeros(nouts*hp,nstates*hp); Apsii = zeros(nstates*hp,nstates); gamma = zeros(nb*hp,mb); theta = zeros(nb*hp,mb*hu); for i = 1:Hp psii((i-1)*nouts+1:i*nouts,(i-1)*nstates+1:i*nstates) = C; Apsii((i-1)*nStates+1:i*nStates,:) = A^i; summa = zeros(nb,mb); for j = 0:i-1 summa = summa + A^j*B; end gamma((i-1)*nb+1:nb*i,:) = summa; end for j = 1:Hu summa = zeros(nb,mb); for k = 0:i-j if (k >= 0) summa = summa + A^k*B; end end theta((i-1)*nb+1:nb*i,(j-1)*mb+1:j*mb) = summa; end gamma = psii*gamma; theta = psii*theta; psii = psii*apsii; gamma = gamma((hw-1)*nouts+1:hp*nouts,:); theta = theta((hw-1)*nouts+1:hp*nouts,:); psii = psii((hw-1)*nouts+1:hp*nouts,:); 12