Aller au contenu principal

Recherche de cibles invisibles

La mise en œuvre d'un comportement de recherche peut être utile dans plusieurs situations. Dans certains jeux, le but dans lequel vous essayez de marquer peut ne pas être à un endroit prévisible, vous ne pouvez donc pas vous fier à un code autonome de navigation à l'estime pour vous rapprocher "suffisamment". En 2009 par exemple, les buts étaient attachés aux robots adverses qui se déplaçaient également. Une autre raison pour laquelle vous pourriez vouloir implémenter une recherche est si le train de roulement de votre robot n'est pas assez fiable/répétable pour vous placer exactement à l'endroit souhaité. Parfois, les transmissions à roues omnidirectionnelles ou de type swerve peuvent avoir du mal à se déplacer vers des positions précises (ce n'est pas une critique des transmissions swerve ou omnidirectionnelles ; c'est simplement plus difficile de les faire se déplacer vers des positions répétables). Certains jeux ont même permis l'interaction robot-robot pendant le mode autonome. En 2006, nous nous engagions souvent dans des duels autonomes où les robots de défense essayaient de faire sortir les robots d'attaque de leur position de tir. Dans ce cas, vous ne pouvez être sûr de rien ! J'espère que cela vous fait réfléchir à certaines façons dont le fait d'avoir votre robot qui cherche automatiquement un but qu'il ne peut pas voir initialement pourrait être utile.

Heureusement, l'ajout d'une logique de recherche à votre robot est très simple. Pour implémenter la recherche, vous faites simplement scanner votre robot à la recherche d'une cible et une fois qu'il la trouve, vous commencez à exécuter le code de visée. Nous utiliserons la valeur 'tv' ou 'target valid' (cible valide) rapportée par limelight pour savoir si nous voyons une cible ou non.

	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)
{
// Nous ne voyons pas la cible, cherchons la cible en tournant sur place à une vitesse sûre.
steering_adjust = 0.3f;
}
else
{
// Nous voyons la cible, exécutons le code de visée
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim