Varighed: 2 Timer
Deltagere: Mikkel, Jesper & Troels
Plan
Vi følger vejledningen [1].1. Monter ultralydssensor på en lego robot bil.
2. Få overført programmet [2].
3. Observer robotten opførsler og find ud af hvad der starter dem
4. Observer LCD displayet og fortolk resultaterne.
5. Undersøg java-programmet og find ud af hvordan triggering conditions er implementeret for hver af de forskellige klasser, og hvordan opførslerne er implementeret. Prøv at køre kun med den første opførsel og derefter kun med de 2 første opførsler aktive.
6. Forklar hvorfor Behavior klassen har kaldet this.setDeamon(true) i constructoren.
7. Forklar betydningen af SuppressCount og sammenlign SoundCar med Fred Martins arbiter [3].
8. Tilføj en behavior (“Drive toward light”) til SoundCar.
Resultater
1 og 2.Vi har monteret ultralydssensoren foran på den bil vi havde til at ligge og overført programmet uden problemer.
3.
Den kører fremad hvis der ikke er noget foran den i forskellige periodelængder. Nogle gange drejer den lidt. Det tyder på at den kører noget tilfældigt på begge hjul og i tilfældige længder.
Hvis der er noget foran den bakker den og drejer til venstre. Den spiller et musikstykke med et fast mellemrum. Musikstykket er forskelligt for hver gang det spiller.
4.
Følgende er et billede af displayet.
5.
Alle klasser extender Behavior (som extender Thread). Behavior modellerer ideen om at en behavior kan subsume underliggende behaviors. En behavior kan kun udføre actions hvis den ikke er suppressed. Her har vi også opdaget at “s” på displayet betød stoppet og ikke klar. RandomDrive har ingen triggering condition. RandomDrive kører med tilfældig power (mellem 50-100) på de to motorer. Derefter venter den et sted ml. 1,5 og 2,5 sekunder. Derefter gentager den ovenstående. Behavioren starter med at kalde suppress() der “undertrykker” underliggende behaviors og derefter udfører den sin action og så kalder den release(), der fjerner undertrykkelsen (Men da den ikke har nogen underliggende behavior, sker der ikke noget ved disse kald). AvoidFront har en triggering condition på en måling under 20 fra ultralydssensoren (Dette implementeres med en while loop). Så kalder den suppress(), der undertrykker RandomDrive, og derefter kører den tilbage med 70 på begge motorer i 1 s. og så kører den fremad med 80 på højre hjul i 0,8 s. Så stopper den og venter i 0,5 s. Herefter kaldes release(). PlaySound spiller en sang af tilfældig længde (dog mindst 5 * 100 ms). Den sætter for hver gang de parametre der bliver brugt til at generere lydene (vol, osv.). PlaySound har en triggering condition som er at den skal køre hver 10 s.
6.
At behaviorne er sat som deamon threads betyder at hovedtråden afslutter, bliver deamon threads også lukket [4].
7.
SuppressCount bliver talt op når en ovenstående behavior suppresser en behavior. Den bliver talt ned igen når den ovenstående behavior releaser igen. En behavior kan kun køre hvis dens suppressCount er 0. Tallet fortæller altså hvor mange behaviors der undertrykken den givne behavior.
I SoundCar er hver behavior autonomt som agerer i et hierarki, hvor de øverste bestemmer over dem under dem. I modsætning hertil står Fred Martins arbiter system [3], hvor der er en central enheder der vælger hvilke processer der skal køre udfra prioriteter.
8.
Triggering Condition for “Drive toward light” skal være at der bliver målt lysværdier over en bestemt grænse (60), som så trigger at robotten kører fremad i retning af den lyssensor derfra hvor lyset kommer fra. Den skal ligge over RandomDrive og under Avoid, idet det er vigtigere at bevæge sig imod lyset end at køre tilfældigt og vigtigere at undgå forhindringer end at følge lyset. Musikken er selvfølgelig vigtigst. Vi har implementeret behavioren i den følgende java-klasser [5]. Vores forventning er at robotten bliver domineret af PlaySound og AvoidFront, og at den dominerer RandomDrive.
Konklusioner
Vi nåede i mål med opgaverne.
Referencer
[1]: http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson7.dir/Lesson.html
[2]: http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson7.dir/
[3]: Fred G. Martin, Robotic Explorations: A Hands-on Introduction to Engineering, Prentice Hall, 2001, s. 214-18
[4]: http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/daemon.html
[5]: http://dl.dropbox.com/u/357278/Lego/Week7/LightSense.java og http://dl.dropbox.com/u/357278/Lego/Week7/SoundCar.java
Ingen kommentarer:
Send en kommentar