Skip to main content

Concurrentieverbinding: keerpunt - C++

Turning Point VEX Robotics Competitieveld met spelelementen en scoregebieden in de startposities voor het begin van de wedstrijd. Langs de achterwand bevindt zich een net met daarvoor een reeks omkeerbare vlaggen.
VRC 2018-2019 Turning Point Veld

Robotmogelijkheden

In de VEX Robotics Competition van 2018-2019, het spel Turning Point, moesten spelers onder andere vlaggen omwisselen. In totaal waren er negen vlaggen: drie onderste vlaggen die door de robot konden worden verplaatst, en de zes hoge vlaggen die alleen konden worden verplaatst door er met wedstrijdbalstukken op te slaan. Wedstrijdteams moesten een manier bedenken om de hogere vlaggen te raken met behulp van een balwerper. Stel je voor dat het programmeren van de robot om de vlaggen te slaan met behulp van balspelstukken door middel van meting niet altijd nauwkeurig is. Als de robot tijdens de autonome periode één verkeerde afslag maakt, bestaat de kans dat geen van de vlaggen wordt geraakt, omdat de berekeningen niet kloppen. Ook bij de Driving Skills-uitdaging kan het lastig zijn voor teams om de robot handmatig goed uit te lijnen om de bal goed te kunnen lanceren. Zo zouden deskundige teams de robot programmeren met behulp van de Vision Sensor om vlaggen te detecteren en vervolgens de robot correct uit te lijnen om nauwkeurige schoten te kunnen lossen.

Breid uw leerproces uit-pictogram Breid uw leerproces uit

Om deze activiteit uit te breiden, kunt u uw leerlingen vragen een project te ontwerpen en te schetsen waarin de robot naar gedetecteerde gele objecten beweegt die ze mogelijk kunnen gebruiken voor dit wedstrijdspel!
Vraag uw leerlingen het volgende te doen:

  • Open het voorbeeldproject Clawbot (aandrijflijn, 2 motoren, geen gyro).

    Onderaan het sjabloonprojectpictogram ziet u Clawbot Drivetrain, No Gyro met daarboven een grijs diagram van een robot, dat aangeeft welk project u moet selecteren.

     

  • Gebruik het voorbeeldproject Objecten detecteren (Vision) als referentie bij het programmeren van de Vision Sensor (Google Doc / .v5cpp).
  • Voeg de Vision Sensor toe aan de Clawbot-configuratie (aandrijflijn, 2 motoren, geen gyro) en configureer de Vision Sensor vervolgens om rode en blauwe objecten te detecteren. Klik hiervoor meer informatie.

    Het venster VEXcode V5-apparaten is geopend en de selectie Apparaat toevoegen toont de Vision Sensor gemarkeerd in een rood vak aan de linkerkant. Andere opties zijn onder meer controller, aandrijflijn, motor en 3-draads.

  • Programmeer de Clawbot om naar het gedetecteerde object toe te bewegen. De Clawbot kan zelfs zo geprogrammeerd worden dat hij zijn arm optilt, alsof hij een vlag omdraait!
  • Download en voer (inC++) het project uit om te kijken of de Vision Sensor gele objecten kan detecteren, zoals de gele ballen in het VRC Turning Point-spel. Als de Vision Sensor objecten kan detecteren, beweegt de robot dan op basis van de gedetecteerde objecten? Bekijk voor hulp de instructievideo Een project downloaden en uitvoeren.
  • Als de tijd het toelaat, richt dan een speelveld in dat lijkt op het Turning Point-veld. Oefen met het gebruik van de Vision Sensor, zodat de robot punten kan scoren!

Bekijk hieronder de voorbeeldoplossing:

// Neem de V5-bibliotheek
#include "vex.h"
  
// Maakt eenvoudiger gebruik van de VEX-bibliotheek mogelijk
met behulp van de naamruimte vex;

event checkRed = event();
event checkBlue = event();

void hasRedCallback() {
  Brain.Screen.setFont(mono40);
  Brain.Screen.clearLine(1);
  Brain.Screen.setCursor(1, 1);
  Vision5.takeSnapshot(Vision5__REDBOX);
  if (Vision5.objectCount > 0) {
    ArmMotor.spinFor(forward, 300, graden);
    ClawMotor.spinFor(forward, 100, graden);
    Drivetrain.driveFor(forward, 12, inches);
    ArmMotor.spinFor(reverse, 300, graden);
    ClawMotor.spinFor(reverse, 100, graden);
  }
  else {
    Brain.Screen.print("Geen rood object")
  }
}

void hasBlueCallback() {
  Brain.Screen.setFont(mono40);
  Brain.Screen.clearLine(3);
  Brain.Screen.setCursor(3, 1);
  Vision5.takeSnapshot(Vision5__BLUEBOX);
  if (Vision5.objectCount > 0) {
    ArmMotor.spinFor(forward, 90, graden);
    ClawMotor.spinFor(forward, 90, graden);
    Drivetrain.driveFor(forward, 12, inches);
    ArmMotor.spinFor(reverse, 90, graden);
    ClawMotor.spinFor(reverse, 90, graden);
  }
  else {
    Brain.Screen.print("Geen blauw object")
  }
}

int main() {
  // Robotconfiguratie initialiseren. NIET VERWIJDEREN!
  vexcodeInit();
  // registreert gebeurtenis-handlers
  checkRed(hasRedCallback);
  checkBlue(hasBlueCallback);

  // wordt constant uitgevoerd om te controleren op nieuwe sensorgegevens
  while (true) {
    checkRed.broadcastAndWait();
    checkBlue.broadcastAndWait();
    wait(0.2, seconds);
  }
}