Att programmera om en LEGO NXT robot
Förståelsen av kodgranskning och felsökning inom programmering i språket NXC
Andreas Lind
2014-‐09-‐04 alind6@kth.se
Introduktionskurs i datateknik, II1310
Sammanfattning
Att behärska hur en programkod är uppbyggd kan ta tid att lära sig, men att sedan börja
programmera och försöka hitta fel i en någorlunda okänd programmeringskod är betydligt svårare.
Jag har således skrivit denna labbrapport som handlar om hur jag utan några förkunskaper felsökte min första programmeringskod, fick en LEGO-‐robot att köra efter en krokig bana utan en
fjärrkontroll, och vad som gick bra och dåligt under laborationens gång.
Du kan läsa om hur vi kunde få våra namn utskrivna på robotens display, hur det var att programmera i par och vad som gick snett i koden.
Det diskuteras även vilka lösningsmetoder vi använde oss utav.
Innehållsförteckning
1. Inledning ... 3
1.1 Bakgrund ... 3
1.2 Syfte och målsättning ... 3
2. Genomförande ... 4
3. Resultat ... 5
4. Analys ... 6
5. Diskussion ... 6
Referenser ... 7
Bilagor ... 7
1. Inledning
I den här laborationsrapporten får du läsa om när jag och min laborationspartner Rodbeh, två kunskapshungriga studenter som för första gången ska programmera i programmeringsspråket NXC (Not eXactly C).
I laboration som vi deltog i var innebörden att arbeta i par och försöka programmera en Lego-‐robot samt få en förståelse för programmering.
Det kommer bland annat att tas upp varför det är bra att utföra denna laboration inom programmering samt vad denna laborationsrapport inriktar sig på.
1.1 Bakgrund
Att kunna styra en robot via en fjärrkontroll är inte det svåraste. Om man istället ska styra en robot via ett program på en dator där du själv måste programmera genom att skriva in olika kommandon och koder så ökar svårighetsgraden.
Programmering är inte det lättaste men det är något som ingår i många högskoleutbildningar på Kungliga Tekniska Högskolan.
1.2 Syfte och målsättning
Syftet med laborationen är att få en introduktion om vad programmering handlar om. Dessutom på ett underhållande och inte allt för svårt sätt, kunna programmera i par där man turas om att felsöka koden och testköra roboten.
Avsikten med laborationen är också att få en kännedom om hur det är att arbeta på ett
ingenjörsmässigt sätt och samtidigt få en arbetsvana inom skolans IT-‐system. Man förutses även att få en förståelse kring hur ett litet tecken ligger fel någonstans i programkoden som leder till ett stort problem i programmet.
Målet med denna uppgift är att få en LEGO-‐robot göra ett par uppgifter genom att rätta och skriva färdigt en felaktig kod skrivet i NXC (Not eXactly C).
Mitt mål för laborationen var att klara uppgiften vi fick samt ha kul med min nya klasskamrat.
Jag och min laborationspartner Rodbeh började med att undersöka roboten samt jämförde den med monteringsspecifikationen och det var inga konstigheter. Vi öppnade Windows som vi lyckats få att fungera på vår Mac-‐dator och hämtade drivrutinen samt installerade de programmen vi behövde för att programmera vår robot.
Roboten skulle sedan kopplas till datorn via en USB-‐kabel där programmet skulle visa en blå symbol om programmet upptäckte robotens anslutning. Den blå symbolen dök upp i programmet och det var dags för att börja koda trodde vi.
Det fanns redan en färdig kod som det förekom en massa fel i. Vi granskade därmed koden och upptäckte en hel del småfel som vi rättade till.
Ett av felen var att koden bad oss att skriva en text under ett variabeln som heter Int där man bara kan mata in siffror, vilket vi rättade till och skrev String istället. Ett annat fel var att enligt
programmet skulle en kabel som leder till ljuskänslighet sitta i en annan port, Rodbeh bytte sedan port så att roboten skulle fungera som den skulle.
Rodbeh rättade koden och jag undersökte robotens uppträdande efter varje överföring av kod, vi bytte sedan position när en halvtimme hade passerat. Jag fick felsöka i programmet och Rodbeh fick testköra roboten.
Rodbeh placerade roboten på en svart markerad linje som låg på golvet. Hon tryckte sedan på startknappen och roboten körde iväg och följde linjen rätt bra till en början, tills det kom en skarp sväng som roboten bara körde förbi. Jag insåg att roboten måste minska farten ifall den ska klara svänga i den skarpa kurvan. Vi ändrade då siffertalen i koden där man fick bestämma hastigheten och sänkte den rejält.
Återigen gjorde vi ett nytt försök och den här gången körde roboten sakta men säkert på den svarta linjen tills den åkte in i en vägg som stötte till två robotarmar. Robotarmarna stannade roboten och skrev sedan ut en text på robotens display enligt följande ”Gruppmedlemmar: Andreas Rodbeh”.
Vi visade vår laborationsassistent när roboten gjorde de tidigare momenten och vi fick besked om att vi hade löst uppgiften.
robot körde in i och stötte då till robotens armar så att roboten stannade.
Roboten visade sedan vår text som vi hade skrivit in i koden ”Gruppmedlemmar: Rodbeh Andreas"
linjen.
I variabeln string kan man skriva texter, vilket vi hade användning utav eftersom vi ville skriva våra namn senare i programmet.
Jag och Rodbeh försökte att få våra namn utskrivna i nummerordning på robotens display. Det räckte då med att bara ha kvar koden ”8*i” eftersom det bara fanns 8 rader (lines) och vi tog därmed bort (-‐
16) som fanns i orginalkoden.
I slutet av den givna programkoden tog vi bort koden ”Dance ();” på grund av att det blev överflödigt, vi behövde inte den koden helt enkelt. Det räckte med att ljussensorn kände av vart den svarta linjen låg på golvet och därmed följde den in till väggen.
Det som gick mindre bra var att vår robot tydligen var fel inställd då kablar satt i fel port samt att det fattades en annan kabel som vår laborationsassistent fick springa iväg och hämta.
Det mest positiva var att jag och min laborationspartner fungerade bra ihop. Vi lyssnade på varandra och kunde komma fram till lösningar utan större problem.
5. Diskussion
Laborationen har vart lärorik eftersom att jag inte programmerat i NXC tidigare, det var även min avsikt varför jag deltog i laborationen.
Målet med laborationen var att visa hur en typisk laboration på Kungliga Tekniska Högskolan ser ut och hur man ska jobba för att klara uppgiften.
Syftet framfördes som hur man på bästa sätt granskar en programkod och genom att arbeta i par, försöka rätta eventuella fel i koden.
I vissa situationer på laborationen uppstod små problem då jag inte förstod min laborationpartners olika antagande men det löste hon genom att förklara för mig grundligt.
Jag och Rodbeh fick hjälp ifrån vår laborationsassistent emellanåt, när vi hade fastnat. Vi använde oss även utav en programmerings guide vid namn ”Application Programming Interface” som
underlättade för oss en hel del för att förstå programkoden vi testat redigera.
Jag tycker det är en bra kombination att man får både jobba praktiskt med roboten och teoretiskt förstå hur koden är uppbyggd.
Att laborera i par var något nytt jag stötte på och det fick mig att inse att man måste konversera med varandra hela tiden så att det inte uppstår något missförstånd.
Under denna laboration lärde jag mig även hur en programkod kan se ut, som kan fungerar i praktiken.
Eftersom att jag inte programmerat i NXC tidigare så var även det en ny kunskap jag fick av
laborationstillfället. Dessa lärdomar jag fått under denna kurs kommer jag att få användning utav när jag ska programmera i NXC nästa gång, vilket kommer ske inom mina tre studieår.
• Labb-‐PM (2014-‐08-‐29)
https://bilda.kth.se/courseId/11430/content.do?id=22224147
• BrixcCC.zip (2014-‐08-‐29)
https://bilda.kth.se/node.do?id=22224203
• Drivrutin LEGO NXT.zip (2014-‐08-‐29) https://bilda.kth.se/node.do?id=22224215
• Linefollower.nxc (2014-‐08-‐29)
https://bilda.kth.se/node.do?id=22224229
• Kommentarsblad för laborationsuppgift.pdf (2014-‐08-‐29) https://bilda.kth.se/node.do?id=22224207
• NXC Programmer’s Guide by John Hansen (2014-‐08-‐29)
• Rapportmall.docx (2014-‐08-‐29)
https://bilda.kth.se/node.do?id=22300661
• Programming LEGO NXT Robots using NXC.pdf (2014-‐08-‐29) https://bilda.kth.se/node.do?id=22224206
Bilagor