NXT ROBOT - LABORATION

KUNGLIGA TEKNISKA HÖGSKOLAN
NXT ROBOT - LABORATION
En preliminär studie om NXT Robot rörelser i förhållande till olika
ljusintensiteter och en användning av NXC som programmeringsspråk.
ERIC SEING
[email protected]
INTRODUKTIONSKURS I DATATEKNIK
II0310
28/8-2015
NXT Robot Laboration
Eric Seing
28/8-15
SAMMANFATTNING
Laborationen var ett tillfälle för att testa ens teoretiska kunskaper i en praktisk miljö.
Laboranterna fick samarbeta i par och använda NXC som programmeringsspråk. Detta för att
få en robot att följa ett svartmarkerat område formad som en båge med hjälp av en ljussensor
som ändrade riktning beroende på ljusintensiteten. Vid kontakt av vägg skulle roboten printa
ut namnen på en skärm och med samma kod kunna följa linjen tillbaka till start. En förberedd
kod skulle ändras så att roboten utförde dessa uppgifter korrekt. Åtgärder behövde göras
parallellt som problem uppstod. Ett unikt problem uppstod även under laborationens gång
och behövde undersökas, roboten antog att svart var ljust och ljust var svart. Detta var ett
stort problem som med hårt arbete blev löst och eventuellt lyckades vi med den angivna
uppgiften.
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 2 av 13
NXT Robot Laboration
Eric Seing
28/8-15
INNEHÅLLSFÖRTECKNING
SAMMANFATTNING....................................................................... 2
1. INLEDNING ............................................................................. 4
1.1 BAKGRUND ....................................................................... 4
1.2 SYFTE & MÅLSÄTTNING ........................................................ 4
2. MATERIAL & METODER............................................................ 5
2.1 FÖRBEREDELSE ................................................................... 5
2.2 UTFÖRANDE ...................................................................... 6
3. RESULTAT .............................................................................. 8
4. ANALYS ................................................................................. 9
5. DISKUSSION ......................................................................... 10
6. REFERENSER ......................................................................... 12
7. BILAGOR.............................................................................. 13
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 3 av 13
NXT Robot Laboration
Eric Seing
28/8-15
1. INLEDNING
NXT robot laborationen ska vara en grund och ett smakprov på vad de kommande kurserna
har att erbjuda inom Civilingenjörs-IT inriktning, som även ska testa kunskapen inom
programmering, förståelse för koppling av motorer samt korrigering av en förberedd NXC-kod
(Not eXactly C som är väldigt likt ett annat programmeringsspråk, nämligen C). Laborationen
sker i par där båda laboranterna skall vara aktiva och bidra med den kunskap som delats ut
under två veckors introduktion av ämnet. Laboranterna ska åtgärda eventuella hinder som
dyker upp och motarbetar målet med laborationen, nämligen att få en NXT robot att följa en
linje formad som en båge.
1.1
BAKGRUND
En stor del av ingenjörens roll i samhället är problemlösning. Allt laborativt arbete har ett
syfte i sig, dessa laborationer ska stärka nyblivna ingenjörers sätt att tänka och lösa vardagliga
problem som kan dyka upp. Denna laboration ger inblick i programmeringens värld och det
första steget inom problemlösning.
1.2
SYFTE & MÅLSÄTTNING
Laborationen i sig ska främst ge prov på förståelse och samarbete. Eftersom båda i varje
grupp skall vara aktiva gäller det att var och en skall hjälpa till att komma in i mål. Här sätts
all den kunskap som man tidigare gått igenom på föreläsningar i praktik. Förstå teorin och
kunna tillämpa den i en vardaglig situation är en förutsättning för en ingenjör. Själv var mitt
egna mål att hitta en medlaborant som var villig att samarbeta, samt även kunna klara av
uppgiften som handledaren delade ut. Detta på ett så lugnt och effektivt sätt som möjligt så
att inga problem uppstår, och eftersom detta blir den första gången jag programmerar
hoppas jag på utökad förståelse inom teknikens värld.
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 4 av 13
NXT Robot Laboration
2.
Eric Seing
28/8-15
MATERIAL & METODER
Figur 1, Laborationsuppgift
För att kunna klara av laborationen behövs en dator, helst en Windows-dator som kan
använda sig utav programvaran BrickCC som finns tillgänglig på KTH Bilda. En NXT Robot med
en kabel som kan kopplas mellan en NXT Robot och en dator (För att kunna överföra en NXCkod till själva roboten). Till själva laborationen delades det även ut ett kommentarsblad som
man kunde anteckna på när man utförde eventuella kodändringar i dokumentet
”linefollower” (En förberedd kod till roboten där många fel ingår som skall rättas till) som
också finns tillgänglig på KTH Bilda. När all material hade delats ut och all programvara var
redo för körning fick vi en genomgång på vad som skulle göras och uppfyllas under denna
laboration. Uppgiften var att få roboten att följa en svartmarkerad linje formad som en båge
med hjälp av ljusintensitetsensorer på roboten. Vid kontakt av vägg ska roboten ”printa”
våra namn på skärmen och slutligen köra tillbaka (OBS, med samma kod) till startplatsen, se
Figur 1.
2.1 FÖRBEREDELSE
I början av laborationen hämtades en NXT LEGO robot, ett kommentarsblad samt även en
kabel som man kunde koppla mellan roboten och datorn. All programvara var redan hämtad
innan laborationen vilket sparade tid för att komma igång. Detta gällde även kodfilen
”linefollower” som var färdig för genomsökning och korrigering.
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 5 av 13
NXT Robot Laboration
Eric Seing
28/8-15
2.2 UTFÖRANDE
Efter att allt material var hämtat och klart började vi med att inspektera själva roboten så att
allt var kopplat korrekt. I en PDF-fil som tilldelades till oss i god tid innan laborationstillfället
kunde man läsa om de grundläggande principerna för denna laboration1. Vi båda var tyvärr
väldigt oerfarna gällande programmering vilket fick oss att strikt följde de instruktioner som
fanns i PDF-dokumentet. Detta gav oss i alla fall en inblick på hur vi skulle gå tillväga i början
av laborationen. Trots pålästa fick det oss dock att ändra på den vänstra motorns koppling,
något som kommer diskuteras mer i Diskussionen. Vi inspekterade roboten och märkte
något som kunde varit en felkoppling. Den högra motorn var kopplad in i ingång A vilket
stämde överens med PDF-filen som vi läste till laborationen, men den vänstra motorn var
kopplad in i ingång B vilket gav oss funderingar. Enligt PDF-filen kopplades den vänstra
motorn till ingång C. Det vi helt enkelt gjorde var att flytta vänstra motorns koppling från B
till C.
_____________________________________________________________________________
1. Benedettelli, Daniele (2007-06-07)
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 6 av 13
NXT Robot Laboration
Eric Seing
28/8-15
Vår ursprungliga strategi var att ta det lugnt och noggrant undersöka koden i filen
”linefollower”. Den första inblicken vi fick var att koden såg mycket mer komplicerad ut
jämfört med koden man fick lära sig av i PDF-dokumentet. Redan de första minuterna hade
flera misstankar och funderingar uppstått i dokumentet, som exempelvis ”void dance()”. Vi
tog beslutet och omvandlade ”dance” till en kommentar. Samma sak gällde även denna kod
OnFwd(OUT_AB, SpeedSlow) som kördes i början före allt annat, som därför också gjordes
om till en kommentar. Efter att vi korrigerat i dokumentet så att våra namn skulle uppstå på
skärmen och när hastigheterna för ”SpeedFast” och ”SpeedSlow” var anpassade nog testade
vi att köra igång. Första försöket var ett förväntat misslyckande. Roboten körde bara rakt
och reagerade inte alls om den körde på det svarta eller det ljusare området. Snabbt nog
insåg vi då att ljussensorn aldrig användes i koden utan utförde något annat. Vi ändrade på
detta genom att få roboten att använda ljuset och resultatet var väntat, nu fick vi
åtminstone vår robot att utföra svängar. Vad som konsumerade mest tid av laborationen var
hur roboten alltid uppförde sig att göra det som var tvärtom. Vi tänkte ut att vid ljusare
område ska roboten svänga höger och vid mörkt skall roboten svänga vänster. På så sätt
skulle den kunna ta sig runt bågen genom att först köra på utsidan av bågen och tillbaka på
insidan men trots detta fortsatte roboten att svänga åt vänster även om ljusintensiteterna
var riktade åt rätt håll. Vid några tillfällen tog roboten kontakt med väggen vilka fick den att
printa våra namn på skärmen, vad som var underligt var att halva texten var borta och våra
namn var inte med. Vi undersökte koden igen och insåg att (8*i-16) måste vara kopplad till
detta fel. (-16) såg väldigt misstänksam ut och raderades från parentesen så det blev (8*i)
istället vilket också var lösningen på problemet med namnen.
Laborationen fortsatte och problemet återstod fortfarande. Vi behövde yttre hjälp, från vår
handledare. Efter en undersökning av vår kod var slutsatsen okänd varför den betedde som
den gjorde. Något som kommer diskuteras mer om senare i laborationsredogörelsen.
Total laborationstid: 3 Timmar och 23 minuter
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 7 av 13
NXT Robot Laboration
3.
Eric Seing
28/8-15
RESULTAT
Detta var de resultat vi fick fram utav vår laboration med NXT LEGO robotar. Resultatet var
absolut inte väntat och hade mycket information som måste bearbetas vidare senare i
analysen och diskussionen. Vi lyckades med uppgiften trots att koden som användes var
mycket annorlunda och unik jämfört med den generella lösningen som handledaren hade.
RAD-
URSPRUNGLIG KOD
KORRIGERAD KOD
KOMMENTAR
#define SpeedSlow 80
#define SpeedSlow 32
80% Av maximal hastighet var alldeles
för snabbt för att kontrollera så därför
minskades hastigheten.
NUMMER
2
3
#define SpeedFast 100
34
int groupMembers
#define SpeedFast 40
100% Av maximal hastighet var också
alldeles för snabbt vilket justerades till
lägre och mer kontrollerbart.
string groupMembers
int representerar heltal medan string
står för att presentera text istället för
tal och därför ändrades det.
”Eric”, ”Micaela”
Här skulle våra namn stå inom
citationstecken vilket ursprungligen
var siffror.
lightIntensity =
SensorRaw(IN_1)
lightIntensity =
SensorRaw(IN_3)
Här skulle roboten använda
ljussensorn vilket den inte gjorde,
därför ändrades det.
86, 98 &
100
Off(OUT_AB)
OnFwd(OUT_B,
SpeedFast)
Off(OUT_AC)
OnFwd(OUT_C,
SpeedFast)
Här ändrades alla motorer B till C i
misstanke om att det var en felkälla
(Vilket det visade sig inte var).
115 & 116
dance();
OnFwd(OUT_AB,
SpeedSlow)
//dance()
//OnFwd(OUT_AC,
SpeedFast)
Dessa funktioner visade sig vara helt
och hållet värdelösa och gjordes
därmed om till kommentarer.
35 & 36
76
1,
2
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 8 av 13
NXT Robot Laboration
4.
Eric Seing
28/8-15
ANALYS
Av det vi fått ut ur själva laborationen är de resultat som redovisats under Resultat. Det
första som kan kommenteras är bytet av vänstra motorn från B till C. Detta var inte
nödvändigt då man fortfarande kunde köra alla kommandon med B istället för C. Det var
främst på grund av den inlästa kunskapen från dokumentet som påverkade detta beslut.
Samtidigt var det underlättande att arbeta med samma variabler som i PDF-filen
”Programming NXT LEGO Robots using NXC”. Hastigheterna var tvungna att sänkas på grund
av kontrollförmågan. SpeedSlow var inte tillräckligt sakta för att kunna svänga ordentligt
vilket fick oss att ändra på det. Samtidigt som SpeedSlow ändrades blev SpeedFast i
förhållandevis alldeles för stor. Detta resulterade i att vi även sänkte SpeedFast. På ett visst
ställe i kodningen hittade vi en variabel int istället för string angående namnen. Variabeln int
behandlar allt med tal och string allt med text. Detta var tvungen att åtgärdas vilket också
löste problemet. Även siffrorna raderas och ersattes med motsvarande namnen inom
citationstecken. Ett annat problem som åtgärdades var ljussensorn som inte användes, vilket
ändrades och löste problemet. Laborationstiden var inte den bästa men i huvudsak var det
en lyckad laboration.
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 9 av 13
NXT Robot Laboration
5.
Eric Seing
28/8-15
DISKUSSION
Som uppgift var det att få en NXT LEGO robot att följa en svartmarkerad båge på golvet,
kunna printa våra namn på skärmen vid kontakt av vägg och även kunna köra tillbaka med
hjälp av ett program BrickCC och en ljussensor på själva roboten. Under laborationens gång
åtgärdades många fel. Det var bland annat ljussensorn, många onödiga kommandon,
hastigheterna samt även utprintningen av våra namn. NXT laborationen var i sig en svår och
komplicerad uppgift för två oerfarna programmerare. Varken jag eller min medlaborant
hade läst någon form av kurs som omfattat programmering eller liknande, vilket blev en
konsekvens att vi jobbade extra noggrant och försiktigt för att uppnå målet med
laborationen. NXC som programmeringsspråk var lite krångligt vid första ögonkontakten
men mjuknade upp sig snabbt efter bara några minuter. Mjukvaran vi använde oss utav,
BrickCC var väldigt bekvämt och smidigt att använda som också var lättförståeligt efter att ha
läst PDF-filen på KTH Bilda. Jag såg fram emot att lösa uppgiften redan från början och även
ta med kunskapen vidare efter laborationen.
Vad som gjorde mig mest lycklig var att jag och min medlaborant Micaela lyckades trots allt
lösa uppgiften. Vi lyckades trots att roboten betedde sig underligt, mer korrekt formulerat,
reagerade roboten tvärtom på ljusintensiteten. Vid ljusare underlag betedde roboten sig
som om den körde på en mörk yta och vid lägre ljusintensitet (när den körde på den svarta
markeringen) reagerade den som om den körde på en ljusare yta. Detta fick oss att tänka om
som individer eftersom det fungerade inte att byta på olikhetstecknen i dokumentet som
man egentligen skulle göra. Detta fick oss att behålla de ursprungliga riktningarna och tänka
tvärtom. Detta var ett mycket unikt fall nämnde vår handledare, och trots det unika fallet
lyckades vi tänka om och lösa situationen utifrån flera misslyckade försök och testrundor. Vi
hade som mål att aldrig ge upp, för som ingenjör ska man kunna lösa situationer som kan
vara omöjliga för vissa men inte för oss. Dock ska en viktig punkt upplysas, vi lyckades med
uppgiften med vår robot men vi lyckades inte lösa den ”generella lösningen” som skulle
fungera för alla robotar. Detta fick mig att fundera över, vad skulle hända om vi testade den
”generella lösningen” på vår robot? Vår handledare höll med om att det lät intressant, så vi
testade det. Resultat? Ett totalt misslyckande.
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 10 av 13
NXT Robot Laboration
Eric Seing
28/8-15
Som slutsats kom vi fram till att roboten reagerade som följande;
Svart ~ 700
(Med hjälp av handledare Aylin fick vi fram dessa värden)
Ljust ~ 500
if(lightIntensity < TopThreshold)
{
OnFwd(OUT_A, SpeedSlow);
} else {
OnFwd(OUT_A, SpeedFast);
}
if(lightIntensity > BotThreshold)
{
OnFwd(OUT_C, 27);
} else {
OnFwd(OUT_C, SpeedFast);
(Fungerande kod för och endast vår NXT LEGO robot)
Som avslutande mening så var jag och Micaela väldigt stolta ädnå. Vi höll huvudet högt uppe
och upprepade för oss själva att som ingenjör gäller det att kunna hitta en lösning på
problemet vilket var precis vad vi gjorde. Trots att det bara var vår robot som kunde köra
med denna kod blev vi godkända på laborationen. På köpet av det hela fick vi ännu mer
förståelse för hur vi egentligen skulle utfört uppgiften samt även en extra undervisning inom
programmeringens värld gällande NXC som programmeringsspråk.
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 11 av 13
NXT Robot Laboration
6.
Eric Seing
28/8-15
REFERENSER
Elektroniska källor:
1. Benedettelli, Daniele (2007-06-07) Programming LEGO NXT Robots using NXC Tillgänglig:
https://bilda.kth.se/node.do?id=23767435 (PDF-fil)
[2015-09-03 kl.19:34]
Bilder:
1. Figur 1, Laborationsuppgift (Skapad av mig i programmet Microsoft Paint & Microsoft
Word)
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 12 av 13
NXT Robot Laboration
7.
Eric Seing
28/8-15
BILAGOR
Som uppgift var det också att skriva i sin kära dagbok efter laborationen.
KUNGLIGA TEKNISKA HÖGSKOLAN
Sida 13 av 13