Monday, February 24, 2014

Embedded Systems Lesson 3

Date: 20/2 2014
Duration of activity: 3 timer 
Group members participating: 
Henrik Jørgensen
Michael Schiønning 
William Thorsen 

Mål 


Målet med denne øvelsesgang er at gennemføre øvelserne til denne uges ugeseddel "Acting and Actuators[1]

Plan

Planen for denne uge er: 
  • Påmontere robottens lydsensor 
  • Udarbejde ugens øvelser. 
  • Påbegynd blogindlægget for denne uge med den forrige uges kritik i mente.
Resultat af øvelser 

Opgave 1 

Til den første øvelse skulle vi have monteret lydsensoren samt downloadet, compilet og kørt SonicSensorTest.java[2] til at teste vores sensor

Den nedenstående tabel viser de resultater vi har fået fra vores målinger. Til målingerne har vi gjort brug af et normalt klap samt en kontinuert tone[3] fra en af vores telefoner. Ideen med de to valg er, at klappets mønster indeholder et spring fra lav-amplitude til høj-amplitude (som vi senere ser i opgave 5). Tonen derimod bibeholder den samme amplitude (alle 10 timer...), hvilket giver os så konsistente målinger som muligt. 

cm050100
klap493211
beeeep925420

Som det fremgår af tabellen kan vi se at beep-tonen opfanges langt lettere ved de forskellige afstande. Dette kan være grundet at tonen, som førnævnt, er kontinuert, men samtidigt at klappets ampitude ikke er lige så stor som tonen og falder relativt hurtigt af i styrke. 

Alle målingerne er foretaget vinkelret på lydsensoren og afstanden er afmålt fra spidsen af sensorens "hovede".


Opgave 2

Til den anden opgave skulle vi igen gøre brug af DataLogger.java[4] fra sidste uge til at indsamle lyddata via det udleverede SoundSamling.java[5]. Grafen neden under er over beep-lyden da den som sagt var lettere at holde styr på grundet den konstante lyd. 


Opgave 3

I denne opgave skulle vi gøre brug af SoundCtrCar.java[6]. Programmet får robotten til gentagne gange at vente på en høj lyd. Ved første registrering bevæger den sig fremad, ved den anden registreting drejer den til højre. Den tredje gang vil den dreje til venstre og fjerde gang den registrerer en høj lyd stopper robotten.

Måden hvorpå programmet aflæser høje lyder er, at i metoden waitForLoudSound bliver der konstant taget prøver med lydsensoren indtil den modtager en prøve der ikke er mindre end det threshold (her sat til 90). Når en af de returnerede prøver er >= 90 returnerer funktionen, hvilket i dette tilfælde betyder at den har opfanget en høj lyd.  

Opgave 4

Programmet SoundCtrCar2.java[7] looper og vi skal få den til at stoppe efter et tryk på ene af vores tilgængelige knapper. Dette kan gøres ved at implemtere en buttonlistener som lytter på en input på en knap, I vores tilfælde escape og så når breaker ud af den igangværende løkke. 

Samt også lettest ved at hardcode escape til altid at breake ud af loops og terminere programmet.


Opgave 5

I denne opgave skulle vi forsøge at bruge Sivan Toledo[8] metode til at registrere klap på.

Vores endelige implementation afviger fra Toledo ved at være mindre rigid i kravene til et klap.
Vi benytter to sample-rækker, en til kort- og en til lang-tidshorisont. Størrelsesforholdet mellem medianen i de to rækker afgør da om vi tolker et klap. Opførelsen kan da reguleres ved at skrue på samplerate, samplesize og grænseværdien for tolkning af et klap.

En naiv implementation der fulgte Toledo vil være mere usikker.

...
if(soundLevel < 50) {
Thread.sleep(25);
soundLevel = sound.readValue();
if(soundLevel>85) {
Thread.sleep(250);
soundLevel = sound.readValue();
if(soundLevel<50) {
Sound.beep();
break;
}
}
}
...

I stedet for en flydende evaluering af den indkommende lyd låses tråden i mindst 275ms ved kraftige lyde længere end 25ms.
Implementationen i ClapBeep.java[9] var mere reagerende, dog kunne den få problemer ved længerevarende støj der øgede middel db for den længerevarende sample række.

Opgave 6

Til den sidste opgave skulle montere to sensorer på robotten og via de lyde den modtog skulle den altid bevæge sig imod høje lyde. For at få party robotten til at følge hvilken side lyden kom fra lavede vi et simpelt differensudtryk. Er differens 0 kør ligeud, er differens under eller over 0 så kør til den respektive side. Til dette har vi implementeret PartyBot.java[10].

Nedenfor ses en optagelse af vores PartyBot.java i funktion. Vi havde nogle enkelte problemer med at robotten kørte lige frem selvom lydkilden var placeret foran den ene sensor. Altså burde robotten ahve drejet enten til venstre eller højre. Vi regner stærkt med at dette er fordi den anden sensor formår at opfange lyden selvom den peger i en anden retning. Derfor sætter robotten sin differens til at være 0 og den kører lige frem. 

Ydermere oplevede vi at vores robot faktisk kunne opfange nogle af de lyde de andre grupper i lokalet gjorde brug af, hvilket resulterede i at robotten rørte på sig, inden vi havdde tændt for vores lydkilde. 




Konklusion

I denne uge har vi fået monteret robottens lydsensor og fået et indblik i, hvordan sensoren virker via denne uges opgaver. Dette indebærer bl.a. vores afstandsmålinger af klappe- og beep-lyden.Ydermere har vi lært at det er muligt at få robotten til at bevæge sig i bestemte retninger når den opfanger høje lyde via sin sensor. Dog har vi også erfaret at der kan være visse problemer med brugen af lyd. 

Nogle gange kan det være svært for sensoren at opfange lyde konsistent over længere afstande, som da vi forsøgte at bruge dataloggeren til at måle vores klap. Endvidere rendte vi ind i det førnævnte problem, at den ene sensor kunne opfange en lyd der var ment til anden sensor og derved skabe en hvis form for ravage 



1 http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson3.dir/Lesson.html
2 https://docs.google.com/file/d/0B22Duz_kNMvWWkxuVEx3cVhtN2c/edit
3 http://www.youtube.com/watch?v=GhhcpQI3iAs
4 http://legolab.cs.au.dk/DigitalControl.dir/NXT/src/DataLogger.java
5 http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson3.dir/SoundSampling.java
6 http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson3.dir/SoundCtrCar.java
7 https://docs.google.com/file/d/0B22Duz_kNMvWYnM3Mks1Uk1tZHM/edit
8 http://www.tau.ac.il/~stoledo/lego/ClapCounter/
9 https://docs.google.com/file/d/0B22Duz_kNMvWaFlISi02RUZWelU/edit
10 https://docs.google.com/file/d/0B2MYdpHIaaatRWhCYmNodVNjUVE/edit

No comments :

Post a Comment