Conexión de la competencia: punto de inflexión - C++

Capacidades del robot
El punto de inflexión del juego VEX Robotics Competition 2018 - 2019 requería que los jugadores alternaran las banderas entre otros elementos del juego. Había nueve banderas en total: tres banderas inferiores que podían ser activadas por el robot y las seis banderas altas que solo podían ser activadas golpeándolas con piezas de juego de pelota de competición. Los equipos de competencia necesitaban encontrar una manera de golpear las banderas más altas usando un lanzador de bolas. Si se puede imaginar, programar el robot para que golpee las banderas usando piezas de juego de pelota midiendo puede no ser siempre preciso. Si el robot hace un giro incorrecto durante el período autónomo, existe la posibilidad de que ninguna de las banderas sea golpeada porque los cálculos estarían apagados. Del mismo modo, para el desafío de habilidades de conducción, puede ser difícil para los equipos alinear manualmente el robot lo suficiente como para lanzar la pelota correctamente. Por lo tanto, equipos expertos programarían el robot utilizando el sensor de visión para detectar banderas y luego alinearían el robot correctamente para realizar tomas precisas.
Amplíe su aprendizaje
Para ampliar esta actividad, pídales a sus estudiantes que diseñen y describan un proyecto en el que el robot se mueva hacia los objetos amarillos detectados que podrían usar para este juego de competencia.
Pídales a sus estudiantes que hagan lo siguiente:
-
Abra el proyecto de ejemplo Clawbot (transmisión, 2 motores, sin giroscopio).
- Utilice el proyecto de ejemplo Detección de objetos (Visión) como referencia al programar el sensor de visión (Google Doc / .v5cpp).
-
Agregue el sensor de visión a la configuración del Clawbot (transmisión, 2 motores, sin giroscopio) y luego configure el sensor de visión para detectar objetos rojos y azules. Haz clic aquí para obtener más información.
- Programa el Clawbot para que se mueva hacia el objeto detectado. ¡El Clawbot incluso se puede programar para levantar el brazo como si fuera a alternar una bandera!
- Descargue y ejecute (en C++) el proyecto para observar si el sensor de visión puede detectar objetos amarillos como las bolas amarillas en el juego VRC Turning Point. Si el sensor de visión puede detectar objetos, ¿se mueve el robot en función de esos objetos detectados? Para obtener ayuda, vea el vídeo tutorial Descargar y ejecutar un proyecto.
- Si el tiempo lo permite, configure un campo de juego similar al campo Turning Point. ¡Practique el uso del sensor de visión para permitir que el robot se mueva y gane puntos!
Vea la solución de muestra a continuación:
// Include the V5 Library
#include "vex.h"
// Allows for easier use of the VEX Library
using namespace 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, degrees);
ClawMotor.spinFor(forward, 100, degrees);
Drivetrain.driveFor(forward, 12, inches);
ArmMotor.spinFor(reverse, 300, degrees);
ClawMotor.spinFor(reverse, 100, degrees);
}
else {
Brain.Screen.print("No Red 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, degrees);
ClawMotor.spinFor(forward, 90, degrees);
Drivetrain.driveFor(forward, 12, inches);
ArmMotor.spinFor(reverse, 90, degrees);
ClawMotor.spinFor(reverse, 90, degrees);
}
else {
Brain.Screen.print("No Blue Object")
}
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// register event handlers
checkRed(hasRedCallback);
checkBlue(hasBlueCallback);
// constantly runs to check for new sensor data
while (true) {
checkRed.broadcastAndWait();
checkBlue.broadcastAndWait();
wait(0.2, seconds);
}
}