Lab 2


Test of the Ultrasonic Sensor

Montere sensor på bil.
Compile + uploade kode.
Test forskellige afstande til en væg og læs værdier. 
Gik fint. Så genstanden fint men blev upræcis ved genstande tæt på (mindre end 6 cm ca.) og ved genstande langt væk (ca 155 cm)
Test forskellige sleep værdier lavere end 300. 
Vi forsøgte med tider helt ned på 10 msec. Det gik fint, men vi henleder til svar på sidste spørgsmål ang. java doc'ens getDistance() metode.
Test med en afstand på 254 cm, kan sensoren måle denne afstand og under hvilke conditions.
Mod en hvid væg, på gulvet og sensoren tæt på gulvet kunne vi maksimalt måle en afstand på 197 cm.
What is the time limit for the measurement - remember the speed of sound is 340.29 m/sec ? 
(2,54 m / 340,29 m/sec) * 2 = 0,00746 sec * 2 = 0,0149 sec = 14,9 msec.
Does this limit the usage of the sensor ? 
Dette kunne i torien godt hindre brugbarheden, i tilfælde af at vi henter data med under 15 msec mellemrum eller bevæger os i nærheden af 340.29 m/sec, ville der opstå problemer. Hentes afstanden derimod ved hjælp af metoden UltrasonicSensor.getDistance() skulle der ikke opstå nogen problemer, da der i javadoc'en står "If the distance data is not yet available the method will wait until it is.". Så enten får vi data eller også vil vi få et time out.

Tracker Beam

Vi observerede at lavtstående genstande ikke blev registreret af robotten, så vi valgte at montere sensoren lavt i  fronten på robotten. Dette gav en klar forbedring.



Compile og upload koden.
Forklar Car klassen. 
Simpel wrapper klasse for de to motorer. Kan køre frem og tilbage ved at ændre kraften til de to motorer.
Test koden med forskellige konstanter. 
Vi startede med at ændre hvor lang tid robotten sov mellem udførsler.
The power to the car motors is the controlled variable and the distance is the measured variable. 
Som beskrevet i [1],  er der tale om en Proportional controller, da vi enten er for langt væk fra væggen og der køres fremad eller vi er for tæt på væggen og der bakkes væk.
Try to make the car oscillate by adjusting the constants in the controller. 
Vi satte "gain" til 1 og ved at justere tiden der sleepes op eller ned kunne disse oscilleringer gøres længere eller korter.
Add a differential control term to the controller as described in [1].
Vi lavede en velocity metode i Car klassen:

public static int velocity(){
return (leftMotor.getTachoCount() + rightMotor.getTachoCount())/2;
}

Denne brugte vi så i formlen:

power = (int) (pGain * error - dGain * (Car.velocity() - oldVelocity));

oldVelocity trækkes fra da .getTachoCount() på motorerne giver den akkumulerede værdi og vi er kun interesserede i forskellen af værdien siden sidste måling.


Wall Follower

Vi implementerede koden, dog uden kalibrerings delen. Mål afstanden er hardcoded ind i klassen med konstanten goal.
Vi havde desværre ikke den nødvendige tid til at teste koden så ekstensivt som vi havde ønsket. Vi observerede dog, at om vi monterede sensoren i en 90 eller 45 graders vinkel, så det ud som om den tenderede robotten til at trække for meget ind mod væggen. Dette kan evt. følges mere op på i næste LAB.
Sensoren var monteret på venstre side af robotten.

Try to use his program and sensor placement to make the LEGO 9797 car follow a wall. 
Compare the NQC control algorithm with the different suggestions on page 179, 5.1.3 exercises, [1].


Referencer:
[1], Fred G. Martin, Robotic Explorations: A Hands-on Introduction to Engineering, Prentice Hall, 2001. 

Links (Til pastebin.com og ikke .java filer):
SonicSensorTest
Tracker
Car
WallFollower