Skip to main content
Portal do Professor

Ligação à concorrência: ponto de viragem - C++

Turning Point Campo de Competição de Robótica VEX com elementos de jogo e áreas de pontuação nas posições iniciais para o início da partida. Ao longo da parede traseira existe uma rede com uma série de bandeiras invertíveis à sua frente.
VRC 2018-2019 Ponto de Viragem Campo

Capacidades do Robô

O jogo Turning Point da VEX Robotics Competition 2018-2019 exigia que os jogadores alternassem as bandeiras entre outros elementos do jogo. Havia nove bandeiras no total: três bandeiras inferiores que podiam ser acionadas pelo robô e as seis bandeiras altas que só podiam ser acionadas atingindo-as com peças de jogo de bola de competição. As equipas de competição precisavam de encontrar uma forma de acertar nas bandeiras mais altas utilizando um lançador de bola. Se conseguir imaginar, programar o robô para acertar nas bandeiras usando peças de jogo de bola por medição pode nem sempre ser preciso. Se o robô fizer uma curva errada durante o período autónomo, existe a possibilidade de nenhuma das bandeiras ser atingida porque os cálculos estariam errados. Da mesma forma, para o desafio Driving Skills, pode ser difícil para as equipas alinhar manualmente o robô o suficiente para lançar a bola corretamente. Assim, as equipas qualificadas programariam o robô utilizando o Sensor de Visão para detetar bandeiras e depois alinhariam o robô adequadamente para fazer disparos precisos.

Ícone Amplie a sua aprendizagem Amplie o seu aprendizado

Para expandir esta atividade, peça aos seus alunos que elaborem e esbocem um projeto que fará com que o robô se mova em direção a objetos amarelos detetados que poderiam utilizar neste jogo de competição!
Peça aos seus alunos para fazerem o seguinte:

  • Abra o projeto de exemplo Clawbot (transmissão, 2 motores, sem giroscópio).

    O ícone do projeto de modelo mostra o Clawbot Drivetrain, No Gyro na parte inferior com um diagrama cinzento de um robô acima, indicando qual o projeto a selecionar.

     

  • Utilize o projeto de exemplo Detetar Objetos (Visão) como referência ao programar o Sensor de Visão (Google Doc / .v5cpp).
  • Adicione o sensor de visão à configuração do Clawbot (transmissão, 2 motores, sem giroscópio) e, em seguida, configure o sensor de visão para detetar objetos vermelhos e azuis. Clique em aqui para mais informações.

    A janela Dispositivos VEXcode V5 é aberta e a seleção para Adicionar um Dispositivo mostra o Sensor de Visão destacado numa caixa vermelha do lado esquerdo. Outras opções incluem Controlador, Transmissão, motor e 3 fios.

  • Programe o Clawbot para se mover em direção ao objeto detetado. O Clawbot pode até ser programado para levantar o braço como se fosse agitar uma bandeira!
  • Descarregue e execute (em C++) o projecto para observar se o Sensor de Visão consegue detectar objectos amarelos como as bolas amarelas do jogo VRC Turning Point. Se o Sensor de Visão conseguir detetar objetos, o robô move-se com base nesses objetos detetados? Para obter ajuda, veja o vídeo tutorial Descarregar e executar um projeto.
  • Se o tempo permitir, configure um campo de jogo semelhante ao campo Turning Point. Pratique a utilização do Sensor de Visão para permitir que o robô se mova para marcar pontos!

Veja o exemplo de solução abaixo:

// Inclui a Biblioteca V5
#include "vex.h"
  
// Permite uma utilização mais fácil da Biblioteca VEX
utilizando o namespace vex;

evento verificaçãoVermelho = evento();
verificação de eventoAzul = evento();

void hasRedCallback() {
  Brain.Screen.setFont(mono40);
  Cérebro.Ecrã.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 (frente, 12, polegadas);
    ArmMotor. spinFor(reverso, 300, graus);
    ClawMotor.spinFor(reverso, 100, graus);
  }
  else {
    Brain.Screen.print("Nenhum objeto vermelho")
  }
}

void hasBlueCallback() {
  Brain.Screen.setFont(mono40);
  Cérebro.Ecrã.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 (frente, 12, polegadas);
    ArmMotor. spinFor(reverso, 90, graus);
    ClawMotor.spinFor(reverso, 90, graus);
  }
  else {
    Brain.Screen.print("No Blue Object")
  }
}

int main() {
  // Inicialização da configuração do robô. NÃO REMOVA!
  vexcodeInit();
  // regista os event handlers
  checkRed(hasRedCallback);
  checkBlue(hasBlueCallback);

  // executa constantemente para verificar novos dados do sensor
  while (true) {
    checkRed.broadcastAndWait();
    checkBlue.broadcastAndWait();
    espera(0,2, segundos);
  }
}