Skip to main content
Portail des enseignants

Connexion à la concurrence : point de virage - C++

Turning Point VEX Robotics Competition Field avec des éléments de jeu et des zones de score dans les positions de départ pour le début du match. Le long du mur arrière se trouve un filet avec une série de drapeaux basculants devant lui. Champ de point de virage
VRC 2018-2019

Capacités du robot

Le jeu Turning Point de la compétition de robotique VEX 2018 - 2019 demandait aux joueurs de basculer les drapeaux parmi d'autres éléments du jeu. Il y avait neuf drapeaux au total : trois drapeaux du bas qui pouvaient être basculés par le robot, et les six drapeaux hauts qui ne pouvaient être basculés qu'en les frappant avec des pièces de jeu de balle de compétition. Les équipes de compétition devaient trouver un moyen de frapper les drapeaux les plus hauts à l'aide d'un lanceur de balles. Si vous pouvez imaginer, programmer le robot pour frapper les drapeaux à l'aide de pièces de jeu de balle en mesurant peut ne pas toujours être précis. Si le robot fait un mauvais virage pendant la période autonome, il est possible qu'aucun des drapeaux ne soit touché car les calculs seraient désactivés. De même, pour le défi des compétences de conduite, il peut être difficile pour les équipes d'aligner manuellement le robot suffisamment pour lancer la balle correctement. Ainsi, des équipes compétentes programmeraient le robot à l'aide du capteur de vision pour détecter les drapeaux, puis aligneraient correctement le robot afin de prendre des photos précises.

Icône Étendre votre apprentissage Étendez votre apprentissage

Pour développer cette activité, demandez à vos élèves de concevoir et de décrire un projet qui permettra au robot de se déplacer vers les objets jaunes détectés qu'ils pourraient potentiellement utiliser pour ce jeu de compétition !
Demandez à vos élèves de faire ce qui suit :

  • Ouvrez l'exemple de projet Clawbot (groupe motopropulseur, 2 moteurs, pas de gyroscope).

    L'icône du modèle de projet indique Clawbot Drivetrain, No Gyro en bas avec un diagramme gris d'un robot ci-dessus, indiquant le projet à sélectionner.

     

  • Utilisez l'exemple de projet Détection d'objets (vision) comme référence lors de la programmation du capteur de vision (Google Doc / .v5cpp).
  • Ajoutez le capteur de vision à la configuration Clawbot (transmission, 2 moteurs, pas de gyroscope), puis configurez le capteur de vision pour détecter les objets rouges et bleus. Cliquez ici pour plus d'informations.

    La fenêtre Périphériques VEXcode V5 est ouverte et la sélection pour Ajouter un périphérique affiche le capteur de vision surligné dans une case rouge sur le côté gauche. Les autres options comprennent le contrôleur, la transmission, le moteur et 3 fils.

  • Programmez le Clawbot pour qu'il se déplace vers l'objet détecté. Le Clawbot peut même être programmé pour lever le bras comme s'il devait basculer un drapeau !
  • Téléchargez et exécutez (en C++) le projet pour observer si le capteur de vision peut détecter des objets jaunes comme les boules jaunes dans le jeu VRC Turning Point. Si le capteur de vision peut détecter des objets, le robot se déplace-t-il en fonction de ces objets détectés ? Pour obtenir de l'aide, consultez la vidéo du didacticiel Télécharger et exécuter un projet.
  • Si le temps le permet, configurez un champ de jeu similaire au champ Point de virage. Entraînez-vous à utiliser le capteur de vision pour permettre au robot de se déplacer pour marquer des points !

Voir l'échantillon de solution ci-dessous :

// 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);
    }
  }