AS-0.3200 Automaatio- ja systeemitekniikan projektityöt A11-07 Measurements with machine vision (3 op) Loppuraportti Niko Nyrhilä Automaatio- ja Systeemitekniikka Valvoja: Mika Strömman Projektin kesto 13.9. 2010-29.11. 2011
Niko Nyrhilä 2 1 Projektityön tavoite Projektityön tavoitteena on määrittää itsenäisen vaunun paikka ja orientaatio, eli sillä on kuusi vapausastetta. Voidaan kuitenkin olettaa että maasto on melko tasainen, eli kärryn suurimmat rotaatiot tapahtuvat pystyakselin ympäri. Tämä oletus auttaa paikannettavan mallin suunnittelussa, koska olisi suotava ettei yksi markkeri voisi estää muita näkymästä. Projekti on tarkoitus suorittaa yhden opiskelijan voimin kolmen opintopisteen laajuisena. Laitteistona käytetään Microsoft LiveCam HD-5000 webkameraa ja jonkinlaisia paikannettavia "markkereita". Projektissa on kaikkiaan neljä päätavoitetta. 1. Tutkia erilaisia mahdollisia markkereita, kuten ledejä ja värillisiä palloja. On tärkeää että markkerit on helppo havaita kuvasta myös vaihtelevissa valaistusolosuhteissa. 2. Suunnitella ja rakentaa markkereista kolmiulotteinen konfiguraatio, jonka paikka ja orientaatio voidaan tarkasti estimoida yhten webkameran kuvan perusteella reaaliajassa. 3. Toteuttaa konenäköalgoritmi joka paikantaa markkerit kuvasta, ja estimoi niiden perusteella kolmiulotteisen mallin paikan ja orientaation. 4. Verrata paikannustarkkuutta tasomaisen kappaleen paikannustarkkuuteen. (uusi tehtävä) 5. Pohtia peräkärryn säädön takaisinkytkennän asettamia vaatimuksia paikannusnopeudelle ja -tarkkuudelle. Käytetty paikannettava rakennelma nähdään kuvassa 1. Markkereina toimivat vihreät ja punaiset pallot, jotka on yhtistetty toisiinsa puutikuilla. Punainen pallo on vihreitä palloja taaempana, joten mallin pienikin kierto pystyakselin ympäri nähdään punaisen pallon suurena liikkeenä vihreisiin palloihin nähden. Kuva 1: Paikannettava rakennelma.
Niko Nyrhilä 3 2 Projektityön rakenne 2.1 Suunnitteluvaihe OK Tässä vaiheessa tarkennetaan mitä projektin aikana on tarkoitus tutkia ja saavuttaa. Lisäksi tutustutaan mahdollisiin markkereihin ja kolmiulotteisiin paikannettaviin rakenteisiin, ja varmistetaan että kameran kuva saadaan kehitysympäristöön. On myös hyvä tuntea perusteet konenäön piirteidenetsintäalgoritmeista, jotta voidaan valita helposti havaittavat markkerit. Ainakin alkuvaiheessa koodia kehitetään Matlab ympäristössä käyttäen Matlab-skriptikieltä, mutta myöhemmin on mahdollista siirtyä käyttämään C++:aa ja OpenCV kirjastoa. Suunnitteluvaihe onnistui melko helposti, ja webkameran asetukset kuten värilämpötila saadaan asetettua Matlabista. Edellytykset: Työmäärä: 10 h Deadline: 2.10. 2.2 Paikannettavan mallin rakentaminen OK Suunnitteluvaiheessa ilmenneiden seikkojen perusteella valitaan markkerit ja kolmiulotteinen rakenne, ja rakennetaan mallista kestävä prototyyppi. On tärkeää ettei rakenteesta tule liian joustava, koska tällöin kalibrointivaiheessa voi ilmetä ongelmia. Lisäksi malli tulisi olla mahdollista kiinnittää esimerkiksi kamerajalustaan, koska tällöin sen paikkaa ja asentoa voidaan säätää tarkasti ja melko mielivaltaisesti kokeita ja kalibrointia varten. Rakennettu paikannettava malli on osoittautunut toimivaksi. Edellytykset: Taustatutkimus tehty Työmäärä: 10 h Deadline: 9.10. 2.3 Markkerien paikannusalgoritmin kehittäminen OK Kun markkierien tyyppi on valittu, voidaan ryhtyä kehittämään algoritmia markkerien löytämiseksi. Tässä vaiheessa on hyvä luoda syvempi katsaus tieteellisiin julkaisuihin, ja arvioida mitä menetelmiä kannattaisi kokeilla käytännössä. Paikantamisen haastetta lisäävät värimuutoksia aiheuttavat vaihtelevat valaistusolosuhteet, ja hämärässä valaistuksessa kuvassa ilmenevä kohina. Projektissa on toimiva Matlab-skripti, joka pystyy paikantamaan mallin noin 3.7 kertaa sekunnissa, paikkaestimaattien ollessa vain 1 2 mm ja 0.2 astetta pielessä (estimaattien keskihajonta). Algoritmia jatkokehitettiin vielä väliraportin jälkeen. Edellytykset: Markkerit valittu Työmäärä: 20 30 h Deadline: 16.10.
Niko Nyrhilä 4 2.4 Kameran kalibrointi ja mallin paikantaminen OK Kun paikannettava prototyyppi on rakennettu, voidaan ryhtyä kalibroimaan kameran parametrejä. Tämä tapahtuu asettamalla malli tunnettuun paikkaan ja asentoon, ja tarkastelemalla missä kohdissa kameran kuvaa markkerit näkyvät. Tähän tehdään oma kalibrointialgoritmi, joka sovittaa parametrit pienimmän neliösumman menetelmällä. Malli olisi mahdollista paikantaa aina kameran koordinaatistossa, mutta tällöin etäisyyksien tarkka mittaaminen kalibrointia varten on hieman haasteellista. Siksi olisi hyödyllistä määrittää koordinaatit maailmankoordinaatistossa. Myöhemmin toteutusvaiheessa peräkärryn paikka ja asento voidaan helposti ilmoittaa ohjaavaan ajoneuvoon sidottuun koordinaatiston nähden. Tällöin kuitenkin kameran kiinnitys ajoneuvoon tulee olla erittäin jämäkkä. Malli pystytään paikantamaan tarpeeksi tarkasti käyttötarkoitukseen nähden. Edellytykset: Paikannettava rakennelma valmis Työmäärä: 20 h Deadline: 30.10. 2.5 Estimoitujen tilamuuttujien suodattaminen EI TOTEUTETTU Kameran kuvan perusteella estimoituun mallin paikkaan ja asentoon liittyy aina kohinaa. Kärry on kuitenkin melko hidasliikkeinen paikannusalgoritmin nopeuteen nähden, joten estimaatteja olisi erittäin hyödyllistä suodattaa esimerkiksi Kalman-suotimen avulla. Suodin kuitenkin perustuu myös ohjaussuureiden tuntemiseen, joten ei ole vielä tiedossa soveltuuko se käytettäväksi tässä harjoitustyössä. Estimaattien suodattamista ei toteutettu tässä projektityössä. Se voidaan helposti toteuttaa tästä projektityöstä erillisenä tehtävänä. Edellytykset: Mallin paikantava algoritmi valmis Työmäärä: 15 h Deadline: 13.11. 2.6 Kärryn ohjausjärjestelmän suunnitteleminen OK Mikäli mallin paikannus osoittautuu tarpeeksi tarkaksi, sen avulla voidaan toteuttaa peräkärryn automaattinen peruutusjärjestelmä. Tällöin peräkärry ei olisi mekaanisesti kytkettynä autoon, vaan siinä olisi oma moottori joka liikuttelee kärryä. Webkamera kiinnitetään autoon ja suunnataan taaksepäin, ja viesti autossa olevalle ohjausjärjestelmälle kärryn sijainnin. Autosta lähetettäisiin langattomasti ohjauskomennot kärryn moottoreille, ja kärry saadaan vaivattomasti ohjattua haluttuun paikkaan. Helpompi sovelluskohde olisi ohjata kärry ainoastaan seuraamaan autoa, auton ajaessa eteenpäin. Tällöin kärryn reitin suunnitteleminen olisi huomattavasti helpompaa, koska auton ohjaajan ei tarvitse eksplisiittisesti viestiä reitinhakualgoritmia suorittavalle koneelle että mihin ollaan menossa. Rakennelman paikka ja asento voidaan estimoida tarpeeksi tarkasti ja nopeasti ohjausjärjestelmää varten. Ohjausjärjestelmän suunnitelmassa ei paneuduttu paljoa yksityiskohtiin. Edellytykset: Mallin paikantava algoritmi valmis, estimaattien suodatus valmis Työmäärä: 20 5 h Deadline: 20.11.
Niko Nyrhilä 5 2.7 Vertaaminen tasomaiseen rakennelmaan OK Jotta tertaedrimaisen rakennelman hyvät puolet olisivat verifioitavissa, sen paikannustarkkuutta verrattiin 3 2 pallosta koostuvaan tasomaiseen rakennelmaan. Tätä ei alunperin suunniteltu kuuluvaksi projektityöhön, mutta myöhemmin tuli ilmi että vertailu olisi järkevä tehdä. Ajan säästämiseksi tulokset simuloitiin, käyttäen samoja kameran parametreja ja ympyröiden paikkojen estimaattien keskihajontoja ( x ja y 0.15 0.2 pikseliä). Kuvan 2 tuloksista nähdään, että tasosta erillään oleva punainen pallo paransi x- ja y-akselien ympäri olevan rotaation estimaatin keskihajontaa arvosta 1 arvoon 0.1. Z-akselin ympäri oleva kierto pystyttiin estimoimaan suunnilleen samalla tarkkuudella, kuin myös z-akselin suuntainen paikkaestimaatti (eli etäisyys kamerasta). Sen sijaan x- ja y-suuntaisten translaatioiden virhe kasvoi noin kaksinkertaiseksi, mutta on silti alle 1 mm luokkaa. Edellytykset: Paikannettava malli ja algoritmi valmis Työmäärä: 10 h Deadline: 27.11. Kuva 2: Tetraedrin (4) ja tasomaisen rakennelman (3 2) paikannustarkkuuksian vertailu.
Niko Nyrhilä 6 2.8 Siirtyminen Matlab-skriptikielestä C++:aan EI TOTEUTETTU Mikäli projekti etenee vauhdikkaasti, ajan puitteissa voisi olla mahdollista siirtyä käyttämään Matlabin sijaan C++ kieltä ja OpenCV kirjastoa. Tämä helpottaisi projektin hyödyntämistä muissa tulevissa projekteissa. Tämä on kuitenkin hyvin aikaavievä vaihe, ennenkuin kaikki menetelmät toimivat C++ koodina. Projektityössä ei toteutettu samoja algoritmeja C++ kielellä, mutta se olisi helppo toteuttaa hyvin dokumentoitujen Matlab-skriptien perusteella. Edellytykset: Mallin paikantava algoritmi valmis, estimaattien suodatus valmis Työmäärä: 40 h Deadline: 20.11. 2.9 Dokumentointi OK Projektiin sisältyy kolme kirjallista dokumenttia: suunnitelman esittely, väliraportointi ja loppuseminaari. Lopuksi työn kulusta ja tuloksista kirjoitetaan loppuraportti. Dokumentteja kirjoitetaan aikataulun puitteissa sitä mukaa kun projekti etenee ja osa-alueita saadaan valmiiksi. Ainoastaan koodin dokumentointi ja algoritmin selittäminen ovat vielä kesken. Edellytykset: Työmäärä: 20 h Deadline: 20.11. 3 Riskinhallinta Projektin vaiheet tukeutuvat vahvasti aina edellisistä vaiheista saatuihin tuloksiin. Siksi onkin tärkeä tunnistaa projektin kriittiset kohdat, joissa on mahdollista törmätä ongelmiin. 3.1 Markkereiden paikantaminen Suurin riski projektissa on, että markkereita ei kyetä paikantamaan tarpeeksi luotettavasti vaihtelevissa valaistusolosuhteissa. Onneksi kyseessä on kuitenkin melko kypsä tieteenala, ja aiheesta on saatavilla runsaasti tutkimusmateriaalia. Olisi hyvä jos webkameran ei annettaisi muuttaa asetuksia kuten värilämpötilaa ja valotusaikaa, koska näiden jatkuva muuttuminen tekee paikannusalgoritmin parametrien valitsemisesta erittäin vaikeaa. Lisäksi olisi hyvä ymmärtää käytetyn kameran rajoitukset, ja käyttää sellaisia markkereita jotka pyrkivät välttämään ne. Useimmissa sovelluksissa suoraviivainen ratkaisu olisi käyttää kirkasta lisävaloa, joka takaa hyvän kuvanlaadun myös hämärässä. Lisäksi se vähentäisi ympäröivän valon vaikutusta kameran havaitsemiin väreihin. Paikannusalgoritmin tulisi toimia reaaliajassa normaalilla pöytäkoneella, koska jos paikkaestimaatissa on liikaa viivettä, sitä on vaikeampi hyödyntää kärryn moottorien säätämiseen. Kuvasta pitäisi siis filtteröidä turhat tiedot pois melko tehokkaasti. Projektin tässä vaiheessa voidaan jo sanoa, että markkereiden paikantaminen ei tule olemaan liian vaikeaa, kunhan valaistusolosuhteet eivät muutu liiaksi. Projektiin on tarkoitus kehittää automaattinen kameran parametrien kalibrointiohjelma, joka voisi adaptoitua uuteen valaistusolosuhteeseen. Kyseistä kalibrointiohjelmaa ei kehitetty, se voidaan kehittää tästä projektityöstä erillään ja siihen on varmasti olemassa valmiita työkaluja.
Niko Nyrhilä 7 3.2 Kameran paikan ja polttovälin valitseminen Kärryn toiminta-alue ei ole vielä tarkkaan tiedossa, joten vielä ei ole varmaa miten laajan alueen kameran tulisi kyetä havaitsemaan. Kameran kuva-ala tulisi kuitenkin käyttää mahdollisimman tehokkaasti hyödyksi, koska kamera tarjoaa melko pienen pikselimäärän analysoitavaksi. Mallin paikan ja asennon estimoinnissa olisi ensiarvoisen tärkeää, että markkereiden paikat kameran kuvassa voidaan estimoida mahdollisimman tarkasti. Mitä laajemman alueen kamera näkee, sitä epätarkempia estimaatit ovat. Optimaalinen polttoväli riippuu lopullisesta konfiguraatiosta, mutta nykyisellä polttovälillä mallin asento voidaan estimoida tarpeeksi tarkasti jopa 1.5 metrin päästä. Tämän pitäisi olla riittävä suunnitellulle käyttökohteelle. 3.3 Siirtyminen Matlab-skriptikielestä C++:aan Projektin jatkokehityksen ja hyödyllisyyden kannalta olisi toivottavaa että lopullinen projekti toteutettaisiin C++ ohjelmointikielellä, esimerkiksi OpenCV kirjastoa käyttäen. Tällöin kaikki algoritmit täytyy toteuttaa uusiksi, ja täytyy myös varmistaa että käytetyt Matlabin valmiit funktiot (kuten pienimmän neliösumman sovitus) löytyvät käytetyistä kirjastoista. Projektityötä ei toteutettu C++ kielellä, vaan työstä palautetaan ainoastaan hyvin dokumentoidut Matlab skriptit. 4 Yhteenveto Projektityön tuloksena saatiin, että tetraedrimainen pallojen rakennelma voidaan paikantaa 1 mm ja 0.1 tarkkuudella, 3.7 kuvaa sekunnissa. Mikäli estimaateille sallitaan suurempi epätarkkuus, algoritmeille saataisiin lisää nopeutta käyttämällä 320 240 resoluutiota 640 480 sijaan. Arvioisin että estimaattien virheet kaksinkertaistuisivat, mutta algoritmin nopeus nelinkertaistuisi. Värien robusti tunnistus voidaan "opettaa"tietokeneelle melko pienellä manuaalisella työllä tilastollisin menetelmin, menetelmän tarkka kuvaus löytyy myöhemmin palautettavasta dokumentaatiosta. Tetraedriä verrattiin myös tasomaiseen kuudesta pallosta koostuvaan kappaleeseen, ja simuloinnista saatujen tulosten perusteella (kuva 2) tedraedri olisi parempi kappale paikannettavaksi. Tetraedrillä kaikkien akselien kierrot voitiin estimioda tarkasti, ja tasomaisella kappaleella kierrot x- ja y-akselien ympäri olivat noin 10 kertaa epätarkempia. Tasomaisen kappaleen hyvänä puolena sanottakoon, että siitä voitiin x- ja y-suuntaiset translaatiot estimoida tarkemmin, mutta tetraedri-rakenteen 1 millimetrin tarkkuus riittää vallan hyvin kärryn ohjaamiseen. Projektityön tuloksena saatiin valmiit ja dokumentoidut Matlab-skriptit, joiden perusteella samat algoritmit olisi helppo toteuttaa myös C++ kielellä. Sillä olisi myös helpompi toteuttaa interaktiivinen kameran värilämpötilan kalibrointi, ja punaisen ja vihreän värin "opettaminen"olisivat helposti toteutettavissa. Kaikkiaan projektiin käytettiin aikaa noin 105 tuntia.