Connexion à la concurrence : point de virage - C++
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.
É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).
- 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.
- 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);
}
}