NXT ROBOT - LABORATION
Transcription
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