Dato : 16-02-2012
Varighed: 5 timer
Tilstedeværende: Jonas og Simon
Goal
Målet med denne lab session er at udforske lyd sensoren og derved få en bedre forståelse af hvordan den virker og hvordan den kan bruges som en del af en robot.
Plan
Planen for denne session er som følger
- Test af lydsensor ved hjælp af programmet SonicSensorTest.java
- Logning af data fra lydsensoren for at undersøge lydprofilen af et klap
- Kørsel af programmet SoundCtrCar.java for derefter at undersøge brugen af lydsensoren.
- Udvikling af en bil som kan kontrolleres ved hjælp af klap.
- Udvikling af "Party Finder" robot, som kører efter lyd.
Results
Nedenfor vil hvert enkelt punkt fra planen blive gennemgået og resultaterne vil bliver fremvist og vurderet.
- Den første test af lydsensoren var en simple test, hvor outputtet fra lydsensoren blev skrevet ud på displayet. Det blev så klappet med forskellige afstande til bilen. Resultatet vist på skærmen var at de højeste lyde lå på omkring 97 og baggrundsstøjen lå på omkring 3-4. Derudover blev det observeret at målingerne svingede utroligt meget.
- Næste test gik ud på at få skrevet værdierne af målingerne fra lydsensoren ned for at se hvordan lydprofilen af et klap er. Der blev derfor brugt programmet DataLogger.java til at logge ned i en fil. Efterfølgende kunne denne fil overføres fra NXTen til PCen ved hjælp af programmet nxjbrowse. Disse data blev sat ind i en graf ved hjælp af Google Spreadsheets. Grafen kan ses nedenfor. Efter at have kigget i dataen ses følgende. Det første klap vokser fra under 25 til over 80 på 20 milisekunder, derefter forbliver det højt i 175 milisekunder for så at falde til under 25 på 75 milisekunder. Det andet klap vokser fra under 25 til over 80 på 15 milisekunder, derefter forbliver der højt i 185 milisekunder for derefter at falde til under 25 på 190 milisekunder.
De to klap har altså en ret ens profil på nær når de aftager, hvor de er lidt forskellige.
Denne øvelse går ud på at installere programmet SoundCtrCar.java og derefter observere hvordan programmet fortolker lyde og hvad det gør.Programmet lytter efter en lyd som er over 90 i lydniveau. Første gang den høres kører den frem, anden gang højre, tredje gang venstre og fjerde gang stopper den. Derefter starter det forfra.
Observationer
Lyde der aktiverer bilen: råb, klap, fløjt osv.. Alt der genererer over 90 i lydniveau. Hvis en lyd varer længere end 500 milisekunder bliver lyden opfanget to gange og programmet hopper derved en operation over.
Derudover er der blevet observeret at man ved at vifte luft hen mod lydsensoren kan få den til at opfange dette som lyd.- Denne øvelse bygger videre på øvelse 3. I øvelse 3 reagerede bilen på alle høje lyde (over 90), men målet er nu at få bilen til kun at reagere på klap. I øvelse 2 blev der fundet en lydprofil for et klap, som stemmer meget godt overens med det
Sivan Toledo er kommet frem til i sine undersøgelser. Vi vil derfor forsøge at bruge denne lydprofil til at implementere en bil som kun reagerer på klap.
Programmet består af tre lukkede control loops. Det yderste control loop detekterer hvornår lydniveauet overstiger 50. Når det sker hopper programmet ind i en ny control loop, som maksimalt kører i 30 milisekunder. Hvis programmet inden for de 30 milisekunder detekterer at lydeniveauet overstiger 80 hopper det ind i den sidste control loop. I den sidste control loop kører programmet maksimalt i 250 milisekunder. Hvis lydnivauet inden for de 250 milisekunder registreres til under 50 går vi ud fra at det er et klap, der er blevet registreret. Da der er andre lyde, som har stort set den samme lydprofil som et klap, blev det ydre control loop lave til at skulle detektere 2 klap med under 1 sekunds afstand. - Den sidste øvelse går ud på at lave en robot, som bevæger sig hen mod høje lyde. Derfor har det været nødvendigt at påmontere en ekstra lydsensor, for at kunne bestemme hvilken retning en lyd kommer fra.
Programmet er som følger:Der læses på begge sensorer. Hvis en af sensorernes lydmåling er over 70, køres i den retning hvor den højeste måling kom fra. I tilfældet hvor begge målinger er lige høje køres der ligeud.
Observationer ved forsøg:
Robotten har meget svært ved at skelne højre fra venstre. F.eks. kan højre lydmåler godt måle mere end den venstre, selvom lyden kommer fra venstre. Hvis man klapper bag ved robotten, kører den stadig fremad.
Fejlretning:
Der blev efter lidt granskning af koden fundet en fejl i logikken, hvor robotten kun kørte hvis begge målinger var over 70. Det blev hurtigt rettet og et nyt forsøg blev lavet. Her opførte robotten sig lidt bedre, men der var stadig problemet som er beskrevet ovenfor, hvor den lydmåler som er længst væk fra lydkilden, nogle gange registrerer den højeste lyd.
