Lab 6

Dato: 08-03 - 2012
Varighed: 5 timer
Tilstedeværende: Morten, Jonas, Claes

Siden sidst
Der er ikke foretaget nogen modifikationer af nogen art siden sidste lab.

Goals
Målet for denne lab er, at bygge Brainteberg's kørertøjer 1, 2a og 2b som beskrevet i Lesson 6.

Plan 
  • Byg robotten efter 5min guide.
  • Lav kørertøj 1
    • Få den til at reagere på lyd
    • Map målt sensor værdi til specificeret motor interval
    • Lav mapping så der er mulighed for negativ power
    • Implementer inhibitory forbindelse
  • Lav kørertøj 2a/2b
    • Installere to lys sensorere
    • Få den til at reagere på lys
    • Map målte sensor værdier til specifikt motor interval
Results


Den initielle robot som benyttes som basis til alle 3 udgaver af Braiteberg's Vehicles blev bygget ud fra en 5min guide fundet inde på http://www.nxtprograms.com/five_minute_bot/steps.html . Den varierer en smule fra den originale Braitenberg's Vehicle 1 idet den har 2 motorer i stedet for 1, men begge disse bliver blot sat til at have samme power.

Kørertøj 1
Vi startede med først at få robotten til at køre og reagere på den tilsluttede lydsensor, så vi satte simpelt bare motorens power til at være lig den læste raw input fra sound sensoren. For at kunne lave en ordentlig mapping ønsker vi at normalisere vores værdier, dette gør vi for at undgå et tilfælde, hvor fx den maksimale værdi for lyd sensoren er mindre end den minimale værdi der kræves for motoren starter.

Der opstod et mindre problem i denne process, hvor vi fik byttet om på nogle værdier, betydende, at jo mere larm sensoren optog, jo langsommere kørte den, og vice versa. Dette var dog naturligvis et simpelt fix, der blot krævede at de to værdier blev byttet rundt. Vi mappede den opfangede sensor lyd til et motor interval på 30-100.

Vi testede dens reaktion til noget musik, hvor vores sound sensor registrerede en min værdi på 63 og en max værdi på 988.
Næste del af planen for den første robot er at give den mulighed for at benytte negativ power, altså at bakke.

Vi lavede en mapping der gjorde det muligt for robotten at få negativ power når lydoptagelse var under gennemsnittet af max- og min-lydværdier. Altså:
power = (200 * normalized(raw_sound_val)) - 100
Opførsel vi får ud af det er, at den kører hurtigere jo højere lyd og bakker hurtigere jo mindre lyd. Hvis lyden er omkring gennemsnit af max og min-lydværdierne står den stille, da vi ikke bruger vores min-power-værdi til at være sikre på robotten altid bevæger sig.

Funktionaliteten robotten har benyttet hidtil kaldes exitatory, hvilket betyder, jo højere målt værdi, desto mere power bliver ført til motorerne. Det næste punkt på planen er at ændre denne funktionalitet, til i stedet at være inhibitory, altså give mere motor power desto mindre lyd sensoren opfanger. Denne ændring er en simpel "reverse" af den eksisterende funktionalitet. Måden hvorpå vi beregnede power output før var ved følgende udtryk:
 1 - ((sensor.val - min.val) / (maks.val - min.val))

så for at "reverse" resultatet heraf, kan vi blot fjerne første del af udtrykket, "1 - ", og blot beregne:
(sensor.val - min.val) / (maks.val - min.val)
Muligheden for at opnå negativ power eksisterer stadig, så robotten kan stadig bakke. Robottens opførsel kan beskrives som en moderat tiltrækning til lyd, altså, den vil til en vis udstrækning blive tiltrukket af lyden, men bliver lydniveauet for højt, vil robotten bakke og søge væk. Den holder altså en vis afstand til lydkilden, afhængig af lydniveauet.




Kørertøj 2a/2b
Vi har på dette kørertøj tilføjet 2 lyssensorer, som hver styrer deres motor. På køretøj 2a styrer sensorerne placeret i samme side som sensorerne, hvor der på køretøj 2b styrer sensorerne motoren i den modsatte side. Dette gør at 2a kører væk fra lys og 2b kører hen mod lys.

Mapningen fra målte sensor værdier til mortorkraft sker på samme måde, som ved lydsensoren. Her bruger vi bare den normaliseret værdi fra lys sensoren, i stedet for værdien fra lyd sensoren.
Vi ændrede dog den funktionalitet der gør at køretøjet bakker, hvis input niveauet er under middel, til at den nu i stedet drejer om sig selv indtil den ser en lyskilde.
Derud over blev der på monteret en række lys på toppen af køretøjet. Disse blev monteret ved hjælp af et strømadapterkabel, som blev sat i en motorport. Der blev i koden nu instanstieret en RCXMotor klasse, hvor motorkraften blev sat til 100.

Overbevist, ud fra de test vi havde lavet med køretøj 1, at vores udregninger af power variablen, virkede som den skulle, gik vi direkte over til at teste køretøj 2b.
Testen foregik i et mørk rum, hvor køretøjet blev placeret midt i. Der blev så åbnet en dør og køretøjet skulle nu gerne køre hen mod døren, da der kom lys ind af den. Før lyset blev slukket blev køretøjet tændt, så den blev kaliberet til den korrekte lys værdi. Hvis dette blev gjort ville se mørke som den højeste værdi har set. Dette vil gøre den giver fuld kraft på motorerne i mørke.
Resultatet af testen kan ses i videoen nedenfor.


2b sammenkomst
Vi satte 3 køretøjer sammen i et mørk rum for at kunne observer deres opførelse. Som i forrige test blev køretøjet tændt i et lyst rum. Resultatet af testen kan ses i videoen nedenfor.


Som forventet jagtede køretøjerne hinanden og kørte ind i hinanden. Det kunne her ha været sjovt, at have en eller flere af dem kører væk fra lys, i stedet for at bliv tiltrukket af det og set deres opførelse.

Konklusion


Vi nåede desværre ikke at implementere, at MAX_LIGHT og MIN_LIGHT blev ændret hen over køretøjets livstid. 


Det samme gjorde sig gældende for at lave køretøj 3 af Braiteberg's Vehicles. Men vi snakkede hurtig om, hvordan vi ville have løst det. Vi ville have have hvert input fra lyd og lys sensoren, fra en enkel side, hver deres prioritet. Til start kunne man så giver dem hver 50% prioritet. Disse kunne så ændres alt efter om man ønskede, at finde en larmende fest eller en fest med en masse lys.

Vi har dog fået et indblik i, hvordan en lys sensor også kan bruges til andet end at genkende farver og følge en streg. Dagens arbejde med lyd sensoren minded dog en del om hvad der blevet lavet i LAB 3 med PartyFinder robotten.