Skip to main content

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

Turning Point VEX Robotics Competition Field con elementos de juego y zonas de puntuación en las posiciones de salida para el inicio del partido. A lo largo de la pared posterior hay una red con una serie de banderas abatibles frente a ella. Campo de punto de inflexión
VRC 2018-2019

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ía tu icono de aprendizaje 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).

    El icono de la plantilla del proyecto dice Clawbot Drivetrain, sin giroscopio en la parte inferior con un diagrama gris de un robot arriba, que indica qué proyecto seleccionar.

     

  • 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.

    La ventana VEXcode V5 Dispositivos está abierta y la selección de Agregar un dispositivo muestra el sensor de visión resaltado en un cuadro rojo en el lado izquierdo. Otras opciones incluyen controlador, transmisión, motor y 3 cables.

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