KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Programmering av LEGO-robot Rickard Eriksson 2012-09-06 rieri@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Denna rapport är till följd av en laboration på introduktionskursen inom datateknik på KTH. I huvudsak var syftet med denna laboration var att introducera oss i programmering, felsökning samt hur det kan vara inom ingenjörsbranchen. Själva laborationen gick ut på att vi med hjälp av programmet BricxCC skulle programmera en legorobot med programmeringsspråket NXC. Det vi fick var en kod som hade avsiktliga små fel i sig som vi genom felsökning skulle lyckas ändra till den rätta koden. Med den rätta koden skulle roboten åka längs en svart linje tills den träffade väggen. När den hade gjort detta skulle den spela upp en några toner och visa namnen på oss i gruppen på en display.
Innehållsförteckning Sammanfattning... 1 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... 5 Bilagor... 5 ICT Kungliga Tekniska Högskolan Sida 2 av 5
1. Inledning I rapporten hittar ni en laboration som syftade mot en introduktion i programmering och felsökning samt att få en insyn i ingenjörsarbetet. 1.1 Bakgrund Anledningen till att en student på ICT-skolan skulle ha nytta av denna laboration är först och främst att man lär sig en ingenjörs tankegång. Under laborationen fick vi lära oss om hur man felsöker, hur man programmerar i par samt hur stor skillnad ett litet fel i en kod kan göra. En annan sak som var mycket bra med denna laboration var att vi fick lära oss hur man skulle använda ett API, vilket är mycket användbart vid inlärning av nya programmeringsspråk. Alla dessa kunskaper kommer vi att ha nytta av under både studietiden och arbetslivet. 1.2 Syfte och målsättning Syftet med denna laboration var att introducera programmering för de som ännu inte är vana genom att låta oss programmera nära hårdvaran. På detta sätt kunde man även lätt se hur små ändringar i koden kunde ha en stor påverkan på slutresultatet. För de som redan var vana vid programmering fick prova på att parprogrammera. Anledningen till att vi skriver denna rapport är för att vi egentligen ska visa att vi har förstått vad vi har gjort. Detta var också ett tillfälle att lära sig skriva rapporter eftersom det kommer att vara vanligt både på ICT-skolan och under ingenjörsarbetet. Den målsättning som jag hade inför laborationen var att jag skulle lyckas hitta den felaktiga koden och ersätta den med den rätta för att få roboten att följa ett svart streck, samt att visa namnen på oss i gruppen vid avslutad uppgift. 2. Genomförande Det vi började med var att läsa igenom Lab-PM:et för att veta exakt vad som skulle göras och lite tips på hur man skulle genomföra uppgiften. Från Lab-PM:et fick vi länken till den programvara som behövdes, nämligen BricxCC. Vi behövde också installera drivrutiner för att roboten skulle kunna kopplas till datorn. Det var lite problem med drivrutinerna men efter lite tid och ett antal ominstallationer fungerade det till slut. Till laborationen fick vi roboten samt en USB-kabel för att kunna koppla den till datorn. Den färdiga koden laddade vi ner från Bilda för att sedan överföra till roboten. Vi provade med den koden som fanns för att se hur den betedde sig. Efter att ha testkört började vi titta igenom koden för att se vad som var fel. Då ingen av oss i gruppen hade särskilt mycket erfarenhet av programmering var det ganska så svårt. Vårt första misstag var att vi började ändra hela delar av koden och sätta in vår egen. Detta resulterade i att programmet vart helt förstört och vi började om från början med små ändringar i taget. Efter en hel del testningar och genomgång av kod lyckades vi till slut få roboten att göra som det var tänkt. Eftersom vi var två som kollade igenom koden och ändrade fram och tillbaka så kom vi på många bra idéer och lösningar. ICT Kungliga Tekniska Högskolan Sida 3 av 5
3. Resultat Radnummer Ny kod Kommentar 35 Jonatan, Rickard Lade till gruppmedlemmarnas namn i arrayen names 45 (8*i) Tog bort -16 för att lägga namnen på olika rader 68 SensorRaw(IN_3) Bytte från port IN_1 till IN_3 för att hämta information från ljussensorn istället för trycksensorn 84 OnFwd(OUT_A, SpeedFast); Vi ändrade från SpeedSlow till SpeedFast för att hjulen skulle spinna i olika hastighet om ljuset från sensorn ändrade sig. Om båda skulle ha samma värde 92 OnFwd(OUT_A, SpeedSlow); skulle roboten bara åka rakt fram. Vi ändrade från SpeedFast till SpeedSlow för att hjulen skulle spinna i olika hastighet om ljuset från sensorn ändrade sig. Om båda skulle ha samma värde skulle roboten bara åka rakt fram. 114 //dance; Kommenterade bort metoden dance från mainmetoden eftersom den metoden är helt onödig Genom att bara göra dessa små ändringar kunde roboten utföra uppgiften felfritt. 4. Analys Största anledningen till att det tog ganska så lång tid för oss var att vi var så ovana vid programmering samt att vi egentligen missuppfattade uppgiften till en början och ändrade koden fullständigt. Det som gick lättast var att kommentera bort metoden dance eftersom namnet egentligen avslöjade att den inte riktigt passade in i sammanhanget. En annan sak som var rätt så simpel var att få namnen på skärmen vid avslutad uppgift eftersom det var kod som vi hade sett tidigare från t.ex. JAVA. Anledningen till att roboten ens reagerade på ljus var SensorRaw(IN_3) då den tog in informationen om ljusförändringar. Sedan var det if-satserna som utefter värdena från sensorn gjorde att roboten ändrade hastighet på motorerna för att hålla sig kvar på linjen. Utskriften på robotens skärm berodde av det i metoden printnamestoscreen som i sin tur hämtade namnen från arrayen groupmembers. Det var sedan for-satsen som med hjälp av (8*i) gjorde att namnen skrevs ut på var sin rad. 5. Diskussion Syftet med laborationen var först och främst för att introducera programmering i form av parprogrammering samt att få en försmak på hur det ingenjörsmässiga arbetet kan gå till. Genom att presentera ett realistiskt problem fick vi lära oss enkel felsökning samt hur man programmerar i par, vilket är vanligt i ingenjörsarbete. Är det något som jag har lärt mig så är det vikten av noggrannhet när det gäller programmering samt felsökning, det allra minsta felet förstör hela koden i många fall. Dessutom märkte man att kommentarer i programkoden hjälpte mycket under felsökningen då det var lättare att se vad som gjorde vilket. Eftersom programvaran var så användarvänlig och överföring mellan dator och robot var så smidig underlättade det arbetet. Detta gjorde att en som inte kan så mycket om programmering kan göra en så kallad "trial and error", alltså att testa sig fram genom att göra små ändringar i koden åt gången. ICT Kungliga Tekniska Högskolan Sida 4 av 5
Referenser 1. Labb-PM, förklarar syfte och mål med laborationen samt vad som ingår i en ingenjörs arbete. Bilagor ICT Kungliga Tekniska Högskolan Sida 5 av 5