torsdag den 9. februar 2012

Lego LAB Uge 2

Tilstede:

Mikkel Nielsen (20082285)
Peter Jessen (20082519)
Søren Bramer Schmidt (20082602)

Mål
Målet med dagens øvelse er at lege med en ultrasonic sensor.


Plan
  • Tilføje en ultrasonic sensor til NXT robotten
  • Compile, uploade og teste SonicSensorTest.java klassen.
  • Compile, uploade og kører Tracker.java og Car.java klasserne.
  • Ændre variablerne i de ovenstående programmer, for at teste deres effekt.
  • Afprøve Wallfollower (eventuelt omskrive til Java kode)
  • Installere Lejos og drivere på 2 computere mere.
  • Afprøve installation via Bluetooth.



Resultater 
Test af ultrasonic sensor


Robotten blev tilført en ultrasonic sensor som beskrevet på side 28-29 af den medfølgende 9797 bygningsmanual. Vi overførte herefter SonicSensorTest programmet og kunne konstatere at det målte afstanden fra sensoren som forventet. Vi udførte herefter en test af dens præcision ved forskellige afstande til forskellige materialer. Testen blev udført ved, at vi placerede robotten, med sensoren installeret, med forskellige afstande til diverse objekter. Afstanden blev så fysisk målt med en linial, og sammenlignet med sensorens måling.
Testen viste os, at det ikke var ligegyldigt hvilket materiale som sensoren måler afstanden til.
Som man kan se herunder, er den faktiske afstand sammenlignet med den målte fra sensoren.

Afstand til hvid tapet's væg
Reel afstand (cm)                   Målt afstand (cm)
67                                                    71
40                                                    45
24                                                    24
148                                                 151
200                                                 203
225                                                 227-228

Der syntes at være en lille forskel i reel og målt afstand, hvilket kan forklares med at den ikke er præcist kalibreret.



Vi testede også den maksimale afstand som sensoren kan måle til forskellige materialer. Da de høj-frekvente impulser ikke bliver reflekteret lige godt af alt materiale har dette en effekt.

Objekt                                 Maksimal afstand
Radiator(metal)                               180 cm
Pude(stof)                                        100 cm
Billede(glas)                                    253 cm

Den glatte overflade reflekterer bedre end den ru overflade fra stoffet. Testen her viste os også, at vinklen på objektet har en betydning. Hvis ikke det målte objekt er tilpas lodret, så tror sensoren at det er en del af gulvet.






Vi fjernede delayet på 300 ms, som fandtes i den ældre version af NXT'en. Dette viste sig ikke længere at være nødvendigt.

Da lydenshastighed er 340,29 m/s og afstanden fra sensoren til den maksimalt målte afstand er 253 cm * 2 = 506 cm, får vi et delay af information på:

5,06 m / 0,34029 m/ms = 14,87 ms

Dette har teoretisk set en effekt, men i vores tilfælde kører robotten ikke hurtigt nok til at det har en reel effekt.

Test af tracker klassen
Vi fik installeret tracker klassen og kunne konstatere, at det virkede ved at robotten kunne køre frem mod en mur og stod herefter og oscillerede frem og tilbage, omkring threshold'et på 35 cm. Ved at øge delayet imellem målingerne kunne vi øge robottens oscillering.
Vi indførte herefter et ekstra tjek i koden, som ser om fejlmarginen til muren er mindre end 2 cm, og i så fald skal robotten stoppe helt. Dette fjernede oscilleringen.

Bluetooth installation
Da det er besværligt at tilslutte ledningen hele tiden, besluttede vi at få bluetooth til at virke, inden vi gik videre med næste opgave. Dette viste sig at være ganske nemt, da der findes et android program til styring af en NXT robot, som vi kunne bruge til at teste forbindelsen. Da dette virkede fint og vi kunne fjernstyre robotten, fik vi tilsluttet en pc og igennem eclipse virkede dette som plug-'n'-play. 

Wallfollower
Vi startede med at ombygge robotten således at robottens ultrasonic sensor sad med en vinkel på 45 grader til venstre. Denne model tog vi ud fra eksemplet fra http://www.philohome.com/wallfollower/wallfollower.htm. Ved at kigge lidt fremad, istedet for direkte til siden, kan vi hurtigere se om robotten er på vej væk fra en mur eller hen imod den.
Herefter skrev vi koden ud fra Philippe Hurbains eksempel. Dette involverede flere tests langs en mur, for at se om robotten drejede som ventet. De første par forsøg viste at robotten drejede for meget og for tit. Ved at ændre på treshold'et, således at det blev et interval på 5 cm, istedet for en bestemt længde, fik vi robotten til at følge muren mere lige.
 
Kode vi har skrevet til Wallfollower følger denne struktur:

int threshold = 25;
       
         if (distance < threshold - 5)
         { 
            // drej til højre
         }
        
         else if (distance > threshold + 5)
         {
            // drej til venstre
         }
        
         else
         {
             // direkte fremad
         }
 

Den fulde sourcekode kan findes på:
http://users-cs.au.dk/u082285/LegoLAB/uge2/



Status
Vi har i alt brugt 4,5 time på denne øvelsesgang.Vi nåede det meste af planen. Det vi ikke nåede var at få installeret lejos på de andre computere. Vi ville også gerne få bluetooth til at virke således, at vi kunne skrive information fra robotten direkte til computeren. Dette ville kræve, at vi satte os mere ind i koden, og vi valgte derfor at udskyde dette til næste øvelsesgang. Målet med at få leget med ultrasonic sensoren blev i hvert fald opnået, og vi fik en større forståelse for at få kodet robotten.

Referencer
http://www.legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson2.dir/Lesson.html

Ingen kommentarer:

Send en kommentar