... | @@ -17,13 +17,13 @@ Planen for øvelsen består i at følge [1], og i forbindelse hermed dokumentere |
... | @@ -17,13 +17,13 @@ Planen for øvelsen består i at følge [1], og i forbindelse hermed dokumentere |
|
## Results
|
|
## Results
|
|
|
|
|
|
### Exercise 1
|
|
### Exercise 1
|
|
I denne øvelse placeres bilens lyssensor over forskelligt farvede overflader (se video 1). De fundne værdier lys-reflektions værdier er dokumenteret i tabellen nedenfor.
|
|
I denne øvelse placeres bilens lyssensor over forskelligt farvede overflader (se video 1, der viser LEGO bilen køre efter en sort streg), for at identificere deres lysintensitet. De fundne værdier lysreflektions værdier er dokumenteret i tabellen nedenfor.
|
|
|
|
|
|
Video 1:
|
|
Video 1:
|
|
|
|
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=Go5jqZTe6is)
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=Go5jqZTe6is)
|
|
|
|
|
|
| Farve | Lysintensitet i % |
|
|
| Farve | Lysintensitet i % (refleksion) |
|
|
| ------------- |:-------------: |
|
|
| ------------- |:-------------: |
|
|
| Hvid | 57 |
|
|
| Hvid | 57 |
|
|
| Sort | 34 |
|
|
| Sort | 34 |
|
... | @@ -40,15 +40,15 @@ Laveste værdi (sort): 34 % |
... | @@ -40,15 +40,15 @@ Laveste værdi (sort): 34 % |
|
Højeste værdi (hvid): 57 %
|
|
Højeste værdi (hvid): 57 %
|
|
|
|
|
|
|
|
|
|
For at finde det punkt, hvor vi skelner mellem sort og hvid tager vi gennemsnittet af 34 og 57. Vi får 45,5. Denne værdi stemmer godt overens med BlackWhiteThreshold=45 fra LineFollower.java.
|
|
I navigeringen af LEGO bilen skal vi kende til to retninger, hhv. højre og venstre, hvilket betyder at vi skal have to lysintensitets intervaller hvorudfra vi kan vide om vi enten skal dreje til venstre eller højre for at følge den optrukne linie. Disse intervaller kan findes ved at tage gennemsnittet af den højeste og laveste lysintensitet værdi, i vores måleresultater er skilleværdien 34+57/2 = 45,5. Denne værdi stemmer godt overens med værdien fra den udleverede kode (45, variabelnavn: BlackWhiteThreshold i LineFollower.java).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Exercise 2
|
|
### Exercise 2
|
|
|
|
|
|
I denne øvelse læser vi værdien for samme farve, men denne gang er det røde lys slukket, så farverne bliver målt ved ambient lys, og ikke ved reflektion af det røde lys.
|
|
I exercise 1 bruger LEGO-bilen refleksionen fra lys-sensoren til at måle den pågældende lysintensitetsværdi ved selv at oplyse den afmålte flade. I denne øvelse læser vi lysintensitetsværdien de samme farver som i exercise 1, men denne gang med slukket lys. Farverne bliver således målt ved ambient lys, og ikke ved refleksion af det røde lys. Tabellen nedenfor viser resultatet af målingerne.
|
|
|
|
|
|
| Color | Light (%)|
|
|
| Farve | Lysintensitet i % (ambient)|
|
|
| ------------- |:-------------: |
|
|
| ------------- |:-------------: |
|
|
| White | 32 |
|
|
| White | 32 |
|
|
| Black | 21 |
|
|
| Black | 21 |
|
... | @@ -59,26 +59,36 @@ I denne øvelse læser vi værdien for samme farve, men denne gang er det røde |
... | @@ -59,26 +59,36 @@ I denne øvelse læser vi værdien for samme farve, men denne gang er det røde |
|
| Blue | 26 |
|
|
| Blue | 26 |
|
|
| Grey | 29 |
|
|
| Grey | 29 |
|
|
|
|
|
|
Vi ser af tabellen ovenfor at vi har et spænd på 11. Dvs. punktet hvor vi skelner mellem sort og hvid bliver 26,5.
|
|
Vi ser af tabellen en klar forskel fra målingerne i exercise 1, hvor vi havde et spænd mellem højeste og laveste værdi på 57-34 = 23. Ved målingerne i ambient lys har vi derimod kun et spænd på 32-21 = 11, dvs. spændet ca. er halveret ved at slukke for reflektionslyset. Skilleværdien er dermed 32+21/2= 26,5. Problemet med dette er at intervallerne hvorved vi klassificere hhv. et højredrej og venstredrej er væsentlig mindre end med oplyst flade, hvilket gør det svære for bilen at kende forskel. Dette ville i særdeleshed have været et stort problem hvis man skulle følge linjer med forskellige farver, fremfor blot at følge en hvilkensomhelst linie, som vi gør nu.
|
|
|
|
|
|
|
|
|
|
### Exercise 3
|
|
### Exercise 3
|
|
I programmet LineFollower.java benytter vi os af et sample interval på 10 msec (dvs. der går 10 msec mellem hver læsning). Vi afprøvede hhv. 100 msec, 500 msec og 1000 msec (dokumenteret i videoerne nedenfor).
|
|
I exercise 1 og 2 benytter vi os af et sample interval på 10 msec i programmet LineFollower.java (dvs. der går 10 msec mellem hver lyssensorlæsning). Ved at ændre på dette sample interval kan man således justere for, hvor lang tid der skal gå mellem målingerne. Vi afprøvede hhv. 100 msec, 500 msec og 1000 msec (dokumenteret i videoerne nedenfor).
|
|
|
|
|
|
Sample interval 100 msec:
|
|
Sample interval 100 msec:
|
|
|
|
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=2g9JRPFdsH4)
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=2g9JRPFdsH4)
|
|
|
|
|
|
|
|
Vi ser at ved 100 msec sample rate begynder bilen meget hurtigt at snurre rundt om sig selv i forsøget på at fange stregen. Det lykkedes bilen at følge stregen ca. 10 cm, hvorefter udsvingene gør at bilen mister stregen og begynder at snurre rundt om sig selv.
|
|
|
|
|
|
Sample interval 500 msec:
|
|
Sample interval 500 msec:
|
|
|
|
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=--6qCYDqn5s)
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=--6qCYDqn5s)
|
|
|
|
|
|
|
|
Igen mister bilen hurtigt den sorte streg ved 500 msec sampling rate. Udsvingningerne bilen laver er blevet væsentlig større, og stregen fanges kun et par gange. Bilen er blevet væsentligt dårligere til at korrigere efter stregen ift. 10 msec. og ryger dermed ud af kurs mere eller mindre med det samme.
|
|
|
|
|
|
Sample interval 1000 msec:
|
|
Sample interval 1000 msec:
|
|
|
|
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=SbqfYfSbXrc)
|
|
[![image alt text](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=SbqfYfSbXrc)
|
|
|
|
|
|
|
|
Det lykkedes stort set ikke bilen at fange den sorte streg på noget tidspunkt, fordi udsvingene er blevet for store, hvilket giver bilen meget ringere reaktionsevne end de foregående forsøg med 100 msec og 500 msec.
|
|
|
|
|
|
|
|
|
|
|
|
Opsummeret er det altså vigtigt at “kigge” ud i ens omgivelser i et tidspektiv der gør det muligt at reagere i tide. Det er som undersøgt i ovenstående eksperiment fundet ud af at desto langsomme sampling rate (100, 500 og 1000 msec) desto dårligere er bilen til at følge linien.
|
|
|
|
|
|
|
|
|
|
### Exercise 4
|
|
### Exercise 4
|
|
I denne exercise benyttede vi os af programmet DataLogger.java, der er i stand til at logge data fra lys-sensoren (lys-værdier). Output-værdierne er plottet ind som grafer, der viser det læste lys-værdier ved test-tur af LEGO bilen. Forskellige sample-intervaller er afprøvet for at se hvordan det påvirker oscillationerne i grafen.
|
|
I denne exercise benyttede vi os af programmet DataLogger.java, der er i stand til at logge data fra lyssensoren (lysværdier). Output-værdierne fra dataloggeren er derefter plottet ind som grafer, der viser det læste lys-værdier ved kørsler af LEGO bilen der følger en linie. Forskellige sample-intervaller er afprøvet for at se hvordan det påvirker oscillationerne i grafen.
|
|
|
|
|
|
Graf 1 (10 ms sampling):
|
|
Graf 1 (10 ms sampling):
|
|
|
|
|
... | @@ -96,16 +106,12 @@ Graf 4 (75 ms sampling): |
... | @@ -96,16 +106,12 @@ Graf 4 (75 ms sampling): |
|
|
|
|
|
![download (2)](http://gitlab.au.dk/uploads/group-5/group-5-lesson-1/e9445b786d/download__2_.png)
|
|
![download (2)](http://gitlab.au.dk/uploads/group-5/group-5-lesson-1/e9445b786d/download__2_.png)
|
|
|
|
|
|
Perioden på bølgerne i de forskellige grafer bliver længere jo højere frekvensen er.
|
|
Ud fra graferne ses det hvordan perioden på bølgerne i de forskellige grafer er afhængig af frekvensen - dvs. perioden bliver længere desto højere frekvensen er (oscillationer er bredere) . Derudover ses det at amplituden på bølgerne umiddelbart er ens i alle graferne. Dette skyldes formodentlig at de målte værdier er de samme (farverne på det underliggende bord). Endvidere er det også muligt identificere et “knæk” omkring tid 5000. Knækket skyldes at robotten drejer langs et hjørne, og de forkortede udsving skyldes derfor at LEGO-bilen korrigere sine udsving for at komme på rette kurs igen.
|
|
|
|
|
|
Amplituden på bølgerne er umiddelbart ens i alle graferne. Det skyldes at de målte værdier selvfølgelig er de samme, nemlig farven på det underliggende bord.
|
|
|
|
|
|
|
|
Knækket det sker omkring tid 5000 skyldes at robotten drejer langs et hjørne. Ved at se overvejende mere sort end hvid, drejer robotten til
|
|
|
|
|
|
|
|
|
|
|
|
### Exercise 5
|
|
### Exercise 5
|
|
|
|
|
|
Ved kørsel af program SensorPortTest.java er det muligt for os at læse de "rå værdier" istedet for light percentage (som vi læste i exercise 1 og exercise 2). De rå værdier kan ses af tabellen nedenfor.
|
|
LightSensor klassen implementerer metoden readValue, der beregner lysintensiteten (%) ud fra formlen lightPercent = 100*(1-rawValue/1023), hvor rawValue er en 10-bit værdi mellem 0-1023, der kommer direkte fra lyssensoren. Ved kørsel af program SensorPortTest.java er det muligt for os at læse disse rå værdier direkte (istedet for light percentage som vi læste i exercise 1 og exercise 2). De rå værdier kan ses af tabellen nedenfor. Ved at læse de samme værdier for farverne som i exercise 1 og 2 er det muligt for os at sammenholde resultaterne, for at beskrive sammenhængen mellem light percentage og de rå værdier.
|
|
|
|
|
|
| Color | Light (%)|
|
|
| Color | Light (%)|
|
|
| ------------- |:-------------: |
|
|
| ------------- |:-------------: |
|
... | @@ -118,19 +124,17 @@ Ved kørsel af program SensorPortTest.java er det muligt for os at læse de "rå |
... | @@ -118,19 +124,17 @@ Ved kørsel af program SensorPortTest.java er det muligt for os at læse de "rå |
|
| Blue | 602 |
|
|
| Blue | 602 |
|
|
| Grey | 516 |
|
|
| Grey | 516 |
|
|
|
|
|
|
Vi ser at farverne er distribueret med et større spænd når vi læser de rå værdier frem for %-værdierne, dvs. vi har flere decimaler til rådighed og der er dermed mindre sandsynlighed for at farverne bliver forvekslet.
|
|
Vi ser først og fremmest at værdierne er omvendte (dvs. højeste lysintensitet er laveste værdi). Herudover ser vi at farverne er distribueret med et større spænd når vi læser de rå værdier frem for %-værdierne, dvs. vi har flere decimaler til rådighed og der er dermed mindre sandsynlighed for at farverne bliver forvekslet, hvilket kan blive brugbart hvis vi skal skelne mellem mange forskelligt farvede linjer.
|
|
|
|
|
|
### Exercise 6
|
|
### Exercise 6
|
|
I denne exercise testede vi hvordan hukommelses forbruget reagerer på måden hvorved en string tilgås. Vi afprøvede to metoder: 1) Direkte indsætning af string i metode kald (blå) 2) Som reference til en felt variabel (rød).
|
|
I denne exercise testede vi hvordan hukommelses forbruget reagerer på måden hvorved en string tilgås i et metode kald. Vi afprøvede to metoder: 1) Direkte indsætning af string i metodekald (blå streg) 2) Som reference til en feltvariabel (rød streg).
|
|
|
|
|
|
Resultatet kan ses af grafen nedenfor.
|
|
|
|
|
|
|
|
![alt text](https://photos-6.dropbox.com/t/2/AAAZYhkT6hRdU5wD2fO21N2hv7iIqsH3wt00yHtepUSZ4g/12/3327500/png/1024x768/3/1423760400/0/2/Lesson%201%20-%20Exercise%206.png/CIyMywEgASACIAMoASgC/zO-xC_3-TilPpksSn9EGW9frdaFKqsxpx5yldjF1uak)
|
|
![alt text](https://photos-6.dropbox.com/t/2/AAAZYhkT6hRdU5wD2fO21N2hv7iIqsH3wt00yHtepUSZ4g/12/3327500/png/1024x768/3/1423760400/0/2/Lesson%201%20-%20Exercise%206.png/CIyMywEgASACIAMoASgC/zO-xC_3-TilPpksSn9EGW9frdaFKqsxpx5yldjF1uak)
|
|
|
|
|
|
Den røde graf anviser tydeligt at hukommelsesforbruget er nærmest konstant, hvorimod den blå graf fremstår oscilerende. Årsagen er at hver gang vi kalder en metode med direkte string indsætning oprettes et nyt string objekt på java heapen. Eftersom metoden bliver kaldt meget ofte (hvert 10 ms) fyldes heapen hurtigt op, hvilket garbage collectoren reagere på og fjerner de string objekter der ikke længere bruges. Ved brugen af en reference til en felt variabel med en string, oprettes der ikke et nyt objekt for hvert metode kald --- string'en bliver blot hentet ind via dens reference i hukommelsen. Det er derfor bedst at obevarer string'en i en felt variabel, og undgå en overaktiv garbage collector, som potentielt set kan dræne batteriet meget hurtigt.
|
|
Den røde graf viser tydeligt at hukommelsesforbruget er nærmest konstant, hvorimod forbruget for den blå graf fremstår oscillerende. Årsagen til dette skyldes, at hver gang vi kalder en metode med 1), den direkte string indsætning, oprettes et nyt string objekt på Java heapen som bliver født ind i metode kaldet. Eftersom metoden bliver kaldt meget ofte (hvert 10 ms) fyldes heapen hurtigt op, hvilket garbage collectoren reagerer på og fjerner de string objekter der ikke længere bruges. Ved brugen af 2), en reference til en feltvariabel med en string, oprettes der ikke et nyt objekt for hvert metodekald --- string'en bliver blot hentet ind via dens reference i hukommelsen. Det er derfor bedst at opbevare statiske strings i en feltvariabel, og dermed undgå en overaktiv garbage collector, som potentielt set kan dræne batteriet meget hurtigt.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## References
|
|
## References
|
|
|
|
|
|
[1] http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson1.dir/Lesson.html |
|
[1] http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson1.dir/Lesson.html |
|
\ No newline at end of file |
|
|