torsdag den 4. oktober 2007

ESEA - Labnotes

NXT Programmering - Lektion 5 - torsdag
Varighed 7.5 timer - kl. 8.00 - 15.30
Gruppemedlemmer: Aslak, Ruben og Lars

Målet for i dag er opdelt i de følgende delmål:
  • at få robotten til at genkende grøn, og stoppe når den er sikker på at den har fundet det grønne område
  • at udskrive tiden på displayet (tiden fra robotten blev startet, til den stopper på det grønne område).
  • at optimere på robottens opførsel, således at den kan gennemføre banen i bedst mulig tid.

På sidste blog, fra den "xtra" lektion vi havde i tirsdags, viste vi et billede af den bane som skal gennemføres. Det grønne målområde skal genkendes. Dette gøres ved at kalibrere de 2 sensorer (se billede fra samme lektion ang. sensor-placering) så vi kender sensorværdier for hhv. hvid, sort og grøn. Når så begge sensorer læser en værdi som svarer til grønt, er robotten i mål. Denne kode fik vi let til at fungere. Den anden sensor blev placeret hvor den sidder nu (bag ved højre hjul) pga. problemer med at robotten kørte "igennem" den sorte tape. Dette blev omtalt sidste lektion, og denne placering viser sig at være god til at vurdere hvornår robotten er inde i målområdet.

Det næste delmål er tidstagningen, noget som viste sig at være lidt problematisk. Efter mange forsøg, hvor vi fik ulæst fejlmeldinger i displayet, frem for tiden, endte vi med at bruge System.currentTimeMillis() funktionaliteten. Vi fandt at problemet med at skrive ud på display ikke havde noget med de andre forsøge metoder at gøre (Timer, Ticker osv.) men skyldes at vi forsøgte at udskrive (draw) en string, og ikke en int.

Nu er vi så langt, at robotten gennemfører banen hver gang, finder det grønne målområde, samt udskriver tiden på displayet. Dette har vi optaget på en video, og selve arbejdet med at få optimeret på robottens fremfærd kan begynde.

Den ovenfor viste video kan også hentes ned her: http://userportal.iha.dk/~20060651/Movies/Race_2_001.mpg

På denne video gennemfører robottten banen på ca. 47 sekunder. Det lykkedes os at få tiden ned på 35 sekunder, dog uden at få dette dokumenteret på video. Vi gik ud fra at vi kunne få robotten til at køre hurtigere og fik derfor ikke dokumenteret denne præstation.

Som arbejdet skred frem gik det langsomt op for os, at der var ikke-optimale løsninger i koden. Faktisk måtte vi indrømme, at det robotten udførte ikke helt var det vi troede vi havde bedt den om. Dette skyldtes forkerte argumenter i if-sætninger og andet godt. Faktum var, at vi, hvis vi ønskede total kontrol over hvad robotten udførte, måtte vi starte forfra med at kode robottens handlinger. Forfra forstået på den måde, at den kode som bestemmer hvilke værdier, som sendes til de to motorer i forbindelse med forskellige antal målinger af hhv. hvid og sort, skulle tænkes anderledes.

Denne dag endte med, at robotten endnu ikke havde gentaget sin "fantomtid" på ca. 35 sekunder, efter vi selv havde overtaget kontrollen med hvad robotten gjorde og hvornår.

Koden, som den så ud ved dagens afslutning er at finde for enden af de følgende links:

http://userportal.iha.dk/~20060651/JavaFiles_ESEA/Improved_2_04102007/SensorReaderTest.java

(mangler pt. koden for Locomotion, som er blevet udbygget med en rotatevenstre)

Ingen kommentarer: