fredag den 29. oktober 2010

Lab 7

Dato: 28/10 - 2010
Varighed: 12 - 16
Medvirkende: Morten Rasmussen, Kenneth Sejdenfaden Bøgh, Morten Nikolaj Pløger.

Mål:

http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson7.dir/Lesson.html

At teste forskellige måder at opsætte agents vha. sensorer.
Vi vil starte med at sætte en enkelt agent op, og derefter gå videre til at afprøve to sensorer, både parallel og krydset opsætning.

Vi har valgt at lave vores forsøg med lydsensorer i første omgang og så evt gå over til lys sensorer senere.

Plan:

Først afprøve en enkelt sensor, som vist på tegning 1. Derefter vil vi lave 2a og slutte af med 2b.

Vi bruger standard robotten fra mindstorms manualen som base og modificerer den efter behov.

Forløb:

En sensor:

Vi startede med at genanvende koden fra SonicSensorTest fra en tidligere lab, hvor vi selvfølgelig kalder på lydsensoren istedet for sonicsensoren.

Se koden her.

Herved kunne vi konstatere at lydsensorens metode readValue() giver en et output fra 0 til 100, og at sensoren forøvrigt virker. Denne fordeling passer godt med at motorens metode Motor.setPower(int value) tager værdier fra 0 til 100.
Vi holdt vores agent simpel og sender output fra sensoren direkte ned til motoren. Dette virker fint og vi kan få robotten til at kører frem med en enkelt sensor uden problemer.
Altså virker vores første konstruktion ved at sende umodificerede rå værdier direkte ned i motoren.
Vi har dog observeret at værdien til motorens setPower() skal være over 15 før vi får en reaktion hvilket bevirker at lyd langt væk ikke påvirker robotten særlig meget.
Denne observerede opførsel har vi valgt at beholde da det gør tests lettere i lab hvor der jo er noget baggrundsstøj.

Koden til vores setup med én sensor kan findes her.




To sensorer:

Efter vores første success valgte vi at beholde det grundlæggende design på robotten, og blot modificerer designet til at supporterer to sensorer.



Derefter skrev vi vores kode lidt om således at vi havde et setup magen til figur 2a. Altså skulle robotten sende signal fra venstre sensor til venstre motor og gøre det samme i højre side.
Dette medførte nogle interference problemer da begge sensorer læste næsten de samme værdier, hvilket medfører at robotten kun drejer meget lidt ved lyd fra forskellige retninger.

Den første kode vi har brugt til to sensorer kan findes her.

Efter lidt brainstorming kom vi frem til to løsninger. Enten skulle sensorerne flyttes længere væk fra hinanden, eller også skulle vi introducerer en slags støjværn.
Vi blev enige om at starte med den sidste løsning, hvilket gav gode resultater når lyden kom fra siden, men det gik mindre godt når lyden kom forfra. Ved lidt eksperimentering fandt vi ud af at problemet lå i at mikrofonerne pegede ned af og at den øverste plade af støjværnet lukkede for mange lyde ud. Som sådan fjernede vi den øverste plade og instruktoren foreslog at fjerne baghjulet for at justerer vinklen.
Dette gav gode resultater og robotten begyndte at reagerer meget godt uanset hvor lyden kom fra, så længe den lydkilden relativt tæt på.


2a.1


2a.2 front
2a.2 back



Da vi havde dette setup til at kører byttede vi om på motornes porte for at få et setup magen til tegning 2b.

Dette setup virkede med det samme og robotten kommer når man kalder som man kan se i videoerne nedenfor.





Vi har stadig det meget simple setup med at sende rå værdier direkte fra sensor til motor. Dette gør robotten lidt mindre følsom, og medfører også at den har svært ved at reagerer på lyde langt væk som det også ses i videon ovenfor.
I et forsøg på at forbedre denne opførsel, prøvede vi at forøge power til motorene med en konstant værdi på 10, da baggrundsstøjen var på ca. 10. Altså ændrede vi power til sensoroutput plus 10.
Det løste ikke problemet med at reagere på lyde langt væk fra robotten, men gjorde til gengæld at den reagerer lidt kraftigere på de lyde den kan høre. Denne modification gør at robotten virker mindre 'sløv', så på den måde er det en forbedring.

Den modificerede kode til to sensorer kan findes her.

To sensorer og to tråde:

Vi har som det sidste afprøvet et setup, hvor hver sensor og motor par lever i hver sin tråd. Dette har vi lavet ved at genanvende koden fra tidligere, blot ved at lave en ny klasse kaldet SensorThread, der essentielt udfører det samme arbejde som vi tidligere gjorde i main klassen for én motor og én sensor.
Man kunne forestille sig at der her kunne opstå problemer, idet hver motor kan få ændret hastigheden på forskellige tidspunkter. Det viste sig dog ikke at være tilfældet, og robotten opførte sig præcist som før.
Altså gav denne ændring ikke nogen forbedring, men man kunne forestille sig at et mere avanceret setup ville kunne anvende dette med fordel.

De to klasser der udgør denne kode er SoundThread.java og Sound4.java.


Generelle resultater og observationer:

Så længe vi arbejdede med én sensor var det relativt simpelt at få gode resultater, da sensorens output og motorens input værdier ligger i samme interval.
Da vi gik over til to sensorer blevet det skarpt sværer da lyd bølge interference var et meget reelt problem.
Vi startede med at sætte en enkelt plade i mellem de to sensorer, hvilket ikke var nok værn til at skabe reele forbedringer.
Vores sidste setup med afskærmning i to vinkler virkede tilgengæld ret godt (billede 2a.2).
Der var stadig lidt interference men vi nåede til et punkt hvor vi kunne kalde på robotten fra forskellige vinkler og få den til at opfører sig som vi forventede.

Derud over observerede vi at sensorerne reagere bedre jo højere frekvens vi brugte. Fx gav almindelig højlydt tale næsten ingen reaktion. Tilgengæld reagerede den fint på fløjt og lyse stemmer som vores videoer tydeligt demonstrerer.

Som en sidste observation opdagede vi at mikrofonerne er klart bedst på kort afstand. Hvis man kommer et par meter væk, skal der virkelig råbes igennem for at få en reaktion. Dette har nok mere at gøre med lydbølgers opførsel end mikrofonens kvalitet, men det var dog alligevel noget vi bed mærke i da målingerne falder meget brat når man kommer en vis afstand væk.

Ingen kommentarer:

Send en kommentar