Aller au contenu principal

Localisation du Robot avec MegaTag2

Introduit en 2024, Megatag2 est un localisateur basé sur AprilTag précis et sans ambiguïté 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/coins.
  • Fournir d'excellentes estimations de pose avec 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 pertinents et dans la tolérance, et de filtrer tous les autres tags. Si un tag n'est pas au bon endroit, 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.

Prérequis :

  • La pose en espace robot de votre Limelight 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 frame dans le code côté robot
  • SetRobotOrientation suppose une origine centrée (voir le générateur de carte) ou dans le coin bleu. CCW-positif, 0 degrés -> 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 très ambigu à tag unique


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

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

info

En 2024, la majorité de l'écosystème WPILib est passée à 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 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 en espace robot de votre Limelight

LL Forward, LL Right, et LL Up représentent les distances le long des vecteurs avant, droite 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 de la Limelight dans la visionneuse 3D. Limelight utilise cette configuration en interne pour passer de la pose de la cible dans l'espace caméra à la pose du robot dans l'espace de terrain.