Torsdag 9. februar 2012
NXT Programmering, Lesson 2
Varighed: 4 timer
Deltagere: Mikkel, Troels, Jesper, Bjarke
Formål
Formålet med denne lab-session er at undersøge, hvordan ultralydsensoren fungerer og anvende sensoren til forskellige bevægelsesprogrammer til robotten, som beskrevet i lab-materialet [1].
Plan
1. Tilføj sensor til robot fra uge 1.
2. Udføre tests på sensoren, som beskrevet i [1].
3. Installere TrackerBeam [1], og modificere koden så den bruger proportional control med et derivative term, som beskrevet i [2].
4. Lave en Wall Follower, som i [3].
Resultater
1. Tilføj sensor til robotten
Vi har fulgt anvisningerne i Lego byggeinstruktionerne [4], side 28-30.
2. Udføre tests på sensoren
Vi har placeret robotten med forskellige afstande fra objekter og undersøgt hvilke afstande ultralydsensoren aflæser. Det er muligt for robotten at måle helt ud til sit maximum på 255, værdien for "Out of Range". Altså den kan måle til 254, den bliver dog mere upræcis på de længere afstande.
Vi har konstateret at robotten måler i en kegle foran sig. Se billede:
På billedet fanger robotten stolpen til højre for den. Hvis man går ud i en bredere vinkel fanger sensoren ikke stolpen.
Vi har fjernet Thread.sleep, da getDistance selv er sat til at vente et stykke tid, så den kan få svar tilbage, jf. API [5]:
public int getDistance()
- Return distance to an object. To ensure that the data returned is valid this method may have to wait a short while for the distance data to become available.
Det giver dog stadig mening at have et delay i loopet hvis man ikke har brug for en masse målinger, da hver måling bruger batteri.
Hvis der er mange overflader kan man få meget varierende resultater. Dette skyldes at overfladerne kan være på forskellig afstand og ekkoerne derfor kommer tilbage på forskellige tidspunkter.
Ekkoet kan tage op til 15 milisekunder om at tage tilbage, når vores maximale afstand er 254, udregnet således:
2 * 254 cm
------------------- =~ 15 millisekunder pr. måling
34,029 cm/millisec
Lydens hastighed sætter derfor en begrænsning på vores "sample-rate", man skal derfor overveje hvilke afstande vi har med at gøre.
3. Installere TrackerBeam og modificere koden
Vi startede med at uploade programmet fra lab-materialet [1]. Her observerede vi at robotten oscillerede omkring desiredDistance [6]. Vi har valgt at bruge power som derivative term [2], så vores hastighed faldt jo nærmere vi kom desiredDistance.
Her er der et problem med at bruge power som derivative term, da den afhænger af hvilke faktorer der påvirker hastigheden. Det er f.eks. hårdere for motoren at køre på en overflade med mere friktion. Her ville det være bedre at bruge velocity (som vi selv skulle regne ud, udfra omdrejninger pr sekund, hjulstørrelse osv). Det resulterede i koden som kan ses i [7].
Dette resulterede i en robot der bevægede sig som i nedenstående video:
4. Lave en Wall Follower
Vi har tilpasset robotten så vi kan dreje ultralydsensoren. Vi har låst den i en 45 graders vinkel:
Vi oversatte derefter koden fra [3] fra NQC til java. Koden kan ses i [8]. Vi har været nød til at modificere Car.java[9] fra [1]. Resultatet kan ses i nedenstående video:
Robotten oscillerer meget da energien på motorerne er for høj. Der er ikke taget højde for noget derivative term, i stedet der 7 predefinerede intervaller som angiver afstandene robotten kan befinde sig i.
Status
Vi er nået igennem alle punkterne.
Referencer
1. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson2.dir/Lesson.html
2. Simple Feedback Control, Fred G. Martin, Robotic Explorations: A Hands-on Introduction to Engineering, Prentice Hall, 2001.
3. http://www.philohome.com/wallfollower/wallfollower.htm
4. LEGO Mindstorms Education NXT Base Set 9797 building instruction, side 28-30.
5. http://lejos.sourceforge.net/nxt/pc/api/index.html
6. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson2.dir/Tracker.java
7. http://dl.dropbox.com/u/467339/Lego/Tracker/Tracker.java
8. http://dl.dropbox.com/u/467339/Lego/Wall%20Follower/Car.java og http://dl.dropbox.com/u/467339/Lego/Wall%20Follower/WallFollower.java
9. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/src/Car.java
NXT Programmering, Lesson 2
Varighed: 4 timer
Deltagere: Mikkel, Troels, Jesper, Bjarke
Formål
Formålet med denne lab-session er at undersøge, hvordan ultralydsensoren fungerer og anvende sensoren til forskellige bevægelsesprogrammer til robotten, som beskrevet i lab-materialet [1].
Plan
1. Tilføj sensor til robot fra uge 1.
2. Udføre tests på sensoren, som beskrevet i [1].
3. Installere TrackerBeam [1], og modificere koden så den bruger proportional control med et derivative term, som beskrevet i [2].
4. Lave en Wall Follower, som i [3].
2. Udføre tests på sensoren, som beskrevet i [1].
3. Installere TrackerBeam [1], og modificere koden så den bruger proportional control med et derivative term, som beskrevet i [2].
4. Lave en Wall Follower, som i [3].
Resultater
1. Tilføj sensor til robotten
Vi har fulgt anvisningerne i Lego byggeinstruktionerne [4], side 28-30.
2. Udføre tests på sensoren
Vi har placeret robotten med forskellige afstande fra objekter og undersøgt hvilke afstande ultralydsensoren aflæser. Det er muligt for robotten at måle helt ud til sit maximum på 255, værdien for "Out of Range". Altså den kan måle til 254, den bliver dog mere upræcis på de længere afstande.
Vi har konstateret at robotten måler i en kegle foran sig. Se billede:
På billedet fanger robotten stolpen til højre for den. Hvis man går ud i en bredere vinkel fanger sensoren ikke stolpen.
Vi har fjernet Thread.sleep, da getDistance selv er sat til at vente et stykke tid, så den kan få svar tilbage, jf. API [5]:
public int getDistance()
- Return distance to an object. To ensure that the data returned is valid this method may have to wait a short while for the distance data to become available.
Det giver dog stadig mening at have et delay i loopet hvis man ikke har brug for en masse målinger, da hver måling bruger batteri.
Hvis der er mange overflader kan man få meget varierende resultater. Dette skyldes at overfladerne kan være på forskellig afstand og ekkoerne derfor kommer tilbage på forskellige tidspunkter.
Hvis der er mange overflader kan man få meget varierende resultater. Dette skyldes at overfladerne kan være på forskellig afstand og ekkoerne derfor kommer tilbage på forskellige tidspunkter.
Ekkoet kan tage op til 15 milisekunder om at tage tilbage, når vores maximale afstand er 254, udregnet således:
2 * 254 cm
------------------- =~ 15 millisekunder pr. måling
34,029 cm/millisec
Lydens hastighed sætter derfor en begrænsning på vores "sample-rate", man skal derfor overveje hvilke afstande vi har med at gøre.
3. Installere TrackerBeam og modificere koden
Vi startede med at uploade programmet fra lab-materialet [1]. Her observerede vi at robotten oscillerede omkring desiredDistance [6]. Vi har valgt at bruge power som derivative term [2], så vores hastighed faldt jo nærmere vi kom desiredDistance.
Her er der et problem med at bruge power som derivative term, da den afhænger af hvilke faktorer der påvirker hastigheden. Det er f.eks. hårdere for motoren at køre på en overflade med mere friktion. Her ville det være bedre at bruge velocity (som vi selv skulle regne ud, udfra omdrejninger pr sekund, hjulstørrelse osv). Det resulterede i koden som kan ses i [7].
Dette resulterede i en robot der bevægede sig som i nedenstående video:
4. Lave en Wall Follower
Vi har tilpasset robotten så vi kan dreje ultralydsensoren. Vi har låst den i en 45 graders vinkel:
Vi oversatte derefter koden fra [3] fra NQC til java. Koden kan ses i [8]. Vi har været nød til at modificere Car.java[9] fra [1]. Resultatet kan ses i nedenstående video:
Robotten oscillerer meget da energien på motorerne er for høj. Der er ikke taget højde for noget derivative term, i stedet der 7 predefinerede intervaller som angiver afstandene robotten kan befinde sig i.
Status
Vi er nået igennem alle punkterne.
Referencer
1. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson2.dir/Lesson.html
2. Simple Feedback Control, Fred G. Martin, Robotic Explorations: A Hands-on Introduction to Engineering, Prentice Hall, 2001.
3. http://www.philohome.com/wallfollower/wallfollower.htm
4. LEGO Mindstorms Education NXT Base Set 9797 building instruction, side 28-30.
5. http://lejos.sourceforge.net/nxt/pc/api/index.html
6. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson2.dir/Tracker.java
7. http://dl.dropbox.com/u/467339/Lego/Tracker/Tracker.java
8. http://dl.dropbox.com/u/467339/Lego/Wall%20Follower/Car.java og http://dl.dropbox.com/u/467339/Lego/Wall%20Follower/WallFollower.java
9. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/src/Car.java
3. http://www.philohome.com/wallfollower/wallfollower.htm
4. LEGO Mindstorms Education NXT Base Set 9797 building instruction, side 28-30.
5. http://lejos.sourceforge.net/nxt/pc/api/index.html
6. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson2.dir/Tracker.java
7. http://dl.dropbox.com/u/467339/Lego/Tracker/Tracker.java
8. http://dl.dropbox.com/u/467339/Lego/Wall%20Follower/Car.java og http://dl.dropbox.com/u/467339/Lego/Wall%20Follower/WallFollower.java
9. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/src/Car.java
Ingen kommentarer:
Send en kommentar