Recherche de Cibles Non Visibles
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, donc vous ne pouvez pas compter sur un code autonome à l'estime pour vous amener "assez près". 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 châssis de votre robot n'est pas assez fiable/répétable pour vous placer exactement à l'emplacement souhaité. Parfois les châssis swerve ou omnidirectionnels peuvent avoir du mal à atteindre des positions précises (ce n'est pas une critique des châssis swerve ou omnidirectionnels ; c'est simplement plus difficile de les faire aller à 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 déloger les robots offensifs de leur position de tir. Dans ce cas, vous ne pouvez être sûr de rien ! Espérons que cela vous fait réfléchir à des façons dont faire rechercher automatiquement à votre robot un but 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 lancez 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, rechercher la cible en tournant sur place à une vitesse sûre.
steering_adjust = 0.3f;
}
else
{
// Nous voyons la cible, exécuter le code de visée
float heading_error = tx;
steering_adjust = Kp * tx;
}
left_command+=steering_adjust;
right_command-=steering_adjust;
