KUNGLIGA TEKNISKA HÖGSKOLAN Linefollower Med LEGO Mindstorms och NXC Paul Coada 2012-08-29 coada@kth.se Introduktion i datateknik II1310 Sammanfattning Rapporten är för labbmomentet som utförs i introduktionskursen i datateknik. Laborationen är till för att man som ny på KTH ska få lära sig lite programmering på ett roligt sätt och veta hur man ska skriva en rapport efteråt. Under själva laborationen fick vi en LEGO Mindstormsrobot som innehöll en ljussensor, två trycksensorer och två motorer samt kod till den som innehöll fel. Man skulle rätta till dessa fel för att få roboten att följa en svart linje tills den träffar en vägg och sedan stannar.
Innehållsförteckning 1. Inledning... 3 1.1 Bakgrund... 3 1.2 Syfte och målsättning... 3 2. Genomförande... 3 3. Resultat... 4 4. Analys... 4 5. Diskussion... 4 Referenser... 4 Bilagor... 5 ICT Kungliga Tekniska Högskolan Sida 2 av 5
1. Inledning Laborationen ger en introduktion till att programmera i språket NXC. Genom att jobba i par ska man lösa de fel som finns i den kod man får, för att få programmet att fungera som den ska (och även roboten). 1.1 Bakgrund Laborationen är till för att ge en ny person på KTH och ICT-skolan en anblick i vad man kan förväntas göra. Att anmäla sig till laborationer, programmera, jobba med robotar, jobba i grupp samt att skriva rapporter och publicera dessa är något som ingår i programmet och denna laboration ger en introduktion till det. 1.2 Syfte och målsättning Syftet är att kunna samarbeta med någon annan man kanske inte känner och tillsammans lösa en uppgift. Man måste korrigera en del fel som finns i ett program som styr en linefollower. Målet är att roboten ska följa linjen (som böjer sig mot en vägg) felfritt. När roboten sedan når väggen så ska trycksensorerna signalera detta och roboten ska stanna, spela upp ett litet ljud samt skriva ut på skärmen namnet på de två personer som samarbetar tillsammans. 2. Genomförande Man ska jobba i par, och man får tillgång till en LEGO Mindstormsrobot som består av två motorer, två trycksensorer och en ljussensor. Med hjälp av roboten kan man sedan testa sig fram för att rätta till de problem som finns i koden man får. För att ändra koden (som är skriven i NXC) så använder man sig av ett program vid namn BricxCC. Dessutom behöver man en drivrutin för att kunna överföra koden till roboten, samt en USB sladd. Koden, BricxCC samt drivrutinen gick att hämta från http://bilda.kth.se. Man ska först installera programmet (som endast funkar till PC) och drivrutinen innan man kopplar in roboten. Vi tyckte det var lättast att förstå koden genom att först se vad roboten gjorde, så vi förde över programmet och startade sedan igång roboten. Vi såg att den snurrade runt lite, och sedan började åka snett framåt till höger. Vi kikade därefter koden och såg att i task main() så anropades en funktion dance() som kodade för piruetten. Vi kommenterade bort den delen och testade sedan igen. När den åkte över linjen så reagerade den inte alls utan fortsatte bara snett framåt som innan. Vi kollade igenom koden och såg att den hämtade värdena från IN_1 istället för IN_3 (som var kopplingen till ljussensorn). Vi korrigerade felet och testade igen. Nu reagerade den när den åkte över linjen, men den fortsatte ändå snett åt höger. Vi åtgärdade det genom att ändra i vilken hastighet de olika motorerna skulle åka i när den var på/utanför linjen och testade ett antal gånger tills det fungerade. Den stannade som den skulle när den åkte in i väggen och spelade upp melodin. Däremot skrev den inte ut våra namn på skärmen. Vi kikade lite på koden och såg att den skrev ut namnen på rader som låg högre upp än vad skärmen fick plats med, så vi ändrade koden och det fungerade som det skulle. Vi visade upp roboten samt koden när vi var klara och fick godkänt. ICT Kungliga Tekniska Högskolan Sida 3 av 5
3. Resultat Radnummer Ny kod Kommentar 114 //dance() Kommenterade bort piruetten som roboten gjorde i början. 68 (IN_3) Så den läser av från rätt sensor. 86 SpeedFast 94 SpeedSlow Ändring i motorerna så den följer linjen som den ska. 35 Paul, Erik Vi la till våra namn i arrayen. 45 (8*i) Ändringen så att namnen skrivs ut på rätt rader. 4. Analys Allting gick bra under laborationen. Det som var lite klurigt var att förstå i koden när den var över linjen och när den inte var, samt hur motorerna skulle reagera. Sättet att programmera påminner även om andra liknande mikrokontroller (såsom ATmega som bl.a. används i Arduino) på så sätt att den har egna förinställda funktioner och att den måste ha en loop som hela tiden upprepas. 5. Diskussion Laborationen var rolig, speciellt att få leka med roboten. Däremot kan det ibland vara rätt knepigt eftersom robotar har så många fler faktorer att ta hänsyn till att den kanske inte alltid gör exakt som man tror den ska göra (jämfört med vanlig programmering på datorn). Kursen är mest till för att introducera en ny person och väcka intresse, och det tycker jag laborationen gjorde bra. Dessutom fanns materialet upplagt på nätet så man kunde förbereda sig (och till och med lösa uppgiften) innan man kom till labben, vilket kan vara bra om man är ny till programmering. Referenser II1310 Föreläsning 2 Rapportskrivning och ordbehandling.pdf https://www.kth.se/social/upload/503a5667f276540d2200000a/laborationsrapport.pdf ICT Kungliga Tekniska Högskolan Sida 4 av 5
Bilagor ICT Kungliga Tekniska Högskolan Sida 5 av 5