• No results found

Kungliga Tekniska Högskolan Programmering av NXT robot

N/A
N/A
Protected

Academic year: 2022

Share "Kungliga Tekniska Högskolan Programmering av NXT robot"

Copied!
6
0
0

Loading.... (view fulltext now)

Full text

(1)

 

Kungliga Tekniska Högskolan   

             

   

Programmering av NXT­robot 

   

Niklas Lindqvist  30/8­15  nlindqv@kth.se 

Introduktionskurs i datateknik II0310 

 

                             

(2)

Sammanfattning 

 

Programmeringskunskap är idag en eftertraktad kunskap som är viktig för en civlingenjör inom data  och IT att kunna. Ett första steg till att lära sig programmera kan vara att med hjälp av en halvfärdigt  skriven kod programmera en NXT­robot till att följa en linje följt av att skriva ut önskad text på  robotens skärm vilket denna rapport kommer att handla om. Syftet med laborationen är att 

introduceras till programmering på ett roligt och lärorikt sätt. Resultatet blev en programkod som fick  en NXT­robot att följa en linje samt skriva ut önskad text på skärmen när den krockade i en vägg. Det  var både utmanade och roligt att lösa uppgifterna och det var väldigt lärorikt för någon som knappt  eller aldrig har programmerat förut. 

   

Innehållsförteckning 

1. Inledning………...2 

1.1 Bakgrund………...2 

1.2 Syfte och målsättning………....2 

2. Genomförande………..2 

3. Resultat……….2 

4. Analys………...3 

5. Diskussion………4 

Referenser……….5 

Bilagor………...5   

                                           

(3)

1. Inledning 

 

Denna rapport kommer att handla hur en NXT­robot ska programmeras till att följa en linje. 

Programmeringen kommer att ske i programmeringsspråket NXC som är ett språk bra tillämpat för  denna typ av uppgift då det finns många inbyggda funktioner och moduler som kommer att användas.  

   

1.1 Bakgrund 

 

Programmering är idag ett redskap som är mycket eftersökt i vårt samhälle som är så IT­baserat som  det faktiskt är och det är idag inte mindre än ett måste för en civilingenjör inom informations­ och  datateknik att kunna. I denna laboration kommer programmeringsspråket NXC användas. NXC är ett  programmeringsspråk som är en begränsad version av C men där även flera funktioner och moduler  finns inbyggda som är fördelaktigt vid programmering av t ex NXT­robotar.  

 

1.2 Syfte och målsättning 

 

Syftet med denna laboration är att introduceras till programmering på ett roligt sätt genom att 

analysera, felsöka och redigera i en förskriven NXC­kod. Där målet var att få NXT­roboten att kunna  följa en linje på golvet samt att den ska skriva ut önskad text (i det här fallet våra namn) på displayen,  när NXT­roboten går emot en vägg eller annat föremål. Ytterligare ett syfte är att få förståelse för hur  en liten felskrivning i koden kan ge stora konsekvenser på programmet när det sedan exkveteras och  därmed redan från början få ett noggrannhetstänk som krävs vid mer avancerad programmering. 

 

Ytterligare mål jag har med denna laboration är att få en grundläggande förståelse över hur 

programmeringkod kan användas för att kontrollera och styra hårdvara i form av t ex en NXT­robot. 

 

2. Genomförande 

 

Laborationen börjades med att Lab­PM:et lästes igenom och  material i form av programvara 

installerades på en datorn med operativsystemet Windows 8.1. Sedan studerade vi roboten och såg till  så att alla sladdar satt som de skulle. Detta gjordes genom att se till att de kopplades enligt mallen som  fanns i en förinstallerad fil på NXT­roboten. Därefter skumlästes programkoden igenom för att få en  överblick av hur programmet bör fungera. Efter det testkördes programmet och eventuellt 

felmeddelande kunde läsas och åtgärdas.  

 

När programmet sedan kunde köras utan felmeddelanden kopplades roboten in i datorn. 

Programkoden överfördes till roboten för att kunna testköras och se vad som fungerade som det skulle  och vad som måste ändras för att nå det givna målet ­ att roboten ska kunna följa en linje. 

 

3. Resultat 

 

Resultatet av denna laboration blev en NXT­robot som vid start av programmet satte igång båda  motorerna och körde rakt fram tills det att den korsade en linje på golvet. Då började roboten istället 

(4)

följa linjen tills dess att den åkte in i väggen. När den åkte in i väggen reagerade touch­sensorerna och  texten “Gruppmedlemmar: Harald, Niklas” skrevs ut på skärmen.  

 

För att åstadkomma detta resultat gjordes följande ändringar i originalkoden: 

   

Tabell 1 

Radnummer  Ny kod  Kommentar 

34  string groupMembers[] = {  Vi ändrade ”int” till ”string”, eftersom  printNamesToScreen­funktionen vill ha en  string som argument och inte en int. 

35, 36  35. ”Harald” 

36. ”Niklas” 

Vi ersatte 1 och 2 med våra namn. 

46  TextOut(0, (LCD_LINE2 ­ i),  names[i]); 

För att namnen ska printas på rätt rad.  

76  lightIntensity =  SensorRaw(IN_3); 

Tidigare stod det ”(IN­1)” istället för 

”(IN_3)”. Ljussensorn var kopplad på input  3 på LEGO­roboten.  

94  OnFwd(OUT_A, SpeedFast);  Motor A blev starkare vid else­villkoret. 

98  OnFwd(OUT_B, SpeedSlow);  Motor B blev svagare 

108    Precedes(readTouchSensors, followLine); 

denna rad flyttades ner till rad 115   

Utöver de ändringar som angivits i Tabell 1 togs funktionen dance(); bort samt rad 116 kunde tas bort  då dessa funktioner ej hörde till den givna uppgiften. 

     

4. Analys 

 

Vid en analys av resultatet kan man se att ingen ändring som gjorts har upprepats flera gånger på olika  ställen. Ändringen på rad 34 gör så att funktionen returnerar en lista av strängar istället för en lista av  integers. Detta var fördelaktigt i denna situation för att funktionen printNamesOnScreen som senare  printar ut namnen på skärmen tar in listan groupMembers som argument men förväntar sig att listan  ska innehålla strängar och inte integers. På rad 35 och 36 gjordes en ändring från 1 och 2 till “Harald” 

och “Niklas”. Det som eventuellt kunde blivit fel är om man missat att sätta namnen inom  citationstecken då namnen istället hade blivit tomma, odefinierade.  

 

Ändringen i koden på rad 46 gjorde vi för att få roboten att skriva ut gruppmedlemmarnas namn på  skärmen. Vi ändrade från (LCD_LINE2 ­ (8*i­16)), names[i]) till (LCD_LINE2 ­ i), names[i]) vilket  blev en lösning. Men med tanke på att LCD_LINE2 har värdet 48 (som är angivet högst upp i koden) 

(5)

och LCD_LINE3 värdet 40 bör lösnigen istället varit (LCD_LINE2 ­ 8*i), names[i]) då varje nytt  namn i listan skulle skrivits 8 (1 rad) under föregående. Min hypotes till att det trots detta fel  fungerade är att varje LCD_LINE har ett intervall på 8 vilket gör att LCD_LINE2 har värdet 48­55,  dvs att allt som skrivs ut på rad 48­55 hamnar på andra raden på robotens skärm. Med denna hypotes  får LCD_LINE3 intervallet 40­47 och då andra namnet i listan gavs av (LCD_LINE2 ­ 1 = 47  stämmer det. Hade vi däremot haft tre namn i listan hade namn nr 3 då fått värdet 46 och antagligen  också hamnat på LCD_LINE3. 

 

På rad 76 ändrade vi så att roboten skulle läsa av lightIntesity:n från input 3 istället för input 1 då  lightSensorn var inkopplad till input 3 på roboten. Sedan på rad 94 respektive 98 ändrade vi så att om  roboten är på väg ut från linjen på höger sida så kommer höger motor att gå på speedFast medan om  den är på väg ut på vänster sida kommer vänstra motorn att gå på speedFast.  

 

Den sista ändringen som gjordes var att flytta ner raden där funktionen followLine låg så att  kalibreringen av de olika sensorerna görs innan roboten börjar åka.  

 

Då laborationen bestod av två uppgifter och vi löste båda blev resultatet som vi hade hoppats och trott  på, en robot som kunde följa en linje och skriva ut en viss text på skärmen efter att den krockat i  väggen.  

 

Generellt gick allt bra med laborationen trots att allt inte var självklart från början med hur man skulle  göra, vilket gjorde det till en mycket rolig utmaning. Genom att arbeta sig igenom koden systematiskt  och samarbeta fick vi en fungerande programkod och en full förståelse över vad allt i programkoden  hade för funktion.  

 

5. Diskussion 

 

Laborationen var mycket lärorik och har uppfyllt både syfte och mål då jag i början av laborationen  inte förstod någon större del av programkoden, men när båda uppgifterna var lösta tittade jag igenom  hela koden igen och har nu full förståelse för vad alla olika funktioner gör och står för. Däremot tror  jag inte att jag har fått tillräcklig kunskap för att kunna göra ett liknande program helt på egen hand,  då jag inte riktigt vet hur kommandon som “SetSensorMode” & “SetSensorType” fungerar och ska  användas.  

 

De lösningsmetoder vi använde oss av var att först av allt skumläsa programkoden för att försöka få en  bild av hur programkoden var uppbyggd. Därefter testkörde vi programmet i datorn för att se om något  felmeddelande skulle dyka upp, vilket det gjorde. Sedan felsökte vi koden tills det att programmet gick  att köra utan felmeddelanden. Därefter synkade vi programkoden till NXT­roboten och testkörde den  där. Därefter turades vi om att läsa igenom koden och föreslå ändringar som vi då samtidigt kunde  motivera för varandra, hur vi tänkte med den eventuella ändringen. Ett problem som däremot uppstod  var att vi från början tänkte att “SpeedSlow” och “SpeedFast” inte spelade någon större roll utan vi  tänkte oss att roboten skulle köra på ‘AB’ när den gick längs linjen och sen antingen ‘A’ eller ‘B’ när  den höll på att avvika från linjen, dvs att en motor skulle slå av och roboten skulle vrida sig helt. Men  när vi gjort ett antal försök med den idén utan önskat resultat fick vi tänka om. Nu i efterhand var det  självklart att endast kraften i robotens motorer skulle justeras vid avvikelse från linjen.  

 

(6)

Jag tror definitivt att jag kommer ha användning av de kunskaper jag fått under laborationen och  tillsammans med de förkunskaper jag hade i programmering tror jag att jag har en väldigt bra grund  för fortsatta studier och redan nu ser jag mycket fram emot att lära mig mer och i framtiden även  kunna jobba med något som i någon form rör programmering.   

 

Referenser   

Lab­PM ​https://bilda.kth.se/courseId/12708/content.do?id=23767349   

Bilagor 

 

References

Related documents

utbildningsprocess som finns i rutinen ”Universitetsövergripande rutin för hållbar utveckling i utbildning inom ramen för miljöledningssystemet” V-2019-0216. Samt beskriva

[r]

På Arkitekturprogrammet skulle majoriteten (60 procent) välja samma utbildning idag men kvinnor, de med annat modersmål än svenska och yngre studenter skulle i betydligt högre

Ändringar gjordes för kodrader som verkade felaktiga och programmet testades – efter kompilering och nedladdning – för att fastställa om dess önskade funktion uppnåtts..

• Grundläggande visa förmåga till systemtänkande genom att anlägga systemperspektiv på ett produktionssystem med avseende på olika aspekter på hållbarhet (ekonomi, arbete och

Sensorn var ju givetvis också kritisk för att roboten skulle fungera så det var nödvändigt att kontrollera att roboten får in datan från sensorn som var kopplad till Input 3, i

Andra företag med liknande finansiering av verksamhet vid KTH är Elforsk AB , från vilket KTH fått intäkter som uppgår totalt till knappt 15 mnkr (knappt 14 mnkr för

Informationsinsatser har genomförts under 2009 för att öka rekryteringen av kvinnliga studenter till forskarstudier. Inom en del områden, till exempel kemi, kemiteknik och bioteknik,