Kristan Andersen, Simon Lykke, Jacob Styrup Bang

fredag den 2. november 2007

Lesson 7

Dagens mål er at:
Vi starter med at bygge vores NXT om, jævnfør lego manualen s. 22, til en standard bil. Herpå monteres 2 lamper på toppen af bilen og der påsættes to lyssensorer. I første omgang bygges bil 2a med venstre lyssensor i port S1 og venstre motor i port B, mens højre lyssensor tilsluttes port S2 og højre motor i port C.

Næste skridt er at bruge Tom Deans ideer til at implementere sammenhængen mellem sensor og motor. Vi bruger to tråde til at implentere kontrollen - en for hver forbindelse.
Vi havde problemer med brug af tråde på NXT'en. Det var kun den ene motor der ville køre. Vi fandt ud af at koden efter vi havde kaldt Thread.start() ikke blev udført. Det skyldtes at vi havde poblemer med kald af tråd metoder og at vi havde erklæret sensor og motor som statiske variable i kontrol trådene. Da det blev rettet virkede programmet efter hensigten.

Vi havde implementeret hastighedskontrollen som i Notes on construction of Braitenberg's Vehicles, Chapter 1-5 of Braitenbergs book, med samme normalize metode. Dog så det ud som om at lys påvirkning ikke havde stor effekt. Vi satte NXT'en til at udskrive sensorværdierne, der ifølge API'en skulle gå fra 0-1023, men vi målte værdierne til mellem 400 ved normalt rumlys op til 900 ved at en lampe var sat op lige foran sensoren.

Vi blev nød til at gøre grænserne for MIN_LIGHT og MAX_LIGHT (threshold værdierne for lyst og mørkt) tilpassende. Når programmet startes skal der tages en måling, som MIN_LIGHT og MAX_LIGHT bliver sat til. Derefter skal grænserne tilpasse sig situationen. Vi besluttede at robotten skulle kunne huske målte værdier for et bestemt stykke tid. Ud fra de målinger skulle MIN_LIGHT og MAX_LIGHT værdierne så udregnes, som hhv. den mindste målte værdi og den største målte værdi inden for tidsintervallet. Dette blev implementeret ved at gemme værdier i to arrays med hhv. de største og mindste værdier for hver motor/sensor par. Hver indgang i de to arrays er hhv. den største og mindste måling foretaget inden for et samplings interval. Dette gjorde at robotten kunne "huske" de sidste

(Sampling rate * array størrelse) sekunder

Når arrayet er fuldt fyldes værdier ind fra starten igen. MIN_LIGHT og MAX_LIGHT værdierne er så bestemt ved hhv. den mindste og største værdi i de to arrays.

Først havde hver sensor / motor par sine egne thresholds værdier, men vi observerede at begge motorer altid kørte og robotten reagerede ikke særligt kraftigt på udsving i lysmålingerne. Vi konstanterede at det skyldtes at hver tråd havde sin egen opfattelse af hvordan lyssituationen var. Ved at lave MIN_LIGHT og MAX_LIGHT værdierne fælles for trådene vil kraftigt lys på den ene sensor betyde at den anden sensor registrede lav belysning.

Da dette blev implementeret med motor/sensor par som vist i figur 1 Vehicle 2a i opgave beskrivelsen, kunne vi observere at robotten søger væk fra lyset. Vi testede ved at holde en diode cykel lygte foran sensorerne. Hvis vi byttede om på motorerne, som Vehicle 2b kørte robotten istedet mod lyset.

I vores tests observerede vi at hvis robotten blev udsat for skarpt lys, og dette lys blev fjernet, så stod robotten nærmest stille i en periode, for derefter pludselig at begynde at køre. Dette skyldes at robotten husker den højeste lysværdi i en periode som tidligere beskrevet. Når denne periode er gået falder MAX_LIGHT værdien hurtigt, og robotten skifter hurtigt hastighed. Vi observerede at den tid robotten stod stille svarede til den tid robotten skulle kunne "huske". Hvis man skulle forhindre denne bratte ændring i robottens opfattelse af lyst og mørkt kunne man implementere en vægtning af de målte værdier, så gamle værdier får mindre indflydelse.

Ingen kommentarer: