Robottiohjelmointi Kevät 2013 1
Perusasiat Kurssin laajuus 4 opintopistettä Suoritusmuoto on harjoitustyö: Työlle valitaan aihe (melko nopeasti!) Aiheen vaatima robotti rakennetaan Voi käyttää valmiita malleja, harjoituksissa aloitetaan esimerkkirobotilla Aiheen tehtävän suorittava koodi kirjoitetaan Robotti ja koodi dokumentoidaan, myös kuvin/videoin 2
Tavoitteet Ohjelmoinnin harjoittelu! Fyysisen maailman kanssa vuorovaikutuksessa toimiviin ohjelmiin tutustuminen Robotin rakentamisen mekaniikkaan ja mahdollisuuksiin tutustuminen Yleiskuvan muodostaminen eri teknologioiden yhdistämisestä toimivaksi kokonaisuudeksi 3
Kurssin vaativuudesta Tehokas ajankäyttö on tärkeää Kurssi on lyhyt ja asiaa on paljon Älä jumita viikkoja, kysy! Paljon aihepiirejä Sulautetuista järjestelmistä ja ohjaustekniikoista mekanismeihin, konenäköön ja Bluetoothkommunikaatioon Oman työn aihe saattaa vaatia paljon lisäselviteltävää ja yllätyksiä mahtuu matkaan Tietoa pitää hakea myös itse 4
Osallistujille jaetaan Lego Mindstorms NXT -sarja Versio 1.0 6 kpl AA-akkuja ja akkulaturi Tarpeen mukaan joitain lisäsensoreita (kompassit) Sensoreista voi tehdä vaihtareita muiden kurssilaisten kanssa kunhan palautuvat lopuksi sinne mistä lähtivät Näiden lisäksi robotin rakentamisessa voi käyttää omia laitteita ja materiaaleja, kuten Bluetoothia tukevia laitteita (kännykkä, Wiimote...), I2Ckommunikaatiota tukevia sensoreita ja vaikka rautakaupasta löytyviä asioita ynnä jeesusteippiä. 5
Huomio! Osia vahingoittaviin tai kohtuuttomasti kuluttaviin toteutuksiin pitää pyytää lupa Oletusarvoisesti settiä pitää kohdella hellästi jotta seuraavalla käyttäjällä olisi ehjät osat! Etenkin hammaspyörillä voimasuhteita muuttaessa on hyvä olla varovainen etteivät osat taivu Tee liikerajat ja hätäpysäytystoiminto! 6
Kurssin suorituksesta Arvostelu Arvosanaan vaikuttaa aiheen laajuus, koodin ja robotin toteutus Töiden mahdollinen kirjo on kuitenkin niin laaja ja vapaudet suuria että yksityiskohtaisten vaatimusten antaminen on haastavaa Kaikki työn osat pitää palauttaa (koodi, koodin ja robotin dokumentaatio medioineen) Koska kurssilla ei muodollisesti opeteta insinööritaitoja, painotus on koodin toimivuudella ja robotin hyödyntämisellä 7
Kurssin suoritus (jatk.) Työn aiheen pitää olla riittävän laaja Sopivan ja toteuttamiskelpoisen aiheen keksimisessä voi mennä tovi Kannattaa kokeilla monia eri asioita ja etsiä netistä inspiraatiota Ei pidä lannistua, yksi ahaa -elämys voi tuoda monta lisää! 8
Mikä robotti on Eri määritelmiä ja tyyppejä Esim. mekaaninen laite joka tekee työn ihmisen puolesta Yleisesti agentti (toimija), joka kykenee toimimaan ainakin jossain määrin itsenäisesti ja on vuorovaikutuksessa ympäristönsä kanssa Virtuaalinen ja/tai fysikaalinen ympäristö Usein tehty suorittamaan mekaanisia, tarkkuutta vaativia ja toistuvia tai ihmiselle vaarallisia tehtäviä Teollisuusautomaatio, laboratoriorobotit, virvoitusjuoma-automaatit, siivousrobotit, tiedustelu/lastausrobotit, pyykkikoneet... 9
Robotiikka Monen haaran yhtymäkohta Tehtävän suunnittelu (miksi luodaan robotti) Rakenteen suunnittelu ja valmistus (millainen robotin rakenne on, millaiset materiaalit, toimintaympäristö) Elektroniikka (millaisia toimintoja robotissa on) Mekaniikka (miten robotin rakenne toimii) Ohjelmointi (miten robotti käyttäytyy) Keinoäly Koneoppiminen Konenäkö jne. Erityisosaamista käyttötarkoituksen mukaan 10
Robotiikka (jatk.) Elektromekaanisohjelmallinen insinöörioppi Miksi Robottisodissa ei oikeastaan ole robotteja? Lähde: predatormc @ flickr 11
Robotiikka (jatk..) On myös haastavampia lajeja... Lähde: alexanderkoch @ flickr 12
Miten robotti toimii Robotti toteuttaa tehtäviä ohjelmointinsa mukaisesti Ohjelmassa voidaan sensoreita lukemalla ja muiden laitteiden kanssa kommunikoimalla saada tietoa ympäristöstä ja moottoreita ynnä muita laitteita ohjaamalla vaikuttaa ympäristöön Robotin oikea toiminta riippuu siitä, miten hyvin koodi ja mekaaninen rakenne toimivat yhdessä 13
NXT-robotti Legon valmistama ohjelmoitava robottirakennussarja, julkaistu vuonna 2006 Sarjaan kuuluu: Keskusyksikkö 3 servomoottoria 4 anturia Kaapeleita 577 Lego Technic -osaa Lähde: jurvetson @ flickr 14
NXT-robotti (jatk.) Sarjasta on julkaistu vuonna 2009 versio 2.0, joka on suurimmaksi osaksi sama kuin ensimmäinenkin, mutta: Valosensori on vaihdettu värisensoriin Äänisensori on korvattu toisella kosketussensorilla Lähde: Georgi Nemtzov @ flickr Osissa on pieniä eroja, esimerkiksi pienemmät renkaat 2.0:ssa HY:n TKTL:lla on käytössä ensimmäinen NXT-sarja (Legon tuotenumero 8527) Lähde: CyberHades @ flickr Uusi Linux-pohjainen Mindstorms EV3 -robottisarja julkaistaan tänä vuonna. 15
NXT-robotti (jatk..) Robotin rakentaminen NXT-sarjalla ei vaadi erityisiä työkaluja Aiempi kokemus legojen rakentelusta on hyödyksi Technic-osasilla rakentaminen on kuitenkin erilaista kuin klassisilla, pystysuuntaan kasautuvilla legoilla Käytössä kymmenissä tuhansissa oppilaitoksissa Voidaan käyttää mm. ohjelmoinnin opetukseen, hajautetun tekoälyn ja koneoppimisen tutkimiseen, kerhotoiminnassa jne. Tekniset dokumentit kytkentäkaavioita ja firmwaren lähdekoodia myöten saatavilla Legon kotisivuilta 16
NXT:n ohjelmointi NXT:lle on kymmeniä eri ohjelmointiympäristöjä eri kielille, esimerkiksi C, Java, Lua, Python Legon tukema NXT-G on suunnattu lähinnä lasten käyttöön, eikä sitä käytetä tällä kurssilla Ohjelmointikieli on periaatteessa vapaavalintainen Kielen valinnassa pitää kuitenkin pitää mielessä, etteivät läheskään kaikki toteutukset ole vertailukelpoisia ominaisuuksissaan tai toimivuudessaan, joten rajallista ja bugista kirjastoa ei kannata valita vain koska toteutuskieli on oma lemppari 17
NXT:n ohjelmointi (jatk.) Suosituksena on käyttää lejos-pakettia, jolla voi kirjoittaa robotille ohjelmia Javalla lejos on monipuolinen, avointa lähdekoodia, pidemmän aikaa kehityksessä ollut ja helppokäyttöinen Uusi versio 0.9 on juuri julkaistu! Kurssimateriaali pohjautuu lejos-koodiesimerkkeihin Muutakin saa käyttää jos välttämättä haluaa Ohjelmoinnista lisää myöhemmin http://lejos.sourceforge.net 18
Tauko...? 19
Robotin esittely pääpiirteittäin Toiminnalliset osat Keskusyksikkö Servomoottorit Sensorit Rakennuspalikat Ohjelmointiympäristö 20
Esittely keskusyksikkö Robotin ytimen muodostaa Intelligent Brick -nimellä tunnettu palikka 32-bittinen, 48 MHz Atmel AT91SAM7S256 ARMsuoritin, jossa 64 kb RAM + 256 kb Flash-muistia Apuprosessorina 8-bittinen, 8 MHz Atmel ATmega48 AVR-suoritin, jossa 512 B RAM + 4 kb Flash-muistia Kolme ulostuloporttia moottoreille (A,B,C) Neljä sisääntuloporttia sensoreille (1,2,3,4) 21
Esittely keskusyksikkö (jatk.) Bluetooth-tuki Sarjaporttiprofiili (SPP) Kommunikointi toisen NXT:n tai esimerkiksi kännykän kanssa USB-portti 100x64 pikselin mustavalkoinen nestekidenäyttö Kaiutin 8-bittisen äänen soittamiseen (lujaa) 4 kuminappia I2C-sensorien tuki sisääntuloissa 22
Esittely servomoottorit Sarjaan kuuluu kolme servomoottoria Servot voidaan liikuttaa haluttuun kulmaan tai pyörittää eri suuntiin halutulla nopeudella Kääntyvät teoriassa noin 1 asteen tarkkuudella Kaksisuuntainen tiedonsiirto: servon asento voidaan lukea moottorilta itseltään Moottoreissa optiset takometrit Sisäänrakennettu ylikuumenemissuojaus 23
Esittely servomoottorit (jatk.) Servot ovat NXT:n lihakset ja muuttavat energiaa pyörimisliikkeeksi Voidaan muuntaa lineaariseksi mekanismilla Oranssiin pyörivään osaan voidaan kiinnittää muita osia kiinnitystapeilla tai työntää akseli sen halki Servot kytketään portteihin A, B ja C lejos tarjoaa monia korkean tason abstraktioita robotin liikuttelemiseen, joten usein moottoreita ei tarvitse ohjata erikseen 24
Esittely sensorit Sensorien avulla robotti saa tietoa ympäristöstään NXT-sarjaan kuuluu neljä perussensoria Kosketussensori Äänisensori Valosensori Ultraäänisensori Näiden lisäksi saatavilla paljon erilaisia lisäsensoreita Legolta ja muilta valmistajilta, muun muassa gyroskooppeja, RFID- ja kiihtyvyysantureita, laseretäisyysmittareita jne. 25
Esittely sensorit (jatk.) Perussensorien tarkkuus ei ole päätähuimaava Huolellisesti suunniteltu rakenne ottaa sensorien rajat ja heikkoudet huomioon Voidaan avittaa ohjelmallisesti Sensorit kytketään johdoilla portteihin 1,2,3,4 Perussensorien lisäksi robotti voi tietokoneen kanssa kommunikoidessaan käyttää muun muassa konenäköä, jonka mahdollisuudet ovat valtavat 26
Esittely kosketussensori Kosketussensori on oikeastaan vain nappi, johon voidaan kiinnittää muita rakenteita Napin palauttama tila on totuusarvo (true/false) 27
Esittely äänisensori Äänisensorilla voi mitata äänenpainetta, esimerkiksi taputuksen tai kolahduksen havaitsemisessa Äänisensori ei mittaa äänen taajuutta, vain voimakkuutta Kaksi mittaustilaa (db/dba) Mittaustiloilla on eri taajuusvasteet, joten teoriassa äänen taajuudesta voitaisiin saada joissain tapauksissa karkea käsitys http://www.convict.lu/htm/rob/nxt_sound_sensor.htm 28
Esittely valosensori Valosensori mittaa valaistuksen voimakkuutta Voidaan ajatella 1 pikselin harmaasävykamerana Värien erottelukyky riippuu paljon käytetyistä sävyistä ja valaistuksesta Sensorissa on fotodiodi ja punainen led-valo kohteiden valaisemista varten Lediä voi kontrolloida (päälle/pois) Parhaiten sensori toimii ollessaan lähes kosketuksessa kohteen kanssa ledi päällä 29
Esittely ultraäänisensori Ultraäänisensorilla voidaan kaikuluodata etäisyyksiä kohteisiin Mittauksen tarkkuus riippuu siitä, kuinka hyvä kaiku kohteesta saadaan Kovat ja kookkaat esineet voidaan havaita tarkasti Huonon kaiun antavia pehmeitä tai pieniä esineitä ei välttämättä laisinkaan Etäisyys voidaan lukea senttimetreinä arvoalueella 0-254. 255 = ei kaikua Käytännössä lyhin mitattava etäisyys noin 3 cm Monimutkaisin perussensori, kommunikoi I2C:llä 30
Esittely kompassisensori Ei kuulu sarjaan, muutamia käytettävissä kurssilla Valmistaja HiTechnic (http://www.hitechnic.com) Sensorilta voidaan lukea suuntima Erittäin herkkä sähkömagneettisille häiriöille! Pitää sijoittaa riittävän kauas moottoreista ja muista aktiivisista osista (mieluiten noin 15 cm päähän) Myös ympäristö otettava huomioon, esim. taulutelevisio metrin etäisyydellä voi pilata mittaukset Kalibroitava robotin rakenteeseen Hyödyllinen navigoinnissa 31
Esittely rakennuspalikat Lego Technic -osia Kiinnitetään tapeilla Osissa ei ole omia nuppeja Kuitenkin muutamia palikoita joissa sekä kiinnitysreiät että nupit ja joihin voi liittää perinteisiä legoja Mahdollista kiinnittää osia toisiinsa eri kulmissa Väljempiä tappeja niveliin (beiget/harmaat) Erilaisia hammasrattaita Voiman välityksen muuntaminen Nopeuden/väännön kasvattaminen 32
Esittely rakennuspalikat (jatk.) Erilaisia osasia on paljon, mutta joitain tiettyjä osia vain hyvin rajoitettu määrä (esim. 2 kpl) Robotin rakenteessa pitää ottaa osien rajallisuus huomioon Ei tarkoita, etteikö osia voisi hyödyntää toisista seteistä, kunhan eivät mene sekaisin Etenkin tietynlaisia rattaita ja liitospalikoita voi joutua säästelemään Osan rakenteesta voi tehdä tarvittaessa muista materiaaleista ja NXT:tä käyttää toimintojen pohjana 33
Esittely rakennuspalikat (jatk..) Technic-osista saa tehtyä paremmin joustavia ja liikkuvia rakenteita (mekanismit, tukirakenteet) Rakenteesta saadaan kevyt ja luja Perinteisillä, toistensa päälle kiinnitettävillä nupillisilla Lego-osilla saadaan taas painavia, jykeviä rakennelmia (tukirakenteet, kuori, alusta) Näitä ei ole kurssilla tarjota mutta omia voi halutessaan käyttää mielin määrin 34
Tauko...? 35
Esittely ohjelmointiympäristö Tietokoneella laaditut ohjelmat siirretään NXT:lle USB-kaapelilla tai Bluetoothilla Palikan tehtaalla kirjoitettu firmware mahdollistaa hyvin yksinkertaisten ohjelmien laatimisen laitteella itsellään Käytännössä kunnollisten ohjelmien tekeminen vaatii ohjelman kääntämistä koneella ja siirtämistä NXT:lle Tämä vaatii tehdasfirmwaren ylikirjoittamista Helppo kuitenkin palauttaa 36
Esittely ohjelmointiympäristö (jatk.) NXT:n firmware on avointa lähdekoodia ja siten ohjelmointimahdollisuuksia on useita Tehdasfirmware Palikan valikoiden kautta mm. NXT-G -ohjelmalla tietokoneella Muu firmware Esim. lejos (Java), nxtosek (C/C++) Toiminnot eivät välttämättä vastaa Legon firmwarea tai toimivat eri tavoin Takuu raukeaa 37
Esittely ohjelmointiympäristö (jatk..) LCP-etäohjaus (Lego Control Protocol) Legon firmware mahdollistaa robotin toimintojen käyttämisen etäohjauksella USB/Bluetooth Ohjelma suoritetaan jossain toisessa laitteessa, joka voi muun muassa antaa NXT:n moottoreille käskyjä, lukea sensoreita ja soittaa ääniä Robotti ei toimi itsenäisesti, vaan on muualla ajettavan ohjelman fysikaalinen jatke NXT voi etäohjata toista NXT:tä (Bluetooth) Monille kielille kirjastoja, mm. Lua, Haskell lejos-firmware puhuu myös LCP:tä 38
Aloitusohjeet (lejos) Jotta voidaan ajaa lejos-ohjelmia NXT:llä, pitää firmware siirtää sille Tätä ennen pitää kuitenkin asentaa lejos, jotta saadaan tarvittavat tiedostot ja apuohjelmat palikan flashaamiseksi ja ohjelmien lähettämiseksi Kurssilla käytetään ajan ja vaivan säästämiseksi valmista USB-tikulta käynnistettävää ympäristöä, jossa konfiguraatio on jo suoritettu Toimii x86-koneilla Ei vaadi asennusta kovalevylle, talletetut tiedostot ja asennetut ohjelmat kirjoittuvat USB-tikun pysyväistiedostoon 39
rojbos rojbos on muokattu Ubuntu 10.04 LTS, jolla voi käynnistää koneen USB-tikulta (tai DVD-levyltä) lejos on asennettu valmiiksi esimerkkien kera Erinäisiä konenäkötoimintojen hyödyntämistä helpottavia skriptejä ja säätöjä on tehty Kamerakännykän/USB-kameran käyttäminen mahdollista Lisäksi tikulla on joitain ohjeita, esimerkkejä ja apuohjelmia 40
rojbos (jatk.) Tikun voi helpoiten kirjoittaa itse Ubuntun Startup Disk Creator -ohjelmalla Tilaa tarvitaan aivan minimissään noin giga, mutta vähintään 2GB kokoinen tikku on hyvä että tila ei lopu kesken myöhemmin Ohjelma luo tikulle halutunkokoisen pysyväistiedoston johon muutokset tallentuvat Tikusta ajantasaisin image on raakakuva 4GB tikulle joka voidaan kirjoittaa tikulle esim. dd-ohjelmalla Tarvittavat ohjelmat voi asentaa itsekin, mutta tikkua käyttämällä pääsee todennäköisesti paljon helpommalla 41
rojbos (jatk..) Syitä käyttää on useita Yhtenäinen alusta helpottaa käytännön harjoituksia Voi käyttää mitä hyvänsä konetta ohjelmointiin aiheuttamatta muutoksia kovalevylle Mahdollinen levyltä löytyvä Linux-sivutustila kuitenkin hyödynnetään oletusarvoisesti Voidaan ajaa myös virtuaalikoneessa Tikulla tehdyt ohjelmat kulkevat kätevästi mukana Voi myös suoraan puskea tiedostot SVN:ään Ohjelmointiympäristön virittelemiseen voi kulua paljon aikaa riippuen käyttäjän harjaantuneisuudesta ja tällä kurssilla on melko tiukka aikataulu jo ennestään 42
rojbos (jatk...) Monia ohjelmia on asennettuna ja käytettäväksi konfiguroituna lejos 0.9 ja Eclipse+Subclipse, Gimp, Octave ARToolKit lisätyn todellisuuden työkalupakki WiiuseJ Wiimoten lukemista Javalla OpenCV 2.2 esimerkkiohjelmineen Useita hahmon- ja liikkeentunnistusesimerkkejä, joita voi pienillä muutoksilla hyödyntää robotissa reactivision fidusiaalien etsiminen smartcam ja skriptejä puhelimen (mm. N900/Symbian/Android/WinMo..) kameran käyttämiseksi web-kamerana 43
Mallirobotin rakentaminen Valmiilla automaisella robottimallilla on kätevä tutustua lejosin ja NXT:n ominaisuuksiin Sovelletaan ohjetta: http://nxtbuildingmodels.blogspot.com/2008/02/simple-nxt-robot-with-2-motors_27.html Tälle voidaan tehdä muutamia pieniä muutoksia, kuten rakenteen sivusuuntainen tukevoittaminen moottoreiden alta Mallirobotin rakentaa alle vartissa, se on suorassa ja sillä on matala painopiste, valosensorin saa lähelle lattiaa ja rakenteeseen on helppo lisätä esimerkiksi kolmas moottori, puskuri ja kompassi Voi käyttää myös omassa harjoitustyössä 44
Mallirobotin rakentaminen (jatk.) Voi myös rakentaa haluamansa laisen kärryn, kunhan siinä on aluksi kaksi itsenäisesti ohjattua pyörää sekä valosensori ja ultraäänisensori sopivissa paikoissa Valosensori lähellä lattiaa (alle 1cm) Ultraäänisensori kohdistettu eteenpäin, mieluiten lähellä robotin keskikohtaa 45
Rakentamisesta ohjelmointiin Kun robotti on rakennettu, voidaan sitä kokeilla Ensimmäiseksi pitää ladata käytettävä firmware laitteelle: Varmista että robotin akut on ladattu Käynnistä rojbos ja valitse Applications lejos lejos Tools lejos NXT Flasher GUI Kytke robotti USB-johdolla koneeseen ja paina se päälle 46
Rakentamisesta ohjelmointiin (jatk.) Mikäli palikassa on asennettuna ennestään lejos, riittää klikata Start program ja noudattaa ohjeita Jos palikassa on tehdas- tai joku muu firmware, paina paperiliittimellä palikan takana olevan reiän (vasen yläkulma) sisällä olevaa nappia muutaman sekunnin ajan NXT:n näyttö tyhjenee ja se alkaa pitämään tasaista nakutusta, mikä tarkoittaa sen siirtyneen SAM-BA -tilaan, jossa se odottaa uuden firmwaren lataamista Palikka ei enää käynnisty normaalisti ennen kuin uusi firmware on kirjoitettu sille! Kun NXT pitää nakutusta johdolla kytkettynä, paina Start program ja noudata ohjeita 47
Rakentamisesta ohjelmointiin (jatk..) Firmwaren kirjoittamisen jälkeen NXT on valmis ohjelmoitavaksi lejosilla Kirjoituksen jälkeen palikan pitäisi käynnistyksessä näyttää lejos-logo ja versionumero Esimerkkiohjelmia voi siirtää palikalle Eclipsestä Jos koneessa on Bluetooth-siru, voidaan ohjelmat siirtää langattomasti kunhan paritus suoritetaan ensin, ettei joka yhteydellä tarvitsisi syöttää koodia 48
lejosin perusasioita Palikan saa päälle painamalla oranssia Enter-nappia ja sammutettua lejosin valikossa painamalla Escape-nappia Enterin alapuolella Kun ohjelmia siirretään NXT:lle, pitää sen olla kytkettynä päälle ja valikkotilassa Valikosta voi selailla tiedostoja, käynnistää ohjelmia, muuttaa Bluetooth-asetuksia, alustaa muistin, säätää äänenvoimakkuuksia ja saada tietoja muistin ja akkujen tilasta Jos palikka jää jumiin tai ohjelmaan ei ole kirjoitettu poistumisrutiinia, voi sen sammuttaa painamalla Enteriä ja Escapea yhtä aikaa 49
lejosin ominaisuuksia lejos on pieni JVM joka pyörii palikalla sekä matalan tason koodia laitteiston käyttämiseksi Suuri osa Javan toiminnoista on käytettävissä ja ohjelmoiminen ei eroa juurikaan tyypillisestä Javaohjelmoinnista muuten kuin muistirajoitteiden osalta Säikeet, rekursio, moniulotteiset taulukot... RojbOSin sisältämä versio ei ole tuorein mutta sisältää suuren määrän hienoja toimintoja kuten: Monte Carlo -lokalisaatio Joustavia abstraktioita muun muassa havaintojen käsittelyyn, robotin liikehtimiseen ja sijainnin selvittämiseen 50
lejosin ominaisuuksia (jatk.) Polunhakualgoritmeja ja karttatoimintoja Vaativat hieman paneutumista Subsumption-arkkitehtuuri, joka mahdollistaa robotin käytöksen kuvaamisen priorisoidulla tilakoneella Mahdollistaa toiminnallisuuden jakamisen loogisiin lohkoihin jotka poissulkevat toisensa sääntöjen mukaan aktivoituessaan esimerkiksi sensorisyötteen perusteella Vaatii hieman ajatusta, mutta helpottaa paljon robotin käytöksen laajentamista ja korjaamista Joskus kuitenkin yksinkertaisuus on valttia 51
Eclipse + lejos Käynnistä Programming Eclipse Avaa Package Explorerista org.lejos.exampleprojekti Paina palikka päälle ja kytke se johdolla kiinni, klikkaa oikealla hiiren napilla build.xml-tiedoston kohdalta ja valitse Run As Ant Build Ohjelma käännetään ja linkataan.nxj-ohjelmaksi Tavukoodia palikalla pyörivälle JVM:lle NXT päästää nousevan melodian kun ohjelma on siirtynyt ja käynnistää sen automaattisesti NXT:n ruudulla pitäisi nyt näkyä Hello World -teksti kunnes jotain nappia painetaan 52
Eclipse + lejos (jatk.) Kun ohjelma päättyy, palikka käynnistyy uudelleen ja palaa valikkoon Huomio! lejos käyttää tiedostotaulunsa tallentamiseen vain 256 tavun sivua muistista, joten vaikka muistissa olisikin tilaa ohjelmalle, sen nimi voi olla liian pitkä mahdutettavaksi tiedostotauluun Jos haluat monia ohjelmia kerrallaan palikalle, kannattaa pitää luokkien nimet lyhyehköinä Käännöksen yhteydessä konsoliin voi tulla viesti muistin täyttymisestä, mikä usein johtuu pelkästään liian pitkistä nimistä eikä ohjelman koosta 53
Eclipse + lejos (jatk..) Oman ohjelman teko alkaa helpoiten kopioimalla projektinäkymässä org.lejos.example-projekti uudelle nimelle Näin luokkariippuvuudet on valmiiksi määritelty (projektin Properties Java Build Path) Muuta kopioidun projektin build.propertiestiedostosta seuraavat kohdat: main.class= luokan nimi, joka lähetetään palikalle ajoon ja sisältää main()-metodin package= luokan paketti Muuta myös vastaavat nimet projektissa käyttämällä Refactor Rename... -toimintoa 54
Eclipse + lejos (jatk...) Nyt voit kirjoittaa oman ohjelman lisäluokkineen uuden projektin src-kansioon ja kääntää sen kuten edellä tehtiin build.xml-tiedostoa käyttämällä Tee sama jokaiselle NXT:llä ajettavalle erilliselle ohjelmalle (tai muuta aina build.properties-tiedostosta haluttu kääntymään) Tutustu esimerkkiohjelmiin samples-projektissa lukemalla ja ajamalla niitä Huomaa, että samples-projektin esimerkit on koostettu käyttäen erilaista Ant-konfiguraatiota Monia lähdekoodihakemistoja projektin sisällä Jos haluaa muunnella näitä, kannattaa kopioida vain lähdekoodi uuteen hello world -projektiin 55
lejos-ohjelma lejos-ohjelmat eivät juurikaan eroa tavallisista Java-ohjelmista, mutta kaikkia samoja luokkia ei ole käytettävissä Palikalla suoritetaan halutun luokan main()-metodi, joka voi normaaliin tapaan luoda ilmentymiä muista luokista Huomattavaa on, että kun ohjelma päättyy, lejos palaa alkuvalikkoon, joten jos halutaan nähdä mitä ohjelman lopussa tapahtui (esim. tekstiä ruudulla), pitää lisätä ohjelman loppuun vaikka napin painalluksen odottaminen: Button.ENTER.waitForPressAndRelease(); 56
lejos-ohjelma (jatk.) Jos ohjelma heittää kaappaamattoman poikkeuksen, päästää palikka ruman äänen ja näytölle ilmestyy debug-tietoja, joista selviää poikkeuksen heittänyt luokka, metodi ja rivinumero lähdekoodissa Numeroiden perusteella voi etsiä poikkeuksen lähteen linkkausvaiheessa syntyneestä luokkatulosteesta, mutta projektin build/-hakemistoon ilmestyy tiedosto <LuokanNimi>.nxd jota voi tutkia tarkemmin nxjdebugtoolilla nxjdebugtool -di MoikkaMaailma.nxd -c -m 28 20 9 Ilmoittaa mihin luokka-, metodi- ja ohjelmalaskurinumerot viittaavat NXT jää odottamaan Escape-napin painallusta 57
lejos-ohjelma (jatk..) Käytännössä ohjelmointi kannattaa tehdä pienissä osissa, testata toimintaa ja arvioida lähestymistavan toimivuutta työn edetessä Voiko koodia parantaa robotin tehtävän helpottamiseksi? Voiko robotin rakennetta parantaa tehtävän helpottamiseksi? APIin perehtyminen on välttämätöntä lejos on hyvin dokumentoitu Joskus myös lähdekoodiin perehtyminen voi olla tarpeen ja nämä on onneksi kommentoitu kattavasti 58
Pohjustuksen loppu 59