World Robot Olympiad 2015 - Regular

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

Sidst opdateret 1.8.15.

Registrering af placerings- og anbringelsessteder

Ved starten af en kørsel med WRO Starter Bot 2015 stilles robotten, så den kan kører henover de 8 farvede felter midt på banen imellem de to sorte streger. På den måde kan robotten registrere de aktuelle farver af de farvede felter og dermed kan programmet, som styrer robotten, vælge rute, når de farvede kuber skal hentes og bringes til deres rette plads. Kørslen henover felterne ses på videoen:

Programmet, som styrer robotten på videoen, bruger den midterste farvesensor til at følge ydersiden af kanten af den sorte streg til venstre for robotten i kørselsretningen. Det betyder, at farvesensoren til højre bevæges henover de 8 farvede felter og farvesensoren kan derfor bruges til at registrere de aktuelle farver af de 8 felter. De aktuelle farver på de 8 felter kan programmet dernæst bruge til at vælge en rute, så de farvede kuber bliver hentet og anbragt de steder på banen, som er angivet af de aktuelle 8 farver.

De forskellige muligheder for brug af farvesensoren er beskrevet i EV3 hjælp > Generelt > Brug af sensorer > Farve, se eventuelt introduktion til farvesensor. For at kunne registrere farverne af de 8 felter skal farvesensoren bruges i tilstand Farve:

I tilstand Farve registrerer farvesensoren farven, som et tal med følgende betydning:
På videoen ser de 8 felter midt på banen sådan her ud:
Det betyder, at farvesensoren registrerer følgende værdier, når robotten, som på videoen kører henover de 8 farvede felter:
  • 5 = rød
  • 2 = blå
  • 3 = grøn
  • 4 = gul

  • 4 = gul
  • 3 = grøn
  • 2 = blå
  • 5 = rød
Programmet DisplayVar.ev3p fra EV3 projektet WRO2015.ev3 får robotten til at kører henover de 8 farvede felter, hvorefter robotten stopper op og farveværdierne for de 8 felter vises på EV3 skærmen. Farveværdierne vises indtil der trykker på midterknappen på EV3.
Prøv at køre programmet. Prøv også at bytte rundt på de farvede felter.
For at kunne vise de aktuelle farveværdier på skærmen er programmet nødt til at huske værdierne efterhånden som robotten kører henover felterne. Farveværdierne huskes i såkaldte variable (EV3 hjælp > Programmeringsblokke > Data-blokke > Variabel):
Programmet DisplayVar.ev3p ser sådan her ud:
Programmet består af 6 blokke:
  • Den første blok er en variabel-blok, som sætter en variabel kaldet offset til 40 (se eventuelt EV3 hjælp > Programmeringsblokke > Data-blokke > Variabel). Værdien af offset skal være den lysværdi farvesensoren på port 3 registrerer over kanten af en af de sorte streger på banen, se Følg kanten af en sort streg.
  • Den næste blok, GetPositions, får robotten til at køre henover de 4 første felter, registrerer de 4 farveværdier og huske dem i 4 forskellige variable.
  • Den tredie blok, GetColors, får robotten til at køre henover de 4 sidste felter, registrerer de 4 farveværdier og huske dem i 4 forskellige variable.
  • Den næste blok, en bevægelsesstyring-blok, får robotten til at standse.
  • Den femte blok, DisplayColors, viser værdierne af de 8 variable på EV3 skærmen og
  • den sidste blok venter på, at der bliver trykket på den midterste knap.
De 8 forskellige variable, som bruges til at huske de 8 farveværdier, kan ses under Variabler fanen i Projektegenskaber i projektet WRO2015.ev3:
Betydningen af de 8 variable i forhold til de farvede felter er:
  • colorInYellow: Farven på kuben i det gule område.
  • colorInGreen: Farven på kuben i det grønne område.
  • colorInBlue: Farven på kuben i det blå område.
  • colorInRed: Farven på kuben i det røde område.

  • posInYellow: Gul betyder situation A, grøn situation B.
  • posInGreen: Grøn betyder situation A, gul situation B.
  • posInBlue: Blå betyder situation A, rød situation B.
  • posInRed: Rød betyder situation A, blå situation B.

Situation A og B er forklaret i regler ved den danske finale.

Med de 8 felter som på videoen bliver værdierne af de 8 variable altså:

  • colorInYellow = 5 = rød
  • colorInGreen = 2 = blå
  • colorInBlue = 3 = grøn
  • colorInRed = 4 = gul

  • posInYellow = 4 = gul
  • posInGreen = 3 = grøn
  • posInBlue = 2 = blå
  • posInRed = 5 = rød

Svarende til følgende placerings- og anbringelsessteder:

GetPositions og GetColors

GetPositions, får robotten til at køre henover de 4 første felter, registrerer de 4 farveværdier og huske dem i 4 forskellige variable. GetColor klarer de 4 næste felter på tilsvarende vis. Den eneste forskel på indholdet af de to blokke er navnene på de variable, som de registrerede farver gemmes i. Dette kan ses her, hvor indholdet af de to blokke er vist ud for de farvede felter som registreres:
De to input parametre både til GetPositions og GetColors, minPower og P, gives videre som input til de 4 ReadColor blokke:

ReadColor

De to farvesensorer på henholdsvis port 3 og 4 bruges i blokken ReadColor til dels at følge kanten af den sorte streg til venstre i kørselsretningen, dels at registrere de farvede felters aktuelle farver:
Åbnes ReadColor, f.eks. i en ny fane ved at dobbeltklikke på ReadColor, ser den sådan her ud:
I blokken er der to såkaldte løkker ( EV3 hjælp > Programmeringsblokke > Flow-blokke > Løkker):
Den første løkke, 01, udfører blokken LeftEdgeDrive, som får robotten til at følge kanten af den sorte linie, indtil farvesensoren på port 4 registrerer en af farverne rød, blå, grøn eller gul. Når en af de fire farver registreres fortsættes med den næste program blok efter løkken, altså farvesensor-blokken imellem de to løkker ( EV3 hjælp > Programmeringsblokke > Sensorblokke > Farve):
Da farvesensoren på port 4 benyttes i tilstanden Farve, vil den værdi, som farvesensor-blokken registrerer altså være et af tallene, der fik løkken til at stoppe dvs 2, 3, 4 eller 5:
Den anden løkke, 02, udfører ligeledes blokken LeftEdgeDrive, men nu indtil farvesensoren på port 4 registrerer farven hvid. Når hvid registreres fortsættes med den næste program blok efter løkken, altså blokken efter ReadColor. Det betyder, at ReadColor bringer robotten langs stregen til farvesensoren på port 4 er over hvid. Når så næste ReadColor udføres, f.eks. som i GetPositions, er robotten altså klar til at registrere farven på det næste farvede felt.

De to input parametre til ReadColors, minPower og P, gives videre som input til de to LeftEdgeDrive blokke; output, color, er den registrerede farve fra farvesensor-blokken: