Skip to main content

Collegamento alla concorrenza: punto di svolta - C++

Campo da gara di robotica VEX Turning Point con elementi di gioco e aree di punteggio nelle posizioni di partenza per l'inizio della partita. Lungo la parete di fondo c'è una rete con davanti una serie di bandierine che si possono lanciare.
VRC 2018-2019 Punto di svolta Campo

Capacità del robot

Nel gioco Turning Point della VEX Robotics Competition 2018-2019, ai giocatori veniva chiesto di alternare le bandiere tra gli altri elementi del gioco. In totale c'erano nove bandiere: tre bandiere in basso che potevano essere alzate dal robot e sei bandiere in alto che potevano essere alzate solo colpendole con i pezzi del gioco della palla da competizione. Le squadre in gara dovevano trovare un modo per colpire le bandierine più alte utilizzando un lanciatore di palline. Se potete immaginare, programmare il robot affinché colpisca le bandierine usando i pezzi di un gioco con la palla misurando potrebbe non essere sempre preciso. Se il robot sbaglia una svolta durante il periodo di autonomia, è possibile che nessuna delle bandierine venga colpita perché i calcoli sarebbero sbagliati. Allo stesso modo, per la sfida Driving Skills, potrebbe essere difficile per le squadre allineare manualmente il robot in modo sufficiente a lanciare la palla correttamente. Pertanto, team qualificati programmerebbero il robot utilizzando il sensore visivo per rilevare le bandierine e quindi allineerebbero correttamente il robot per effettuare tiri precisi.

Estendi la tua icona di apprendimento Amplia il tuo apprendimento

Per ampliare questa attività, chiedi ai tuoi studenti di progettare e delineare un progetto in cui il robot si muoverà verso gli oggetti gialli rilevati che potrebbero potenzialmente utilizzare per questo gioco competitivo!
Chiedi ai tuoi studenti di fare quanto segue:

  • Aprire il progetto di esempio Clawbot (Trasmissione, 2 motori, senza giroscopio).

    L'icona del progetto modello riporta in basso la dicitura Clawbot Drivetrain, No Gyro, con sopra un diagramma grigio di un robot, che indica quale progetto selezionare.

     

  • Utilizzare il progetto di esempio Rilevamento oggetti (Visione) come riferimento durante la programmazione del sensore visivo (Google Doc / .v5cpp).
  • Aggiungere il sensore visivo alla configurazione Clawbot (trasmissione, 2 motori, senza giroscopio), quindi configurare il sensore visivo per rilevare oggetti rossi e blu. Clicca qui  per maggiori informazioni.

    La finestra Dispositivi VEXcode V5 è aperta e la selezione per Aggiungi un dispositivo mostra il sensore visivo evidenziato in un riquadro rosso sul lato sinistro. Altre opzioni includono controller, trasmissione, motore e 3 fili.

  • Programmare il Clawbot affinché si muova verso l'oggetto rilevato. Il Clawbot può addirittura essere programmato per alzare il braccio come se dovesse muovere una bandiera!
  • Scarica ed esegui (in C++) il progetto per osservare se il sensore visivo riesce a rilevare oggetti gialli come le palline gialle nel gioco VRC Turning Point. Se il sensore visivo riesce a rilevare oggetti, il robot si muove in base agli oggetti rilevati? Per assistenza, guarda il video tutorial Scarica ed esegui un progetto.
  • Se il tempo lo consente, allestisci un campo di gioco simile al campo Turning Point. Esercitati a usare il sensore visivo per consentire al robot di muoversi e segnare punti!

Visualizza la soluzione di esempio qui sotto:

// Include la libreria V5
#include "vex.h"
  
// Consente un utilizzo più semplice della libreria VEX
utilizzando lo spazio dei nomi 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(avanti, 300, gradi);
    ClawMotor.spinFor(avanti, 100, gradi);
    Drivetrain.driveFor(avanti, 12, pollici);
    ArmMotor.spinFor(indietro, 300, gradi);
    ClawMotor.spinFor(indietro, 100, gradi);
  }
  else {
    Brain.Screen.print("Nessun oggetto rosso")
  }
}

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(avanti, 90, gradi);
    ClawMotor.spinFor(avanti, 90, gradi);
    Drivetrain.driveFor(avanti, 12, pollici);
    ArmMotor.spinFor(indietro, 90, gradi);
    ClawMotor.spinFor(reverse, 90, degrees);
  }
  else {
    Brain.Screen.print("Nessun oggetto blu")
  }
}

int main() {
  // Inizializzazione della configurazione del robot. NON RIMUOVERE!
  vexcodeInit();
  // registra i gestori degli eventi
  checkRed(hasRedCallback);
  checkBlue(hasBlueCallback);

  // viene eseguito costantemente per verificare la presenza di nuovi dati del sensore
  while (true) {
    checkRed.broadcastAndWait();
    checkBlue.broadcastAndWait();
    wait(0.2, secondi);
  }
}