onsdag den 30. marts 2011

RoboCup 2011 - Onsdag (Kvalifikation)

Jeg tænkte meget på, hvordan jeg skulle komme videre fra den simple line-follower, til noget mere intelligent. Noget som gjorde, at jeg hurtigt og ret let kunne lægge flere ting ind i et program, og hvor robotten kunne træffe simple beslutninger undervejs, udover blot at følge stregen. Det skulle være noget, der er drevet af en form for events (når robotten er kørt x cm, når der kommer en forgrening), og der skulle være flere måder at køre (kør ligeud eller i en cirkelbue uden en streg).

Om morgenen fik jeg fik jeg resten af ideen, og da jeg kom derud begyndte jeg at skrive koden.

Hvis robotten følger stregen på højre side fra start til slut, vil den kunne køre i mål med 6 points. (4 porte á 1 point + 2 points for at komme i mål og aktivere sirenen).

Jeg kodede i ca. 3 timer, og efter ca. 700 linier kode og en masse tests, havde jeg et lille modulært system, hvor jeg kunne programmere robotten til at følge en streg, tælle sidegrene, sætte farten op/ned osv. Jeg nåede at få lavet et program, der i princippet kunne køre gennem 6 porte, og dermed score 6 points. Der ville være basis for at udvide programmet, hvis det fungerede på den første del.

Hvis programmet ikke fungerede, så havde jeg jo min back-up-plan, som blot fulgte stregen, og scorede 6 points, så strategien burde være rimelig sikker. (under kvalifikationen og under konkurrencen, får hver robot to gennemløb, og den bedste af de to gennemløb er den der tæller).

Jeg satte nye batterier i robotten, da "træningen" om formiddagen jo havde tæret lidt på batterierne. Min robot kan med friske batterier køre ca. 26 cm/s, og da minimumkravet til hastigheden er min 25 cm/s (reelt dog lidt mindre), så er der ikke så meget at give af!

Da robotten skulle starte på rampen gik det helt galt! Da den skulle til at køre, kom der nogle grimme 'knæk'-lyde fra den, hvorefter robotten gav sig til at køre i en bue! Dommerpanelet er dog fair, og reglerne giver da også mulighed for en omstart, hvis robotten fejler.

Jeg piller alle ledningerne af robotten, for at få batteridækslet af, så jeg kan stoppe robotten. (Modsat det oprindelige firmware, så kan LeJOS ikke bare stoppes, hvis ikke det er bygget ind i programmet). Jeg får lettet kontakten til et batteri, samler robotten, og starter igen.

Om jeg ikke lige har være så omhyggelig med at sætte robotten på tape-stregen, eller om det skyldes at jeg satte nye batterier i robotten ved jeg ikke, men styringen af robotten går lidt i selvsving (en egenskab ved den PID-styrealgoritme jeg bruger). Uanset, så gør de sving robotten laver hen mod guillotinen, at robotten lige netop fanges af kniven! Der røg så muligheden for at rette op på det avancerede program, og jeg turde ikke andet end at vælge den sikre back-up.

Ved næste kørsel var robotten klar med den simplere line-follower. Desværre mistede dette ellers så sikre og velafprøvede program stregen efter 4. port i et S-sving. Jeg endte på 4 points, og det krævede i år 6 points at kvalificere - en del mere end sidste år!

Lidt øv, men uanset, så er jeg meget meget bedre forberedt til næste år:

  • De digitale lyssensorer virker i det kraftige lys
  • Robotten er reelt hurtig nok, hvis blot den kører stabilt nok, og ikke slingrer for meget.
  • Robotten kan fint klare trappen, når blot batteridækslet er monteret.
  • På trods af den større modstand i larvefødder i forhold til hjul, så er der masser af batterikapacitet til et løb.
  • PID-styringen skal også testes med helt friske batterier...
  • LeJOS fungerer rigtig fint!
  • Diverse tests fungerede godt undervejs
  • Forberedelse betyder alt!

Næste år...!

lørdag den 26. marts 2011

RoboCup 2011 - Tirsdag (øvedagen)

Det er ikke nogen hemmelighed at jeg burde være bedre forberedt. I løbet af året havde jeg oven i købet købt krydsfinérplader svarende til mål for vippen, plateauet med golfkuglen og golfhullet, den rigtige (super gode, men temmelig dyre) Tesa lærredstape osv. Jeg har undervejs i forløbet skiftet fra NXC til LeJOS. Et valg jeg bestemt ikke har fortrudt, men som også har betydet at API'et nærmest skal læres forfra. Jeg har lavet lidt forsøg hjemmefra med LeJOS' motorstyring, og det lader til at fungere ret godt, omend ikke perfekt. Det lader til at være både lettere at anvende, og mere præcist end NXC, men det bruger til gengæld også mere CPU-resourcer, og har lidt udfordringer med at skifte hastighed mens der foretages reguleringer.

Der er dog absolutte fordele ved at skifte til LeJOS:

  • Jeg kan bruge et professionelt udviklingsmiljø til at skrive programmerne til robotten
    Alt fungerer under Eclipse, jeg kan lave unit-tests med JUnit, sende programmer over i robotten med Bluetooth osv.
  • LeJOS er meget tæt på rigtig Java
    Den har dynamisk lagerallokering af objekter, arrays mv, ganske avanceret garbage collection, klasser og objekter, tråde, semaforer osv. helt som man kender det fra Java. 
  • LeJOS afvikles hurtigere end NXC
    Tabeller er ca. 12-13 gange hurtigere, og integer-operationer er ca. 16 gange hurtigere!
Da jeg mangler en del af robottens styring, vil jeg bruge første dag til at få den bassale styring med motorer  og sensorer på plads. Ret beset ved jeg stadig ikke, om sensorerne overhovedet kan fungere i det kraftige lys, uden afskærmning!

Efter at have pakket en kasse med de nødvendige ting (ekstra batterier, oplader, laptop, samt snacks til at holde det hele kørende til dette kode-maraton), tager jeg ind til DTU.

Bortset fra den ændrede bane, er det helt som sidste år. Banen virker dog mindre, og lyset knap så skarpt, men det er absolut subjektivt! Jeg genkender nogle af folkene derinde, da jeg går en runde, og jeg hilser på dem, og hører hvad de stiller op med. 

Jeg går i gang med at sample lys og finder ud af, at sensorerne fungerer fint! Jeg beslutter mig for at flytte sensorerne lidt op, så de får et lidt bredere område at reagere på. Det fungerer stadig fint, og jeg går i gange med en simpel P.I.D.-styring til robotten.

Efter en masse målinger, udskrifter til NXT-brikkens display, prøvekører jeg robotten. Det fungerer første gang!

Nu er det ikke så svært at lave en P.I.D.-styring der "virker", og selvom jeg er ganske stolt af, at robotten reagerer korrekt (drejer til den rigtige side, og faktisk styrer ganske pænt!), så er udfordringen at få stabiliseret styringen, så den også fungerer når robotten kører hurtigere! En PID-styring har det med let at kunne gå i selvsving, ved at overreagere. Det har jeg ikke brug for! Robotten klarer kun lige hastighedskravet på 25 cm/s: Med fuldt opladede batterier klarer den omkring 26 cm/s, så der er ikke råd til alt for meget slinger på vej hen til guillotinen!

Jeg knokler på med at justere parametrene, tester bunker af gange, og robotten ender med at køre ganske pænt: Når den kører ad en stort set lige streg, justerer den fint og roligt, og generelt ligger den indenfor ½ cm på hver side af stregen. Udfordringen kommer når underlaget skifter til gråt, og tilbage til hvidt. Programmet kan ikke selv kompensere, og jeg lægger lidt ekstra logik ind, så den holder lidt til venstre når styringen går galt. Det fungerer, og den kan nu med rimelig sikkerhed køre fra start til mål, så jeg tager hjem ca. 03:15.

På vej hjem tænker jeg på mine prioriteter til næste dag. Der skal bygges noget logik, der kan bruge den simple PID-styring, så jeg kan høste flere points til kvalifikationsrunden. Det plejer ikke at være et problem at kvalificere, men der var flere med, der var noget bedre end sidste år, så man ved aldrig.


DTU RoboCup 2011 - overvejelser og forberedelser.

RoboCup 2010 var lidt af en skuffelse. Alle de forberedelser jeg havde lavet med den lille analoge lyssensor viste sig slet ikke at holde, og kombineret med problemerne med firmware og hardware i NXT-brikken, valgte jeg at udgå før kvalifikationen.

For mig er ideen ultimativt at vinde RoboCup med en robot lavet i ren LEGO. Ingen fancy sensorer, kamera, osv. men 3 LEGO-motorer og 4 LEGO-sensorer. Intet andet.

Racerbanen er på forhånd udelukket for en lille LEGO-robot. Dens motorer er simpelthen ikke kraftige nok til at give en hastighed på over 1 m/s. Minimumkravet til hastigheden er 25 m/s, og det giver ikke noget at stile efter mere, hvad angår points.

Størstedelen af banens points høstes ved at kunne navigere efter en streg i gulvet, og så mulighed for at kunne navigere en lille smule uden streger - enten ved odometri, eller på anden måde måle afstande til objekter, f.eks. ved brug af lys eller ultralyd.

Udover navigation er der tre points tilknyttet objekter der skal samles op og flyttes: To golfbolde kan samles op og puttes i et golf-hul, og der er et point mere hvis man kan opsamle en potteplante, og tage den med i mål. Derudover er der mulighed for et point mere, hvis man kan detektere en blinkende port.

Jeg brugte meget lang tid på at tænke over, hvordan man kan konstruere en robot, der kan opsamle golfbolde og en potteplante. For en lille LEGO-robot er potteplanterne en nærmest umulig opgave! Jeg har dog ikke givet op, men har besluttet mig for, at det bliver en anden gang.

Årets bane er desværre uden "pukkelpisten" - en forhindringsbane, der volder de fleste af robotterne en del besvær, da deres hjul let sætter sig fast. Jeg håber stadig de beslutter sig for at tage den med igen...

Jeg beslutter mig for at beholde nuværende design med larvefødder, og så bygge en lyssensor der kan justeres i højden. Jeg har stadig ikke erfaring med lysforholdene og denne sensor (HiTechnic Color Sensor V2). Det tog dog længere tid end jeg lige forestillede mig at lave denne lille detalje, men jeg var klar med robotten til øvedagen. Larvefødderne blev adskilt helt, vasket i sæbevand, skyllet og tørret grundigt. Nye elastikker blev sat på - det er lidt et pillearbejde - og larvefødder og vitale dele af robotten fik lidt Super Lube Dri Film for at mindske slid og friktion. Efter lidt målinger og justeringer besluttede jeg mig for at robotten var klar til at blive meldt til.

Nu mangler softwaren bare! Uanset, så er erfaringerne med de fysiske forhold på banen vigtige, så jeg melder mig til, og gør mig klar til at tage derind om tirsdagen til øvedagen. Det skal også blive hyggeligt at se deltagerne fra sidste år.