KUNGLIGA TEKNISKA HÖGSKOLAN KISTA Lego Linefollower Få en robot att följa linjen på golvet! Felix Ringberg 2012-08-09 felixri@kth.se Introduktionskurs i datateknik II1310 Sammanfattning I den här laborationen är uppgiften att kolla igenom den erhållna koden efter fel, och att genom parprogrammering försöka rätta till dessa. Den rättade koden ska laddas in i en lego-robot och är slutligen menad att följa en svart linje på golvet.
Innehållsförteckning Sammanfattning...1 1. Inledning...3 2. Genomförande...3 3. Resultat...4 4. Analys...5 5. Diskussion...5 Referenser...6 Bilagor...6
1. Inledning I den här laborationsrapporten beskrivs laborationen, varför laborationen ger en bra inblick i vad som en blivande ingenjör kan vänta sig i framtida studier och yrken, samt varför det är så pass mycket fokus på kommunikation mellan elever som studerar tillsammans. Blivande ingenjörer får även genom programanvändningen prova på kodandet och hur den närmsta tiden kommer att kunna se ut. 1.1 Bakgrund Som ingenjör är det väldigt viktigt med kommunikation och gott samarbete med sina kollegor, eftersom väldigt många av deras uppgifter och projekt har flera ingenjörer som de måste samsas med. Studenter på ICT-skolan arbetar på samma sätt, och därför måste de kunna samarbeta med sina gruppmedlemmar och klasskamrater när det behövs vid projektuppgifter. 1.2 Syfte och målsättning För att studenten i framtiden ska kunna lyckas med sina studier är det viktigt att denne ska kunna kommunicera med andra runt om kring sig. Detta är särskilt viktigt när arbeten delats upp i grupper där personer måste samarbeta. Syftet med denna laboration är främst att introducera nya studenter till programmering där de ingår i par och får programmera tillsammans. Två elever ska kunna sätta sig, turas om om att programmera och kommunicera för att gemensamt lättare lösa problemet och utföra laborationen. Bakgrundssyftet är att samtidigt få se hur programkod och hårdvara i form av en legorobot kan interagera, och på så vis lära känna och prova på hur framtida projekt kan komma att se ut. 2. Genomförande Laborationen genomförs i par med en dator per par. Programvaran Brickx laddas ned från kurshemsidan. När programmet är installerat kopplas legoroboten in i datorn med USB-kabel. När programmet startas kopplas datorn ihop med roboten och program kan laddas upp i den. Programmet linefollower.nxc som erhölls laborationsgruppen laddas då in i roboten och testkörs. Eftersom programmet har några inlagda buggar är det parets uppgift att söka igenom koden efter dessa och eliminera dem. De måste kommunicera och metoden fungerar som så att den ena programmerar och läser av koden i 20 minuter, sedan byts de av, jobbar i 20 minuter, byts av igen, och så vidare. Efter att paret tror de lyckats eliminera en bugg testar de roboten på banan, och fortsätter på samma sätt att eliminera bugg för bugg tills roboten gör det den är menad att göra enligt anvisningarna. Vid slutförd laboration ska roboten: 1. Skriva ut gruppmedlemmarnas namn på varsin rad på displayen
2. Kunna följa linjen 3. Spela upp en melodi när den träffar väggen 3. Resultat Radnummer Gammal kod Ny kod Kommentar 45 (8*i - 16) (8*i) Att 16 subtraheras bort gjorde att texten hamnade två rader för högt upp 2 SpeedSlow 80 SpeedSlow 30 Vi ansåg att ljussensorn kunde ha problem med att läsa av linjen om den sveptes för snabbt över den, så vi sänkte hastigheten 3 SpeedFast 100 SpeedFast 60 Se ovan 68 (IN_1) (IN_3) Vi kollade portarna till de olika sensorerna och såg att ljussensorn var inkopplad i port 3(IN_3) 35 person1 Felix, Sam Vi lade till våra namn i listan groupnames 86 SpeedSlow SpeedFast Utan denna ändring hade roboten fortsatt svänga åt ett håll även om den hade känt av linjen 92 SpeedFast SpeedSlow Se ovan 114 dance() //dance() Funktionen gjorde att resten av koden fick vänta i tre sekunder medan den gjorde sin dans - den fyllde alltså ingen funktion.
4. Analys Roboten hade en del buggar inbakade som var olika svåra att hitta, men i överlag gick det rätt snabbt. Det problem som tog längst tid att klara av var att hitta att robotens portar inte överensstämde med koden, då detta inte kan hittas i koden, utan måste kollas på själva roboten. Något som också tog lite tid var att förstå hur namnen skulle skrivas in, men vi lyckades till slut inse att texten hamnade ovanför skärmen när 16 subtraherades från 8*i. Kollar man igenom koden så ser man att main-aktiviteten ligger längst ned, och det inom den körs igenom allra först, och i den fanns bland annat funktionen dance(). Denna funktionen hade som uppgift att svänga åt ett håll och sedan kallades wait-kommandot, det vill säga att programmet pausade i tre sekunder innan resten kördes. Detta gjorde att vad man än gjorde, skulle programmet alltid börja med att köra till vänster, därför plockade vi helt bort det från körningen genom att sätta kommentar-tecken ('//') före den raden kod. 5. Diskussion För mig som är relativt van vid programmering och programspråk var det inte väldigt svårt att hitta felen eller förstå dem, men jag förstår att de som är nya till det hela kan stöta på problem eftersom det är en hel del tänkande bakom alla algoritmer, och det är inte alltid det lättaste att gå tillbaka och försöka läsa av hur kod är tänkt att fungera, och vad den är menad att göra. Med lite tid och kunskap går det däremot ganska lätt att inse lite djupare hur alla kugghjul i programmen samspelar, och man kan börja försöka sig på att göra sina egna modifikationer! Att programmera i par eller i grupp är nytt för många, bland annat för mig själv, men är en bra övning i samarbete. Det är intressant hur mycket lättare det kan bli att kolla igenom kod tillsammans efter fel, än om man hade gjort det ensam. Att turas om att programmera gör att inte endast en sitter och håller på datorn medan den andre hänger över axeln hela tiden, utan man får sin tid och kan i lugn och ro kolla igenom i sin egen takt när det har blivit ens tur. Så länge man håller ett bra samarbete kan nog programmering i grupper förenkla och skynda på saker oerhört mycket. Det är ett väldigt bra tillvägagångssätt som man verkligen kan ha nytta av i framtiden om man ska arbeta med programmering under studier eller i sitt yrke. Det är även intressant hur lätt en siffra eller bokstav fel kan ändra på utfallet av ett program så avsevärt som det kunde göra i den här laborationens fall. Det kan väldigt enkelt gå fel, och det är därför det är viktigt, när man håller på med programmering, att man har fokus och söker av koden efter fel så att buggarna minimeras. NXC var ett väldigt enkelt men effektivt programspråk som var lätt att läsa och förstå. Det gick med programmet BricxCC att ladda in koden i roboten både lätt och snabbt. Direkt när man laddat in
program så kunde den kopplas ur och användas direkt. Detta snabba system gör att testkörning och felsökning går väldigt smärtfritt, och är något jag definitivt skulle kunna rekommendera till nya programmerare i framtiden! Referenser https://bilda.kth.se/courseid/8498/content.do?id=19150198 Labb-PM Bilagor