Med Asbjørn, Christer og Jesper

fredag den 12. oktober 2007

NXT programmering, lesson 6

Tidsforbrug: 3 timer.
Deltagere: Asbjørn, Christer og Jesper.

Målet for dagens session at bygge en robot der kan balancere på to hjul ligesom en Segway.

Vi startede med at dræbe den gamle robot (R.I.P.) og bygge en ny. I softwaren forsøgte vi først med en P-controller, men den viste sig at være helt utilstrækkelig.

Den direkte mapping mellem målinger og motor-output resulterede i vild overshoot. Denne ville vi da udvide til en PD-controller for at kompensere for dette. I denne process flyttede vi sensoren tættere på jorden for at opnå bedre målinger. I sin oprindelige position mistede den hurtigt jorden af syne når den vippede.

Vi opdagede desuden at den indbyggede Math.pow(double a, double b) er defekt.
Derfor måtte vi ændre styringen, så vi ikke skulle bruge denne funktion. Vi modificerede PD-styringen til at benytte en ulineær funktion.

Nu prøvede vi at ændre robottens fysiske egenskaber ved at hæve tyngdepunktet. Dette gjorde vi ved at hæve NXT'en nogle centimeter. Hjulene skiftede vi også til en større model for at opnå en hurtigere respons når ubalance måles.

Det lykkedes desværre ikke i dag at få den til at holde balancen mere end et sekund ad gangen.

fredag den 5. oktober 2007

NXT Robot Race (lesson 5)

Tidsforbrug: 3 timer.
Deltagere: Asbjørn, Christer og Jesper

Målet med dagens lektion er, at få vores robot til at følge en sort
streg på en bane på kortest mulig tid. Til slut skal vores tid
indsendes til Legolab.

Grundlæggende var vi enige om at vores robot havde den korrekte
grundlæggende funktionalitet og dagen skulle bruges til at kalibrere
diverse konstanter i robotten for at opnå optimal hastighed.

Vi havde to forskellige "håndtag" vi kunne dreje på, begge relateret
til hastigheden i sving. Som det kan ses på billeder har vores robot
tre sensorer. Vores program kører robotten fremad hvis den midterste
sensor ser sort. Hvis den midterste sensor ikke ser sort, men er af de
andre to gør drejer den ind imod banen igen. Det gør den ved at det
ene hjul kører ved fuld hastighed og det andet kører ved en anden
hastighed. Denne anden hastighed kaldes herefter halfSpeed. Hvis ingen
af sensorne ser sort drejer den skarpt imod den side hvor den sidst
har set sort. Igen gøres det ved at det ene hjul kører ved fuld
hastighed mens det andet kører ved mindre hastighed. Denne mindre
hastighed kalder vi stopSpeed. De to variabler vi har leget med er
altså halfSpeed og stopSpeed.

Det første vi gjorde var at skifte batterierne til almindelige AA
batterier og sætte det store specielle batteri til opladning. Vi satte
da stopSpeed til 0 og eksperimenterede med forskellige værdier af
halfSpeed. For hver værdi lavede vi tre tests på banen:

halfSpeed stopSpeed tid / s
600 0 21,8
- 0 21,9
- 0 22,8
700 0 22,5
- 0 22,9
- 0 22,9
800 0 Fejl
- 0 23,8
600 0 22,8
- 0 23,1
- 0 23,2
500 0 23,1
- 0 23,3
- 0 23,4


På dette tidspunkt valgte vi at stoppe. Vi nøjedes med kun to målinger
ved værdien 800 fordi den værdi gav meget dårlige resultater. Kigger
du på ovenstående bruges værdien 600 to gange og giver forskellige
resultater. Vores konklusion var at det var vigtigere at der er meget
strøm på batterierne end hvad værdien af halfSpeed er.

Vi ændrede nu softwaren til at kunne skifte halfSpeed of stopSpeed
variablerne på runtime med et menu-system og skiftede batteriet
tilbage til det medfølgende specielle batteri og lavede nye
tests. Denne gang testede vi kun en gang for hver parameter. Først
koncentrede vi os om at skyde os ind på nogle gode værdier til
halfSpeed med de nye batterier:

halfSpeed stopSpeed tid / s
600 0 22,3
550 0 22,5
650 0 22,0
700 0 22,9


Dernæst eksperimenterede vi med stopSpeed:

halfSpeed stopSpeed tid / s
650 100 22,0
650 200 22,0
650 400 22,6
800 500 23,3


Hvor den sidste test var et halv-desperat forsøg på at få meget fart
ud af robotten ved hele tiden at køre hurtigt. Det mislykkedes
naturligvis fordi den nu ikke længere var i stand til at følge banen
godt.

På dette tidspunkt koknkluderede vi at den eneste måde at få mere fart
på var bedre batterier, som vi ikke umiddelbart kunne finde. Vi gav
derfor umiddelbart op.

Nu var der ca. en time tilbage og for sjov ville vi få robotten til at
spille et stykke musik mens den kørte. Som musik valgte vi naturligvis
fjerde del af ouverturen fra William Tell. (Det eneste muligt korrekte
valg.) Vi fik bilen til at stå stille under introen hvilket så meget
imponerende ud. Det sjove er at med musik satte vi dagens bedste tid
(for vores bil):

halfSpeed stopSpeed tid / s
600 50 21,317


Vores bedste gennemkørsel:

En AVI kan hentes her.
Den spiller føromtalte melodi, men desværre bliver den overdøvet af motorerne.

onsdag den 3. oktober 2007

NXT programmering, lesson 4½

Tidsforbrug: 3 timer, onsdag d. 3. oktober
Deltagere: Asbjørn, Christer og Jesper

Målet med dagens ekstraordinære session er, at arbejde videre på forberedelsen til løbet. Vores robot kørte ikke hurtig nok og desuden var der flere mangler hist og pist. Så den blev sendt på operationsbordet for at blive udstyret med ekstra gearing.

Planen er i store træk:
  • Montere gearing så robotten kører hurtigere
  • Udvide programmet til at stoppe ved grønt
  • Udvide programmet til at tage tid
  • Optimeringer (vi har f.eks. lidt overshoot når robotten drejer)
  • Diverse... :)
I det følgende vil vi ikke nødvendigvis gennemgå disse punkter i denne rækkefølge. Vi vil snarere beskrive vores arbejdsgang i kronologisk orden.
Kl 17:30
Første udkast til den nye gearing er så småt på plads.

kl 17:55
Den nye gearing er færdigmonteret, men bilen kører nu baglæns. Fejlen rettes i software. Desuden er tyngdepunktet blevet rykket så langt frem, at vi midlertidigt monterede ekstra kontravægt.



kl 18:15
Første rigtige testkørsel med den nye gearing. Motorerne er for stærke. Med den nye gearing hopper sensorerne op og ned, og robotten får ikke ordentlige målinger. Det bevirker at den "stikker af" og slet ikke kan følge sporet. Vi diskuterer forskellige løsningsmodeller:
  • Mere vægt foran.
    • Dette viste sig at være utilstrækkeligt.
  • Mindre aggressiv gearing.
  • Softwaren skal ikke kompensere så kraftigt.
Desuden opdaterer vi softwaren med default måleværdier, så vi ikke behøver at kalibrere sensorerne ved hver eneste kørsel.

Kl 18:30 - 19:00
Pizzamanden ankommer og arbejdet indstilles. :)

kl 19:00
Vi indser at gearingen får robotten til at køre for hurtigt. Den kan simpelthen ikke nå at ændre retning før det er for sent. Vi beslutter at fjerne gearingen helt, men beholde de store hjul. Dette viste sig at være en god ide. Vi retter nu opmærksomheden mod overkompenseringen i svingene.

kl 20:00
Vi begynder så småt at pakke sammen. På nuværende tidspunkt er vi rimeligt tilfredse med robotten og det er kun småting der mangler. Disse regner vi med at kunne nå at udbedre fredag inden det endelige løb.

Dagens bedste tid for en gennemkørsel af banen:
22,3 sekunder