World Robot Olympiad 2015 - Regular

Ole Caprani
Institut for Datalogi, Aarhus Universitet,
ocaprani@cs.au.dk

Sidst opdateret 3.8.15.

CubeToRed, CubeToBlue, CubeToGreen og CubeToYellow

Når WRO Starter Bot 2015 befinder sig i vægpositionen med en kube fasthold af armen, skal robotten kører med kuben til en af de 8 mulige anbringelsespositioner. Første gang robotten befinder sig i vægpositionen med en kube er efter udførelse af blokken GetCubeInRed i Red. På basis af kubens farve har forgreningen i Red derefter valgt imellem at udføre en af de fire blokke CubeToRed, CubeToBlue, CubeToGreen og CubeToYellow. Hver af de fire blokke vælger nu en rute ud til én af de to anbringelsespositioner i henholdsvis rødt, blåt, grønt og gult område. CubeToYellow kan f.eks. vælge den lyse gule rute, som vist her:
Fælles for de fire blokke er, at de bruger de fire variable posInRed, posInBlue, posInGreen og posInYellow (se Registrering af placerings- og anbringelsessteder) til at vælge imellem de to ruter til hvert område. Fælles er også, at de fire sorte vandrette streger, markeret med numrene 1, 2, 3 og 4 ovenfor, benyttes til at køre ind til én af de 8 anbringelsesporsitioner. F.eks. i CubeToYellow vælges at køre robotten til streg nummer 1, dreje på stedet mod venstre og så følger robotten kanten af stregen indtil anbringelsespositionen for enden af den lange lyse gule pil. Det kan ses på videoen:

Når kuben er afleveret skal robotten tilbage til vægpositionen igen. CubeToYellow vælger den lyse gule rute, som vist her:

Kørslen tilbage til vægpositionen ser sådan her ud på video:

CubeToYellow

De fire blokke CubeToRed, CubeToBlue, CubeToGreen og CubeToYellow har samme struktur, så det er kun blokken CubeToYellow, som forklares i større detalje. Åben CubeToYellow for at se indholdet af blokken.

Den del af blokken, der afleverer den gule kube i anbringelsespositionen i gult område, som vist på den første video ovenfor, ser sådan her ud:

Den første blok, en variabel blok, læser værdien af posInYellow og værdien bruges i den næste blok, en forgrenings-blok (se EV3 hjælp > Programmeringsblokke > Flow-blokke > Forgrening), til at vælge imellem de 2 muligheder i forgreningen nemlig posInYellow = 4 eller posInYellow = 3. Disse to muligheder svarer til, at robotten enten skal køre langs den sorte streg nummer 1, som på videoen (valg 4) eller streg nummer 2 (valg 3). Afhængig af valget udfører programmet netop én af de to MoveCm blokke, som bringer robotten enten ud imellem streg nummer 1 og 2 (70 cm ligeud) eller ud imellem streg nummer 3 og 2 (40 cm ligeud). Det betyder, at uanset hvilken af de to streger robotten skal følge, så står robotten nu efter forgreningen i en position, så stregen den skal følge er lige foran robotten:
De næste 6 blokke bringer derefter den gule kube til den rette plads:
  • Blokken GoToLine får robotten til at køre ligeud indtil den midterste farvesensor registrerer stregen, hvorefter robotten standses.
  • MoveCm flytter robotten 7 cm frem, så hjulene står på den sorte streg.
  • Blokken SpinToLine drejer robotten til venstre på stedet indtil den midterste farvesensor registrerer stregen.
  • SpinDegree drejer robotten yderligere 15 grader til venstre, så den midterste farvesensor er på den venstre side af stregen, så robotten står klar til at følge stregen.
  • I løkken sørger blokken LeftEdgeDrive for, at robotten følger den venstre kant af stregen og det sker i 5 sekunder, idet løkken er sat til at stoppe efter 5 sekunder.
  • Den sidste blok DeliverCube følger stregen resten af vejen og afleverer kuben.
Grunden til at stregen først følges i 5 sekunder er, at robotten skal bringes hen over de to sorte tværstreger på midten af banen, så DeliverCube dernæst kan køre efter den sorte tværstreg inde i det gule område, når robotten skal navigeres til anbringelsespositionen.

For at komme tilbage til vægpositionen igen vælger robotten imellem to ruter, som vist her:

På den anden video ovenfor kan det ses, at robotten bakker tilbage til vægpositionen. Kørslen tilbage behøver ikke være så nøjagtig som afleveringen, derfor benyttes de sorte streger ikke til navigation. I stedet bruges en simpel rute af ligeud strækninger og drej på stedet. De blokke der klarer at få robotten tilbage til vægpositionen, som på videoen, ser sådan her ud:
Den første MoveCm får robotten til at bakke 120 cm, SpinDegree drejer robotten til højre 90 grader på stedet, så den vender bagenden mod vægpositionen og forgreningen vælger den sidste MoveCm som får robotten til at bakke til vægpositionen, enten fra linie 1 (posInYellow = 4), 100 cm, eller linie 2 (posInYellow = 3), 70 cm, så robotten ender med at stå i vægpositionen. Bemærk, at robotten bliver ved med at køre efter den er stødt ind i væggen. Det er for at robotten kan rette op, så den ender med at stå vinkelret på væggen og er klar til at køre vinkelret ud fra væggen igen. Grunden til at robotten bliver ved med at køre er, at strækningen som er angivet i MoveCm er en 4-5 cm for lang i forhold til væggens position.