Labbrapport - LEGO NXT Robot

Relevanta dokument
Programmering av NXT Lego- robot Labbrapport för programmering av en Lego- robot

Laboration - Programmering av LEGO Mindstorm robot

Programmering av LEGO NXT Robot

Programmera Lego Mindstormsrobotar

Lego Mindstormprogrammering

LEGO Mindstorm-robot

Laboration i datateknik

Laboration i datateknik

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

KUNGLIGA TEKNISKA HÖGSKOLAN. Laboration II1310. Programmera Lego Mindstorm robot i NXC

NXT LEGO-robot laboration Programmering och felsökning av en LEGOrobot

KUNG. TEKNISKA HÖGSKOLAN. Laboration. Programmering av LEGO-robot

Simon Boström Introduktionskurs i Datateknik

[Introduktion till programmering ]

Introduktion i programmering med språket NXC

Programmering av LEGO NXT robot Laborationsrapport för programering av robot för att följa svartmarkerad linje på maken

Robotar i NXc. En laboration med Mindstormrobotar. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Laborationsrapport av robotprogrammering

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Simon Johansson Introduktionskurs Datateknik 1310

PROGRAMMERING AV LEGO-ROBOT VIA NXC

Programmering med NXC Lego Mindstorm

Kevin Lane Kungliga Tekniska Högskolan Introduktionskurs i Datateknik (II1310) TIEDB0. [NXT Legorobot] [Programmering och felsökning]

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

Introduktion till programmering med hjälp av Lego Mindstorm

Programmering av en Lego robot

LEGO NXT Robotprogrammering

Programmering av LEGO NXT Robot

KUNGLIGA TEKNISKA HÖGSKOLAN. Linefollower. Med LEGO Mindstorms och NXC. Paul Coada Introduktion i datateknik II1310

Robotprogrammering felsökning & analys.

Labbrapport. Introduktionskurs i datateknik (II1310) Stefan Dalarsson,

Felsökning av mjukvara

Programmeringslaboration med LEGOrobot

KUNGLIGA TEKNISKA HÖGSKOLAN KISTA. Lego Linefollower. Få en robot att följa linjen på golvet!

Felsökande av en Lego Mindstorm robot

Labrapport: Programmering i NXC Programmera LEGO Maindstorm med NXC

[Introduktionskurs i Datateknik]

Programmera LEGO NXT

Programmera en NXT Robot

Praktisk programmering

Labbrapport LEGO-robot linefollower

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

Strukturerad problemlösning. Metoder och verktyg för datavetare Ht09

Mina listor. En Android-applikation. Rickard Karlsson Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.

Projektrapport. Till Projektet Bluetoothstyrd bil

INNEHÅLLSFÖRTECKNING... 2 FÖRORD... 3 INLEDNING... 4 ATT ANVÄNDA MOTORERNA... 9 LOOP (UPPREPANDE) FUNKTIONEN SKAPA EN EGEN KLOSS...

Joakim Jonsson jj222kc. Minesweeper. Individuellt Mjukvaruprojekt Joakim Jonsson

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

Programmeringspalett. Pr o gr a mvar a

Digitalt lärande och programmering i klassrummet

SLUTRAPPORT RUNE TENNESMED WEBBSHOP

Goda råd från studenterna som gjorde kandidatprojektet 2018

Grunderna i stegkodsprogrammering

Om NXTprogrammering. Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT?

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

GRUNDKURS I C-PROGRAMMERING

Programmering. Analogt och med smårobotar. Nina Bergin

Lego Robot [ ] [ ] [ ]

Planering Programmering grundkurs HI1024 HT 2014

TDDD73-funktionell och imperativ programmering i python

Algoritmer och datastrukturer. HI1029 8,0 hp Introduktion

Edison roboten som går at bygga ihop med LEGO

Projekt Rapport. RaidPlanner. Jeanette Karlsson UD10

Introduktionsmöte Innehåll

Ett spel skapat av Albin Wahlstrand

BG306A Strukturmekanik, bärverksanalys MT129A Finita elementmetoden

LabVIEW uppgift 4. Erik Andersson och Johan Schött. 22 februari 2010

Objektorienterad programmering och Java

SAMMANSTÄLLNING 1 (13) Datum för sammanställningen Period 3, 2007

Labrapport över Rumbokningssytemet Grupp:1

TUTORIAL: KLASSER & OBJEKT

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

PD104A - Introduktion för Produktuteckling och design

Digitala projekt - Radiostyrd bil

Bakgrundsinformation Kursens namn: Biomedicinsk laboratorievetenskap: Introduktion

Programmering som språk

Roboten. Sida 1 av 11

Utvärdering av laboration i genteknik. för kemiingenjörer, VT 2002

Kurs-PM fo r HI1028, Projektkurs inom programvaruutveckling, VT16

Goda råd till de som ska utföra ett liknande projekt (från KMM 2016)

Digitala Minnen. Luleå kommun

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

RAM FÖR LEKTIONSPLAN RESULTAT OCH BEDÖMNING LÄRARENS FÖRBEREDELSER. ÖVERBLICK: Lektionsplan 3

Laborationer i SME094 Informationsteknologi I för

Grupputvärdering Gängbildning

TSKS10 - Signaler, information och kommunikation

Planering Programmering grundkurs HI1024 HT TIDAA

En resa genom robotarnas värld!

INNEHÅLLSFÖRTECKNING... 2 FÖRORD... 3 ANVÄNDANDET AV SENSORER... 4

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Loggbok. Måndag 28/1. Tisdag 5/2

Introduktion till Programmering. Dåtid, nutid och framtid

Game of 40. Regler och om sidan är in princip samma sak. Det som skiljer dem åt är att de inte har samma text.

Teori och praktik. Vilket bör komma först?

MINI STARTER. Lärarhandledning Elevuppdrag Utvärdering

Lab5 för prgmedcl04 Grafik

Kursanalys DD1312 hösten 2008

FIRST LEGO League. Stockholm

Programmering F-3. -dansprogrammering. Del 1

Transkript:

KUNGLIGA TEKNISKA HÖGSKOLAN Labbrapport - LEGO NXT Robot Programmering och felsökning Stefan Sarkis 2014-09-02 ssarkis@kth.se Introduktionskurs i datateknik (II1310)

Sammanfattning Denna rapport handlar om en laboration som gjordes med LEGO NXT robotar i programmet NXC. Syftet och målet med uppgiften var att få en introduktion och grundliga kunskaper om programmering och arbetslivet som ingenjör. Laborationen gick ut på att parvis programmera en robot vars (huvud)uppgift var att följa ett svart tejpmönster på golvet från start- till slutpunkt. Den skulle även utföra andra mindre uppgifter. Genomförandet gjordes parvis eller i grupp om tre med en färdigbyggd robot, programvaran NXC och en felskriven kod som skulle granskas och korrigeras. Det krävdes en hel del små ändringar i koden för att roboten skulle utföra uppgifterna. Man kom att stöta på problem men som par eller grupp diskuterade man och löste dessa problem tillsammans. Laborationen är en bra grund för att få lära sig grunden för programmering som vidare ger en bra erfarenhet inför framtiden. 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... 6 Bilagor... 7 ICT Kungliga Tekniska Högskolan Sida 2 av 7

1. Inledning Vi fick i uppdrag att genomföra en laboration där en LEGO-robot skulle följa ett svart tejpmönster på golvet från start- till slutpunkt. För att roboten skulle kunna utföra den önskade uppgiften var man tvungen att felsöka och korrigera den dåvarande programmerade koden i programmet NXC (Not exactly C). Laborationen är viktig eftersom den ger en lätt introduktion till vad programmering är och hur det fungerar, vilket varje student på ICT-skolan behöver kunna. 1.1 Bakgrund Laborationen är ett enkelt exempel som visar på hur en vanlig dag som ingenjör kan se ut. Som ICTstudent och ingenjör kommer man att stöta på en hel del problem. Då gäller det att man kan angripa och lösa problemen, antingen med någon annan eller självständigt. Självklart är simpel programmering en grund för all annan IT-verksamhet som omringar vårt samhälle. Laborationen kan verka som ett smakprov på hur framtiden kan komma att se ut. 1.2 Syfte och målsättning Syftet med laborationsuppgiften var att ge oss studenter en grundläggande kunskap om vad programmering är och hur det fungerar. Uppgiften syftar även på att ge oss träning i felsökning och testning när liknande problem uppstår att ske. Det introducerar och ger oss även en relativt enkel bild över hur det dagliga arbetslivet för en ingenjör ser ut. Målet med laborationsuppgiften är att få ett färdigt program skrivet i NXC (Not exactly C) att fungera och därmed få en LEGO-robot att utföra sina uppgifter på önskat sätt. Syftet med denna rapport är att visa förståelse för uppgiften samt ge oss studenter erfarenhet som blivande ingenjörer där rapportskrivande är vanligen framkommande under yrket. 2. Genomförande Under genomgången av Labb-PM gavs det ut information om vad syftet och målet med uppgiften är och hur laborationen skulle komma att gå till väga. Informationen inkluderade vilken typ av material som krävdes för att utföra laborationen det vill säga drivrutiner samt själva programvaran NXC som användes för att programmera robotarna. Bifogade filer för nedladdning och installation av programvaran fanns tillgängliga så det gick smidigt och snabbt. Uppgifterna man skulle få roboten att göra var att följa tejpens mönster samt skriva ut alla gruppmedlemmars namn på displayrutan och spela upp angivna noter när den nådde sin slutpunkt. När det var dags att börja med laborationen delades vi in i par om två eller grupper om tre. Först startades programmet upp och roboten kopplades till datorn. När roboten var inkopplad och programmet var igång gjordes det en överblickande granskning och analys av den ursprungliga koden. Detta för att förstå hur koden var anpassad för robotens agerande och funktioner. Därefter påbörjades ändrandet av den felaktiga koden. Par-programmeringen gick till så att en gruppmedlem ändrade koden medan alla medlemmarna analyserade den felaktiga koden. Det framkom mycket ICT Kungliga Tekniska Högskolan Sida 3 av 7

testande för att nå slutgiltiga resultatet. Små justeringar gjordes och sedan testkördes roboten med den justerade koden. Denna procedur repeterades varje gång koden inte stämde överens med önskat agerande av roboten tills det önskade resultat hade uppnåtts. Uppgiften krävde att man som grupp kommunicerade med varandra och försökte, med logiskt tänkande, lista ut vilka och rätta till de fel som orsakade att roboten inte uppfyllde önskat resultat. Efter ungefär 2 timmar blev laborationen lyckad då vi fick roboten att utföra alla tänkta uppgifter. 3. Resultat Uppgiften resulterade i en lyckad laboration då roboten utförde alla önskade uppgifter. Den följde tejpens mönster från start- till slutpunkt, skrev ut gruppmedlemmarnas namn på displayskärmen när den krockade med väggen samt spelade upp angivna noter. Nedanför finns en tabell som visar alla slutgiltiga ändringar som gjordes i koden. Radnummer Ny kod Kommentar 2 #define SpeedSlow 20 Sänkt hastighet för lättare navigering. 3 #define SpeedFast 40 Sänkt hastighet för lättare navigering. 34 String groupmembers[] = { Evan, Stefan, Daniel }; 44 TextOut(0, LCD_LINE2-(8ei)), names[i]); 74 lightsensitivity = SensorRaw(IN_3) Datatypen string behövs för att namn ska kunna tolkas och skrivas ut. -16 var en felaktig variabel då den flyttade upp namnen. Bytte parameter till (IN_3) då sensorn var kopplad i den. 90 OnFwd(OUT_A, SpeedFast) A-motorn svänger mot tejpen. 98 OnFwd(OUT_B, SpeedSlow) B-motorn svänger mot tejpen. 113 /* dance(); */ Kommenterade bort funktionen då den inte behövdes för att slutföra uppgiften. 4. Analys Som nybörjare inom programmering tog det tid att hitta och lista ut felen med koden. Med hjälp av mina labbkamrater gick det bättre då vi kunde tänka ihop och diskutera vilka fel som fanns som ledde till att roboten betedde sig så som den gjorde. När vi först testkörde roboten för att se hur den agerade började den att snurra runt vilt. Till att börja med, när vi började granskningen av koden, ICT Kungliga Tekniska Högskolan Sida 4 av 7

kommenterade vi bort dansfunktionen då vi insåg att den inte hade något nödvändigt syfte för att klara uppgiften. Små justeringar som att sänka hastigheterna, kommentera bort dansfunktionen och ändra på datatypen int till string för att kunna skriva ut namnen var inte alls svåra att fixa. Det lilla problemet som uppstod vid utskrivningen av våra namn var att namnen börjades skriva ut på raden ovan än tänkt. Detta berodde på den felaktiga konstanten -16 vilket flyttade på startpositionen av namnen. När variabeln togs bort fungerade det utmärkt. Det mest problematiska som skedde under granskningen och korrigeringen var att vi upptäckte att fel sensor var inkodad sist av allt. Den sista ändringen eller vad vi trodde var den sista var att se till så att roboten följde mönstret genom att kolla på ljusintensiteten och hur motorerna skulle reagera vid olika ljusintensiteter (se rad 90, 98 i tabellen). Flera kombinationer testades, men allt till förgäves. Efter ungefär 20 minuter av kombinerande och omkodande märkte vi att vi inte hade ändrat på sensorkoden till SensorRaw(IN_3); då fel sensor var inkodad. Om detta fel hade hittats och rättats till tidigare skulle det gått snabbare att slutföra uppgiften. Det som gick bra med laborationen var att det framkom bra sammarbete mellan alla gruppmedlemmar. Vi diskuterade med varandra och kunde komma fram med lösningar tillsammans utan att en person mer eller mindre klarade av uppgiften själv. Roboten utförde önskade uppgifter och laborationen blev därmed lyckad. 5. Diskussion Syftet och målet med laborationen var att få en grundläggande erfarenhet om programmering, hur laborationer man kommer att ta kontakt med som student på ICT-skolan samt hur arbetsuppgifter som en ingenjör kan se ut. Att en nybörjare fick börja med denna typ av laboration var bra då man fick känna på en enkel men ändå viktig erfarenhet av programmering i praktiken. Det enda riktiga problemet som uppstod under genomförandet var det ovan nämnda med att fel sensor var inkodad och att det upptäcktes sent. Resten av utförandet flöt på bra då det inte tog alltför lång tid att lösa och rätta till felen. Efter denna laboration har jag lärt mig en del saker. Jag har fått en inblick över hur programmering ser ut och vad det innebär, fått känna på hur ett typiskt projekt som student och ingenjör kan komma att gå tillväga. Vilka fel som behövs åtgärdas och hur man åtgärdar problemen. Sist har jag även lärt mig lite om hur man skriver en rapport, vilket kommer visa sig att vara viktigt inom framtida ingenjörsyrken. I helhet var det en väldigt bra uppgift då man fick lite grunderfarenhet av allting som innebär att vara ingenjör. Denna erfarenhet kommer garanterat att vara viktig för mig i framtiden, både som student på KTH samt som framtida ingenjör. Programvaran vi använde oss av, Not exactly C, verkar väldigt smidig att använda sig av, speciellt i sådana fall när man vill programmera en rolig liten robot. Att koden verkade så simpel för att den ICT Kungliga Tekniska Högskolan Sida 5 av 7

skulle följa ett mönster var lite chockerande då jag trodde koden skulle vara mycket mer komplicerad än vad den egentligen var. Det är en charm jag fann med denna programvara. När man tittar tillbaka på händelsen och tänker efter hur man gick till väga tänker man direkt på hur man istället kunnat göra annorlunda för att slutfört uppgiften mer simpelt. Om par-programmering kommer vara nödvändigt för liknande fall i framtiden är svårt att avgöra men det hjälper ganska mycket att vara minst två då man kanske inte upptäcker ett x antal fel på egen hand. Dock som en hel nybörjare inom programmering har jag ingen ånger över hur vi som grupp gick till väga då vi arbetade som ett lag och det är jag glad för. Referenser KTH Kista. II1310 Introduktionskurs i datateknik: Föreläsning 2 Rapportskrivning, ordbehandling och introduktion till inlämningsuppgiften, KTH Kista. 2014. Kista, föreläsning 22 augusti. KTH Kista. Labb-PM, KTH Kista. 2014, Kista, föreläsning 22 augusti. KTH Kista. Programming LEGO NXT Robots using NXC.pdf, KTH Kista. 2014. ICT Kungliga Tekniska Högskolan Sida 6 av 7

Bilagor ICT Kungliga Tekniska Högskolan Sida 7 av 7