Programmering av LEGO NXT Robot

Relevanta dokument
Programmera Lego Mindstormsrobotar

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

Laboration - Programmering av LEGO Mindstorm robot

Laboration i datateknik

Programmering av LEGO NXT Robot

LEGO Mindstorm-robot

Lego Mindstormprogrammering

Labbrapport - LEGO NXT Robot

Labbrapport. Introduktionskurs i datateknik (II1310) Stefan Dalarsson,

Laborationsrapport av robotprogrammering

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

Introduktion i programmering med språket NXC

[Introduktion till programmering ]

[Introduktionskurs i Datateknik]

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

Laboration i datateknik

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

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

Simon Johansson Introduktionskurs Datateknik 1310

Programmering av en Lego robot

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

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

Labrapport: Programmering i NXC Programmera LEGO Maindstorm med NXC

Simon Boström Introduktionskurs i Datateknik

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

Robotprogrammering felsökning & analys.

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

LEGO NXT Robotprogrammering

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Programmera en NXT Robot

Felsökande av en Lego Mindstorm robot

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

Programmeringslaboration med LEGOrobot

PROGRAMMERING AV LEGO-ROBOT VIA NXC

Felsökning av mjukvara

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

Praktisk programmering

Programmering med NXC Lego Mindstorm

Programmera LEGO NXT

Labbrapport LEGO-robot linefollower

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

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

Laborationer i SME094 Informationsteknologi I för

Konstruera, styra, reglera och programmera en röd tråd F-9

Digitalt lärande och programmering i klassrummet

Roboten. Sida 1 av 11

Kärnvärden PROJEKT. Drip Saver, vår egen lösning! RAPPORT. Resultat

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Programmering. Analogt och med smårobotar. Nina Bergin

Edison roboten som går at bygga ihop med LEGO

Objektorienterad Programmering (TDDC77)

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Robot Educator En introduktion

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

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

Programmering. Den första datorn hette ENIAC.

Lego Robot [ ] [ ] [ ]

Objektorienterad Programmering (TDDC77)

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

EV3 Roboten. Sida 1 av 13

Working with parents. Models for activities in science centres and museums

GRUNDKURS I C-PROGRAMMERING

Outline. Objektorienterad Programmering (TDDC77) Kursinfo. Outline. Hemsida. Organization. Ahmed Rezine Examination. Webreg.

Varför behöver vi förstå programmering? Se video

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Programmering. ur ett ämnesövergripande perspektiv

Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

Poäng. Start v. Applikationsprogramm ering i Python 7.5. Antal registrerade (män/kvinnor) 50 (34/16)

Välkomna till DIT012 IPGO

Konstruktion av en radiostyrd legobil. Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia

Programmering från början

Hur fungerar en dator?

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Programmering, dans och loopar

Slutrapport. Super Mario klon. Tomas Wallin tw222bv WP

Projektanvisning. Webbsideprojekt. Författare: Johan Leitet Version: 2 Datum:

Bakgrundsinformation Kursens namn: Biomedicinsk laboratorievetenskap: Introduktion

Resultat av kursvärdering för kursansvarig och lärare

Scanner Detektor lärarhandledning Mojäng

Hur fungerar en dator? Lektionen handlar om att förstå hur datorer styrs av program. Hur fungerar en dator? Lektionsförfattare: Boel Nygren

Undersök vad som är programmerat

tentaplugg.nu av studenter för studenter

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

NetBeans 5.5. Avsikt. Projektfönster

Utvecklar sin förmåga att bygga, skapa och konstruera med hjälp av olika tekniker, material och redskap - Naturvetenskap och teknik, Förskola

Dagens robot. Copyright Sagitta Pedagog AB

Föreläsning 3. Programmering, C och programmeringsmiljö

En resa genom robotarnas värld!

Dagbok KFUM CHALLENGERS

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Har du läst kursen på Campus eller distans Campus 8 53% Distans 7 47%

Uppdrag för LEGO projektet Hitta en vattensamling på Mars

Mälardalens högskola

Datorteknik 2 (AVR 2)

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

3 augusti (G) Programmering: Lego

FIRST LEGO League. Östersund 2012

EdBuild - EdRoboClaw

Slutrapport Get it going contracts

Transkript:

KUNGLIGA TEKNISKA HÖGSKOLAN Programmering av LEGO NXT Robot Med hjälp av NXC Patrick Granberg 2012-09-01 patgra@kth.se Introduktionskurs i Datateknik och II1310 Sammanfattning I rapporten behandlas hela tillvägagångssättet för en laboration som går ut på att parvis programmera en LEGO-robot att utföra en uppgift och samtidigt tillämpa parprogrammering. Laborationen är en introduktion till programmering så den förutsatta kunskapsnivån är inte allt för hög och kraven är realistiska. Jag lärde mig mycket av laborationen och presenterar här mitt resultat av en lyckad laboration.

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... 5 Referenser... 5 Bilaga 1... 6 Bilaga 2... 7 ICT-institutionen Kungliga Tekniska Högskolan Sida 2 av 7

1. Inledning Med hjälp av denna laboration ska en förståelse för programmering utvecklas, för att i senare kurser kunna byggas på. Denna kunskap kommer senare utvecklas till ett mycket användbart verktyg som den blivande IT-ingenjören kommer att behöva. Laborationen introducerar även studenten till ett ingenjörmetodiskt arbetssätt där analys och dokumentering är viktiga aspekter. 1.1 Bakgrund Kunskapen om programmering, att kunna förstå och analysera funktioner och påståenden samt att ta till och lära sig att konstruera egna program är essentiellt för en student på ICT-skolan. Detta är bara grunden till de kunskaper och verktyg som en ingenjör använder sig utav. För att omsätta dessa kunskaper i praktiken krävs alltså en stadig grund att bygga på. 1.2 Syfte och målsättning Laborationens syfte var att introducera de studenterna till programmering i form av parprogrammering. På så sätt ska studenterna bygga sig en stadig grund för framtida programmeringsprojekt. Studenterna kommer att få en förståele för hur små felaktighheter i ett kodstycke kan bidra till ett instabilt eller icke körbart program och i framtiden göra sig uppmärksam på dessa detaljer. Sytet med rapporten är att trovärdigt, noggrant och detaljerat dokumentera hela processen för laborationen och den angivna uppgiften så att en person insatt i samma område utifrån denna rapport ska kuna utföra exakt samma laboration. Mitt mål för laborationen var att få roboten att utföra sin uppgift på ett smidigt sätt. 2. Genomförande Laborationen genomfördes på så sätt att elever parades ihop två och två med en dator per grupp. Därefter gick vi igenom Labb-PM för att få en uppfattning om själva uppgiften. För att påbörja laborationen krävdes att viss programvara installerades för att programmera LEGO NXT Roboten, dessa var länkade i Labb-PM samt fanns under Kursmaterial i Bilda. Själva roboten samt en synkroniseringskabel för att föra över koden till roboten delades ut till varje grupp. En färdig, icke fungerande, programkod fanns att tillgå. Det var denna kod som skulle rättas till för att få roboten att fungera utefter angivna instruktioner. Efter installation av Bricx Command Center och drivrutiner till roboten öppnade vi koden i Bricx Command Center för att studera dess funktioner och märkte direkt att vissa funktioner kallade på variabler som inte existerade, detta korrigerades. Under laborationen skulle parprogrammering tillämpas, det innebär att laborationsparet turas om att sitta framför datorn och programera eller att anteckna och kommentera det som programmers, med ett byte av uppgift ungefär var tjugonde minut. ICT-institutionen Kungliga Tekniska Högskolan Sida 3 av 7

För att lösa uppgiften fortsatte vi med sedan med att testa roboten på testbanan för att få en klarare uppfattning om vilka instruktioner som inte fungerade som de var tänkta. Det verkade även som om ljussensorn inte registrerade något, detta eftersom att den var felkopplad alternativt fel angett värde i programmet. Efter testkörningen rättade vi några felaktigheter i kodstycket följt av en ny testkörning på banan. Roboten placecrades även så att den körde i motsatt riktning av banan för att ytterligare förtydliga brister i programmet. Ganska snabbt kunde roboten utföra angivna uppgifter med godtyckligt resultat men ytterligare några testkörningar gjordes för finjusteringar. 3. Resultat Resultat från laborationen finns bifogade som Bilaga 2 (Tabell 1). 4. Analys I det stora hela så gick laborationen ganska bra och genomfördes utan några större svårigheter. När Labb-dagen väl var inne gick allt ganska smidigt eftersom att vi dagen innan hade testat att programmera en egenköpt robot och studerat koden ganska länge då vi inte fick den att fungera, det visar sig dock att vi inte testat med en ljussensor, utan det var något annat. Att vi analyserat koden bit för bit dagen innan tror jag hjälpte mycket då vi redan förstod vad programmets funktioner gör. I stort sett allt gick bra och vi hade en fungerande kod till roboten som klarade av uppgiften efter bara några minuter. Det svåra var dock att få roboten att utföra dess uppgifter med mjukare rörelser men samtidigt behålla en ganska hög hastighet framåt och därmed krävdes det många testkörningar innan vi var nöjda. Några viktiga variabler är bland annat speedslow och speedfast som definerar hur mycket motorstyrka roboten kommer att använda i funktionen readlightsensor, som avgör om sensorn befinner sig över den svarta tejpen eller inte. TopThreshold och BotThreshold anger gränsvärdena för ljussensorn, och används i readlightsensor funktionen där de används som jämförelsetal mot ljussensorns värde och specificerar hur motor A och B skall uppföra sig. Med samspelet av dessa bestäms hur roboten kommer att färdas. Task readtouchsensors känner av när de två touchsensorerna trycks in och säger åt roboten att stanna och kallar på funktionen som spelar en liten melodi samt funktionen som skriver ut medlemmarnas namn. ICT-institutionen Kungliga Tekniska Högskolan Sida 4 av 7

5. Diskussion Meningen med hela laborationen är att förbereda sig på framtida studier inom programmering och bygga en bas för fortsatt inlärning av mer avancerad programmering. Uppgiften var att programmera en LEGO-robot att följa en bana som är tillverkad av svart tejp, detta med hjälp av robotens ljusseensor. Ett av problemen som uppstod var att roboten åkte för snabbt i början och inte han utföra sina svängar för att hålla sig på banan och ljussensorn tappade kontakt med tejpbanan, detta åtgärdades lätt med en sänkning av hastigheten. Det andra problemet var att eliminera ryckiga rörelser, men det kunde åtgärdas godtyckligt bra efter några testkörningar. I samband med denna laboration har jag lärt mig att programmering för fysiska föremål är möjligt med inte allt för mycket kunskap. Innan jag såg laborationskoden trodde jag t.ex. att koden var mycket mer komplicerad än den var. Givetvis förstår jag att det krävs en högre kunskapsnivå när man vill programmera objektet att utföra mer avancerade uppgifter. Jag anser att kunskaperna jag erhållit från denna laboration är byggstenarna för mina framtida studier. Med denna bas kommer jag ha större förståelse och kan lättare ta till mig ny information och därmed bygga vidare på mina kunskaper, kunskaper som jag kommer att applicera i arbetslivet som civilingejör inom IT. Åsikter om programvaran och NXC Bricx Command Center var ganska lätt att förstå sig på för att vara första gången jag använde det, visserligen har vi inte utforskat de funktioner och möjligheter programmet har. Drivrutinsprogrammet skötte sig självt, det var bra. Det skulle visserligen installeras utan att roboten var ikopplad, vilket vi gjorde så det blev inga problem. Angående själva språket så var det inte något konstigt, jag har för flera år sedan under gymnasiet studerat kursen Programmering A där vi använde C++, och jag måste säga att det mesta känns bekant. Kort analys av tillvägagångssätt Jag tycker att det var en bra idé att tillsätta parprogrammering som ett krav, på så sätt blir det inte så att endast en person i gruppen gör allt jobb och lämnar sin labbpartner utan någon ny kunskap. Istället tvingas man jobba tillsammans och hjälpa varann om det är något i koden man inte förstår. Referenser Labb-PM Tillgänglig: https://bilda.kth.se/courseid/8498/content.do?id=19150198 II1310 Föreläsning 2 - Rapportskrivning och ordbehandling.pdf Tillgänglig: https://bilda.kth.se/node.do?id=19464167 ICT-institutionen Kungliga Tekniska Högskolan Sida 5 av 7

Bilaga 1 Skärmavbild av dagbok på KTH Social. ICT-institutionen Kungliga Tekniska Högskolan Sida 6 av 7

Bilaga 2 Tabell 1. Radnummer Ny kod efter ändringar Kommentarer 2 #define SpeedSlow 54 Från början var denna ställd till 80 vilket var för snabbt. 3 #define SpeedFast 74 Från början var denna ställd till 100 vilket var för snabbt. Ändringarna av radnummer 2 och 3 var essentiella då många av robotens rörelser upplevdes mycket ryckiga när det gick för snabbt. Roboten hann inte med att svänga och kom snabbt av banan. Gick det långsammare blev rörelserna ganska mjuka men det gick inte så snabbt framåt, efter lite testande kom vi fram till att 54/74 var det snabbaste den kunde åka utefter våra krav på mjuka rörelser. 30/60, upplevdes hackigt. 55/70, fungerade okej, men en differens på 20 fungerade bäst (55/75). 39 void printnamestoscreen(stri ng groupmembers[]) Variabeln groupmembers har ersatt names, som inte var definerad någonstans. Det var även groupmembers som innehöll våra namn. 43 for(i = 0; i < ArrayLen(groupMembers); i++) 45 TextOut(0, (LCD_LINE2 - (8*i)), groupmembers[i]); Men man hade nog kunnat göra tvärt om genom att ersätta alla groupmembers med names Variabeln groupmembers har ersatt names. (8*i) har ersatt tidigare (8*i - 16). Koden som ersattes gjorde så att gruppmedlemmarnas namn blev förskjutna med minus 16 vilket kunde innebära att alla namn inte visades på robotens display. 68 lightintensity = SensorRaw(IN_3); 84 OnFwd(OUT_A, SpeedFast); 92 OnFwd(OUT_B, SpeedSlow); 97-102 /* void dance() 98 { 99 OnFwd(OUT_A, 87); 100 OnFwd(OUT_B, 20); 101 Wait(SEC_3); 102 } */ Variabeln groupmembers har ersatt names. Ändrat SensorRaw(IN_1) till (IN_3) eftersom att ljussensorn är inkopplad genom input 3. Ersatte tidigare speedslow. Ersatte tidigare speedfast. Funktionen där koden för radnummer 84 och 92 ingår specificerade hur robotens högra respektive vänstra motorer (till hjulen) skulle agera när ljussensorn registrerade mer eller mindre ljusintensitet. Stycket kommenterades bort då funktionen dance inte tillför något till den angivna uppgiften. Det hade även fungerat med att ta bort allt utom radbrytninarna. 114 Tog bort dance(); från main då den funktionen är bortkommenterad och inte ska köras alls. ICT-institutionen Kungliga Tekniska Högskolan Sida 7 av 7