torsdag den 23. februar 2012

NXT Programmering, Lesson 4


NXT Programmering, Lesson 4
Varighed: 3,5 timer
Deltagere: Mikkel, Troels, Jesper, Bjarke


Formål

I denne lektion vil vi lave en robot der kan følge en sort linje og stoppe ved en mållinje for enden, markeret med en tredje farve. Ideen er at benytte lyssensoren til at måle tre forskellige farver.
Slutteligt vil vi ændre i programmet så en PID regulator benyttes til at sørge for at bilen følger den sorte linje hurtigere og mindre slingrende.


Plan


  1. Udvid robotten fra de tidligere lab lektioner med en lyssensor.
  2. Lav et program der benytter BlackAndWhiteSensoren[1] til at skelne mellem sort og hvid. Placer den over forskellige områder og se hvilke værdier den registrerer.
  3. Afprøv LineFollowerCar.java[2] og se hvordan den fungerer.
  4. Med udgangspunkt i BlackAndWhiteSensoren: Lav et program der kan skelne mellem sort, grøn og hvid. Test programmet.
  5. Tilpas LineFollowerCal programmet så bilen stopper når den kommer ind i et grønt målfelt.
  6. Modificer programmet så det benytter en PID regulater til at styre bilen mindre slingrende, og hurtigere, langs den sorte linje, hen til målzonen.


Resultater

1. Vi har aldrig fjernet lyssensoren fra første første lektion[3], så den sidder endnu på robotten. Vi har derudover tilføjet en lyssensor mere til brug i opgave 5. 

2. Vi lavede et program[4] der benyttede BlackAndWhiteSensor klassen til at aflæse en værdi vha. lyssensoren og overførte dette til vores NXT-brick.  Alt efter hvad vi rettede lyssensoren imod viste den forskellige værdier på display’et. Hvis den blev rettet mod en blank hvid overflade viste den ~60 og mod en blank sort overflade ~30

3. Vi overførte LineFolllowerCar til NXT-brick’en og testede bilen. Den fulgte den sorte linje præcis som forventet


4. Vi tilføjede en lyssensor mere til vores ‘bil’. Med udgangspunkt i BlackWhiteSensor lavede vi et ColorSensor[5] program. Programmet kalibrerede først begge lyssensorer med værdier for sort, hvid og en tredje farve (som vi har kaldt blue i koden). Herefter viste den hvilken farve sensor nr.  1 målte. Hvis der blev trykket ‘escape’ viste den hvilken farve sensor nr. 2 registrerede. Programmet virkede som det skulle. 

5. Vi modificerede ColorSensor programmet så bilen fulgte den sorte linje vha. sensor nr. 1. Når begge sensorer målte den 3. farve (i vores tilfælde blå) stoppede vi bilen. Vi vekslede mellem forskellige delrutiner i programmet via ‘escape’ knappen. Da vores første implementation ikke havde en Thread.sleep() kommando efter den første del-rutine, der blev afbrudt ved tryk på escape, ville programmet springe den næste del-rutine over da denne også var afhængig af et tryk på escape knappen. Vi snakkede i øvrigt om at vi måske skulle holde det så escape knappen altid lukker programmet ned og for fremtiden benytte andre knapper til at springe imellem del-rutiner.


6. Vi lavede en grov omskrivning af pseudokoden præsenteret i [6]. Desværre havde vi ikke tid til at tilpasse de variable der påvirkede robotten (proportional, integral og derivitive konstant). Grundet mangel på tid kunne vi ikke forbedre resultaterne her. Koden findes her [6].



NXT Programmering, Søndag d. 26.02.2012
Varighed: 2 timer
Deltagere: Mikkel, Jesper, Bjarke



Formål
Formålet med dagen er at implementere en PID styret bil, således at den kan følge en sort linie med høj fart og minimal oscilering. Dette er en fortsættelse af punkt 6 fra lesson 4.

Plan
1. Implementer en PID styret bil som beskrevet i [7], men programmeret fra bunden.
2. Tilpas de variable i programmet fra 1. punkt således at bilen kan følge en sort linie med højest mulige hastighed mens den eliminerer oscilering.

Resultater

1. Vi lavede en step-by-step implementation af vores PID styrede bil, som beskrevet i [7]. Opgaven kan deles op i tre trin. Den proportionelle kontrol, den integrelle kontrol og den afledte kontrol. Hvert trin blev løbende debugget og tilpasset således at robotten kunne følge linien, uden at "fare vild".
Koden anvender en modificeret BlackWhiteSensor og en ny klasse kaldet PIDCar [8].

2. Vores implementation blev aldrig tilstrækkeligt tilpasset. Initielt havde vi mange problemer med tilpasningen af integralet, da der blev så ofte, at når robotten skiftede retning ville den skyde over målet og krydse den sorte streg, hvorved den mistede orienteringen. Vi fandt to forskellige løsninger på dette problem. Første var kun at tage en procentsats af integrale værdien, således at påvirkningen på robottens drejning blev mindre. Den anden var at sætte en max værdi for integralet, således at den aldrig ville kunne påvirke drejningen med mere end denne værdi. Begge løste problemet med "overskydning".
Desværre var vi fortsat plaget af oscilering selv efter at vi havde implementeret 'the derivitive term'. Det var tydeligt at dette reducerede oscilering ganske betydeligt, men robotten fandt aldrig et sted hvor den kunne køre lige frem.

Status
Vores robot kan følge en linie og den anvender alle tre termer som er beskrevet i [7]. Desværrer undgår den ikke oscilering og vi har generelt haft problemer med at fintune de variable der kunne være årsag hertil.
Derudover opdagede vi af og til fejl i vores implementation, der påvirkede resultaterne. Vi konkluderede da vi var færdige søndag at vi fremover vil forsøge at være mere metodiske når vi skal implementere rutiner for robotten. Vi brugte for megen tid på 'trial & error' hvor en metodisk fejlgennemgang af koden nok havde været bedre.



__________________________________________
Referencer


Ingen kommentarer:

Send en kommentar