Thursday, February 14, 2013

Week 3

Week 3

Dato:

14-02-2013

Varighed:

Fælles lab: 5 timer
Blog: 4 timer

Deltagere:

Martin
Nikolaj
Steffen

Status

Vi har samlet LEGO 9797 og monteret UltraSonic sensoren, som beskrevet i LEGO Mindstorm Education NXT Base Set 9797. Desuden har vi fået leJOS til at virke på alle computerne i gruppen. Computeren med OS X virker dog ikke med tilslutning via Bluetooth.

Mål

Målet for denne øvelsesgang er at lave opgaverne for "Week 3 - Sensing and Sensors - Analog|Digital conversion"1 og derigennem forstå hvordan sensorerne i Lego Mindstorms virker. Endvidere er det et mål at få leJOS installeret på de resterende maskiner, så alle gruppens computere kan kommunikere med robotten. Desuden skal der oprettes et blogindlæg med henblik på denne laboratoriesession, hvor vi skal huske på den feedback, vi fik fra forrige uge (Week 2).

Plan

  • Afslutning af installation af leJOS.
  • Løse opgaverne for "Week 3 - Sensing and Sensors - Analog|Digital conversion"1 .
  • Udarbejdelse af blogindlæg for "Week 3 - Sensing and Sensors - Analog|Digital conversion"1 .

Afslutning af installation af leJOS


OS X


Efter at have fulgt tutorialen "Getting Started on OS X"2 uden succes blev tutorialen, der beskriver, hvordan man installerer og kører leJOS via et plugin i Eclipse3 , fulgt. Installationen af pluginet var simpel, men da der skulle kompileres et Java-program for at teste, at der kunne uploades til robotten, opstod fejlen "This Java instance does not support a 32-bit JVM.". Efter at have søgt på internettet var det første bud på en løsning af dette problem at tjekke om alle filerne i bin mappen af leJOS havde fået tilføjet switchen -d32, der sikrer at Java-filerne bliver kompileret med 32-bit versionen af Java på OS X. Dette var dog implementeret som standard i den nyeste version af leJOS. Løsningen på problemet var derimod at hente 32-bit versionen af Eclipse i stedet for 64-bit versionen, der allerede var installeret på computeren i forbindelse nogle tidligere projekter. Java-programmet kunne derefter kompileres og uploades til robotten via USB. LeJOS kører derfor nu også fint på OS X. 

Da leJOS var kommet op at køre i Eclipse, og man kunne overføre programmerne til robotten via USB, blev det forsøgt at få det til at virke med den indbyggede Bluetooth i MacBooken. Det lykkedes at finde og forbinde til robotten via "Bluetooth" i systemindstillinger, men da det blev afprøvet i Eclispe kunne den her ikke finde robotten. Status er derfor at overførsel af programmer til robotten fungerer med USB, men ikke med Bluetooth på computeren, der kører OS X. 

Windows 8


Skiftet fra Ubuntu til Windows skete, da understøttelsen af leJOS til Linux er dårlig. Dette kombineret med at installationen ikke ligefrem var "mint" bidrog til, at det ikke længere kunne betale sig at bruge flere timer på de problemer, der var med at få leJOS til at virke i Linux. Følgende trin blev derfor foretaget:
  1. Hent Windows 8 Pro N fra Dreamspark (bemærk at man kun kan hente fra Windows-maskiner).
  2. Installer Windows 8. (ca. 30 min)
  3. Installer Java.
  4. Installer leJOS via guiden4. (ingen problemer/advarsler undervejs)
  5. Installer leJOS igen - første gang virkede kommunikationen imellem robotten og Eclipse ikke.
Efter disse 5 trin virkede alt på nær det indbyggede bluetooth-kort. Dette kort tog længere tid at få til at virke end resten af installationen. Windows kunne nemlig ikke finde ud af at tænde for kortet uden driveren, som ikke kunne installeres uden at kortet var tændt. Dette blev dog løst på følgende måde:
  1. Installer Window 7 driveren i kompatibilitet mode.
  2. Aktiver kortet.
  3. Installer Windows 8 driveren.
Status for denne maskine er nu, at leJOS er installeret, samt at det fungerer med overførsel via Bluetooth.

Opgaver


Til opgave 1 og 2  skulle vi placere robotten foran forskellige objekter i forskellige afstande og sammenligne afstanden med læsningerne fra sensoren. Vi har lavet afstandsmålinger på en skraldespand, affaldsposen i skraldespanden og en mur.

1. På billedet nedenunder ses skraldespanden og affaldsposen, som vi har foretaget afstandsmålinger på. Da vi lavede målingerne på skraldespanden, havde vi trukket posen helt væk, og da vi lavede målingerne på affaldsposen, havde vi trukket den ned, så den dækkede hele siden.
























2. Muren vi har lavet afstandsmålinger på.

























Opgave 1

Nedenstående skema viser målingerne med det udleverede program SonicSensorTest.java5 i version alfa_03. Dvs. med prøveinterval på 300 msek.
Genstand
45 cm.
75 cm.
105 cm.
135 cm.
165 cm.
195 cm.
225 cm.
Max
Skraldespand
45
75
106
138
255
255
255
150
Mur
45
76
107
138
168
199
232
255
Affaldspose
40
72
255
255
255
255
255
78

Ud fra de målinger vi har foretaget, er vores konklusion, at den maksimale afstand det er muligt at registrere en genstand fra med UltraSonic sensor er afhængig af den genstand, der skal registreres. Vi ved ikke helt præcist, hvorfor der er forskel på genstandene, men vi har overvejet, at det f.eks. kunne være at nogle genstande absorberer mere lyd end andre.

Opgave 2

I denne opgave har vi forsøgt at gøre miljøet så ens som muligt i forhold til, hvordan det var, da målingerne til opgave 1 blev foretaget, men denne gang med et prøveinterval på 10 msek. Nedenstående skema viser resultatet af målingerne.

Genstand
45 cm.
75 cm.
105 cm.
135 cm.
165 cm.
195 cm.
225 cm.
Max
Skraldespand 10 m/sek
45
76
107
140
169
198
228
255
Mur 10 m/sek
45
76
106
138
168
199
255
208
Affaldspose 10/msek
45
76
103
137
255
255
255
154

Det kortere prøveinterval i opgave 2 i forhold til opgave 1 gør, at det er muligt for UltraSonic sensoren, at registrere genstande, som den på større afstande har haft problemer med .

Opgave 3

Den måde hvorpå vi har fået de bedste resultater med UltraSonic sensoren er ved at sætte prøveintervallet til 0 og måle med en mur som genstand. Betingelsen for et godt resultat er i dette tilfælde at have størst mulig afstand fra UltraSonic sensor og genstanden, vi måler på.
Vi har lavet en måling på 253 cm, og det er muligvis et spørgsmål om, at placere sensoren præcist nok for at få en måling på 254 cm.

Angående spørgsmålet om hvorvidt lydens hastighed har betydning for vores sensors brugbarhed:
Da den maksimale måleafstand er 2,55m hen til og tilbage fra et objekt, får vi at tiden fra vores sensor påbegynder at måle på virkeligheden, til vi har et resultat, har en nedre grænse på:
(2,55 m * 2) / 340,29 m pr sek = 14.987 msek

Denne nedre begrænsning er dog ikke speciel. Vi vil altid være nødt til at se på hvor hurtigt en given sensor er i stand til at give os et måleresultat ift. hvor hurtigt, vi forventer at få et billede af virkeligheden i vores programmer.
Derudover vil en mere typisk brug af sensoren (50 cm) give et mærkbart bedre resultat:

(0,5m * 2) / 340,29 m pr sek = 2.9387 msek

Dette delay er mærkbart bedre og langt mere typisk i de programmer, vi har arbejdet med hidtil.

Opgave 4

For at lave denne opgave skulle vi først hente programmet Tracker.java6 og uploade det til robotten. Bilen som styres af programmet Tracker.java kører ind mod den nærmeste mur og står derefter på en distance af ca. 35 cm. fra muren og oscillerer frem og tilbage.
Fordi programmet foretager beregninger på målinger det har aflæst fra miljøet og derefter justerer sin adfærd i forhold til målingerne, er det en closed loop control.

Opgave 5

I denne opgave  skal vi prøve at få robotten til at oscilere ved at justere på konstanterne i controlleren.  Hvis vi indstiller trackeren med nedenstående værdier oscilerer robotten.

velocity = 50, pGain = 1.5, dGain = 0.5

Vi er dog ikke sikker på, hvilken konklusion vi skal drage ud fra dette.

Vi har taget udgangspunkt i pseudokoden fra ugesedlen, der beskriver en generisk PID Controller og brugt denne til at lave ændringer i Java-filen Tracker.java7. Resultatet blev at robotten kørte hen til væggen, oscilerede kort og derefter stoppede. Vi har ikke eksperimenteret med så mange variabler, da det er tidskrævende at gætte på hvilke konstanter, der skal ændres på for vores robot, men vi ved at en PID-controller kan bruges til at få en blød opbremsning i stedet for oscilering.

Opgave 6

For at lave denne opgave startede vi med at oversætte dette wallfollower-program8, til Java. Det lykkedes os dog ikke at oversætte programmet helt rigtigt, da det var nødvendigt for os at bytte om på højre og venstre motor for at den fulgte muren i stedet for at følge de steder, hvor der ikke er noget. Desuden har vi justeret konstanterne9. Den kom til sidst til at følge en mur, men det blev aldrig særlig godt. En video af dette kan ses herunder:
 

Vi har ikke nået at sammenligne NQC algoritmen med de forskellige forslag fra den udleverede tekst10. Det skyldes, at vi brugte lang tid på at få programmet oversat til Java. For at analysere programmet printede vi værdien af value variablen, hver gang der blev taget taget en ny prøve med UltraSonic sensoren, på LCD displayet. Værdien burde ligge mellem 0-255 da variablen blot bliver sat til distancen som sensoren returnerer, men i stedet fik den værdier mellem 0-2000. Når man skriver distancen fra sensoren direkte på displayet virker det fint. Vi brugte lang tid på at prøve at finde ud af hvorfor værdien fra value ikke var den samme, når vi skrev den på LCD displayet, som når værdien fra sensoren blev skrevet direkte til displayet i stedet for at blive gemt i en variabel. Vi fandt aldrig ud af hvorfor, og gik til sidst videre med at få programmet oversat i stedet for at analysere problemet.

Konklusion

Alle computerne kom til at fungere med leJOS, og vi fik udarbejdet en løsning til de fleste af ugens opgaver. Vi har lært hvordan Ultrasonic sensoren opdager objekter ved at udsende en kort høj-frekvens lyd og lytte for genlyde, samt hvordan vi kan bruge den til at måle afstand til objekter med vores robot. Undervejs i løsningen af opgaverne opdagede vi hvordan den fysiske virkelighed nogle gange registreres ukorrekt af en robots sensorer, hvilket kan have store konsekvenser, når man bruger close loop control - netop at man forsøger at korrigere for noget der ikke kræver korrektion. Typisk ved at køre ind i en væg.
Endvidere har vi forsøgt at tage feedbacken af vores blogindlæg fra sidste uge til os, idet vi har lagt ekstra vægt på at overveje adskillelsen af plan og mål samt tilføjet de punkter, som vi manglede (status, dato, varighed og deltagere). Vi har også prøvet på at være mere specifikke i henvisningerne til de guides og applikationer, som vi har brugt.

____________________________________________________________________________________________________________

1. https://services.brics.dk/java/courseadmin/DigitalControl/pages/Week+3+-+Sensing+and+Sensors+-+Analog|Digital+conversion
2. http://lejos.sourceforge.net/nxt/nxj/tutorial/Preliminaries/GettingStartedMac.htm
3. http://lejos.sourceforge.net/nxt/nxj/tutorial/Preliminaries/UsingEclipse.htm
4. http://lejos.sourceforge.net/nxt/nxj/tutorial/Preliminaries/GettingStartedWindows.htm
5. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson2.dir/SonicSensorTest.java
6. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson2.dir/Tracker.java
7. https://sites.google.com/site/digikaison/Tracker.java
8. http://www.philohome.com/wallfollower/wallfollower.nqc
9. https://sites.google.com/site/digikaison/WallFollower.java
10. Fred G. Martin, Robotic Explorations: A Hands-on Introduction to Engineering, Prentice Hall, 2001.

No comments:

Post a Comment