Robottiohjelmoinnin harjoitustyö Autorobottimaatti Seppo Heppu 013666000 seppo@helsinki.fi
Autorobottimaatin kuvaus Tässä osiossa selitetään robotin tarkoitus ja perustoiminta. Tästä olisi hyvä käydä ilmi mitä se osaa, jolloin dokumenttia lukeva toinen kurssilainen voi päätellä onko koodissa tai robotissa jotain hänelle sopivaa. Autorobomaatti on robotti, joka tutkii ympäristönsä ja ilmoittaa sen koon. Se toimii vain siisteissä sisätiloissa. Se kiertää huoneen seiniä seuraamalla ja mittaa matkaa minkä se on käyttänyt jokaisen merkitsevän seinän myötä. Kun se havaitsee seinän edessään, se kääntyy oikealle. Käytyään jokaisella seinällä ja palattuaan lähtöpisteeseensä se tallettaa huoneen pinta-alan ja seinien pituudet. Seuraavalla käynnistyksellä se ilmoittaa sen kirjallisesti näytöllä. Mittaustarkkuus voi heittää muutamalla kymmenellä senttimetrillä per seinä. Robotin rakenne Tässä osiossa esitellään robotin fyysinen rakenne. Olennaista on kertoa koodille tärkeät mitat ja sensorit, sekä esitellä robottia muutamalla kuvalla eri kulmista, että sen voi rakentaa niiden perusteella. -Autorobottimaatti on auto, johon on kytketty ultraäänisensori. Ajaminen tapahtuu kahdella moottorilla, jotka voivat pyöriä eri tahtia kääntymistä varten. Kolmas pyörä on tukipyörä, joka mahdollistaa sulavan liikkumisen. Ultraäänisensori on robotin päällä osoittaen menosuuntaan, ja näkee esteet suoraan menosuunnassa päin. -Strategiset mitat, kuten koodin kannalta olennaiset renkaan ympärysmitta ja renkaiden väli: 2,1 tuumaa ja 4,2 tuumaa. Ultraäänisensori toimii parhaiten noin 8 senttimetrin korkeudessa, robotin tasapainoisen rakenteen vuoksi täydellisen vaakatasossa. Robotti on kompakti, kestävä ja kykenee pyörimään paikallaan.
Koodin rakenne Tässä osiossa seiltetään koodin rakenne, eli mistä luokista se koostuu ja kuinka ne kommunkoivat keskenään. Myös olennaiset menetelmät on hyvä selittää niin, että ulkopuolinen voi päättää onko koodissasi jotain mikä häntä kiinnostaisi. Koodi koostuu kolmesta luokasta. Ensiksi on robotin pääluokka, AutoRoboMat, joka hoitaa sen ohjausta. Tämän lisäksi robotilta löytyy IO -luokka joka hoitaa tiedostoon kirjoituksen, sekä Matikka -luokka joka pitää yllä tilan kokoa ja laskee sen pinta-alan. Ohjelma käynnistyy AutoRoboMatin mainista, joka aluksi luo tyhjän tiedoston tai avaa vanhan metodilla Initialize(). Seuraavaksi se käynnistää ajon ajamalla Engage!() -metodin joka käynnistää ajon. Ajon aikana robotti tarkistaa ultraäänisensorista onko sen edessä seiniä. Mikäli se havaitsee seinän, se tallettaa muistiinsa kuljetun matkan ja kääntyy oikealle. Kun se on tehnyt kierroksensa, se palaa aloituspaikkaansa ja tallettaa kierroksen tiedot Finalization() -metodilla. Mitaten kuljettua matkaa se seuraa milloin se pääsee huoneen ympäri, olettaen että ollaan sisätiloissa ja suorakulman muotoisessa huoneessa. Se pitää erotusta nykyisestä pisteestä mielessään katsomalla X ja Y koordinaattejaan, kasvattamalla sitä kuljetun matkan ja suunnan mukaan. Robotti tekee aina 90 -asteen käännöksiä. Testaus Testaus perustuu ainakin kolmeen käyttötapaukseen jotka oikeasti suoritit. Pyri tekemään mielekkäitä testejä joilla löydät robottisi heikot kohdat, tai joilla testaat yksittäisiä toimintoja. Tarkoitus on varmistua siitä että robottia on kokeiltu oikeasti, ja että se toimii yleisessä tapauksessa ilman (dokumentoimattomia) ongelmia. Olennaisia testitapauksia on ottaa selville millaisissa olosuhteissa robotti kykenee liikkumaan, ja kuinka hyvin se kykenee suunnistamaan. Oletuksena robotin tulee toimia sisätiloissa, joten emme aio testata sen pitoa jäällä tai sohjossa. Tärkeämpää on tietää jääkö se jumiin keskiverto käpistelijäkämpässä, ja toimiiko sen kartoitus kuinka hyvin. Testitapaus 1: Usutin Autorobottimaatin päin seinää. Asetin sen 50 senttimetrin päähän uhkaavan oloisesta seinästä ja painoin nappia. Autorobottimaatti aloitti urhean rynnistyksen kohti seinää, ja väisti viime hetkellä oikealle ennen vastaiskua. Testi onnistui täydellisesti. Autorobottimaatti huomaa ladon kokoiset seinät, ja välttää ne helposti. Testitapaus 2: Tällä kertaa Autorobottimaatti käy turnajaisiin paperitötteröä vastaan. Robotti ottaa jälleen 10 askeleen etäisyyden vastustajaansa ja odottaa merkkiäni. Napin painalluksesta se porhaltaa päin paperitötteröä, kaataa sen ja jää polkemaan sitä maahan. Testi epäonnistui kahdella tapaa: Ensinnäkin sensori ei havainnut paperitötteröä. Toisekseen robotti jäi jumiin eikä tajunnut sitä. Joudun lisäämään featurena: toimii siistissä sisätilassa. :< Testitapaus 3:
Viimeinen testi koski kokonaista ajoa huoneen ympäri. Olen lopulta siivonnut huoneeni puolen vuoden tauon jälkeen, ja päästän robotin valloilleen. Lopputuloksen pitäisi olla huoneen ympärimarssi, jonka jälkeen robotti ilmoittaa ja tallettaa kierroksensa tiedostoon lokina. Asetin robotin osoittamaan oven viereistä seinää, ja käynnistin sen. Samantien se lähti iloiselle kierrokselleen, ja käännökset onnistuivat hienosti seinistä ja kirjahyllyistä. Onneksi olin siirtänyt tuolin keskemmälle, joten robotti ei kokenut vastoinkäymistä sen kohdalla. Valitettavasti se kääntyi loivasti oikealle koko ajan, joten mittaustulokset eivät taida olla täydellisiä. Oletan että ongelma johtuu eritahtisista moottoreista. Tulostus oli kuitenkin oikean oloinen ympäristöön nähden, ja tiedostokin näytti samaa kuin näyttö, joten olen tyytyväinen. Rajoitukset ja tulevaisuus Robotin rajoituksia ja tulevaisuutta käsittelevä kappale kertoo lyhyesti asioista joita voisi parannella. On olennaista että olet tietoinen robottisi ongelmakohdista, ja ettei loppukäyttäjä yritä käyttää sitä väärissä tilanteissa.voit myös kertoa miten robottia voisi jatkokehitellä että se onnistuisi tehtävässään paremmin. Robotti ei aja täydellisen suoraan. Oikean moottorin nopeutta voisi lisätä hieman, mikäli DifferentialPilot sallisi sen. Moottorin vaihto voisi myös auttaa. Robotti ei tarkista etäisyyttään vasemmalle, jolloin muut kuin suorakulmion muotoiset tilat eivät tule kartoitetuksi kokonaan. Tilaa mittaava luokkakaan ei kykene hahmottamaan muun mallisia huoneita, joten tämä on suunniteltu rajoite. Huomioitavaa on myös se, ettei ultraäänisensori huomaa matalia esteitä (alle 8cm korkeudeltaan), eikä höttöisiä esineitä kuten verhoja. Tilan tulee siis olla siisti että mittaus onnistuu. Tulevaisuudessa robotti voisi esimerkiksi kyetä lähestyä seinää eri kulmista ja korjata itsensä kohtisuoraan siihen nähden. Se voisi myös tarkistaa jokaisessa kulmassa ettei ole kääntynyt vinoon, ja täten laskea muitakin kuin 90-asteen kulmia oikein. Käyttöohje Käyttöohje esittelee robotin kaikki toiminnot, ja kuinka niitä käytetään. Kun olet koonnut robotin kuvien perusteella, varmista että yllä annetut mitat pitävät paikkansa (sensorin korkeus, renkaiden läpimitta ja etäisyys toisistaan). Aja build.xml kun robotti on kiinnitetty USB-piuhalla koneeseen. 1. Ohjelma käynnistyy AutoRoboMat-tiedostosta. Aseta robotti osoittamaan huoneen seinää ja käynnistä ohjelma. 2. Robotti aloittaa kierroksensa kiertäen huonetta myötäpäivään. Tässä välissä voit käydä kahvilla. 3. Kun robotti on sisäisen tilansa mukaan tullut kokonaisen kierroksen, se pysähtyy, päästää äänen ja sammuu. 4. Seuraavalla käynnistyksellä se näyttää edellisen kartan, kunnes painat oranssia nappia. Onneksi olkoon, tiedät huoneesi pinta-alan parin neliömetrin tarkkuudella!