torsdag den 1. marts 2012

NXT Programmering, Lesson 5

NXT Programmering, Lesson 5

Varighed: 4 Timer
Deltagere: Mikkel, Jesper, Troels & Bjarke


FORMÅL

I denne lektion vil vi lave en såkaldt Segway robot. Dvs. en robot på to hjul der kan holde balancen. Dette gøres ved hjælp af NXT Lyssensoren. Den måler løbende afstanden til jorden og via resultaterne fra sensoren bestemmes om robotten skal køre fremad eller bagud. For nemt og hurtigt at kunne kalibrere konstanterne i PID kontrollen på vores segway-robot vil vi etablere en forbindelse mellem robotten og vores PC. Dette gør vi ved at modificere java-programmerne [2] der blev linket til i øvelsesvejledningen for denne uge [1] der kører på henholdsvis robotten og vores PC. 

PLAN

1. Først bygges robotten efter instruktionerne fra http://www.philohome.com/nxtway/bi_nxtway.htm.
2. Så tester vi sejway koden fra http://www.variantpress.com/books/maximum-lego-nxt.
3. Vi tester om vi kan få PCcarController og BTControlledCar [2] til at kommunikere via bluetooth.
4. Vi kombinerer sejway koden med BTControlledCar og kalibrerer vores bil ‘on-the-fly’ via en modificeret version af PCcarController fra pc’en.


RESULTATER
1. Instruktionerne var ikke så nøjagtige som vi kunne have ønsket os, men det lykkedes os at få bygget en rimelig fornuftig segway robot.



2. Noget af koden fra http://www.variantpress.com/books/maximum-lego-nxt var deprecated, så den krævede nogle ændringer. Specifikt ændrede vi i koden så vi benyttede Motorport klassen i stedet for Motor klassen. Herefter overførte vi programmet til robotten. Robotten kørte som den skulle, men der var for megen kraft på, hvilket resulterede i at den hurtigt væltede.



Vi konkluderede at der krævedes kalibrering af konstanterne for at få den til at virke og gav os derfor til at arbejde på forbindelsen mellem BTControlledCar og PCCarController, så vi kunne ændre konstanterne løbende.

3. Vi gennemførte dette som en del af 4 i stedet for at gøre det som et seperat punkt.

4. Vi kom til at gå direkte igang med punkt 4 i stedet for at gå igang med punkt 3. Det betød at vi ikke havde fundet ordentligt ud af hvordan vi kommunikerede via bluetooth. Dette gjorde at vi brugte en del kræfter på finde fejl i programmet der egentligt skyldes at vi ikke havde fået etableret en ordentlig forbindelse. Vi fandt ud af at få udskrevet NXT enhedens BT adresse. 
Her brugte vi Bluetooth.getLocalAddress() [3].

Vi har lavet en tråd til at modtage nye værdier til robotten over bluetooth. Dette gør vi fordi kaldene til at få værdierne over bluetooth er blocking. Med denne opsætning kan vi ændre værdier imens robotten kører. Vi har lavet et opsætningsskridt hvor man skal etablere forbindelse før robotten går igang med at prøve at balancere. Vi havde et stort problem med at få afsluttet vores tråd når robotten stopper. Problemet er, at tråden er låst i de blocking calls til at læse fra bluetooth streamen. Her bruger vi .interrupt() til at afbryde trådens udførsel. Dette virker dog ikke korrekt og vi har ikke fået en ordentlig måde at få afbrudt tråden (hvilket gjorde at vi blev nød til afkoble batteriet). 

Vi har ikke formået at få robotten til at balancere i mere end 2-3 sekunder. Det virker til at den kompenserer for lidt, for sent. Når den kommer ud over en vis grænse kan den ikke justere og vælter. Det endelige resultat kan ses i [4].

KONKLUSIONER

Vi har ikke fulgt vores plan ordentligt og kom derfor til at spilde noget tid undervejs. Robotten kom ikke til at balancere, formentlig fordi vi ikke kunne få konstanterne til at passe.


REFERENCER
1. http://www.legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson5.dir/Lesson.html
2. http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson5.dir/PCcarController.java og
    http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson5.dir/BTcontrolledCar.java
3. http://lejos.sourceforge.net/nxt/nxj/api/index.html
4. http://dl.dropbox.com/u/357278/Lego/TeddyWay/TeddyWay.java og http://dl.dropbox.com/u/357278/Lego/PCcarController/PCcarController.java

Ingen kommentarer:

Send en kommentar