Under øvelserne var begge medlemmer af gruppen til stede.
Denne uges opgaver bestod af følgende:
- Tilføje ultralydsensoren til robotten
- Lave målinger med ultralydsensoren og sammenligne de målte afstande med den rigtige afstand.
- Tracker Beam: Et udleveret program som sørger for at robotten ikke kører ind i ting.
- Wall Follower: Et program vi selv koder for at få robotten til at følge en væg.
Denne første opgave gik ud på at tilføje en ultralydssensor til robotten. Dette blev gjort ved at følge vejledningen side 28 - 30. Denne opgvage indeholdte ikke nogle svære elementer, så derfor havde vi heller ikke nogle problemer med denne fase.
Målinger med ultralydssensor
De første målinger omfattede forskellen imellem den reelle afstand og den afstand der bliver vist på displayet. Diagrammet viser forholdet imellem disse og det ses at det er en næsten lineær afbildning.
Hvis man ser på forskellen imellem det der bliver vist på displayet og den målte afstand, ses afvigelserne tydeligere. Vores målinger viste at der var ret stor afvigelse fra 0-5 cm da det mindste vi kunne få vist på displayet var 5 cm. Fra 5-250 cm var afvigelserne mere uniforme og lå på ca 1-2 cm. Fra 250 cm og op viste displayet 255.
Den sidste del af delopgaven gik ud på at beregne responcetiden for sensoren. Lydens hastighed er 340 m/sek = 20400 cm/sek. Vha. denne oplysning kan vi finde reponsetiden ved at bruge følgende formel: responcetid i sekunder = (afstand * 2) / 20400. Diagrammet nedenunder viser responcetiderne for forskellige afstande. Responcetiden for den afstand der maksimalt kan måles er omkring 25 ms. Denne tid er ikke noget der påvirker resultaterne.
Tracker Beam
Denne opgave at se hvordan robotten reagere på ændringer af variablerne. Robotten arbejder i programmet med 6 vigtige variabler:
- distance: den aktuelle afstand til objektet.
- desiredDistance: den afstand hvor man ønske robotten skal begynde at tage action.
- power: bestemmer hvor meget power der skal på motoren.
- minPower: minimums farten man ønsker robotten bevæger sig med.
- error: forskellen mellem den målte afstand of den ønskede afstand. Sålænge error er større en 0 kører robotten frem af, med det sammen error bliver mindre eller lig 0 kører robotten baglæns.
- gain: sørger for at farten falder proportionalt med at vi kommer tætterre og tætter på objekter.
Når robotten er så tæt på objekter at error falder til mindre eller lig med 0, så begynder robotten at kører baglæns væk var objektet. Når afstanden til objekter så igen øges vil error også kommer over 0, hvilket får robotten til igen at kører frem. Pga. den måde gain er med til at bestemme farten, vil robotten kommer til at står og kører frem og tilbage i små stræk, da error vil komme til at stå og svinge omkring 0.
Ved at ændre variablen gain til f.eks. 5, vil robottens udsving omkring 0 blive større. Dvs. at robotten bevæger sig længere væk fra den ønskede afstand (desiredDistance). Denne form for kontrol kaldes proportional control, eftersom den gør brug af en måle variable og en control variabel.
Hvis vi ændre desiredDistance, vil robottens afstand til objektet ændre sig til den ny afstand.
Filerne til denne opgave findes:
http://www.cs.au.dk/~tiras/filer/LEGO/Tracker.java
http://www.cs.au.dk/~tiras/filer/LEGO/Car.java
Wall Follower
Til at starte med ændrede vi robotten således ultralydssensoren kom til at sidde med 45 graders vilkel i forhold til robotten, således den hele tiden kigger skrå frem.
Under implementeringen af wall follower opgaven gik vi ud fra progarmmet Tracker.java, som vi gik i gang med at kode om.
De omkodede filer kan findes på:
http://www.cs.au.dk/~tiras/filer/LEGO/WallFollower.java
http://www.cs.au.dk/~tiras/filer/LEGO/FollowCar.java
Til at starte med ændre robotten så den skifter med at kører til venstre og højre alt efter afstanden til væggen. Dette virkede også meget fornuftigt hvis robotten blot skulle kører langs en lige mur, men da den også skulle kunne klare f.eks. 90 graders sving fik den problemer. Derfor lavede vi det sådan at hvis den kom rigtigt tæt på muren så drejede den til venstre for at undgår det stor sving. Dette virkede også til en hvis grad når vi satte den ønskede afstand til muren til en højere værdi. Dette var selvfølgeligt ikke noget super løsning men den virkede.
Et af de problemer der voldte os store problemer var at ultralydssensoren kunne finde på at sende værdien 255 tilbage til robotten, selvom den faktiske afstand kun var 30 cm, dette fik robotten til at dreje længer ind mod væggen hvorved kan pludselig kom for tæt på og robotten tog en 90 graders sving væk fra muren igen. Dette betød at robotte var nødt til at køre en godt stykke tid for den igen fandt muren og kunne vende tilbage til sin normale kørebane. Dette var dog blot til det næste voldsomme udsving fra sensoren.
Hvis vi skulle have løst dette problem, var vi nødt til at have lavet et filter, således at hvis robotten f.eks. modtog 1, 2 eller 3 signaler på 255 mens alle ander var på omkring 30, så skulle de bare ignoreres. Dette vil have fået robotte til at holde sin bane uden alle de store sving. Ligeledes kunne man have udnyttet det at når sensoren endelig sendte 255 tilbage i store mængde så skulle robotten dreje 90 grader til højre, fordi så betød det at robotten var nået til et sted hvor der var et hul i vægge og derfor skulle uden om den.
Et filter ville ligeledes have været med til at løse et muligt problem med at vores sensor opfangede signaler fra andres sensor. Et filter ville altså have været en stor hjælp på vores problemer med robotten.
Ingen kommentarer:
Send en kommentar