onsdag den 20. januar 2010

Projektaktivitet 6

Projektaktivitet 6



Dato: 14. januar 2010
Varighed: 7 timer
Deltagere: Annette, Rasmus og Samuel



Mål
Tilbage i projektaktivitet 4 observerede vi at der blev reguleret meget kraftigt selvom robotten var tæt på set point. Det er et hængeparti som vi vil nå at undersøge inden vi afslutter projektet, fordi det ligesom driften er en forhindring for at PID tuningen kan udføres.


Fremgangsmåde / Resultater

Motornormalisering
NXT'ens motorer kan modtage en kraft mellem 0 og 100. Hvis denne kraft er for lav, er motorerne ikke stærke nok til at overvinde den indre modstand og gnidning så robotten kan bevæge sig. Derfor er der i det projekt vi har taget udgangspunkt i, lavet normalisering af motorkraften. Motorkraften kommer med denne normalisering til at ligge mellem 55 og 100. Motornormalisering giver en mere glat overgang når robotten forsøger at balancere.

Når vi forsøger med PID regulering, kan vi se at robotten reagerer meget kraftigt, selvom den er tæt på sit balancepunkt. Dette kan måske skyldes motornormaliseringen, som gør at den tilførte kraft aldrig bliver mindre end 55, selvom robotten er i balancepunktet, og motorene burde stå stille.


Motornormaliseringen fjernes derfor, så det er muligt for robotten at stå stille, når den er i balancepunktet. Det ser mere rigtigt ud nu, når robotten kommer op til balancepunktet. At der ikke er normalisering gør dog at motorerne nogle gange "staller" (går i stå), hvilket er et problem der er set ved tidligere øvelser, når motorene skifter retning hurtigt efter hinanden, med fuld kraft.


Ændring af tid mellem regulering ( løsning af stall-problemet)
For at modvirke problemet med at motorerne går i stå uden motornormalisering, sættes ventetiden i programmets control-loop op. Det bevirker at der går længere tid mellem instruktioner til motorerne så skiftene ikke sker så ofte.

Vi prøver at sætte ventetiden gradvist op (spring på ca. 50 ms. ad gangen), helt op til en ventetid på 250 ms. En ventetid der til at starte med var 50. Dette gør at motorerne ikke længere staller, men robotten er meget langsom til at reagere, hvilket vi også havde forudset.


At sætte ventetiden så langt op, mener vi derfor ikke er en løsning på motorernes pludselige stop. En ventetid på omkring 50-60 ms er det der bruges i de andre projekter, vi har set på, og også det der har fungeret bedst for os generelt.



Tråd der håndterer læsninger
Læsning fra sensoren sker kun en gang per gennemløb af control-loopet og det kan måske være for sjældent, så det resulterer i dårlige beregninger af vinklen. Derfor forsøger vi at overlade læsning fra sensoren, til en separat tråd, der kan læse meget oftere end programmets control-loop. Det betyder at der nu er tre tråde; en tråd med selve PID reguleringen, en med aflæsning fra gyrosensoren samt beregning af vinklen og en med bluetooth kommunikationen.


Tråden sættes til at læse fra sensoren (som hovedprogrammet gjorde før), og gemme det i en lokal variabel. Hovedprogrammet kan derefter læse fra denne variabel, når den har brug for det. Derved sikrer vi at læsningerne fra sensoren er up-to-date, når programmet skal bruge dem.

Afprøvning


Drift vil naturligvis stadigvæk spille ind så vi har meget kort tid til at vurdere om fjernelse af normaliseringen har fungeret. Ved afprøvning, går der et eller andet galt. Driften er allerede fra starten helt enorm. Når programmet starter efter kalibrering, står vinklen et sted mellem 30 og 45 grader, hvor den ellers brude stå på 0 grader.


Vi brugte noget tid på at finde fejlen, som viste sig at være opstået pga. problemer med versionsstyring. Der var desværre blevet brugt en version af koden hvor en if sætning i readAngle() metoden var udkommenteret i forbindelse med forsøg på at lokalisere årsagen til driften. Da den blev indført igen var problemet væk.


Der er stadigvæk problemer med at motorerne staller, men vi vil holde fast i indførslen af en tråd mere til at læse vinklen. På den måde kommer vi ikke senere i problemer hvis vi ændrer i intervallet der skal reguleres i, intervallet mellem læsninger af vinkler vil stadigvæk ske i et passende lille interval.


Man kunne godt arbejde videre med at løse stall problemet, men vi ved fra et tidligere projekt at det burde blive afhjulpet når P konstanten er indstillet ordentligt, da der ikke vil komme så store skift i kraften til motoren [6.2]. Spørgsmålet vil så være om P konstanten kan indstilles ordentligt når den staller, men det har vi ikke tid til at se nærmere på.



Konklusion
Problemet med at der reguleres for voldsomt selvom robotten er omkring sit set point er løst ved at fjerne normaliseringen. Det førte til et nyt problem med at motorerne staller ved de hurtige skift. Forsøg på at komme det nye problem til livs gik på at ændre intervallet som der reguleres i og det førte igen til et problem med at readAngle kaldene skete for sjældent så vi lagde den del ind i en ny tråd.


Det løste ikke problemet, men vi holder fast ved den nye tråd fordi det giver frihed til at justere i control delen. Løsningen på stall problemet skal ifølge en anden gruppe i stedet komme fra tuningen af P konstanten.



Kilder
[6.1] Koden med tråd der håndtere læsning: KodeMedTraad
[6.2] Balance med lyssensorer , se løsning 2

Ingen kommentarer:

Send en kommentar

Faste læsere

Bidragydere