KUNGLIGA TEKNISKA HÖSKOLAN Programmering av en Lego robot - En laboration i kodning i språket NXC Felix Thim 2012-09-06 fthim@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Denna rapport handlar om den laboration vi gjorde med Lego Mindstorm robotar. Vi programmerade en robot i språket NXC och fick den därefter att röra sig längs en svart linje, för att sedan röra vid en låda och då spela upp en trudelutt samt visa laboranternas namn på skärmen. Laborationen var rolig, men inte speciellt utmanande. Rapporten diskuterar och analyserar även hur labben gick och varför den fick det utfall den fick, samt hur programmet faktiskt fungerar.
Innehållsförteckning 1. Inledning... 3 1.1 Bakgrund... 3 1.2 Syfte och målsättning... 3 2. Genomförande... 3 3. Resultat... 3 4. Analys... 4 5. Diskussion... 4 Referenser... 4 Bilagor... 5 ICT-skolan Kungliga Tekniska Högskolan Sida 2 av 5
1. Inledning Det här är en rapport på den laboration som vi genomförde i samband med Introduktionskursen i datateknik. Vi programmerade en Lego Mindstorm Robot i språket NXC. Allting finns att läsa i rapporten. Syftet med laborationen var att ge oss en introduktion i programmering och rapportskrivning. 1.1 Bakgrund Programmering är ett viktigt verktyg för ingenjörer som läser ämnen riktade mot IT, vilket samtliga studenter på ICT-skolan gör. Därför är det viktigt med en rolig, men lärorik introduktion för alla nyblivna ingenjörstudenter. 1.2 Syfte och målsättning Laborationens syfte är just att förse oss med en sådan rolig introduktion. Målet är att man ska få en grundläggande förståelse för hur programmering fungerar, och vad programmering kan få för direkta följder. I det här fallet såg vi direkt hur en rad kod fick roboten att röra på sig t.ex. Syftet med rapporten är att förbereda oss för den bistra verkligheten som ingenjör, där rapportskrivande inte något ovanligt. 2. Genomförande När vi kom till laborationen så var det första vi gjorde att sätta upp våra laptops. Vi fick reda på vad roboten skulle kunna göra, d.v.s. följa en svart linje, röra en låda, spela en trudelutt samt visa gruppmedlemmarnas namn på displayen. Sedan hämtade vi hem BricxCC till våra laptops samt installerade drivrutiner för vår Lego Mindstorm robot. Sedan hämtade vi hem den färdigskrivna koden från bilda. Koden kompilerade visserligen, men fick inte roboten att bete sig som vi ville när vi testade första gången utan att röra koden. Därefter försökte vi sätta oss in i koden, och varför den inte fungerade som tänkt. Vi turades om i 20 minuters intervall med att sitta vid datorn och koda, så att den andre fick stå bakom ryggen och få en helhetsöverblick. Vi upptäckte flertalet fel i koden som vi fick fixa till. Vissa var lite klurigare än andra. Vi lånade lite svart tejp för att kunna bygga vår egen testbana. Testkörningen bestod mest i att finjustera styrkan på motorerna, så att den skulle svänga i tid m.m. Det sista vi gjorde på labben var att ta bort den inbyggda trudelutten och ersätta den med vår egen, nämligen första delen av Imperial March. 3. Resultat Roboten blev mycket lyckad, den genomförde banan som var utsedd precis som planerat. Här följer en tabell på de förändringar som vi gjorde i koden. Radnummer Ny kod Kommentar 35 "Felix", "Daniel" Gruppmedlemmarnas namn 45 (8*i) Tog bort -16 så att namnen visades på displayen 114 Tog bort raden dance(); För att förhindra att roboten betedde sig galet 69 IN_1 ändrades till IN_3 Fel input gjorde att vi fick fel värden 84 SpeedSlow -> SpeedFast Om ljust: vänster 92 SpeedFast - > SpeedSlow Om mörkt: höger ICT-skolan Kungliga Tekniska Högskolan Sida 3 av 5
2 SpeedSlow 20 Sänkte minhastigheten 3 SpeedFast 60 Sänkte maxhastigheten 22 Raderade Done[] arrayen Behövdes ej längre 57-75 Lade till en egengjord trudelutt Imperial March 4. Analys Resultat blev alldeles lysande. Både jag och min medlaborant hade programmerat tidigare, vilket gjorde att vi snabbt kunde sätta oss in i koden och fixa problemen, därför gick det så bra. Funktionen followline() låg bakom att roboten rörde sig framåt och höll sig till linjen. Den forstätter att köra motorerna i en oändlig while-loop ända tills en if-sats bryter loopen genom att villkoret finished blir sant. readtouchsensors() såg till att sätta finished = true om rörelsesensorerna gav utslag, d.v.s. om den rör något (i det här fallet lådan). Den här funktionen spelade också upp trudelutten samt körde funktionen printnamestoscreen när if-sats villkoret uppfylldes. Funktionen printnamestoscreen bestod av en for-loop som gick igenom arrayen med våra namn och skrev ut dessa på skärmen. 5. Diskussion Syftet med laborationen uppnåddes med råga. Det var en kul laboration som fick en att testa på det roligaste med programmering. De problem som uppstod var att vissa hade problem med installationen av drivrutinerna till Lego Mindstorm roboten. Bortsett från det så var det inga problem. Det jag har lärt mig är inte någon mer programmering, däremot så har jag lärt mig parprogrammering, och hur effektivt det kan vara (det var något jag aldrig gjort förut). Som jag sa tidigare så blir det lättare för den som står bakom att se helheten vilket hjälper när man kör som "driver". Självklart har jag nytta av detta i både framtida studier och yrke, då jag nu vet att det finns som metod och hur mycket det kan underlätta. Annars så gillade jag både IDE:en (BricxCC) och språket NXC som vi använde. Det var bra grejer. Tillvägagångssättet som vi använde oss av under laborationen var bra. Vi såg först till att vi till fullo förstod vad all kod i programmet gjorde och vad den var menad att göra. Sedan när vi satt oss in till fullo så ändrade vi i koden. Referenser Labb-Pm. (22 augusti 2012). Hämtad 22 augusti 2012 från: https://bilda.kth.se/courseid/8498/content.do?id=19150198 ICT-skolan Kungliga Tekniska Högskolan Sida 4 av 5
Bilagor ICT-skolan Kungliga Tekniska Högskolan Sida 5 av 5