KUNGLIGA TEKNISKA HÖGSKOLAN Robotar i NXc En laboration med Mindstormrobotar Anton Gyllenhammar 7/30/12 antongy@kth.se II1310 Introduktionskurs i datateknik Sammanfattning Denna rapport beskriver NXc- laborationen som genomfördes under kursen. Den tar upp fördelar och nackdelar med hur laborationen genomfördes, vilka resultat vi fick samt helhetsintrycket utav laborationen.
Innehållsförteckning 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 Bilagor... 6 ICT Kungliga Tekniska Högskolan Sida 2 av 6
1. Inledning Denna rapport syftar på den laboration som ägde rum den 23/8 där målet vara att programmera en robot. Den tar upp varför rapporter skrivs, varför laborationer genomförs samt olika sätt som kan användas för att lösa problem inom programmering eller vid andra tekniska uppgifter. 1.1 Bakgrund Att kunna genomföra en laboration som innehåller moment som kräver många tekniska färdigheter är en självklarhet om man studerar på ICT. Därför är en sådan här laboration viktig för nya studenter då det kan skilja sig lite från tidigare laborationssätt, såsom hur man anmäler sig till ett laborationstillfälle. Dessutom är det bra för dem som inte tidigare kommit i kontakt med de tekniska delarna som krävs under utbildningen, såsom programmering. 1.2 Syfte och målsättning Syftet med laborationen är att på ett roligt och relativt enkelt sätt lära sig grunderna programmering med hjälp utav parprogrammering. Syftet är också att presentera de tillvägagångssätt som ett ingenjörsarbete innebär samt ge inblick och kunskap i de IT- system som är obligatoriska till utbildningen vid ICT- skolan. Uppgiften syftar även till att ge träning i felsökning och testning och på så sätt ge en grund till effektivt programmeringsarbete i framtiden. Varför en rapportskrivning också ingår är då det är viktigt för en ingenjör att kunna skriva bra rapporter, studenten då ska förstå innebörden med rapporter och träna på att följa dessa regler praktiskt. 2. Genomförande Laborationen gick till som så att vi fick en robot som skulle programmeras till att följa efter en svart tejpbit som svängde åt höger i mot en vägg. När roboten väl nådde vägen skulle den spela en liten trudelutt, skriva ut gruppens deltagare på skärmen och sen stänga av. Vi började med att ladda ner alla aktuella filer från bilda samt öppna NXc:s API för att ha vid sidan om. Det första hinder vi mötte var att varken jag eller min labbpartner hade en dator med nativt Windows installerat där vi kunde köra den IDE vi skulle använda oss utav (bricxcc), så vi fick spendera en tid på att hitta alternativa lösningar. En var att vi skulle använda oss utav Wine men det visade sig vara problem mellan USB- drivarna och den emulerade mjukvaran. Vi försökte då istället på en virtuell maskin med Windows XP som min labbpartner hade vid liknande tillfällen. Detta fungerade inte till en början men då flera andra grupper haft problem med USB- drivarna på nativt Windows laddade den laborationsansvarige upp drivrutinerna på Bilda vilket fick det att fungera även för oss. Efter några korta tester med att man kunde ladda över filer till roboten började vi kolla på den färdiga med felaktig kod som vi fått till laborationen. Om man startade programmet som vi nu hade på roboten åkte den runt i cirklar vilket inte gjorde oss inte mycket nytta. Till och börja med var det min labbpartner som programmerade samtidigt som jag observerade. Han hade redan innan laborationen varit i och kommenterat i koden vad som skulle ändras (vi hade tillgång till koden innan laborationens början). Vi gick då en efter en igenom de fel han sett och la till några som han hade missat. Efter en utkommentering utav funktionen Dance() i main() så slutade roboten med att göra donuts och vi fokuserade på att få roboten att printa ut våra namn vid väggkontakt. ICT Kungliga Tekniska Högskolan Sida 3 av 6
Efter att ha lagt in våra namn i en Array så ändrade vi print loopen att faktiskt skriva ut den kommande posten under den förra och inte på samma rad. Efter detta blev det mycket trial och error; först bytte vi kodare och observatör och sedan ändrade vi i koden så att den läste av rätt sensor när den refererade till ljus men samtidigt hade vi ingen aning vad de olika värdena representerade så vi fick testa oss fram. Efter att ha mixtrat med de funktioner som styrde vilket hjul som skulle åka när hade vi en robot som uppfyllde alla kriterier för uppgiften men dock inte så effektivt. Den använde sig nämligen utav off(out_x) vilket stängde helt av en utav motorerna vilket gjorde att roboten svängde. Detta var inte bara ineffektivt utan också förbjudet i laborationen då vi inte fick lägga till något i koden, så vi ändrade detta till att de bara bytte från hög till låg hastighet. Efter det så fungerade den alldeles utmärkt och vår laboration var avklarad. 3. Resultat Radnummer Ny kod Kommentar 35 Joel, Anton Namn i arrayen groupmembers 45 (8*i) Ändrade förskjutningen i y- led utav textout 68 SensorRaw(IN- 3); Ändrade så ljus läses från rätt sensor 86 Speedfast Svänger åt vänster utanför det svarta 92 Speedfast Svänger åt höger på svarta 114 //dance(); Kommentera ut funktionen ur tasklist 115 //onfwd Kommentera ut kommandot ur tasklist Om detta ändrades/lades till så fungerade roboten som laborationen krävde. 4. Analys Laborationen genomfördes med lite problem till att börja med men fortgick utan större hinder mot slutet. Vi skulle nog ha förberett oss bättre med att förbereda en Windows- miljö att arbeta i, samt att vi kanske skulle ha kollat igenom Api:n lite mer i förväg. Det var dock mycket bra att min labbpartner redan hade gått igenom koden och kommenterat de fel han sett som varit uppenbara; såsom funktionen dance() samt våra egna namn. Detta gjorde att vi nästan direkt kunde börja utforska vad alla variabler gjorde för att påverka roboten; såsom hur textout faktiskt skrev ut text eller vad det värde som ljussensorn läste in skulle representera. Då vi till en början var ganska liberala i hur vi ändrade koden satte vi senare begränsningar vilket var att vi inte skulle lägga till mer kod. Detta skulle vi egentligen gjort från början men vi tyckte att genom lösa problemet först kan man senare förstå hur man ska lösa det inom de ramar som uppgiften lagt. ICT Kungliga Tekniska Högskolan Sida 4 av 6
5. Diskussion Diskutera kortfattat laborationens syfte och mål. Vilka problem uppstod? Vad har du lärt dig? Hur har du nytta av detta i dina framtida studier eller ditt framtida yrke? Vad har du för åsikter om programvaran och NXC? Analysera också kort tillvägagångssättet under laborationen. Att laborationen skulle vara en introduktion till programmering är självklart, men dennes uppgift var också till för att öva på de viktiga kunskaper en student och blivande ingenjör behöver kunna för att klara av sina studier vid KTH. Den visade också hur problemlösning skulle tillämpas i programmeringmiljö, som exempelvis en observer som kollade om du skrev rätt eller fel i koden. De problem vi stötte på var vi själva ansvariga för, såsom inte rätt plattform till laborationen. Jag har insett att förbereda sig enligt labb- Pm är essentiellt och kanske inte kan lösas vid nästa labbtillfälle, dock var det bra att vi redan gått igenom uppgiften innan vilket sparade oss tid. Jag tyckte också att vårt sätt att analysera koden gjordes på ett systematiskt och bra sätt, dock kunde vi sparat tid genom att ha kollat på API:t i förväg. Även om själva syntaxen inte var särskilt svårt var det ändå lite speciella variabler som inte kunde förstås bara genom att läsa dem. Det hade inte heller kunnat skada om programvaran fanns till andra plattformar än Windows. Det jag kommer ta med mig är att förberedelse är guld värt vid laborationer samt att skriva rapporter får en att inse och lära sig utav sina misstag. Referenser Labb- PM: https://bilda.kth.se/courseid/8498/content.do?id=19150198 Svarsblad Laboration ICT Kungliga Tekniska Högskolan Sida 5 av 6
Bilagor ICT Kungliga Tekniska Högskolan Sida 6 av 6