Pular para o conteúdo principal

Buscando Alvos Não Visíveis

Implementar um comportamento de busca pode ser útil em algumas situações. Em alguns jogos, o alvo que você está tentando marcar pode não estar em uma localização previsível, então você não pode confiar em um código autônomo de navegação estimada para chegar "perto o suficiente". Em 2009, por exemplo, os alvos estavam presos aos robôs adversários que também estavam se movimentando. Outra razão pela qual você pode querer implementar a busca é se o sistema de tração do seu robô não for confiável/repetível o suficiente para colocá-lo exatamente na posição desejada. Às vezes, trações swerve ou omnidirecionais podem ter dificuldade em dirigir para localizações precisas (isso não é uma crítica às trações swerve ou omnidirecionais; é apenas mais desafiador fazê-las dirigir para localizações repetíveis). Alguns jogos até permitiram interação robô-robô durante o modo autônomo. Em 2006, frequentemente nos envolvíamos em duelos autônomos onde os robôs de defesa tentavam tirar os robôs de ataque da posição de pontuação. Nesse caso, você não pode ter certeza de nada! Esperamos que isso faça você pensar em algumas maneiras em que ter seu robô buscando automaticamente por um alvo que ele não pode ver inicialmente possa ser útil.

Felizmente, adicionar lógica de busca ao seu robô é muito fácil. Para implementar a busca, você simplesmente faz seu robô escanear por um alvo e, uma vez que o encontre, começar a executar o código de mira. Usaremos o valor 'tv' ou 'target valid' (alvo válido) reportado pelo limelight para saber se vemos um alvo ou não.

	std::shared_ptr<NetworkTable> table = NetworkTable::GetTable("limelight");
float tv = table->GetNumber("tv");
float tx = table->GetNumber("tx");

float steering_adjust = 0.0f;
if (tv == 0.0f)
{
// Não vemos o alvo, procure o alvo girando no lugar a uma velocidade segura.
steering_adjust = 0.3f;
}
else
{
// Vemos o alvo, execute o código de mira
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim