Varighed: 11-14
Deltagere: Daniel, Leni, Martin A og Martin N
1. Formål
Formålet med denne øvelse var at opnå erfaring med ultralyds sensoren og dennes begrænsninger.
2. Øvelsesgennemgang
Del 1 – Test af ultralyds sensor
Først blev ultralyds sensoren monteret på LEGO model 9797 i følge vejledningen. Herefter blev SonicSensorTest.java programmet kompileret og overført til NXT bricken.
Billede af LEGO 9797 bilen kan ses herunder:
Programmet kører i et while loop hvor der med et givet interval måles en afstand. Afstanden til et objekt opmåles ved at den dedikerede ultralyds sensor udsende en pulse (et såkaldt ping), herefter lytter sensoren efter pulsens echo (reflektion).
Den tid det tager for pulsen at løbe fra sensoren ud til objektet og tilbage igen kaldes "time of flight". Den målte tid omsættes direkte i den dedikerede ultralyds sensor til en afstand i cm, hvorefter den udregnede afstand sendes til NXT bricken via I2C bussen.
Til test af ultralyds sensoren blev LEGO bilen placeret med en given afstand til en væg. Herefter blev bilen rykket længere og længere væk fra væggen og evt. "døde huller", samt maksimal rækkevide noteret. Der blev udført tests med to forskellige sampling rates på henholdsvis 10ms og 300ms. Disse blev valgt for at observerer hvorvidt evt. genudsendte pulser (ved 10ms) ville kunne forstyrre målingerne væsentligt.
Tests
1. sample rate - 10ms
Der blev observeret en jævn udmåling af afstanden til væggen i intervallerne 17-163cm og 202-233cm. Dog opstod der et dødt område i intervallet 163-202cm.
For at verificerer at dette ikke var grundet repeterende pulser som forstyrrede opmålingen (hvad enten der er tale om reflektioner fra andre vægge eller væggen selv), blev testen foretaget igen ved en sample rate på 300ms
2. sample rate - 300ms
Her blev de samme målinger observeret som ved en sample rate på 10ms.
Altså kan vi ud fra de målinger vi har foretaget konkluderer at puls frekvensen må være væsentlig højere end 100Hz (hvilket også er forventet at ligge i omegnen af 50-100kHz).
3. test op ny væg - sample rate 300ms
Vi prøvede at udfører samme test på en anden væg hvor der var større afstand til andre vægge/hjørner. Denne test viste sammenlignelige resultater, uden de store variationer.
4. test udendørs - sample rate 300ms
Ved udendørs testen var det ikke muligt at måle en afstand på større end 133cm, herefter viste den målte afstand blot 255.
Test resultater:
10 ms samplerate
- 233 (NXT) : 232,1 cm
- 202 (NXT) : 198,1 cm
- Dødzone (255 NXT) : 198 - 163 cm
- 163 (NXT) : 163 cm
- 120 (NXT) : 119,8 cm
- 17 (NXT) : 17 cm
- 163 (NXT) : 161 cm
- Dødzone (255 NXT) : 160 - 129 cm
- 133 (NXT) : 128,7 cm
- 17 (NXT) : 15 cm
Del 2 - Tracker
Tracker programmet blev overført og afviklet på NXT bricken, hvorefter det blev observeret hvorledes LEGO bilen opførte sig.
LEGO bilen blev placeret i en afstand af ½m fra væggen, hvorefter programmet blev afviklet, herefter begyndte bilen at køre fremad, men sænkede farten jo tættere på væggen bilen kom. Da bilen var nået en fast afstand fra væggen begyndte den at kører frem og tilbage for at opretholde denne afstand.
Programmet må altså benytte ultralyds sensoren til at opmåle afstanden til et objekt, og derefter forsøge at opretholde en fastsat afstand fra dette objekt ved at køre frem og tilbage.
Derved kan vi konkluderer at programmet må udregne et error signal som baserer sig på den målte afstand i forhold til en ønsket afstand.
Hvis vi betragter programmet fra et mere regulerings mæssigt syn kan dette oversættes til at der er implementeret en P-regulatering (propertional), hvor fejlen (error signalet) sammen en gain faktor afgører hastigheden som bilen kører med.
Hastigheden vil altid være mindst 60% og adderes til outputtet fra P-reguleringen, hvilket er årsagen til at bilen kører hurtigere jo længere væk fra væggen bilen befinder sig.
Er outputtet fra P-reguleringen positiv er det nødvendigt for bilen at køre fremad og vice versa.
Del 3 - Wall Hugger
Sidste del af øvelsen bestod i at få robotten til at køre langs en mur i en fast bestemt astand.
For at gøre det muligt skulle robottens hoved modificeres, således at ultralydssensoren pegede i en 45 graders vinkel mod muren.
Resultatet af denne modifikation kan ses på billedet herunder:
Reguleringen af robottens afstand blev implementeret med en simpel proportional regulator, der bestemte forskellen mellem den ønskede afstand (sat til 40cm) og den faktiske afstand fra muren. Herefter blev denne afstand multipliceret med en gain faktor på 2,5, og endelig trukket fra motorkraften på den motor der sidder på den side som robotten skal dreje til.
Denne reguleringsmetode giver den mest jævne kørsel, i forhold til en on/off regulering, og sikrer at robotten kører med størst mulig fart langs muren.
Herunder ses implementeringen af propertional regulatoren:
if ( distance != noObject )
{
error = distance - desiredDistance;
if ( error > 0 )
{
powerR = (int)(100 - error*gain);
powerL = 100;
}
else
{
powerL = (int)(100 + error*gain);
powerR = 100;
}
else
{
powerL = 100;
powerR = 60;
}
Car.forward(powerL, powerR);
Video af hvordan Wall Hugger kørte:
3. Konklusion
Generelt set lykkedes alle de opstillede test, og de fejl vi stødte på undervejs blev rettet.
4. Referencer
http://lejos.sourceforge.net/index.php
http://www.philohome.com/wallfollower/wallfollower.htm
No comments:
Post a Comment