torsdag den 10. september 2009

TØ 2: Test af Ultrasonic Sensor

Under denne uges TØ fik vi endelig Lejos til at samarbejde med vores macs. Vi brugte lidt tid på øvelsen fra sidste uge, LineFollower.java, men fokuserede hovedsageligt på NXT ultrasonic sensoren. Herunder ses en test af vores linefollower :



Med SonicSensorTest.java testede vi sensoren under forskellige forhold (bl.a. trævæg kontra gipsvæg) og opdateringshastigheder. Resultatet ses i tabellen herunder:

Fysisk afstand (cm) Killbots målte afstand (cm) Forhold
30 29-30 svag støj mod hvidt papir
20 22 -"-
10 11-12 -"-
30 30 mod plastic
20 21-22 -"-
11 11-12 -"-
30 30 mod trævæg
11.5 13 mod glas
30 30 glas
120 120 væg
254 243 gips væg
244 243 -"-

Selve brugen af sensoren begrænses naturligvis idet man ikke kan benytte den hvis man har behov for at måle afstande længere end 243-254 cm. Men for os bør det ikke være en begrænsning, da vi arbejder med forholdsvis korte afstande og de målte afstande er ganske præcise.

På korte afstande (op til 30 cm) fik vi nogle flotte og korrekte målinger selvom vi ændrede sensorens reaktionstid til 1 millisekund. Men på længere afstande bliver sensoren begrænset af tiden som lyden er om at echo tilbage og målingerne svinger for meget, hvilket begrænser brugbarheden.

Tracker: Vi arbejdede også med koden Tracker.java og Car.java, der kontrollerede bilen ved brug af Ultrasonic Sensoren. I sin originale opsætning kørte bilen kun fremad og bagud. Når den kom tæt på en forhindring bremsede den og bakkede lidt. Programmet var på dette tidspunkt ikke tilstrækkeligt intelligent til at kunne køre ud af en blind vej.

Vi pillede lidt ved de forskellige variable, og tilføjede også ny funktionalitet til programmet. I Car klassen tilføjede vi følgende metode, eftersom vi ønskede at bilen skulle dreje lidt til venstre når den havde stødt på en forhindring og været nødt til at bakke lidt.

public static void turnleft(int rightPower)
{
rightMotor.controlMotor(rightPower, forward);
}

I Tracker klassen tilføjede vi et kald til turnleft() metoden, lige efter at bilen havde bakket lidt. På denne måde drejer bilen indtil den ser en ny mulighed for at køre lige ud.

Car.backward(power, power);
LCD.drawString("Backward", 0, 6);
Car.turnleft(power);


Problemet med den blinde vej var nu løst - se video :




Ingen kommentarer:

Send en kommentar