Recherche de Cibles Invisibles
Implémenter un comportement de recherche peut être utile dans plusieurs situations. Dans certains jeux, l'objectif dans lequel vous essayez de marquer peut ne pas être à un emplacement 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 de propulsion de votre robot n'est pas assez fiable/répétable pour vous placer exactement à l'endroit souhaité. Parfois, les transmissions de type swerve ou omnidirectionnelles 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 défensifs essayaient de faire sortir les robots offensifs 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 recherche automatiquement un objectif qu'il ne peut pas voir initialement pourrait être utile.
Heureusement, ajouter une logique de recherche à votre robot est très facile. 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, recherchons-la en tournant sur place à une vitesse sécuritaire.
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;