torsdag den 11. november 2010

Lab 9

Dato: 11/11 - 2010
Varighed: 14 - 16
Medvirkende: Morten Rasmussen, Kenneth Sejdenfaden Bøgh, Morten Nikolaj Pløger.

Mål:

http://legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson9.dir/Lesson.html


Idag skal vi afprøve forskellige måder at holde styr på en NXT robots' position via motorens tacho counter.

Plan:

Robottens konstruktion er standard LEGO 9797 model.

1:
Vi vil som det første lave et program så robotten kører i det samme mønster som beskrevet til Brian Bagnall's Blightbot med LeJOS navigator klassen.
Her vil vi undersøge om vi når samme konklusion som Brian, nemlig at denne setup gør robotten god til at køre ligeud og måle afstand, men er upræcis til at rotere om sin egen akse.

2:
Her efter vil vi undersøge muligheden for at køre i et bestemt mønster samtidig med at undgå objekter.

3:
Til sidst vil vi forsøge at sammenligne to algoritmer til differential drive med den SimpleNavigator i LeJOS, og undersøge muligheden for at bruge en af dem til at forbedre SimpleNavigator.

Forløb: 

1:
Setup
Til denne opgave valgte vi at køre Tacho Navigator Test, fra leJOS Tutorial: Controlling Wheeled Vehicles[1] og redigerede koden således at robotten kørte i en firkant.
Det krævede nogle ændringer at få programmet til at køre, da klassen lejos.navigation.TachoNavigator ikke længere eksistere. Istedet skal man have fat i lejos.robotics.navigation.SimpleNavigator som tager en lejos.robotics.navigation.TachoPilot som parameter.
Vores kode kan findes her: http://cs.au.dk/~u071354/FirstPilotTester.java
Grunden til at vi vælger denne test, er at den er simpel og vil tydeligt vise hvor præcist SimpleNavigator klassen får robotten til at rotere, og om den kører i en firkant som forventet.
Test 
Ved den første test drejede robotten meget mere end den burde, dvs når vi bedte den om at rotere 90 grader i koden, ville den nærmere rotere 120 grader i virkeligheden.
Da det ikke er åbenlyst hvilken afstand imellem hjulene TachoPilot klassens parameter ønsker (altså om det er fra de yderste kanter, midten, eller indersiden af hjulene) kørte vi næste test med denne afstand sat til 13cm i stedet for de originale 14cm. Denne ændring gav en lille forbedring, men robotten er stadig meget upræcis i sin rotation.

Det er her vi får en mistanke om at baghjulet i konstruktionen har en del af skylden for den afvigelse vi ser imellem kode og praksis. Kenneth får den ide, at man kunne påmontere en bold der frit kan rotere istedet for baghjulet. Tankegangen er den samme som en gammeldags kuglemus.



Denne ændring i konstruktionen bekræftede vores mistanke, og har bragt os tættere på den forventede firkant.
Nu roterer den til gengæld en lille smule for lidt, hvilket resultere i at den ikke lukker firkanten helt.


kørsel med kuglebaghjul

Brian Bagnal
Som det sidste valgte vi alligevel at køre Brian Bagnall's rute af den årsag at den anvender nogle andre vinkler [2].
Vi foretog den første kørsel med ruten skaleret op med en faktor 2, og kunne konstatere at den lavede for store vinkler.
Da vi stadig, som nævnt tidligere, ikke er klar over hvilken afstand imellem hjulene vi skal sende med som parameter, valgte vi endnu engang at sætte denne værdi ned fra 13cm til 12cm. Ydermere kører vi ruten skaleret op med en faktor 3 for lettere at kunne se udsving i kørslen.
Disse ændringer viste betydelige forbedringer. En kørsel med ruten sat i loop 4 gange er illustreret nedenfor.



Som det kan ses fra ovenstående billede, er de 3 af kørslerne næsten helt symmetriske, hvorimod den sidste ryger en smule ved siden af, formentlig grundet at bolden ikke løber 100% frit et øjeblik. Det kunne selvfølgelig også skyldes drift, men i så fald ville man forvente en gradvist størrer afvigelse i løbet af de 4 kørsler. Koden findes her: http://cs.au.dk/~u071354/PennyPilotTester.java

Referencer:


[1], leJOS Tutorial: Controlling Wheeled Vehicles
[2], Brian Bagnall, Maximum Lego NXTBuilding Robots with Java Brains, Chapter 12, Localization, p.297 - p.298.



Generelle resultater og observationer: 

Ingen kommentarer:

Send en kommentar