Regular - programmer til WRO Starter Bot 2012

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

Sidst opdateret 25.9.12.

Der er lavet to programmer til WRO Starter Bot 2012. Begge forsøger at få robotten til at hente alle fire farvede kuber og anbringe dem på de tilsvarende farvede pinde. De to programmer er wro2012_single.rbtx fra WRO Starter Bot 2012 - Building Instructions and Programs og Regular2012.rbtx. Det sidste er en redigeret udgave af wro2012_single.rbtx, som skulle gøre det lidt mere overskueligt at finde de steder, hvor programmet skal tilrettes, når det skal styre en nybygget robot. Regular2012.rbtx gennemgås i det følgende.

Kuberne hentes en ad gangen

Både programmet wro2012_single.rbtx og programmet Regular2012.rbtx følger den samme strategi: Kør ud fra basen og hent de fire farvede kuber en ad gangen i rækkefølgen Kube 1, Kube 2, Kube 3 og sidst Kube 4. Klik på banen og se, hvordan Regular2012.rbtx styrer robotten:
Start med at få programmet Regular2012.rbtx til at styre den nybyggede robot:
  1. Hent Regular2002.rbtx
  2. Start det grafiske programmeringsværktøj NXT-G
  3. Åben Regular2012.rbtx
  4. I programmet bruges en konstant med navnet motorstyrke til at fastsætte den motorstyrke robotbilen kører med. Konstanten skal defineres og sættes f.eks. til 70 inden Regular2012.rbtx kan styre robotbilen. Gå ind i Rediger Menuen:
    Vælg Definer konstanter:
    og i vinduet Rediger konstanter trykkes på Opret:
    Skriv motorstyrke i Navn, Datatype sættes til Tal, og værdien vælges f.eks. til 70. Så trykkes på Ok og Luk, hvorefter programmet skal gemmes. Fordelen ved at bruge en konstant som motorstyrke er, at der kan eksperimenteres med forskellige værdier uden at ændre i programmet og uden at detaljerne i programmet skal kendes. Læs mere om konstanter under Hjælp for Konstant-ikon.
  5. Overfør programmet til robotbilen
  6. Anbring robotbilen i basen
  7. Drej på det orange tandhjul, så grabben er hævet helt op
  8. Start robotbilen ved at trykke på den orange knap
Det kan være, at robotbilen henter alle fire kuber og anbringer dem korrekt på de fire pinde, men det vil nok være lidt heldigt. Det mest sandsynlige vil være, at robotbilen laver en eller flere fejl, f.eks. som på videoen, hvor robotbilen ikke kører helt lige hen til den blå pind. Der skal derfor foretages justeringer i programmet og det er derfor nødvendigt at kende til programmets struktur og detaljer.

Når Regular2012.rbtx åbnes ser det sådan her ud:

Programmet består af fire brugerdefinerede programmeringsblokke Kube1, Kube2, Kube3 og Kube4. De fire blokke udføres efter hinanden startende med Kube1 som styrer robotbilen til at hente Kube 1 og afleverer Kube 1 på den rigtige pind. Tilsvarende for de andre tre blokke. Strukturen med de fire blokke svarer altså til strategien i programmet: Kør ud fra basen og hent de fire farvede kuber en ad gangen i rækkefølgen Kube 1, Kube 2, Kube 3 og sidst Kube 4.

Dobbeltklik nu på blokken Kube1. Så åbnes en ny side med navnet Kube1. Siden viser tre blokke med navnene samlKube1, afleverKube og tilStart. Det er de tre blokke, som får robotbilen til at hente Kube 1 og aflevere Kube 1 på den rigtige pind:

Overføres Kube1 til robotbilen, vil de tre blokke i Kube1 kunne styre robotbilen. Se på videoen hvordan Kube1 får robotbilen til at køre ud fra basen, samle den sorte kube op, køre til Start, aflevere den sorte kube på den sorte pind for til sidst at køre tilbage til Start:
De tre andre blokke, Kube2, Kube3 og Kube4, kan på tilsvarende vis bringes til at styre robotbilen. Dog skal robotbilen ikke startes i basen, men anbringes i positionen Start inden kørslen igangsættes. Dobbeltklikkes f.eks. på Kube4 og overføres Kube4 til robotbilen, vil Kube 4 blive håndteret af robotbilen, som det kan ses på videoen:
Dobbeltklik nu på blokken afleverKube. Overfør afleverKube til robotbilen. Anbring robotten i positionen Start. Anbring manuelt en af de fire kuber i grabben, som skal være helt hævet, så kuben er ud for farvesensoren. Start så robotbilen. På videoen kan det ses, hvordan alleverKube bringer den blå kube på plads over den blå pind:
Når blokken afleverKube åbnes, ser den sådan her ud:
Det er i denne blok, at farven på kuben registreres og bruges til at afgøre, hvilken rute robotbilen skal vælge, så den kører hen til den rigtige pind afhængig af farven. Dobbeltklik på registrerOgVis:
Ikonen for farvesensoren aflæser den aktuelle farve ud for farvesensoren. Farvesensor ikonen findes under den udvidede programmeringspalette under sensorer. Farvernes heltallige koder, som ved hjælp af de to sidste ikoner vises på skærmen, har betydningen:
1 = Sort
2 = Blå
3 = Grøn
4 = Gul
5 = Rød
6 = Hvid
Det aktuelle heltal som registreres af farvesensoren gemmes i en variabel med navnet farve. Læs mere om variabel ikonen under Hjælp for Variabel-ikon f.eks. læs om hvordan variable defineres og navngives.

Efter at den aktuelle farvekode er blevet skrevet i variablen farve, bruges værdien i den efterfølgende forgrening:

Der er fire valgmuligheder i forgreningen svarende til de fire forskellige ruter, robotbilen kan tage. Et klik på de fire orange felter viser de fire forskellige valg. På figuren ses de blokke, som får robotbilen til at køre til den sorte pind: Frem et antal cm og så drej 90 grader med uret. Det sidste ikon får bilen til at dreje en lille smule mere. Den robotbil, som ses på videoen, holder en lille smule til venstre, når den kører fremad, derfor skal der drejes lidt mere end 90 grader for at ramme den sorte pind. Det er sådanne justeringer, som kan være nødvendige for en nybygget robotbil. Tryk på de tre andre orange felter for at se, hvordan ruterne er programmeret. Læs mere om forgreningsikonen under Hjælp for Forgrening-ikon.

Dobbeltklik eventuelt på blokken anbringKube sidst i afleverKube for at se, hvordan programmet ser ud, som bringer kuben det sidste stykke ud til pinden og sætter kuben ned over pinden.

Under tilpasningen af programmet Regular2012.rbtx til den nybyggede robotbil er det nyttigt at kunne køre de enkelte blokke i programmet for sig, f.eks. afleverKube, så tiden kan bruges mere koncentreret om de steder, hvor der skal justeres. En anden nyttig mekanisme er at kunne stoppe programmet steder, hvor det lige skal konstateres, at robotbilen står rigtigt, inden den skal fortsætte eller at grappen har fået kuben op i en stilling foran farvesensoren, så farven registreres korrekt. Til det formål kan der i programmet indføjes ventepunkter, en løkke som venter på, at der trykkes på den orange knap:

med det tilsvarende konfigurationspanel:
I blokken afleverKube kan en sådan venteløkke sættes rundt om blokken registrerOgVis:
Så vil robotbilen standse ved Start positionen og vise den aktuelle farve kode på skærmen. Det kan så konstateres, om farvesensoren har registreret koden for den aktuelle kube, inden et tryk på den orange knap får programmet til at fortsætte. Samtidig kan det kontrolleres, om grabben nu også holder kuben, så den er ud for farvesensoren, om farvesensoren skal flyttes, .... Husk, at robotbilens kørsel også afhænger af om batteriet lige er blevet ladet op eller det er ved at blive fladt. Sørg for, at batteriet ikke bliver alt for flade. For at kontrollere batteriets tilstand kan en tilsluttet NXT'en undersøges ved at trykke på NXT-vindue:
Så vises et vindue, hvor bl.a. batteriniveauet kan aflæses.