fredag den 16. oktober 2009

Øvelse 5

Dato: 1. Oktober 2009
Øvelsens varighed: 3 timer
Gruppemedlemmer: Annette, Samuel og Rasmus

Mål
Formålet med denne øvelse er at bygge en robot efter LEGO modellen 9797. Derefter skal lyssensoren undersøges ved at lave målinger på forskellige farver.
Fremgangsmåde
Den samme robot som vi har brugt de tidligere uger bruges igen. Nu med lyssensoren monteret.
Klassen BlackWhiteSensor.java bruges i et projekt til at undersøge hvilke værdier vi får tilbage når sensoren holdes over en hvid overflade og en sort overflade. Værdien for den pågældende intensitet skrives ud på displayet.
Der bygges videre på projektet fra sidste test. Programmet udvides nu til at kunne detektere tre forskellige farver, hvid, sort og grøn.
Car.java klassen er tidligere brugt ved undersøgelse af ultrasonic sensor. Den indeholder metoder til at få venstre og højre motor til at køre fremad, tilbage og stoppe. LineFollowerCal.java sørger for at robotten kan følge en sort (mørk) linje på en hvid (lys) baggrund. De to klasser bruges sammen med den udvidede BlackWhiteSensor.java klasse så bilen bruger de kalibrerede værdier og grænser til at teste hvilken farve gulvet har og styrer efter det. I første omgang som nævnt kun hvid og sort så den kan følge en sort linje.
Det sidste projekt som kan følge en sort linje udvides til at få robotten til at registrere når den når det grønne underlag og stoppe med at køre.


Resultater
1. Sensoren er monteret på robotten. Den sidder lavt og er ikke fleksibel.

2. Projektet BlackWhiteSensor1 er lavet ud fra BlackWhiteSensor klassen. Programmet er tilpasset ved at lave en main() hvor der oprettes et BlackWhiteSensor objekt, kalibreringsmetoden kaldes (kalibrerer ved at aflæse værdier for en sort og en hvis overflade) og så længe escape knappen på robotten ikke aktiveres udlæses aktuelle værdier for overfladen som lyssensoren er over. BlackWhiteSensor klassens metode light() der returnerer værdier for lysintensiteten bruger metodekaldet readValue() som har en returværdi på mellem 0 og 100. Programmet blev testet og vi fik følgende værdier:
Sort = 36
Hvid = 59

3. For at kunne detektere grøn bygges videre på projektet. Det er nødvendigt at ændre kalibreringsmetoden så først kalibreres nu sort, derefter grøn og til sidst hvid, ligesom før ved at holde sensoren over den givne farve og til sidst beregnes tærskelværdien mellem sort og grøn som halvdelen af forskellen mellem de to farves sensorværdier og tærskelværdien mellem grøn og hvid beregnes på tilsvarende måde:
blackGreenThreshold = ((greenLightValue-blackLightValue)/2) + blackLightValue;
greenWhiteThreshold = ((whiteLightValue-greenLightValue)/2) + greenLightValue;
Dette testes og resultaterne skrives ud på displayet og det kan verifceres at beregningerne passer.

Efterfølgende ændres black() og white() metoderne og der laves en green() metode. De bruger tærskelværdierne fundet under kalibrering og returnerer true eller false. I main() bibeholdes koden fra BlackWhiteSensor projektet og der tilføjes tests hvor black(), green() og white() metoderne kaldes.
En test viser at sort og hvid er som før målt ca. hhv. 36 og 59 og grøn har værdien 38. Disse værdier er svære at bruge, da der ikke er stor afstand mellem resultaterne. I stedet for at kalde readValue() for at få returneret en værdi for lysintensiteten ændres koden til at kalde readNormalizedValue(), som returnerer den rå værdi direkte fra A/D konverteren. Her er intervallet 0-1023, hvor lave værdier er mørkt og høje værdier er lyst.
Med denne metode fik vi værdierne:
Sort = 378
Grøn = 537
Hvid = 613

Dermed fungerer farvetesten som den skal og vi kan se på LCD displayet at når sensoren holdes over grøn står der: Black: False, Green: True og White: False helt som ønsket. Koden kan ses i projektet BlackWhiteGreenSensor2.

4. BlackWhiteFollower3 projektet er et nyt projekt med den gamle BlackWhiteGreenSensor klasses metoder. Dog er main fjernet. Main ligger nu i LineFollower4 klassen der sammen med Car5 klassen udgør resten af projektet. Ideen er her at prøve den ny BlackWhiteGreenSensor klasse til i første omgang at kunne detektere sort og hvid så robotten kan følge en sort streg på en hvid baggrund.

Robotten er afprøvet på en rampe med en sort linje i midten, se figur 1 på http://www.legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson6.dir/Lesson.html . Robotten følger linjen fint opad og nedad, men har lidt problemer når den skal fra den skrå rampe og op på de plane stykker af banen. Det skyldes sandsynligvis at der er et lille stykke tid hvor afstanden mellem lydsensoren og banen er større. Det skal der udtænkes en løsning på, eventuelt kan sensoren sættes på en fleksibel arm med et hjul på, så der hele tiden vil være den samme afstand mellem gulv og sensor.

5. Til GreenBlackWhiteFollower bruges igen BlackWhiteGreenSensor. Som det ses i Figur 1 sørger robotten for at holde sig på kanten af den sorte linje som før ved at detektere på om den returnerede sensorværdi svarer til sort eller hvid. Den sidste test går på om der detekteres grønt. I dette tilfælde stopper bilen med det samme og sætter kun i gang igen hvis den flyttes og der ikke længere detekteres grønt.
Figur 1
Testen af programmet på rampen har vist at der er problemer. Bilen går hele tiden i stå. Det ser ikke ud til at der er fejl i koden så det skyldes at den simpelthen detekterer grøn hele tiden. Det vil sige at der er problemer med den måde vi detekterer farverne på, for overgangen mellem den sorte linje og underlaget giver tilsyneladende en returværdi der svarer til den grønne lysintensitet.
Der er ikke mere tid til denne øvelse, så i næste øvelse skal vi starte med at have løst dette problem.

Konklusion:
Robotten fik påmonteret sensoren, og de senere undersøgelser har vist at den muligvis skal sættes på en fleksibel arm for at undgå problemer når den skal over en kant.
Målinger med lyssensoren gav os de forskellige intensiteter af hvid, grøn og sort og da det gav os værdier på 36 og 38 for hhv. sort og grøn besluttede vi i stedet for at læse de rå værdier fra A/D converteren, det giver større intervaller mellem farverne og fungerede bedre.
En videreudvikling af projektet gjorde det muligt at få robotten til at følge en sort linje med udgangspunkt i lyssensorens kontinuerte målinger og intervallerne for sort og hvid.
En tilføjelse til programmet der bestod i at detektere den grønne farve og stoppe robotten gav problemer. I overgangen mellem den sorte linje og den hvide baggrund er der målinger som svarer til den grønne farves lysintensitet og det medfører at robotten stopper hvor det ikke er meningen. Vi har ideer til hvordan vi kan undgå dette og vil arbejde videre med det i næste uge.

Referencer:
1. BlackWhiteSensor projektet af Ole Caprani tilføjet main: http://www.daimi.au.dk/~u071252/DL/BlackWhiteSensor.java

2. BlackWhiteGreenSensor projektet (udvidelse af BlackWhiteSensor ): http://www.daimi.au.dk/~u071252/DL/BlackWhiteGreenSensor.java

3. BlackWhiteFollower: http://www.daimi.au.dk/~u071252/DL/BlackWhiteFollower.rar

4. LineFollower: http://www.daimi.au.dk/~u071252/DL/LineFollowerCal.java

5. Car: http://www.daimi.au.dk/~u071252/DL/Car.java

Ingen kommentarer:

Send en kommentar

Faste læsere

Bidragydere