Programmeringslaboration med LEGOrobot

Relevanta dokument
Labbrapport - LEGO NXT Robot

LEGO Mindstorm-robot

PROGRAMMERING AV LEGO-ROBOT VIA NXC

Laboration - Programmering av LEGO Mindstorm robot

Laborationsrapport av robotprogrammering

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

Programmera Lego Mindstormsrobotar

Programmering av en Lego robot

Lego Mindstormprogrammering

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Labrapport: Programmering i NXC Programmera LEGO Maindstorm med NXC

Laboration i datateknik

Programmering med NXC Lego Mindstorm

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

Introduktion i programmering med språket NXC

[Introduktion till programmering ]

Laboration i datateknik

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

Programmering av LEGO NXT Robot

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

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

Labbrapport. Introduktionskurs i datateknik (II1310) Stefan Dalarsson,

Felsökande av en Lego Mindstorm robot

LEGO NXT Robotprogrammering

Simon Johansson Introduktionskurs Datateknik 1310

Simon Boström Introduktionskurs i Datateknik

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

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

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

Programmering av LEGO NXT Robot

Introduktion till programmering med hjälp av Lego Mindstorm

Robotprogrammering felsökning & analys.

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

Programmera LEGO NXT

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

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Felsökning av mjukvara

Programmera en NXT Robot

Labbrapport LEGO-robot linefollower

[Introduktionskurs i Datateknik]

Praktisk programmering

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

Laborationer i SME094 Informationsteknologi I för

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

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

Kojo med Inga Ingenjör. Lär dig programmera Nybörjaruppdrag

Guide för frågeassistenter

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

Guide för frågeassistenter

Extramaterial till Matematik X

TRUST USB VIDEO EDITOR

Aktivitetsbank. Matematikundervisning med digitala verktyg II, åk 1-3. Maria Johansson, Ulrica Dahlberg

Roboten. Sida 1 av 11

Programmering. Analogt och med smårobotar. Nina Bergin

Extramaterial till Matematik Y

TDP001/TDP002. Introduktionsföreläsning. Eric Elfving Institutionen för Datavetenskap (IDA)

LPP Programmering. Syfte, övergripande mål Lära känna och kunna utföra enkla programmeringar i Scratch samt Lego Mindstorms.

Installation av WinPig Slakt

KOMPLEMENT TILL MATTE DIREKT BORGEN UPPLAGA

Programmering F-3. -dansprogrammering. Del 1

Hur fungerar en dator?

Programmering av. PADDY mini

Klassrumsprojekt programmering - Digitalt lärande

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

Edison roboten som går at bygga ihop med LEGO

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

Evaluation Summary - CDT104 Grundläggande Webbdesign HT07 Dan Levin

Digitalt lärande och programmering i klassrummet

Extramaterial till Matematik Y

Blockly är en av apparna som används för att styra roboten Dash. Den är väldigt enkel i sin utformning och kan med fördel användas av yngre barn.

Projektmaterial. Birkagårdens folkhögskola

Lär känna Edison. Det här är Edison, den programmeringsbara roboten.

Programmeringsteknik I

1. Vi satte ut ett körblock med standardinställningar 2. Ett till körblock sattes men varaktighet en ställdes istället på 3,55 rotationer (se bild)

LEGO Education WeDo 2.0 lärarhandledning

Del 1 och 2 HTML/CSS. Webbutveckling Laboration 1 Nicklas Bostedt

Instruktion till. PigWin PocketPigs. Del 1 - Installation

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Forskningsrapport Söråkers Champions 2014

GRUNDKURS I C-PROGRAMMERING

Programmera i teknik - kreativa projekt med Arduino

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

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

Instruktioner för att installera och använda SpeedFeed. 1. Installation direkt på din dator.

LABORATION 1 Pingpong och Installation av Server 2008 R2

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

Copy Cat Laboration 4

Programmering. Den första datorn hette ENIAC.

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

Användarguide för 3M Online Center

Lego Robot [ ] [ ] [ ]

Uppdatering till Windows 8.1 steg för steg-guide

Installation av WinPig

ENKEL Programmering 3

LEGO MINDSTORMS Education EV3

Så här använder du kameran första gången Kapitel 1 Inledning 2 Säkerhet S E 3 Installation 3.1 Avinstallera gamla drivrutiner och enheter

KURSUTVÄRDERING CD5560 FABER VT2003

Bruksanvisning Bläckfisken USB

Transkript:

KUNGLIGA TEKNISKA HÖGSKOLAN Programmeringslaboration med LEGOrobot Programmeringsspråk: NXC Ulrica Flemström 2013-10-04 ulricaf@kth.se Introduktionskurs i datateknik, II1310

Sammanfattning Laborationen gick ut på att lära känna programmernigsspråket NXC genom en LEGOrobot. Syftet var att granska, testa och ordna upp programmeringskoden. Uppgiften var att få roboten att följa en svart linje, spela upp en melodi samt att vsia upp laborationsdeltagarnas namn på skärmen. För att lösa uppgiften krävdes det att hitta lösningar till några problem. Roboten rörde sig i cirklar vilket den inte skulle göra. Problemet berodde på den stora hastighetsskillnaden mellan motorerna. Sedan var ljussensoren ej ikopplad till rätt port vilket visade sig senare. Länge analyserades det och diskuterades vad som kunde vara orsaken bakom problem som stöttes på, men genom bra samarbete, handledning och informationssökning på internet löste det sig. Vi kunde lösa uppgiften genom att: - minska hastighetsskillnaden, - genom att få ljussensoren att uppfatta vilken färg underlaget hade där roboten körde, - genom att ändra startplaceringen. Innehållsförteckning 1. Inledning... 3 1.1 Bakgrund... 3 1.2 Syfte och målsättning... 3 2. Genomförande...5 4. Analys... 6 5. Diskussion...7 Referenser... 9 Bilagor... 10 Informations och Nanoteknik Kungliga tekniska högskolan Sida 2 av 10

1. Inledning I denna rapport var det huvudsakliga syftet att lära känna begreppet programmering. Genom att undersöka en LEGO Mindstorms-robots beteende, beroende på vad som skrevs i koden, kunde roboten klara av uppgiften, att följa den svarta linjen. 1.1 Bakgrund Frågeställning: Varför är det viktigt att kunna programmera? Inför det kommande yrkeslivet är det viktigt att kunna programmera. I rollen som ingenjör är det lönsamt att kunna hantera programmeringspråk som exempelvis NXC. På ICT-skolan i Kista är programmering en viktig del i utbildningarna. Därför är det bra att bekanta sig med programmeringen så tidigt så möjligt för att skapa en förståelse för programmeringens funktioner och konsekvenser. Detta görs genom att studera LEGOrobotens beteende och egenskaper under laborationstillfället. 1.2 Syfte och målsättning Syfte Syftet med laborationen var att ge insikt i vilka IT-system som används inom ingenjörsyrket. Genom parprogrammering testades och felsöktes kod som gav varierande resultat vid testkörning. Laborationen gav träning i programmering och skapade en förståelse för vad begreppet programmering innebär. Utöver programmeringen skulle en rapport skrivas för att mer detaljerat beskriva utförandet av uppgiften. Rapporten bekräftar förståelsen bakom laborationen. Målsättning Målet med uppgiften var att roboten skulle klara av att följa den svarta tejpen utan att avvika från den. Därefter skulle laborationsdeltagarnas namn visas upp på skärmen samt att roboten skulle spela upp en kort melodi. 2. Genomförande Parprogrammering Laborationen genomfördes parvis. Innan laborationstillfället hade laborationsdeltagare parat ihop sig två och två. Michelle Rosengren och jag arbetade tillsammans. Arbetet mellan oss delades upp så till vida att en granskade koden medan den andra skrev ner de förändringar som gjordes i koden. Till exempel togs viss kod bort medan annan skrevs om eller förflyttades. Informations och Nanoteknik Kungliga tekniska högskolan Sida 3 av 10

Emellanåt testkördes roboten för att kontrollera om vi var inne på rätt spår efter att viss kod skrivits om. Totalt testkördes roboten ca fem gånger. Metod Material Till förfogande fanns; en LEGO Mindstorm-robot med tillhörande sladd. Anvisningar stod nedskrivna på tavlan. Steg nummer ett var att installera en drivrutin. Om frågetecken uppstod fanns länkar samlade på kurshemsidan i Bilda. Handledaren fanns tillgänglig och gav ledtrådar och vägledning om vi fastnade. Nedladdning och installation av programvara: 1. Programvaran BricxCC (Brincx Command Center) installerades på en av laborationsdeltagarnas laptop från hemsidan: http://bricxcc.sourceforge.net/. (Förklaring av BricxCC :BricxCC är en programmeringsmiljö som gör det enkelt att skriva i program, att ta emot information från roboten och att få den att utföra olika kommandon som att stanna eller starta till exempel.) 2. En ny fil skapades i BricxCC genom att trycka på New File. Roboten var förprogrammerad. För att kunna avläsa den förprogrammerade koden behövdes drivrutinen LEGO NXT. Den fanns att hämta på kurshemsidan. 3. Drivrutinen installerades på Windows. I BricxCC användes programmeringsspråket NXC. NXC var något helt nytt, därför kom pdf:en "Programming LEGO NXT Robots using NXC.pdf" till hjälp, som skrivits ut i pappersform. 4. Efter att ha läst igenom pdf:en och diskuterat instruktionerna på tavlan testade vi oss fram. Praktiska moment Under laborationen En genomgång av Lab-PM gav en översikt. Examinationsmålen togs extra hänsyn till. Som första steg lästes anvisningarna på tavlan igenom när all programvara hade installerats. På så vis bildades en uppfattning om uppgiftens: mål, syfte och vad vi skulle få ut av laborationen. Den befintliga koden studerades nogaför att hitta den kod som var felaktig. För att identifiera felen testkördes roboten en gång. Då roboten endast rörde sig i cirklar behövdes dens rörelsemönster brytas. Skillnaden på mörkt och ljust underlag behövde roboten uppfatta. Efter laborationen När laborationen var över var uppgiften att skriva en kort reflektion över hur det hade gått. Reflektionen skrevs i KTH Social. Därefter skulle en skärmdump göras av reflektionen som skrevs som ett blogginlägg. Blogginlägget gjordes om till en bilaga i denna rapport. Kodgranskning 1. Port byttes från IN_1 till IN_3. 2. Namnen Michelle Ulrica skrevs in istället för gruppmedlemmar. Ett fel vi gjorde tidigare var att skriva Michelle, Ulrica. Dock togs kommat bort då båda namnen ej visades på Informations och Nanoteknik Kungliga tekniska högskolan Sida 4 av 10

robotens skärm.(kommentar: När namnen skrevs in var det viktigt att skriva dem tillsammans i samma sträng inom samma citattecken. ) 3. Kod togs bort, exempelvis: #define TOPTHRESHOLD 40. (Kommentar: Då hade vi ännu inte kommit på att det var onödigt att ta bort kod när uppgiften egentligen var att felsöka den. Egentligen gjorde det ingen märkbar skillnad att ha tagit bort #define TOPTHRESHOLD 40.) 4. Annan kod skrevs om, som SpeedSlow 40 och Speedfast 70. 5. En bild ritades upp över hur roboten skulle börja åka från sitt utgångsläge och skrev om: (OUT_A, SpeedFast) och (OUT_B, SpeedSlow) Om det fanns ord vi inte förstod slog vi upp dem på hemsidan: NXC Programmer s guide (API). Ordet sträng var abstrakt men blev mer konkret då NXC Programmer förklarar det i följande exempel: string msg = "Testing"; Källa. 3. Resultat Tabellen visar den kod som togs bort eller skrevs in som ny kod. I kommentarsfältet förklaras de ändringar som gjorts. Några kodrader raderades medan andra döptes om eller ersattes med ny kod. Vi lyckades med rapporten med hjälp av de kodförändringar som visas nedan i tabellen. Radnummer Ny kod Kommentar 42 Michelle, Ulrica istället för gruppmedlemmar, som sedan blev Michelle Ulrica. Gruppmedlemmarnas namn skrevs in. 76 (IN_1) -> (IN_3) Byter port för ljussensoren då ljussensoren ej reagerade på skillnaden mellan ljus eller mörker. 80 #define TOPTHRESHOLD 40 Kommandot togs bort då vi inte visste vad den fyllde för funktion. 83 SettingIntensity Även denna togs bort för att vi ej visste vad den innebar. 3 SpeedSlow 40, SpeedFast 70 Hastigheterna för de olika motorerna förändrades. 99 BotThreshold bytte namn till TopThreshold Då roboten fortfarande åkte runt i cirklar troddes det att felet låg på rad 99. 95 OUT_A SpeedFast Det behövdes en snabb och en långsam motor för att roboten skulle kunna svänga och inte Informations och Nanoteknik Kungliga tekniska högskolan Sida 5 av 10

fortsätta i cirklar. Radnummer Ny kod Kommentar 97 OUT_B SpeedSlow Vidare fortsatte det att testas hur snabb roboten skulle köra. 1 SpeedSlow 40 Testkörning visade att hastigheten var för snabb. Hastigheten ändrades. 3 SpeedFast 45 Det skedde en hastighetsökning. 95 OUT_A Namn byttes på OUT_A och OUT_B för att lättare förstå ordens innebörd. 101 OUT_B Samma här. Slutsats Så som kan avläsas i tabellen var hastigheten 45 en lagom hastighet för roboten då den inte var för snabb eller långsam. Den slutgiltiga hastighetsskillanden mellan motorerna var 5. Resultatet som gavs var att robotens rörelser berodde på hur motorerna var sammankopplade, hur stor hastighetsskillanden var mellan motorerna och var roboten startade. 4. Analys Byte av port Porten för ljussensoren var fel vilket korrigerades ganska tidigt. Om vi hade kommit på detta tidigare hade vi blivit färdiga snabbare. När vi kopplade om sladdarna var problemet löst. Vi trodde att roboten hade rört sig i cirklar eftersom ljussensorn ej hade uppfattat den svarta linjen, vilket visade sig vara rätt. Startplacering Ljussensoren var inte längre ett olöst problem. Roboten hade fortfarande problem med att hitta den svarta linjen. Anledningen bakom detta trodde vi var robotens startplacering. Roboten startade till vänster om linjen så att ljussensoren ej uppfattade linjen. Istället stod roboten så att den behövde svänga 90 grader innan den hade linjen precis under sig. Startplaceringen försvårade situationen för oss eftersom vi behövde tänka ut hur roboten skulle vrida sig för att hitta den svarta linjen utifrå robotens startposition. Till sist valde vi att placera roboten rakt på linjen för att göra det simplare för oss själva. Att få roboten att försöka vrida på sig visade sig vara för komplicerat. Våra namn Som nästa steg ville vi ta reda på varför robotens skärm ej uppfattade Michelles namn. Roboten visade upp mitt namn men inte Michelles. Orsaken bakom var att vi skrivit Ulrica, Michelle istället för Ulrica Michelle. Vi lärde oss alltså att roboten ej kunde uppfatta komman. Informations och Nanoteknik Kungliga tekniska högskolan Sida 6 av 10

Robotens rörelsemönster Därefter ville vi lära oss mer om robotens rörelsemönster. Varför rörde den sig i cirklar? Efter flera omstarter drogs slutsatsen att problemet låg i att motorrna hade oliak hastigheter inställda. Hastighetsskilladen gjorde att roboten inte kunde röra sig på annat sätt än i cirkalr, trodde vi. Därför minskade vi skillanden mellan hastigheterna och till slut bestämdes det att de slutgiltiga hastigheterna skulle vara 45 och 40. Förståelse av kod Laborationstillfället visade att omstrukturering av koden var den stora utmaningen. Syftet och målet var alltså inte att skriva egen kod. Det tog tid att inse eftersom vi inte förstod det på en gång under lektionen. Ett problem var alltså att förstå sig på vad koden innebar och varför den var skriven i en viss följd. Resultat Vi kunde lösa uppgiften genom att: - minska hastighetsskillnaden, - genom att få ljussensoren att uppfatta vilken färg underlaget hade där roboten körde, - genom att ändra startplaceringen. 5. Diskussion Parprogrammering Parprogrammeringen gick bra. Båda deltog aktivit, ifrågsatte kod vi inte förstod, tog initiativ till kodföränding och läste in oss på olika hemsidor i lab-pm för att skapa förståelse. Ingen av oss hade någon tidigare erfarenhet av programmering men kunde slutföra uppgiften efter 2,5 timme vilket vad bra. NXC Vi fick ett bättre grepp om vad programmering innebär, hur kod hanteras och vilka komponenter som behövs för att en koden ska visa true eller false, till exempel. NXC var ett bra programmeringsspråk att börja med. Dock tror jag ej att det hade gjort någon större skillnad att börja med programmeringssrpåket C++ istället, eftersom ingen av oss tidigare hade programmerat. Det som hade påverkat oss negativt var om hjälplänkarna ej hade funnits tillgängliga. Då hade laborationen varit mycket svårare att slutföra. BircxCC BircxCC var en nybörjarvänlig programmeringsmiljö att bekanta sig med. Miljön gav en översikt och var strukturerad i rader vilket gjorde det enklare att identifiera den kod som fanns sedan tidigare. Positivt var att raderna var numrerade vilket gjorde det enkelt att veta veta vilken rad med kod som låg var. Informations och Nanoteknik Kungliga tekniska högskolan Sida 7 av 10

Frågor Sambandet mellan motor A och B var svårt att förstå i början. En första tanke var att motor A skulle vara jättesnabb och B långsam. Följande frågor ställdes: 1. Skulle motor A samarbeta med motor B? 2. Skulle hastighetsskillnaden mellan SpeedFast och SpeedSlow vara stor eller liten? Tack vare handledning gavs en bra förklaring till varför roboten cirkulerade. Villkoren för motorena var anledningen bakom och studerades därför på djupet. Frågorna var huvudsakligen de som tog längst tid att besvara. Om frågorna kunde besvaras, var uppgiften löst. Roboten behövde ändra sitt rörelsemönster från att cirkulera runt sig själv till att följa linjen. Ljussensoren Ljussensoren han inte märka skillnaden på ljus och mörker. En lägre hastighet möjliggjorde för ljussensoren att uppfatta var tejpen var utplacerad. Efter några testkörningar blev hastighetsskillnaden 5. Informations och Nanoteknik Kungliga tekniska högskolan Sida 8 av 10

Referenser Sm.luth.se, 2013-09-02, sökord: programmeringsuttryck. http://www.sm.luth.se/csee/courses/d0009e/lectures/lecture02.pdf En annan källa som användes var Labb-PM, exempelvis: NXC Programmer s guide (API) Länken för Labb-PM: https://bilda.kth.se/courseid/10164/content.do?id=21060042 Exemplet om strängens definition: http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/string.html Informations och Nanoteknik Kungliga tekniska högskolan Sida 9 av 10

Bilagor Här är ett skärmdump på dagboksinlägget. Informations och Nanoteknik Kungliga tekniska högskolan Sida 10 av 10