|
|
# Group 5
|
|
|
|
|
|
## Lab Notebook Lesson 6
|
|
|
|
|
|
**Date:** 05/03 2015
|
|
|
|
|
|
**Group members participating:** Daniel Vestergaard, Christoffer Skovgaard, Mikkel Brun Jakobsen og Josephine Raun Thomsen.
|
|
|
|
|
|
**Activity duration:** 4 + 5 hours
|
|
|
|
|
|
|
|
|
## Goal
|
|
|
I denne Lego-session eksperimenteres der med Braitenberg’s vehicles [1]. Ved brug af Tom Dean’s noter [2][3] ønsker vi at opnå en forståelse for køretøjernes respektive opførsel. Mere specifikt benyttes LEGO NXT-bricken til at konstruere de forskellige Braitenberg vehicles, hhv. type 1, 2a og 2b.
|
|
|
|
|
|
|
|
|
*Figur 1: Braitenberg’s vehicles.
|
|
|
|
|
|
## Plan
|
|
|
Vores plan er at følge instruktionerne for Lesson 6 [4].
|
|
|
|
|
|
## Results
|
|
|
|
|
|
Som foreslået til forelæsningen “Embodied Agents and Adaptive Flocks of Agents”, har vi lavet en “wrapper klasse” der holder styr på henholdsvis den mindste og største værdi en sensor nogensinde har set. Den mindste og største værdi bruges til at danne et interval hvorfra vi kan udregne en normaliseret værdi. Den normaliserede værdi går mod 0 desto tættere sensorens måling er på den hidtil mindste værdi, og går omvendt mod 1 hvis sensorens måling nærmer sig den hidtil største værdi. Klassen har desuden mulighed for at invertere den normaliserede værdi, ved at trække den fra 1. Den normaliserede værdi (og den inverterede udgave heraf) gør det nemt at afbilde fra sensor værdi til motorkraft.
|
|
|
Klassen hedder BetterSensor og kan findes i vores repository.
|
|
|
|
|
|
|
|
|
### Exercise 1 - Vehicle 1
|
|
|
|
|
|
Lego-bilen vi benytter er Braitenberg’s vehicle 1, som er konstrueret ved brug af guiden for Express-Bot [5]. Express-bot er en simpel LEGO basis konstruktion, der består af en bil base (med et drejehjul bagerst) og en forlængelse foran (hvorpå sensorer kan placeres).
|
|
|
|
|
|
Vores vehicle 1 benytter en lydsensor som input til at bestemme bilens bevægelse. Som vist i Figur 1, kan vehicle 1 kun bevæge sig lineært. De to motorer på bilen får samme motorkraft, hvilket vil sige at vehicle 1 hverken kan dreje til højre eller venstre. Bilen vil derfor enten køre forlæns eller baglæns (se billede x).
|
|
|
|
|
|
*Billede x: NXT konstrueret som Vehicle 1 med lydsensor.*
|
|
|
Billede af Vehilce 1.
|
|
|
|
|
|
Som det ses af figur 1 er forbindelserne på Vehicle 1 markeret med et +. Dette betyder at jo højere lyden fra omgivelserne er, jo hurtigere vil bilen bevæge sig. Disse +-forbindelser kaldes for exitatory forbindelser.
|
|
|
|
|
|
*Video 1: Demonstration af Vehicle 1 - Exitatory Connection*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/tuV4Qk8CvKo/0.jpg)](https://www.youtube.com/watch?v=tuV4Qk8CvKo)
|
|
|
|
|
|
|
|
|
Som det ses af video 1 reagerer bilen på de udefrakommende stimuli, her én testperson der klapper, ved at køre frem i små ryk for hvert klap. Dette stemmer godt overens med Tom Dean’s noter om at sensoren genererer et signal til motorerne, der er direkte proportional med stimulien [2]. Ud fra tidligere eksperimenter med NXT lydsensor ved vi at et klap kan karakteriseres som en relativ kort lydfrekvens med høj lyd intensitet [6], og derfor bevæger bilen sig på samme måde med høj hastighed i små tidsintervaller.
|
|
|
|
|
|
Det omvendte af exitatory fobindelser er inhibatory forbindelser. Disse ses af figur 1 som markeret med et - tegn . At sensorerne er koblet til motorerne med inhibatory forbindelser betyder at desto højere lyder fra omgivelserne er, desto langsommere bevæger bilen sig.
|
|
|
|
|
|
*Video 2: Demonstration af Vehicle 1 - inhibitory connection*
|
|
|
[![image alt text](https://img.youtube.com/vi/_ub8TykKagE/0.jpg)](https://www.youtube.com/watch?v=_ub8TykKagE)
|
|
|
|
|
|
Af video 2 ses den omvendte opførsel af video 1. Bilen bevæger sig frem med en fast hastighed lige indtil sensoren registrerer kraftig lyd fra omgivelserne (testperson banker i bordet). Bilen sænker derefter sin hastighed indtil lyden igen forsvinder, og bilen kommer op i hastighed igen. Lydsensoren agerer dermed som en simpel resistormekanisme, der er direkte afhængig af lysintensiteten.
|
|
|
|
|
|
Ved at benytte henholdsvis den største og mindste sensor-værdi, eksperimenterede vi derudover med at få Vehicle 1 til at danse. Da bilen hverken kan bevæge sig til højre eller venstre, havde vi to retninger vi kunne få bilen til at “danse” i. Vi implementerede dansen således, at når der ikke var noget musik ville bilen bevæge sig bagud, mens bilen bevægede sig fremad når lydsensoren registrerede musik. Desto højere lyden er, desto hurtigere bevæger bilen sig frem.
|
|
|
|
|
|
*Video 3: Demonstration af Vehicle 1 - dancing*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/V15koZjKFZc/0.jpg)](https://www.youtube.com/watch?v=V15koZjKFZc)
|
|
|
|
|
|
Som det ses af video 3 resulterede denne adfærd i at bilen bevæger sig bagud når lydstyrken er lav, står stille hvis lydstyrken er gennemsnitlig og bevægede sig fremad hvis lydstyrken er høj.
|
|
|
|
|
|
### Exercise 2 - Vehicle 2
|
|
|
|
|
|
Vehicle 2 er stort set magen til vores Vehicle 1, idet at den fysisk er konstrueret som en Express-bot. Forskellen mellem de to vehicles består i måden hvorpå sensorerne er forbundet til motorerne, samt at Vehicle 2 gør brug af 2 sensorer modsat Vehicle 1 ene sensor (se billede x).
|
|
|
|
|
|
*Billede 2: NXT konstrueret som Vehicle 2 med to lyssensorer.*
|
|
|
|
|
|
// Billede AF Vehicle 2.
|
|
|
|
|
|
#### Eksperiment - Exitatory og Inhibitory connections
|
|
|
|
|
|
*Vehicle 2a:*
|
|
|
Af figur 1 ses det at vehicle 2a skal afbilde lys fra venstre sensor over på den venstre motor og lys fra højre sensor over på den højre motor. Dette har vi implementeret på følgende måde:
|
|
|
|
|
|
´´´Java
|
|
|
int leftPower = (int) (minPower + leftLight.getValue() * (maxPower - minPower));
|
|
|
int rightPower = (int) (minPower + rightLight.getValue() * (maxPower - minPower));
|
|
|
BetterCar.power(leftPower, rightPower);
|
|
|
´´´
|
|
|
|
|
|
BetterCar.power(leftPower, rightPower) metode-kaldet sætter venstre og højre motor til at køre enten frem eller tilbage, alt efter om værdien af de tilsvarende variable er positiv eller negativ. BetterCar kan findes i vores repository.
|
|
|
|
|
|
Vi forsøge at tildele Vehicle 2a både exibitory og inhibitory forbindelser. Dette resulterede i to forskellige slags adfærd. Dette kan ses i video 4 og 5.
|
|
|
|
|
|
*Video 4: Exitatory Vehicle 2a*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/JT5ovxTyMAU/0.jpg)](https://www.youtube.com/watch?v=JT5ovxTyMAU)
|
|
|
|
|
|
I video 4 ser vi, hvordan exitatory forbindelser gør at Vehicle 2a tilegner sig en adfærd, hvor den søger lyset. Som det ses af videoen, starter bilen ud med at befinde sig bagved en hvid papkasse, men er i stand til at dreje rundt om kassen i retning af vinduet - hvilket er den kraftigste lyskilde i lokalet.
|
|
|
|
|
|
*Video 5: Inhibatory Vehicle 2a*
|
|
|
[![image alt text](https://img.youtube.com/vi/iOHpEeeHclc/0.jpg)](https://www.youtube.com/watch?v=iOHpEeeHclc)
|
|
|
|
|
|
I video 5 ser vi den omvendte adfærd af video 4. Her gør Inhibitory forbindelserne at Vehicle 2a bevæger sig væk fra lyset, og tilegner sig en kakerlak-agtig adfærd. Det ses hvordan bilen finder skygge ved at søge væk fra lyskilden fra vinduet og ind i skyggen fra kassen.
|
|
|
|
|
|
*Vehicle 2b:*
|
|
|
På figur 1 ses det at vehicle 2b skal afbilde lys fra venstre sensor over på den højre motor og lys fra højre sensor over på den venstre motor. Det har vi implementeret på følgende måde:
|
|
|
|
|
|
´´´Java
|
|
|
int leftPower = (int) (minPower + rightLight.getValue() * (maxPower - minPower));
|
|
|
int rightPower = (int) (minPower + leftLight.getValue() * (maxPower - minPower));
|
|
|
BetterCar.power(leftPower, rightPower);
|
|
|
´´´
|
|
|
|
|
|
Vi udførte de samme eksperimenter for Vehicle 2b med Exitatory og Inhibitory forbindelser.
|
|
|
|
|
|
*Video 6: Exitatory Vehicle 2b*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/7ke8F5SLAZE/0.jpg)](https://www.youtube.com/watch?v=7ke8F5SLAZE)
|
|
|
|
|
|
|
|
|
*Video 7: Inhibatory Vehicle 2b - Cockroach style*
|
|
|
|
|
|
[![image alt text](https://img.youtube.com/vi/kkqTcmMDZ0Q/0.jpg)](https://www.youtube.com/watch?v=kkqTcmMDZ0Q)
|
|
|
|
|
|
Som forventet ser vi hvordan exitatory forbindelser gør at Vehicle 2b, ligeledes Vehicle 2a, bevæger sig væk fra skyggen bag kassen, fanger lyset fra vinduet, og bevæger sig derefter mod denne lyskilde ved at justere sin retning ved at dreje rundt om kassen. På samme måde ser vi inhibitory forbindelser gør bilen i stand til at finde “shelter” i kassen, og dermed søge væk fra lyset.
|
|
|
|
|
|
Bemærk at i eksperimenterne med Vehicle 2 var den røde lampe i lyssensorerne tændt. For at undgå refleksion fra lampen lagde vi en mørk trøje over den hvide papkasse, og minimerede på denne måde en potentiel fejlkilde. For at undgå nogen form for refleksion i de efterfølgende eksperimenter med Vehicle 2 og Vehicle 3, besluttede vi at slukke lyset ved at kalde metoden setFloodlight(false); på lyssensoren.
|
|
|
|
|
|
|
|
|
#### Eksperiment - Luciaoptog
|
|
|
|
|
|
I dette eksperiment benytter vi os at bilens evne til at følge en lyskilde med det formål at skabe en flok af Braitenberg’s Vehicles, der følger efter hinanden. Bil C følger efter bil B, bil B følger efter bil A og bil A bestemmer selv sin retning. Til at udføre eksperimentet havde vi to Vehicle 2a til rådighed. For at have mere et et “efterfølgende” led til rådighed agerede en testperson bil A ved at bevæge lys fra en mobiltelefons blitz foran bil B i højde med lyssensorerne. Bagpå bil B var der monteret 6 RCX-lamper i samme højde som lyssensorernes placering. Måden hvorpå vi fik lys i disse pærer var gennem klassen LightHack som trækker strøm fra en motorport.
|
|
|
|
|
|
*Billede x: Vehicle 2a med 6 RCX-lamper påsat i vertikal retning.*
|
|
|
Billede af Vehicle 2a med LYS i vertikal retning
|
|
|
|
|
|
*Billede x: Videokamera lys fra mobiltelefon.
|
|
|
Billede af mobiltelefon
|
|
|
|
|
|
Bemærk at vi brugte et kaffefilter til at dæmpe lyset fra mobiltelefonens blitz for at minimere muligheden for at blitzens lysintensitet ville overstige lysintensiteten af RCX-lamperne på bil B. Dermed forsøgte vi at sikre at bil C fulgte bil B, og ikke bil A.
|
|
|
|
|
|
Vi erfarede at bil C skulle placeres forholdsvis tæt på bil B med den ene sensor placeret i retning af RCX-lamperne, for at være i stand til at følge bil B. Dog tabte bil C hurtigt “færten” af bil B, idet at lyskeglerne fra RCX-lamperne spredte sig vertikalt i stedet for horisontalt. Vi overkom dette problem ved at placere lamperne horisontalt på bagenden af bil B (denne konstruktion kan ses af billede x)
|
|
|
|
|
|
*Billede x: Vehicle 2a med 6 RCX-lamper påsat i horisontal retning.*
|
|
|
Billede med Vehicle 2a med lamper i horisontal retning.
|
|
|
Denne konstruktion sikrede at bil C var i stand til at følge bil B af længere tidsintervaller. Nedenstående video viser et lille lucia-optog bestående af testperson som bil A og to Vehicle 2a som bil B og bil C.
|
|
|
|
|
|
Video 8:
|
|
|
[![image alt text](https://img.youtube.com/vi/AOmJ1V5DnoA/0.jpg)](https://www.youtube.com/watch?v=AOmJ1V5DnoA)
|
|
|
|
|
|
Vi ser af video 8, at både bil B og bil C er i stand til at følge den lyskeglen fra den forankørende bil. Selvom vi forsøgte at dæmpe lyskeglen fra mobiltelefonen, er det dog stadig muligt at både bil B og bil C nogle tidspunkter har fulgt samme lyskegle og dermed kørt samme retning. Af video 8 virker det dog som om at bilerne har hver deres referencepunkt, idet bil C justerer sin retning forsinket i forhold til bil B, og dermed reelt følger RCX-lamperne bagpå bil B og ikke lyset fra mobiltelefonen. Vi vil muligvis kunne afgøre om mobiltelefonen påvirker bil C ved at lave længere optog med flere og hårdere sving.
|
|
|
|
|
|
#### Eksperiment - Sampling metode
|
|
|
I Tom Deans beskrivelse af hans implementation af lys-efterfølgende vehicles, gør han det klart at hans program sætter maksimum og minimums værdierne for lyssensoren, i hele programmets levetid [4]. Dette kan bl.a. betyde at hvis lysmiljøet ændre sig løbende, vil robotterne være ud af stand til at korrigere for dette. Vi har implementeret en alternativ løsning hvori de maksimale og minimale værdier bliver sat løbende. Dette har vi gjort ved hjælp af et cyklisk array, hvori vi opbevarer de seneste 100 målte værdier, og ved hvert gennemløb de finder nyeste maksimum og minimum værdier. På denne måde udskiftes maksimum og minimums værdierne som minimum hvert sekund.
|
|
|
|
|
|
Vi har udført 2 eksperimenter for bearbejde forskellen mellem vores implementation og Tom Deans implementation. I eksperimentet lader vi bilen kører i kort tid, hvorefter vi peger en kraftig lyskilde (smartphone blitz) ind i begge lyssensorer, for at skabe en stor variation i lysmiljø.
|
|
|
|
|
|
Video 9: Eksperiment med livstids minimum og maksimum værdier
|
|
|
[![image alt text](https://img.youtube.com/vi/p4r4fSwr_HM/0.jpg)](https://www.youtube.com/watch?v=p4r4fSwr_HM)
|
|
|
|
|
|
Videoen ovenfor viser vores afprøvelse af en løsning der ligner Tom Deans implementationen, hvor maksimum og minimum værdierne sættes for hele programmets levetid. Som set stopper bilen efter at blive blændet af den stærke lyskilde, og starter ikke igen. Dette er fordi maksimumsværdien nu afspejler et lysmiljø som ikke længere eksistere. Nye sensor målinger har ingen virkning eftersom de er signifikant mindre end maksimum værdien.
|
|
|
|
|
|
Video 10: Eksperiment med løbende minimum og maksimum værdier
|
|
|
[![image alt text](https://img.youtube.com/vi/Lrc93v3vWlI/0.jpg)](https://www.youtube.com/watch?v=Lrc93v3vWlI)
|
|
|
|
|
|
Ovenstående video demonstrerer vores implementation, hvori maksimum og minimum værdierne løbende fornyes. Her ses det at selvom vi peger en stærk lyskilde ind i lyssensoren og bilen stopper, genvinder bilen bevægelse efter et stykke tid. Altså “glemmer” bilen med tiden store udsving i værdier, og på denne måde kan den tilpasse sig lysmiljøet selvom det er stærkt varieret.
|
|
|
|
|
|
|
|
|
#### Eksperiment - Ultralydssensor
|
|
|
|
|
|
Vi forsøgte med to forskellige opsætninger. En svarende til 2a men med inhibitory sensor afbildning og en svarende til 2b med excitatory sensor afbildning. Begge opsætninger virkede til at opføre sig ens og havde lignende problemer med fuldstændigt at undgå forhindringer i omverdenen. Nedenstående video viser en kørsel af 2b opsætningen.
|
|
|
|
|
|
Video 11: Kørsel af en 2b vehicle med ultralydssensorer.
|
|
|
[![image alt text](https://img.youtube.com/vi/l-0sTuJ-yJk/0.jpg)](https://www.youtube.com/watch?v=l-0sTuJ-yJk)
|
|
|
|
|
|
Som det ses i slutningen af videoen styrer bilen direkte mod bordets bordben. Dermed fik vi ikke vores robot til fuldstændigt at undgå forhindringer, men vi har overvejet forskellige årsager til dette:
|
|
|
* Der er mulighed for interferens mellem de to ultralydssensorer.
|
|
|
* Noget midt imellem de to ultralydssensorer kan ikke sanses.
|
|
|
* Vores opsætning har en tendens til at trække til venstre (muligvis på grund af vores bagvedsiddende styrehjul)
|
|
|
|
|
|
Især interferensen kunne måske være afhjulpet ved at sætte ultralydssensorerne en smule på skrå.
|
|
|
|
|
|
### Exercise 3 - Vehicle 3
|
|
|
|
|
|
*Billede x: Opsætning af Vehicle 3
|
|
|
BILLEDE AF VEHICLE 3 HER
|
|
|
|
|
|
Ved initielle forsøg erfarede vi at lyssensoren var en anelse mere dominant end den ultrasoniske sensor, hvilket medførte at bilen havde tendens til at kollidere mod objekter, hvis de var oplyste. Ved eksperimentering med vægtningen af sensorværdierne, så vi forbedrede resultater ved en 0,475 vægtning for lyssensoren, mod en 0,525 vægtning for den ultrasoniske sensor.
|
|
|
|
|
|
For at teste bilens evne til at navigere ved brug af både lyssensoren, samt den ultrasoniske, opsatte vi en forhindringsbane, der havde til formål at demonstrere bilens evne til at navigere uden om forhindringer, for til sidst at navigere ind i en oplyst boks. Opsætningen, samt en demonstrationsvideo af dette eksperiment ses nedenfor.
|
|
|
|
|
|
*Billede x: Eksperimentopsætning. Bemærk at der er placeret en lyskegle inde i kassen.*
|
|
|
BILLEDE AF EKSPERIMENTSETUP HER
|
|
|
|
|
|
Video 12: Demonstration af bil med kombineret ultralydssensor og lyssensor
|
|
|
[![image alt text](https://img.youtube.com/vi/H_5F81Bx2uo/0.jpg)](https://www.youtube.com/watch?v=H_5F81Bx2uo)
|
|
|
|
|
|
Demonstrationen viser bilens evne til at undgå at kollidere med forhindringerne, mens lyset er tilstrækkeligt vægtet, til at den slutteligt søger mod dette inde i kassen.
|
|
|
|
|
|
|
|
|
## Conclusion
|
|
|
|
|
|
I denne session har vi eksperimenteret med forskellige Braitenberg’s vehicles. Mere specifikt eksperimenterede vi med Vehicle 1, Vehicle 2a, Vehicle 2b og Vehicle 3 implementeret på LEGO NXT platformen som LEGO biler. Alle øvelser er blev udført i henhold til instruktionerne fra NXT-guiden for Lesson 6 [4]. Braitenberg’s vehicles består af simple robotter med hjul, der er styret direkte af stimuli fra omgivelserne. I vores eksperimenter benyttede vi os af både lyd-, lys-, og ultralydssensorer som stimuli for robotterne.
|
|
|
|
|
|
Gennem eksperimentation med Vehicle 1 demonstrerede vi forskellen på *Exitatory* og *Inhibitory* forbindelser til motorerne. Exitatory er mærket som (+) forbindelser, hvilket indikerer at sensoren direkte stimulerer bilens motorer til at køre frem proportionelt med lydstyrken. Omvendt benytter inhibitory forbindelser, som er mærket som (-) forbindelser, stimulien til at proportionelt forhindre bilen i at køre frem.
|
|
|
|
|
|
Vi arbejdede herefter videre med Braitenbergs Vehicle 2a og 2b konfigurationer, som gør brug af multiple stimuli kanaler for at bevæge sig. I disse konfigurationer udskiftede vi også lydsensoren med to lyssensorer. I exitatory konfigurationerne fandt vi at vehicle 2a udviste en adfærd hvor den opsøgte lyskilder, hvorimod den i inhibitory konfigurationen udsøgte mørket, hvormed den afspejlede kakkerlak lignende opførsel. Vehicle 2b udviste lignende opførsel. Endvidere er det lykkes os at skabe en flokmentalitet mellem flere Braitenberg vehicles, i form af et optog, hvori hver vehicle fulgte den forankørendes lys. Derudover undersøgte hvilke konsekvenser et stærkt varierende lysmiljø kan have på forskellige måder at håndtere minimum og maksimum værdier. Her implementerede vi en løsning, hvor de maksimale og minimale lysværdier blev sat løbende fremfor for evigt. Dette gjorde robotten i stand til at tilpasse sig miljøer der varierede meget i lysstyrke - hvilket Tom Deans implementation var ude af stand til.
|
|
|
|
|
|
Hernæst eksperimenterede vi med Vehicle 3, som benytter to slags sensorer. I vores eksperiment benyttede vi os af både ultralydssensorer og lyssensorer. Vi erfarede at lyssensoren er en anelse mere dominerende end ultralydssensoren, hvorfor vi valgte at vægte ultralydssensoren højere end lyssensoren. Ved at kombinere de to sensorværdier muliggjorde vi at bilen kunne tilegne sig en adfærd, hvor den undgik at kollidere med fysiske objekter og samtidig tiltrukket af lys. Ved at opsætte en lille forhindringsbane kunne vi demonstrere, hvordan Vehicle 3 kunne finde frem til en lyskilde ved at undgå væggene.
|
|
|
|
|
|
|
|
|
## References
|
|
|
|
|
|
[1] Braitenberg, V. 1984. Vehicles, Experiments in Synthetic Psychology London, Cambridge: The MIT Press.
|
|
|
|
|
|
[2] Dean, Tom. Introductory Notes for CS148 in the Spring of 2002. http://cs.brown.edu/people/tld/courses/cs148/02/introduction.html
|
|
|
|
|
|
[3] Dean, Tom. Braitenberg’s vehicles. http://cs.brown.edu/people/tld/courses/cs148/01/vehicles/vehicles.html
|
|
|
|
|
|
[4] NXT guide - Lesson 6: http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson6.dir/Lesson.html
|
|
|
|
|
|
[5] Express-Bot http://www.nxtprograms.com/9797/express-bot/pdf/ExpressBot-DrivingBase-StepByStep.pdf
|
|
|
|
|
|
[6] Group 5 - Lesson 3: https://gitlab.au.dk/group-5/group-5-lesson-3/wikis/home
|
|
|
|
|
|
|