Dato
11. September 2009Tidsforbrug
3 timerDeltagende gruppemedlemmer
Martin Aksel Jensen, Kim Munk PetersenMål
- Undersøge NXT UltraSonic sensor (afstandsmåler)
- Bygge en "Wall Follower" der gør brug af afstandsmåleren
Resultater
Indledende test af afstandsmåleren
Efter at have sluttet afstandsmåleren til NXT-brick'en, afviklede vi programmet "SonicSensorTest.java" (givet i opgavebeskrivelsen). Afstandsmåleren var i stand til at nøjagtigt måle afstanden til både små og store objekter, uanset materiale.Ifølge dokumentationen udbredes ultralyden med en vinkel på ca. 30 grader hvilket vi verificerede passer med virkeligheden.
Den mindste afstand vi kunne måle vha. afstandsmåleren var 4cm. Dette gjorde vi ved at placere afstandsmåleren 0,5cm fra en vinkelret, plan overflade. Det tyder altså på at afstandsmåleren ikke er korrekt kalibreret ved små afstande. Ifølge lejos-dokumentationen virker setCalibrationData-metoden ikke, så det er ikke muligt for os at kalibrere den.
Idet lyd udbredes med hastigheden 340.29m/s, tilbagelægger det 255cm på ca. 0,0075sek = 7,5ms. Idet lyden både skal sendes ud og reflekteres tilbage igen, tager det ca. 15ms (2 x 7,5ms) fra lyden sendes til ekkoet opfanges. Vores målinger viste at det var nødvendigt at vente ca. 20ms mellem hver måling for at målingen altid var korrekt. Ved lavere ventetider kunne afstandsmåleren maksimalt måle en afstand på 188cm. Denne opførsel gentog sig selv uden nogen ventetid overhovedet.
Afstandsmåleren kører som default i Continous mode hvilket betyder at den med et bestemt (dog ukendt) interval, sender et såkaldt "ping", altså en kort lyd. Hvis der kommer et ekko tilbage inden 15ms, sættes afstandsmålerens register til den tilsvarende afstand, ellers 255. Noget kunne tyde på at dette register bliver clearet når man læser fra det, idet vi ellers ikke kan forklare hvorfor man skal vente de føromtalte ca. 20ms. Ventetiden medfører klart nok at man højst kan sample 50 gange pr. sekund, men dette burde også være nok i de fleste tilfælde, så vi mener ikke har nogen betydning i praksis.
Robot-test 1: "Tracker"
For at teste afstandsmåleren på en robot, installerede vi afstandsmåleren på vores LineFollower-robot fra forrige uges øvelse. Efter at have uploaded "Tracker.java" og hjælpeklassen "Car.java" (begge givet i opgavebeskrivelsen) til robotten, betragtede vi dens opførsel. Programmet får robotten til at holde en bestemt frontal afstand, 35cm, til det nærmeste detekterede objekt. Robotten sammenligner hele tiden den aktuelle afstand med den ønskede afstand. Jo tættere den kommer på den ønskede afstand, jo langsommere bevæger den sig derhen imod. Denne form for control kaldes proportional-only Idet motorerne kræver en vis mængde "power" for at kunne køre, er der en grænse for hvor lidt power de må få. Denne grænse gør at robotten aldrig holder stille, men bevæger sig så dens afstandsmåling oscillerer omkring den ønskede værdi.Robot-test 2: "Wall Follower"
Vi oversatte Philippe Hurbain's program fra NQC til Java og rettede det til således at det kunne bruges på NXT'en. Ved at placere afstandsmåleren på samme måde som på Philippe Hurbain's robot, lykkedes det os at få vores robot til at følge en væg.Idet vi blot har oversat NCQ-algoritmen til Java, "wiggler" vores robot meget idet den ene motor slukkes helt når den drejer. Det er nødvendigt at vores robotter drejer meget til hver side for at undgå at køre frontalt ind i en mur ved højresving. Dette skyldes at afstandsmåleren sidder så langt tilbage at den ikke kan se fronten af robotten.
Ingen kommentarer:
Send en kommentar