torsdag den 19. november 2009

Øvelse 9


Dato: 13. november 2009


Øvelsens varighed: 3 timer


Gruppemedlemmer: Annette, Samuel og Rasmus


Mål

I denne øvelse skal vi undersøge tacho counteren af NXT motoren for at holde styr på positionen og retningen af en LEGO bil. Bilen skal være differential styret, dvs. de to motorer bruges uafhængigt til at drive og styre bilen. Desuden laves en undersøgelse af et kompas monteret på bilen. Hvornår er præcisionen størst.


Baggrundsinfo

Bilen i denne øvelse skal kunne dreje rundt på stedet. Dette opnås ved at sætte forward power på det ene hjul og backward power på det andet hjul.

Fremgangsmåde

Opgave 1: Præcision ved kørsel.
Den første øvelse handler om hvor præcist bilen kan vende tilbage til det samme sted og dermed hvor præcis tacho counteren er.


1. Montering
For at tilpasse bilen til denne øvelse monteres en tusch bag på, så den kan tegne på et white board ved undersøgelserne.


2. Navigation
I den første undersøgelse sætter vi bilen til at køre med default hastighed som er bestemt til at være 17cm/s (fundet ved udlæsning på display). Tacho counteren undersøges ved at programmere bilen til at køre 40 cm fremad (travel(40)) og efterfølgende kan vi se hvor langt bilen har kørt ved at måle længden af den tegnede streg.


3. Navigation
I denne undersøgelse sættes bilen til at køre i en lige linje fremad i 40 cm og efterfølgende dreje 180 grader om sig selv og igen køre 40cm. Dermed burde bilen ende samme sted som den startede.


4. Navigation
Nu sættes bilen til at køre i en firkant. Dette gøres ved at programmere den til at køre skiftevis 40 cm frem og drejer 90 grader til venstre indtil den skulle være tilbage ved udgangspunktet. Koden til disse undersøgelser kan ses i http://www.daimi.au.dk/~u071252/DL/Practice9/TravelTest.java.




Opgave 2: Undvige objekter.

  1. Robotten tilpasses ved at fjerne unødvendige tilbygninger, og sætte øge afstanden mellem hjulene. Dette gør at den har nemmere ved at bevæge sig. Ultralyds sensoren monteres, så robotten kan opdage de objekter den skal undgå.


  1. Øvelsen går ud på at få robotten til at undgå objekter og navigere via TachoPilot klassen. Robotten skal derfor kører tilfældigt rundt, og undgå objekter der kommer i vejen for den. Til dette bruger vi subsumtion arkitekturen fra øvelse 8.


Opgave 3: Navigation med kompas.


  1. Der monteres et kompas på robotten.


  2. Robotten skal navigere med kompasset, så præcisionen kan observeres. Til at starte med bruges TravelTest klassen fra opgave 1. Den eneste forskel er at der benyttes CompasPilot i stedet for TachoPilot.


  3. Da der i første forsøg ikke var indstillet på hjul størrelse og afstand, kalibreres dette. Derefter afprøves robottens præcision, i forhold til robotten uden kompas.


  4. Magnetisk Påvirkning
    For at se hvordan magnetisme påvirker kompasset, laves nogle ekstra tests med magnet og den kompas styrede robot.




Resultater


Opgave 1:



  1. På figur 1 herunder ses bilen med tuschen monteret.


Figur 1


  1. Tacho counteren er ret præcis. Når bilen sættes til at køre 40 cm kører den 40cm, se figur 2.


Figur 2

Under skrivning af den første testkode fandt vi ud af at klasserne der er vist i eksemplerne ikke virker eller er deprecated så vi endte med i stedet for at bruge TachoPilot klassen.

Der opstod også en smule forvirring angående F’et når man opretter en ny TachoPilot: Pilot pilot = new TachoPilot(5.6F, 20.0F, Motor.C, Motor.B, true);. Først troede vi at det betød at det var målesystemet hvor man bruger feet, så vi skulle finde ud af hvordan man angiver målene i cm. Vi fandt ud af at F betyder float, og at der ikke skulle skrives enheder på. Så længe man sørger for at bruge de samme enheder til alt hvad man angiver er det i stedet for et forhold som bliver beregnet.


3. Den er ikke så præcis når den skal dreje. Det ses på figur 3. Strækningen på de 40 cm passer igen som vi så under 2., men det går galt når den skal dreje de 180 grader om sig selv. Den kører ca. 20 grader for langt og ender altså et stykke fra udgangspunktet når den vender tilbage.

Figur 3

Problemerne skyldes blandt andet at tavlen er meget glat. Som en mulig løsning sættes et sæt ekstra hjul på og det hjalp lidt. Den skrider ikke så meget på underlaget når den skal dreje nu. Noget andet der har indflydelse er hvor hjulene er placeret, selvom man angiver afstanden mellem hjulene i koden, kan man ved at ændre på hjulenes placering få mere eller mindre fejl når bilen drejer om sig selv. Blandt andet oplevede vi at vi kunne få mindre fejl ved ikke at angive den korrekte afstand mellem hjulene.

4. Når bilen kører i en firkant spiller problemerne med underlaget selvfølgelig også ind. Derfor bliver det heller ikke en særlig lige firkant og bilen stopper et helt forkert sted i forhold til udgangspunktet, men her summeres fejlen også op da firkanten kræver at bilen drejer 90 grader tre gange, se figur 3. Dette problem med drift beskriver Brian Bagnall også.


Bare for at prøve det, satte vi bilen på gulvet uden tuschen for at se hvordan den så klarede firkanten. Det så meget bedre ud så den største fejlkilde kan altså tilskrives underlaget.

Opgave 2:




  1. På billedet herunder ses robotten med ultralyds sensoren. Desuden har vi også monteret compass sensoren, som først bruges i den 3. opgave.


Figur 4



  1. Opgaven virker umiddelbart nem, men Pilot klassen har en anderledes opførsel end de metoder der tidligere er brugt. Når robotten er sat til at udføre en handling via Pilot klassen, kan den ikke umiddelbart sættes til at gøre andet. Dette løste
    For at indføre subsumption anvendtes SoundCar programmet fra en tidligere øvelse. Koden blev passet til, så det ikke var Car der styrede robottens bevægelser, men TachoPilot. RandomDrive klassen blev også rettet til, så den brugte de rigtige metoder.

  1. Steer() i stedet for Turn()
    Et at de store problemer, var turn() metoden i TachoPilot. Denne virkede i programmet til første del af øvelsen, men i dette program var den et problem. Når metoden blev kaldt med det antal grader den skulle dreje rundt om sig selv, begyndte den i stedet bare at køre ligeud. Det var ikke muligt at finde årsagen til at metoden ikke virkede, så i stedet anvendes Steer() metoden fra TachoPilot. Denne virkede efter hensigten.

  2. Avoid Objects
    AvoidFront klassen fra SoundCar projektet anvendes til at få robotten til at undvige objekter. Denne fungerer ligesom i SoundCar, dog med TachoPilot metoder i stedet for Car klassens metoder.


Opgave 3:


  1. På filmen ses robotten kører i en firkant vha. kompas sensoren.


  2. Det første forsøg var helt uden justering af hjul afstand eller diameter. Alligevel blev robotten afprøvet på et vandret whiteboard, med en tush montere på robotten. Robotten var sat til at kører i en firkant, og det var overraskende så præcist det blev.


  3. Præcisionen var ikke betydeligt anderledes med lidt ændrede værdier for hjul diameter og afstand. Dette kan skyldes at robotten selv korrigerer, alt efter graderne kompasset viser, og ikke hvor meget Tacho tælleren viser. Hvis underlaget er glat, som det er på et whiteboard, vil hjulene dreje rundt uden at komme så langt som de burde.

    En af de muligt kilder til afvigelse for kompas navigationen, kan være at den giver for meget fart når den drejer, og derfor bliver skubbet lidt længere væk end den regner med. Det set i hvert fald sådan ud, når den kører.


  4. Det er muligt at strømkabler i kabelbakkerne kunne påvirke kompas sensoren en smule. vi prøvede at flytte whiteboardet lidt rundt i lokalet, men det var ikke muligt at afgøre. I hvertfald er det ikke meget den bliver påvirket.
    Vi prøvede også at påvirke sensoren vha. magneten i en visker til whiteboardet. Det gik selvfølgelig helt galt hvis vi påvirkede sensoren under calibreringen. På billedet herunder ses hvordan det gik da vi prøvede at lade den kører calibreringen uforstyret og så påvirkede den under kørslen. Vi har ikke lavet nogle målinger på hvilken afstand der skal til for at den bliver påvirket.

Figur 5




Konklusion

Tachocounteren fungerede fint når bilen skulle køre lige ud, men der var store problemer når den skulle dreje hvilket for en stor del kunne tilskrives underlaget. Den fejl i rotationen som vi så når den skulle køre lige frem og derefter dreje 180 grader blev summeret op når bilen skulle køre i en firkant. Dette var også de resultater Brian Bagnall nåede frem til.


Forskel mellem kompas sensoren og den almindelige sensor, er at kompas sensoren selv kan kompencere, hvis robotten kommer fysisk ud af kurs. Tacho counteren kan kun navigere efter de udregninger den har, fra hvor mange omdrejninger hjulene har taget. Hvis dette af en eller anden grund er forkert (Hjulene glider, noget sidder fast osv.) opdager den det ikke.

Kompas sensoren derimod, måler efter hvilken retning robotten befinder sig i, og er derfor ikke påvirket af robottens fysik på samme måde. Dokumentationen for denne klasse, er meget begrænset og det er derfor svært at finde ud af præcis hvordan det virker. Da konstroktoren også tager parametre for hjulene, må man gå ud fra at afstand er målt via Tacho tællerne, da kompasset kun kender retningen. Heldigvis er Tacho tællerne temmelig gode til at måle afstanden, og unøjagtighederne opstår oftest ved rotation.



Referencer

Ingen kommentarer:

Send en kommentar

Faste læsere

Bidragydere