KUNGLIGA TEKNISKA HÖGSKOLAN Laboration II1310 Programmera Lego Mindstorm robot i NXC Johnny Vu 120904 Jvu@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Vi har genomfört en laboration för kursen II1310 på KTH, Kista. Laborationen gick ut på att med hjälp av tilldelade verktyg såsom redigeringsprogram för programmeringsspråket NXC att felsöka samt modifiera programkod som sedan skulle laddas upp till en legorobot och ändra dess beteende efter givna villkor. Roboten skulle med hjälp av en ljussensor följa en sträcka på golvet som markerades i svart tejp som ledde till en vägg, robotens touchsensorer skulle sedan känna av att den tagit kontakt med väggen och i sin tur skriva ut gruppmedlemmarnas namn på skärmen. Syftet med laborationen var främst att få testa på att programmera samt ge oss en överblick om hur kommande uppgiften eventuellt kan se ut, genom att felsöka i par gav det oss möjligheten att ge varandra feedback samt nya studietekniker och arbetssätt presenterades. Analys av koden ledde till att vi uppmärksammade uppenbara problem, med hjälp utav logiskt tänkande samt med användning utav API (Application Programming Interface) kunde vi justera dessa fel. Nästa steg var att ladda upp koden till roboten för att sedan observera dess beteende med vår modifierade kod och kunde dra slutsatser för att ytterligare förbättra samt korrigera koden. Vi identifierade bl.a. att instruktionen för namn utskrivningen på robotens display behövde ändras samt anropet på variabeln för ljussensorn var fel. Med en stor del logiskt tänkande samt tålamod fick oss få mjukvara samspela med hårdvara som också var syftet med denna laboration.
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... 5 Referenser... 5 Bilagor... 6 ICT KTH Sida 2 av 6
1. Inledning Denna rapport beskriver en laboration med syfte att felsöka samt åtgärda eventuella upptäcka fel i programkod för att introducera programmering samt nya arbetssätt samt tankesätt. 1.1 Bakgrund En student med inriktning informationsteknik som inriktning bör vänja sig vid liknade uppgifter då vi står framför en stor del kurser inom den digitala världen där logiskt tänkande är kritiskt. Genom att få en introduktionskurs inom datateknik får studenten en överblick på vad programmering kan innebära men också vilka sorters arbetsuppgifter och projekt vi kan bli tilldelade. 1.2 Syfte och målsättning Tanken bakom laborationen var främst att presentera programmering till de som tidigare inte haft någon erfarenhet inom området. Studenter med tidigare programmerings kunskaper har oftast inte programmerat med hårdvarunära språk som NXC och fick chansen att testa det. Par programmering introducerades och nya studietekniker inövades. Laborationen syftar på att ge studenten en överblick på framtida programmeringsprojekt som kan tänkas komma, genom att utföra en övning i felsökning samt själv testa på att programmera. Denna övning visar att stora delar logiskt tänkande samt tålamod krävs och ger insikt på hur minimala fel i programkoden kan få kolossala konsekvenser. Målet med labben var att få mjukvara samt hårdvara att samspela, att korrigera programkoden så att roboten manövrering över den angivna vägen korrekt samt uppfylla alla moment såsom att presentera gruppmedlemmarnas namn på displayen i rätt ordning och på rätt rad på displayen enligt givna instruktioner. 2. Genomförande Vi hade blivit instruerade att läsa ett Laborations-PM innan laborationen påbörjades, detta för att få en idé om vad som skulle genomföras samt vad som skulle kunna förväntas. När laborationen väl började blev partner min och jag tilldelade en Mind storm robot samt en USB-kabel. Vi laddade ner de verktygen som skulle tänkas behövas för att exekvera de uppgifter vid blivit tilldelade. Program såsom drivrutiner till USB samt redigeringsprogrammet BrixCC. Sist men inte minst laddades den korrupta programkoden ned och analyseringen påbörjades. Vi upptänkte snabbt många fel i koden som vi genast justerade och kodrader vi var suspekta mot vände vi oss till API för att se hur funktioner eventuellt kodrader ska skrivas på korrekt sätt, vi fixade namnutskrivningsfunktionen med hjälp av API:ns instruktioner. Rader av koder som inte passade in i sammanhanger och uppsatt mål kommenterades bort. Mellan justeringarna flashades roboten ett ex antal gånger för att sedan dra ytterligare slutsatser samt se om tidigare justeringar uppfyllt de förväntningar vi haft. Efter en långtids tragglande med samma problem och när vi var säkra på att ljussensorn som skulle avläsa ett spår samt följa detta spår inte alls läste av något vände vi oss till hårdvaran för att sedan inse att en lite observations miss hade misslett oss, hårdvaran hade ej inspekterats och visade sig att ljussensorn ICT KTH Sida 3 av 6
inte samspelade med vår kod. Efter att ha rättat vårt miss följde roboten linjen. Resultatet presenterades för labbansvarig och dagboksinlägg skrevs. 3. Resultat Radnummer Ny kod Kommentar 34-36 String groupmembers[]: ={ Daniel, Johnny }; 45 TextOut (0, (LCD_LINE2) (8*i)), names [i]); 68 lightintensity = SensorRaw(IN_3) Skrev in namnet på gruppemedlemarna Ändrade den matematiska processen i forloopen så att namnen skrev ut på rätt rad. Tog bort -16 ur loopen. Ändrade så att det var ljussensorn och inte trycksensor som stryde valet av väg. 86 OuFwd(Out_A, Speedfast); Ändrade hastigheten så att den accelererar ifall vi är är på spåret för att hitta tillbaka 91 OnFwd(Out_B, SpeedSlow); Ändrade så att motorerna sakta ner när vi hittade spåret för noggrannare avläsning och korrekt navigering 115 //dance(): Kommenterade bort funktionen då den ej behövdes 4. Analys Vårt huvudsakliga problem var att få roboten att avläsa spåret korrekt, när vi noga granskat vår kod i förhoppning av att hitta ett misstag och inte upptäckte några fel kom vi på att vi ej kollat hur hårdvaran var kopplad vilken motor/sensor hade vilket nummer. Med logik och tidigare kunskaper i programmering hade vi klurat ut hur koden skulle se ut och hur robotens rörelsemönster skulle formas. Det svåra var i att få roboten att ta det till praktiken och hårdvaran men efter en observation upptäckte vi att ett enkelt fel skapade våra problem, på rad 68 var SensorRaw variabeln inställd på trycksensorn därav läste roboten inte av med ljussensorn därför skapade stor förvirring, detta bevisar på att små fel kan leda till stora konsekvenser. Utskrivingen på skärmen styrdes utav en if funktion, ifall trycksensorn var intryckt skulle motorerna stanna samt texten skrivas ut. Forloopen styrde robotensrörelse tillsammans med en if/while funktion. ICT KTH Sida 4 av 6
5. Diskussion Laborationens syfte var i stora drag att introducera studenter till ett ingenjörsmässigt arbetssätt. Syftet uppfylldes då laborationen gick ut på att genom simpel felsökning och hårdvaru nära programmering i par kunde studenten få en överblick på hur liknande projekt kan tänkas se ut. NXC, som är ett hårdvarunära språk och genom att få testa på det har jag lärt mig vikten av hur koden men också hårdvaran måste vara konfigurerade på rätt sätt för att skapa ett samspel som resulterar i de resultat man strävar efter. Struktur och planering är också viktiga egenskaper som jag fått optimera samt även fått uppleva att parprogrammera och ta del av dess fördelar. Egenskaper som arbetsmarknaden nästan tar förgivet och man definitivt kommer ha användning till. Laborationens miljö samt verktygen gav oss möjlighet att testa roboten snabbt, denna metod otroligt effektiv då kunde testa sig fram till vad som eventuellt kunde vara fel. Istället för att sitta och gräva allt för mycket i koden som vi gjorde kunde vi istället insett att vår robot med vår kod inte ens läste av med ljussensorn. Flashningen av roboten gick på ett ögonblick så metoden med att testa var mycket smidigare just i detta fall, i andra sammanhang där miljön och eventuellt tillgångar såsom tid ej tillåter detta arbetssätt kan andra alternativ vara mer optimala. Referenser 1.Laborations pre memoria som förklarar laborationens olika steg samt presenterar syftet bakom laborationen. 2. NXC API:n http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/index.html ICT KTH Sida 5 av 6
Bilagor En skärmdump på KTH dagboksinlägget. ICT KTH Sida 6 av 6