Aller au contenu principal

Localisation du robot avec MegaTag2

Introduit en 2024, Megatag2 est un localisateur précis et sans ambiguïté basé sur AprilTag pour les robots mobiles. Il a été conçu avec les objectifs suivants :

  • Éliminer le problème d'ambiguïté de pose et augmenter la robustesse face au bruit d'image/coin.
  • Fournir d'excellentes estimations de pose à partir d'un seul tag, quelle que soit la perspective.
  • Augmenter la robustesse face aux imprécisions de placement physique des AprilTags
  • Réduire la quantité de filtrage nécessaire pour obtenir de bons résultats d'estimation de pose

Megatag2 fournit d'excellents résultats à n'importe quelle distance avec un seul tag. Cela signifie qu'il est parfaitement viable de se concentrer uniquement sur les tags à la fois pertinents et dans la tolérance, et de filtrer tous les autres tags. Si un tag n'est pas à l'emplacement correct, filtrez-le avec la fonction de filtre dynamique introduite avec MegaTag2.

int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);

Contrairement à MT1, MT2 suppose que vous connaissez l'orientation (lacet) de votre robot. En option, Megatag2 accepte une orientation complète du robot et des vitesses angulaires.

Exigences :

  • La pose de votre Limelight dans l'espace du robot a été configurée dans l'interface web ou via l'API
  • Une carte de terrain (.fmap) a été téléchargée
  • LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) est appelé à chaque trame dans le code côté robot
  • SetRobotOrientation suppose une origine centrée (voir le générateur de carte) ou dans le coin bleu. Positif dans le sens antihoraire, 0 degré -> face au mur de l'alliance rouge en FRC.

Clés NetworkTables :

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb

Clés JSON :

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb
  • (Par cible fiducielle) t6r_fs_orb - pose du robot dans l'espace de terrain utilisant megatag2 basé uniquement sur ce tag (pas de multitag)

Remarquez la différence entre MegaTag2 (robot rouge) et Megatag (robot bleu) dans ce cas de tag unique hautement ambigu


  • Cylindre doré / Robot rouge : Botpose Megatag2 non filtrée
  • Cylindres jaunes : Botposes Megatag2 à tag unique non filtrées

  • Cylindre blanc/Robot bleu : Botpose MegaTag1
  • Cylindre vert : Pose de bot individuelle par tag (MT1)
  • Cylindre bleu : Moyenne des poses de bot individuelles par tag (MT1)

info

En 2024, la plupart de l'écosystème WPILib est passé à un système de coordonnées à origine unique. En 2023, l'origine de votre système de coordonnées changeait en fonction de la couleur de votre alliance.

Pour 2024 et au-delà, l'origine de votre système de coordonnées devrait toujours être l'origine "bleue". Les équipes FRC devraient toujours utiliser botpose_orb_wpiblue pour les fonctionnalités liées à la pose

Utilisation de l'estimateur de pose de WPILib

  LimelightHelpers.SetRobotOrientation("limelight", m_poseEstimator.getEstimatedPosition().getRotation().getDegrees(), 0, 0, 0, 0, 0);
LimelightHelpers.PoseEstimate mt2 = LimelightHelpers.getBotPoseEstimate_wpiBlue_MegaTag2("limelight");
if(Math.abs(m_gyro.getRate()) > 720) // si notre vitesse angulaire est supérieure à 720 degrés par seconde, ignorer les mises à jour de vision
{
doRejectUpdate = true;
}
if(mt2.tagCount == 0)
{
doRejectUpdate = true;
}
if(!doRejectUpdate)
{
m_poseEstimator.setVisionMeasurementStdDevs(VecBuilder.fill(.7,.7,9999999));
m_poseEstimator.addVisionMeasurement(
mt2.pose,
mt2.timestampSeconds);
}

Configuration de la pose de votre Limelight dans l'espace du robot

LL Forward, LL Right et LL Up représentent les distances le long des vecteurs avant, droit et haut du robot si vous deviez incarner le robot (en mètres). LL Roll, Pitch et Yaw représentent la rotation de votre Limelight en degrés. Vous pouvez modifier ces valeurs et observer le changement du modèle 3D du Limelight dans la visionneuse 3D. Limelight utilise cette configuration en interne pour passer de la pose de la cible dans l'espace de la caméra à la pose du robot dans l'espace du terrain.