Aller au contenu principal

Recherche de Cibles Non Visibles

La mise en œuvre d'un comportement de recherche peut être utile dans plusieurs situations. Dans certains jeux, la cible que vous essayez d'atteindre 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 la recherche est si le système d'entraînement de votre robot n'est pas assez fiable/répétable pour vous placer exactement à l'endroit souhaité. Parfois, les transmissions swerve ou omnidirectionnelles peuvent avoir du mal à atteindre 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 la phase autonome. En 2006, nous nous engagions souvent dans des duels autonomes où les robots défensifs essayaient de faire sortir les robots offensifs de leur position de tir. Dans ce cas, on ne peut être sûr de rien ! J'espère que cela vous fait réfléchir aux façons dont il pourrait être utile que votre robot recherche automatiquement une cible qu'il ne voit pas initialement.

Heureusement, l'ajout d'une logique de recherche à votre robot est très simple. Pour implémenter la recherche, il suffit que votre robot balaye à la recherche d'une cible et une fois qu'il la trouve, commence à exécuter le code de visée. Nous utiliserons la valeur 'tv' ou 'target valid' 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, recherchons-la en tournant sur place à une vitesse sécurisée.
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