torsdag den 17. december 2009

Projektaktivitet 3

Projektaktivitet 3



Dato: 17. december 2009
Varighed: 7 timer
Deltagere: Annette, Rasmus og Samuel



Mål

GyroSensorkoden er klar til at blive brugt i forbindelse med at robotten skal holdes oprejst, så der skal laves et projekt hvor der kan reguleres ud fra værdier fra GyroSensorkoden. Dette skal efterfølgende kombinereres med bluetoothkoden, hvor regulering og bluetooth hver bliver en selvstændig tråd. Arbejdet med at få robotten til at balancere påbegyndes muligvis.



Baggrundsinfo
PID er et lukket sløjfe reguleringssystem. PID controlleren beregner en fejlværdi mellem den målte værdi (procesvariablen) og en ønsket værdi (set point) og ud fra det prøver den at regulere. Se yderligere om PID regulering her: PID regulering.




Fremgangsmåde


Segway med gyrosensorkoden

Udgangspunktet for at få robotten til at balancere bliver klassen Segway fra øvelse 4 [3.1]. Segway er den klasse som håndterer selve PID reguleringen. Den blev brugt i forsøg på at få robotten til at balancere vha. lyssensorer, så den skrives om til at bruge GyroSensor klassen i stedet for.


Segway klassen arver fra Thread Klassen og i constructoren til Segway oprettes en instans af GyroSensor klassen. En anden metode i Segway er getBalancePos() som sørger for at kalibrere offset ved at kalde calibrateOffset() metoden på GyroSensor. Efterfølgende aflæses setPoint vinklen som er udgangspunkt for reguleringen af robotten. run() metoden indeholder koden til reguleringen, som vil være på baggrund af værdier fra GyroSensor klassens getAngle() metode.


Reguleringen vil blive beskrevet senere. Derudover består projektet af DataLogger klassen så vi har mulighed for at analysere opsamlet data under arbejdet med PID kontrollen. Testen udføres fra BalanceTest klassen.


Bluetoothdelen

SegWayPCGUI klassen, viser et grafisk interface på PC'en, hvor der kan skrives værdier ind for P, I og D, som kan sendes individuelt. Den opretter forbindelse til NXT enhedens BluetoothThread klasse (som skal være startet først). Værdierne der bliver sendt fra PC'en er 4 cifrede, så der laves en omregning i BluetoothThread klassen, der kan indstilles individuelt for P, I eller D, alt efter hvor store eller små tal der skal bruges.

Når der modtages en værdi i BluetoothThread, kalder den den passende set-metode i SegWay klassen, så værdierne kan bruges. Værdierne starter alle på 0, når enheden startes. Kraften til motoren i SegWay, er normaliseret mellem 55 og 100, hvilket vil sige at den bevæger sig selvom P, I og D er 0. Derfor sættes en if sætning ind, der sætter motor power til 0, hvis P er 0. Så begynder robotten først at køre, når den får en P værdi tilsendt.



Resultater


Segway med gyrosensorkoden

Det har ikke voldt problemer at implementere PID reguleringskoden fra øvelse 4 i en test med vores egen GyroSensor klasse og DataLogger klassen.



Bluetooth delen


Arbejdet med undersøgelserne af gyroskopet er foregået vha. USB kablet på en anden NXTenhed end den der er brugt til arbejdet med Bluetooth kommunikationen. Det viser sig nu at der er problemer med Bluetooth kommunikationen på NXT’en hvor gyroskopet er blevet undersøgt, så vi har besluttet at bruge den, hvor vi ved Bluetooth virker.

Her viser det sig dog at der sker noget interessant med driften, for den er her langt mindre selvom vi kun skifter NXT og ikke selve sensoren. En anden ting der også undrer os er at offset er ændret fra før 596 til nu ca. 591. Så vidt vi har kunnet forstå skyldes drift hardwaren i selve sensoren, men denne opdagelse tyder på at også hardwaren i NXT'en har indflydelse.


Vi har ikke tid til at undersøge dette nærmere, men vi har en formodning om at det kan være A/D konverteren eller måske batteriniveauet der spiller ind.

Den samlede kode med GyroSensor, regulering og Bluetooth kan ses i [3.2] Samlet kode.


Konklusion


Samlingen af koden er gået fint, så vi er nu klar til at finde værdier for PID reguleringen. Bluetooth kommunikationen er implementeret så vi kan sende værdier til robotten. Det gør det nemmere fordi vi så ikke skal ændre i koden, compile og downloade til robotten, hver gang vi ændrer en af P, I, D værdierne.


Vores oplevelse med at det har betydning hvilken NXT der bruges og ikke kun hvilken sensor der bruges undrer os stadigvæk, men vi har valgt at lade det ligge.


I næste projektaktivitet skal interfacet på PC'en bruges til at tune PID konstanterne.


Referencer
[3.1] Øvelse 4: Øvelse 4.
[3.2] Samlet kode: Endelig-Kode

Ingen kommentarer:

Send en kommentar

Faste læsere

Bidragydere