torsdag den 23. februar 2012

Lego LAB uge 4

Tilstede:
Mikkel Nielsen
Søren Bramer Schmidt
Peter Jessen

Mål

Målet med dagens øvelse er at lave en robotbil, som kan følge en linje og stoppe på en blå farve. Vi vil forsøge dette med både 2 og 1 lys-sensorer.


Plan
Planen er skrevet således, at vi følger opgaveformuleringen for uge 4 [1]
1.  Vi vil undersøge lys-sensorernes værdier over forskellige farver, og sammenligne disse resultater med hinanden..
2. Installere og køre test-programmet LineFollowerCal.
3. Skrive et program, der via lyssensoren kan kende forskel på sort, hvid og en målfarve.
4. Programmere og teste et program, der kan følge en linje og stoppe på et farvet målområde vha. 2 lyssensorer.
5. Gentage punkt 4 med kun 1 lys-sensor, ved at bruge en PID-regulator.


Resultater

1. Sort-hvid måling

Eksperimentet med at teste værdien på forskellige farver, er nøjagtig det samme vi gjorde i uge 1. Vi holdt skiftevis den ene og den anden lyssensor over forskellige farver. Af dette lærte vi, at der kan være forskel på lyssensorer, og at det derfor giver mening at kalibrere hver enkelte lyssensor inden brug. De to sensorer vi testede i dag havde en forskel imellem forskellige farver på mellem 1 og 5 procent-point.  


2. Line Follower med kalibrering

Vi kørte LineFollowerCal som givet fra [1].

Programmet har et problem med at nå at rette op, hvis svinget er for skarpt. Sensoren kommer ud over den forkerte side af linjen inden den når at rette op. Det betyder, at den kan tage sving i den ene retning uden problemer, men misser sving i den anden retning. Hvis linjen var meget bredere ville dette ikke være et problem. Problemet er illustreret på videoen her:



3. Farve-genkending med kalibrering

Vi har skrevet colorsensor programmet således, at hvid og sort er værdier,  der er henholdsvis over og under et threshold. Målfarven er en zone på +/- 2 procentpoint omkring en bestemt procent værdi for målfarven, som vi kalibrerer før robotbilen bliver sat til at køre.

Da værdien for blå er i området mellem hvid og sort vil lyssensoren ofte registrere “blå” i overgangen mellem linje og ikke-linje. Derfor har vi monteret en ekstra lyssensor, der sidder så langt ude til siden, at den aldrig kommer ind over linjen som robotten følger.


4. Line Follower som stopper over blå

Med den ekstra sensor har vi kombineret vores colorsensor med linefollower koden. Robotten følger linjen med oscillerende adfærde som i linefolloweren fra uge 1. Den anden sensor måler alene efter den målfarve som indikerer at vi har nået målet.


Video: 



Kode for FollowStopSensor [2]:
while (true) {
    if (sort) {
        Drej til venstre!
    }

    else {
        Drej til højre!   
     }

    if (mål) {
        Stop!
    }
}


5. PID Linefollower


Vi startede med at implementere P-controlleren som beskrevet i pseudo-koden i [3]. Her bliver der målt en error og kraften til de to motorer bliver sat herefter. Vi lavede et forsøg på en bane med denne kode alene. 
Herefter tilførte vi ‘I’ delen således, at vi fik en PI-controller.  
Vi prøvede at bruge programmet direkte, men det gav nogle problemer. Integral variablen steg for hurtigt, så vi måtte tilføje nogle check. Vi rettede det ved at dele error med 1000 inden vi lagde den til integral. Desuden indførte vi et treshold på +/- 50 for integral, og nulstillede integral variablen hver gang error blev 0. Dette fik robotten til at følge en linje nogenlunde.

Disse ændringer kan ses i pseudo-kode her:

if (error skifter fortegn) {
    integral = 0;
}


integral = integral + error/1000;
           
if (integral > 50) {
    integral = 50;
}
           
if (integral < -50) {
    integral = -50;
}

Tilsidst programmerede vi ‘D’ delen ind, så vi havde en PID controller. D delen sørger for at forskellen mellem error værdien og foregående error værdi bliver lagt til hastigheden. Dette sørger for at mindske oscilleringerne.
Vi sammenlignede P, PI, og PID delen med tidsmålinger på en bane med en lige sort streg, som vist på billedet her:


Tidsmålingerne er vist her:

målingerne er vist i sekunder
          50    100 basis hastighed
PID    16,4    6
PI       9,4    3,9
P        9,2    n/a

P kunne ikke gennemføre banen med en basis hastighed på 100.
PID var meget langsom på 50, dette skyldes formentlig, at error fik sænket hastigheden på begge motorer. PI fik de bedste tider, men dette skyldes at banen var helt lige. PI reagerede for langsomt, så på banen med mange sving, kørte den let af banen. PID var den eneste version, som kunne klare banen med sving, med en basis hastighed på 100. Banen er vist her:


Videoen her er af PID med basis hastighed 100 på bane med sving
Video af PID på 100



Status
Ialt har vi brugt 6 timer på denne øvelsesgang. Vi nåede alt hvad vi havde planlagt. Vi brugte det meste af tiden på at programmere og teste PID-controlleren. Vi havde især problemer med PI delen, da vi måtte lave flere ændringer fra designet givet i [3]. Vi blev positivt overrasket over hvor godt PID virkede, efter vi havde haft problemer med PI. 

Referencer

Ingen kommentarer:

Send en kommentar