Ligação à concorrência: ponto de viragem - C++
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.
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).
- 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.
- 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);
}
}