Coinurl2

Monday, 27 February 2012

NXT Programmering, Lesson 4


NXT Programmering, Lesson 4

Tid: 5 timer, Deltagere: Kenneth, Mikkel, Rawad.

Siden sidst:
Vi skrev sidst om vores Bluetooth log program, visionen var at lave en samlet log fil der både kunne logge lokalt og vha. bluetooth forbindelsen. Denne ide er vi dog gået væk fra da vi vil have mere kontrol over resourcerne der bliver brugt på NXT’en. Bluetooth kommunikation tager ret lang tid så det kan let forsinke programflowet. Asynkron bluetooth kommunikation introducere problemer med caching af log data. Da bluetooth har en begrænset båndbrede har vi oplevet at heap’en på NXT’en blev fyldt med cachet log data.
Resultatet er blevet at vi lader Bluetooth log og Datalogger (som logger i en lokal fil) være adskildte da de bruges i meget forskellige programtyper. Datalogger i tidskritiske programmer og Bluetooth i ikke tidskritiske programmer.


Formål:
Denne lab session har til formål at vi skal opnå større kendskab til farvesensorens egenskaber, specielt i forhold til implementering af en line follower robot hvor der skal skelnes mellem sort, hvid og en målzone farve der ligger mellem sort og hvid i farve spektret. Line follower robotten skal i første omgang baseres på udleveret kode, men i sidste del af øvelsen skal vi selv forsøge at implementere en eller flere versioner af en PID styret line follower.

Plan

  1. Konstruktion af robot
  2. Sort-hvid detektion
  3. Linefollower med kalibrering
  4. ColorSensor med kalibrering
  5. Linefollower der stopper i målzone
  6. PID linefollower
  7. Status
  8. Referencer




1. Konstruktion af robot
For at teste detektion af farver anvendes en konstruktion der kan ses på LEGO Mindstorms Education NXT base set 9797 bygnings instruktion side 32 til 34.
I billedet ovenover ses robotten bygget efter NXT base set, dog med tilføjet lyssensor i siden.

2. Sort-hvid detektion

For at teste sort-hvid detektion har vi anvendt klassen BlackWhiteSensor.java skrevet af Ole Caprani[x]. Klassen indlæser to grænseværdier for sort og hvid under kalibrering. Disse grænseværdier anvendes til at skelne de to farver fra hinanden.
I vores test har vi placeret robotten på en test bane for at måle hvor godt BlackWhiteSensor fungerer.
Billedet ovenover viser måling af sort farve. Med sensoren placeret mellem en halv og en hel centimeter fra overfalden.

Sort: 35
Hvid: 60

0,5-1cm over bordet.

3. Line Follower med kalibrering

Her skal vi afprøve BlackWhiteSensor’en gennem programmet LineFollowerCal.java.


Linefollower med kalibrering er testet på banen, som kan ses i billedet ovenover.

Bilen følger flot linien så længe svingene er til venstre.

Ved højre sving følger bilen ikke linien så godt.


Dette kan skyldes at bilen følger den højre kant af den sorte linie og at den sorte linie ikke er lige så bred som de hvide stykker på hver side(Sort = 2.5cm, Hvide = 3cm). Når bilen skal dreje til højre er der derfor større chance for at den når at ramme det hvide stykke på den anden side af den sorte linie.

4. ColorSensor med kalibrering

Vores ide er at vi med farvesensoren måler hvor farven grøn ligger i forhold til sort og hvid, målt på sensorens inputværdi. Når vi ved hvordan grøn ligger i forhold til sort og hvid, så kan vi udbygge det eksisterende spektrum sort | hvid til sort | hvid | grøn.

Vi har brugt linje banens afmærkninger som reference farver. Der normal, overskyet dagsbelysning.

De målte farveværdier er som følger:

Grøn = 42
Sort = 34
Hvid = 58
(Blå) = 50

Hvis man foretager blandinger, altså måler på kanten mellem en skarp sort/hvid grænse, vil man få et sensor output der ligger mellem sort og hvid. Det ser ud til, at man kan lave alle farver, alt efter hvordan forholdet mellem sort og hvid er.

Dette kan blive et problem. Hvis man ønsker at lave en line follower med en farvesensor, der følger en sort streg gennem edge detection som beskrevet i [x], og som stopper når den når ind i et mål område som er blåt eller grønt, kan det være svært at skelne mellem hvornår robotten er lige på den sort hvide kant, og hvordan robotten er nået i mål.

5. Line follower der stopper i målzone

Formålet med denne test er at teste ColorSensor med kalibrering i en praktisk kontekst. I denne test har vi anvendt LineFollower med kalibrering og udskiftet BlackWhiteSensor med ColorSensor. Koden kan ses her [x]. Vi havde to løsninger vi gerne ville teste i forbindelse med detektion af goalzone. Begge løsninger blev testet på banen med blå goalzone, som kan ses i billedet forneden.

Den første løsning indebærer brug af to sensorer, placering af disse kan ses under robot konstruktions segmentet. Ideen med brug af to sensorer er at hvis begge detekterer blå er vi en goalzone og hvis kun en af dem detekterer goalzone er det bare grænsen mellem sort og hvid.
Vi udførte en test på banen med blå goalzone, og erfarede robotten havde problemer med at detektere goalzone. Robotten roterede rundt om goalzone istedet for at stoppe i den.
Vi mener problemet skyldes målsensorens placering. I denne opsætning af sensorer var begge sensorer aldrig i goalzone på samme tid og derfor kunne begge sensorer ikke detekter goalzone og stoppe robotten.

Den anden løsning omhandlede at anvende et antal på-hinanden-følgende målinger af blå for at stoppe på goalzone. Ideen med denne løsning er at der i et normalt scenarie ikke vil forekomme mange på hinanden følgende målinger af blå på vej til goalzone, og vi kan derfor udnytte dette til detektion af goalzone. Et problem kunne være detektion af blå på grænsen mellem sort og hvid, dette kan dog modvirkes ved at sætte antal af nødvendige blå målinger op.

I testen satte vi antallet målinger for en blå detektion op til 5. Vi erfarede at robotten kun stoppede i goalzone,og den stoppede næsten lige så snart sensoren kom inden for goalzone.

6. PID Line Follower

Vi startede med at implementere en linefollower der kun gjorde bruge af proportional control. Dette virkede med bilen blev ved med at være i svingninger omkring en lige linie. Proportionalitets konstanten kp, satte vi til 20/maxError. Hvilket betød at når vi gangede den aktuelle error med kp, i algoritmen, ville resultatet altid ligge mellem -20 og 20. Da 80 var vores bagrunds power, ville ydre punkterne for power være 60 og 100 hvilket vi mener er ideelt da erfaring har vist at motorerne kører meget langsomt omkring 60.
De andre faktorer i PID implementerede vi, og udregnede konstanterne ki og kd som en faktor af kp. Integralet som en tiende del af kp og den afledte som ti gange kp, hvilket blev foreslået i guiden[x].
For at undgå at skulle skrive sensor værdierne for sort og hvid ind i programmet brugte vi kalibrerings funktionen fra klassen BlackWhiteSensor[x].
Efter kalibreringen begyndte bilen at køre med det samme hvilket resulterede i af integralet hurtigt byggede sig så højt op at bilen bare blev ved med at køre i ring.
Derfor implementerede vi en nulstilling af integral-værdien hver gang error skiftede fortegn. Dette fik bilen til at være godt til at følge lige linier men i sving drejede den for langsomt og kom væk fra linien.

Istedet for at prøve at finde de rigtige værdier i lab, ved at programmere bilen og kigge efter forbedringer, valgte vi at lave en matematisk model[x]. Hermed kan bedre værdier for kp, ki og kd hurtigt findes og indflydelsen fra de forskellige elementer let observeres. Der er nogle fysiske faktorer som gør at kp, ki og kd værdierne ikke altid kan overføres direkte til bilen. Da den matematiske model ikke tager højde for f.eks. hvor hurtigt bilen kan dreje.
 

7. Status
Efter afsluttet lab session, har vi nået at komme omkring alle punkter på dagsordenen. Vi har foretaget forskellige målinger med farvesensoren, for at opnå større kendskab til dens egenskaber, og vi har anvendt sensoren i praksis.

Vi har udbygget koden til en eksisterende line follower robot, så den også kan detektere en blå målzone. Her afprøvede vi to tilgange; en med en ekstra farvesensor til målzonen, og en hvor vi kigger på hvor mange blå målinger der er foretaget i streg. Den sidste tilgang var den bedste i vores forsøg.

Til sidst lavede vi en line follower baseret på PID controller konceptet. Vi fik det grundlæggende controller skelet på plads, men vi mangler at finde passende værdier til konstanterne kp, ki og kd. Koden skal også ændres så at integralet nulstilles når error værdien skifter fortegn (robotten overskyder), således at robotten ikke overskyder yderligere.


8. Referencer
[1] Ole Caprani BlackWhiteSensor.java klasse
http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson4.dir/BlackWhiteSensor.java
[2] ColorSensor TestCode
http://dl.dropbox.com/u/2779683/ColorSensor.rar
[3] ColorLineFollower GoalZone
http://dl.dropbox.com/u/2779683/ColorLineFollower_GoalZone.rar
[4] J. Sluka PID Controller for Lego Mindstorms Robots
http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html
[5] Matematisk model for LineFollower
http://dl.dropbox.com/u/4447110/Book42.rar

No comments:

Post a Comment