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 objetivo em que você está tentando marcar pode não estar em uma localização previsível, então você não pode confiar em código autônomo de navegação estimada para chegar "perto o suficiente". Em 2009, por exemplo, os objetivos estavam anexados aos robôs adversários que também estavam se movendo. Outra razão pela qual você pode querer implementar busca é se o sistema de tração do seu robô não é confiável/repetível o suficiente para colocá-lo exatamente na localizaçã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. Neste caso, você não pode ter certeza de nada! Esperamos que isso faça você pensar em algumas maneiras pelas quais ter seu robô buscando automaticamente um objetivo que ele não consegue ver inicialmente pode 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 encontra, começa 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, buscar o alvo girando no lugar em uma velocidade segura.
steering_adjust = 0.3f;
}
else
{
// Vemos o alvo, executar código de mira
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim