Samuli Rahkonen 6.7.2011 TIEA343 - Robottiohjelmointi 2011 Tämä on Jyväskylän yliopistossa järjestetyn robottiohjelmointikurssin harjoitustyön dokumentaatio. Robotin tarkoitus Robotin tarkoitus on ampua sille osoitettuja kohteita pienillä palloilla mahdollisimman nopeasti. Käyttäjä voi legoista rakennetulla ohjaintikulla ohjata ja osoittaa kääntyvää tykkitornia ampumaan kohteita. Idea on kuitenkin siinä, että tykkitorni laskee optimaalisen ampumiskulman ja ampuu kohteita vasta, kun kaikki kohteet on näytetty sille. Fyysinen rakenne Robotti rakentuu kahdesta osasta: Tykkitornista ja ohjaustikusta. Kuva valmiista robotista:
Ohjaustikku Ohjaustikku on kaksiakselinen ja se siis kääntyy eteen ja sivuille. Rakenne on melko monimutkainen, mutta toimintaperiaate on seuraavanlainen: Kääntämällä tikkua eteenpäin, kääntyy tikkuun kiinnitetty oikeanpuoleinen akseli, joka taas laskee vipuvarteen ja kiskoihin kiinnitettyä valosensoria kohti sen alle rakennettua vaaleaa tasoa. Taaksepäin kääntämällä sensori nousee ylöspäin. Kääntämällä ohjaustikkua sivuttaissuunnassa, saadaan välityksien avulla toinen valosensori nousemaan ja laskemaan vastaavalla tavalla. Ohjaustikun kääntösädettä rajoittaa eniten niiden kiskojen (käytännössä kaksi pystysuuntaista akselia) pituus. Toteutuksessani on käytetty suhteellisen lyhyitä kiskoja, koska pidempiä ei ollut käytettävissä. Koska sensorit pyrkivät jatkuvasti menemään alaspäin, sitä on estetty parilla kuminauhalla. Valosensoreiden ja kohdevalaistuksen avulla voidaan määrittää valon intensiteetti, joka heijastuu sen edessä olevasta kohteesta. Näitä mittausarvoja voidaan hyödyntää kun määritetään esimerkiksi ohjattavan robotin moottorien kierrosnopeuksia. Sensoreiden väliin on myös hyvä laittaa vaikka pahvinen este, etteivät sensorien kohdevalot vaikuta toistensa mittausarvoihin. Syy valosensoreiden käyttöön johtuu siitä että yhdessä Mindstorm-paketissa tulee mukana erittäin rajallinen määrä moottoreita, joita myös voisi käyttää samaan tarkoitukseen. Tällä tavalla ne vapautuvat muuhun käyttöön. Ohjaustikkuun kuuluvat myös NXT-palikan kaikki napit sekä yksi kosketussensori eli nappi. Rakenteen näkee paremmin kuvista.
Tykkitorni Tykkitorni on rakenteeltaan melko paljon yksinkertaisempi kuin ohjaustikku. Sillä on yksi moottori lattiatasossa kääntymistä varten, yksi tykin kallistamista varten ja yksi tykillä ampumista varten. Lisäksi tykin alla on etäisyyttä mittaava ultraäänisensori. Tykki sijaitsee pitkähkön varren päässä ja pohja on puhtaasti kymmenien viritelmien tulos, eikä sillä siten ole lähellekään optimaalisinta rakennetta. Mindstorm-paketin mukana tulleet johdot käytännössä estävät robottia kääntymästä 180 astetta enempää. Tornin raskauden takia minkäänlainen välitykset eivät tuntuneet toimivan. Siksi tornin kääntymisakselit ovat suoraan kiinni moottoreissa. Tykillä ei pysty ampumaan alaspäin, koska se vaatisi ylimääräistä kalibrointia.
Koodin toiminta Koodi on jaettu kolmeen luokkaan. Hierarkialtaan suurimmasta pienimpään: Pyssy Koostuu robotin moottoreista ja ohjaustikusta. Käynnistää ohjaustikun ja kun se on saanut kerättyä kohdedatan, pyssy ampuu siltä saatuja kohdelistan kohteita sille annetussa järjestyksessä. Joystick1 Koostuu valosensoreista ja ultraäänisensorista. Hoitaa tykin käsiohjauksen ja tallettaa merkittyjä kohteita Kohde-listaan. Laskee myös lyhimmän ampumisjärjestyksen. Kohde Sisältää yksittäisen kohteen tiedot ja laskee luomisen yhteydessä saamistaan tiedoista optimaalisen ampumiskulman, jos sellaista löytyy. Lisähuomioita: Joystick1 laskee laskee ahneella menetelmällä etukäteen kohteiden läpikäyntireitin etsimällä aina paikkaansa lähinnä olevan kohteen etäisyyden ja valitsee sen seuraavaksi. Näin jatketaan kunnes kaikki kohteet on käyty läpi. Tällä tavalla ei aina saa nopeinta mahdollista reittiä, mutta useamman kohteen kanssa NXT-palikan laskukyky loppuisi muuten kesken. Laukaisukulman laskemisessa on otettu huomioon tykin paikan muuttuminen tähdätessä. Robotin käyttöohje 1. Käynnistä ohjelma 2. Aseta ohjaustikku keskelle ohjainta kalibrointia varten ja paina ENTER. 3. Ohjaa robottia tikulla. Mitä enemmän käännät, sitä nopeammin moottorit pyörivät. 4. Paina nappia (kosketussensoria) kerran kun olet löytänyt kohteen ja tykki pysähtyy siihen kohtaan. Jos haluat sittenkin vaihtaa kohdetta, paina ENTER, muuten merkkaa kohde painamalla nappia uudelleen. 5. Jos kohde on kantamalla, kuulet kaksi piippausta. Jos liian kaukana niin kolme piippausta. 6. Kun kohteet on valittu, paina ESCAPE ja robotti ampuu hyväksyttyjä kohteita mahdollisimman nopeasti. 7. Seuraa ruudun ohjeita jos haluat valita tai poistaa kohteita ja ampua uudelleen tai lopettaa.