Aller au contenu principal

Localisation du Robot avec MegaTag

Si la pose de votre Limelight dans l'espace robot a été configurée dans l'interface web, et qu'une carte de terrain a été téléchargée via l'interface web, alors la position du robot dans l'espace terrain sera disponible via getBotpose() et le tableau networktables "botpose" (x,y,z en mètres, roulis, tangage, lacet en degrés).

Notre algorithme de localisation de robot s'appelle MegaTag. Si plus d'un tag est visible, il est résilient aux ambiguïtés individuelles des tags et au bruit dans l'image. Si tous les points clés sont coplanaires, il existe toujours un risque de basculement d'ambiguïté.

  • Cylindre Vert : Pose du robot par tag individuel
  • Cylindre Bleu : Ancienne BotPose
  • Cylindre Blanc : BotPose MegaTag

Notez l'ambiguïté de pose évidente ici :

Remarquez comment la nouvelle botpose (cylindre blanc) est extrêmement stable comparée à l'ancienne botpose (cylindre bleu). Vous pouvez également observer les valeurs tx et ty.

Ceci n'est pas limité aux tags planaires. Cela s'adapte à n'importe quel nombre de tags en 3D complet et dans n'importe quelle orientation. Les tags au sol et au plafond fonctionnent parfaitement.

Voici un diagramme démontrant un aspect du fonctionnement avec un cas planaire simple. Les résultats sont en réalité meilleurs que ce qui est représenté, car le MegaTag illustré a une erreur significative appliquée à trois points au lieu d'un seul point. À mesure que le MegaTag 3D combiné augmente en taille et en nombre de points clés, sa stabilité augmente.

exemple botpose megatag:

Utilisation de l'Estimateur de Pose WPILib

info

En 2024, la majeure partie de l'écosystème WPILib a transitionné vers 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_wpiblue pour les fonctionnalités liées à la pose

 LimelightHelpers.PoseEstimate mt1 = LimelightHelpers.getBotPoseEstimate_wpiBlue("limelight");

if(mt1.tagCount == 1 && mt1.rawFiducials.length == 1)
{
if(mt1.rawFiducials[0].ambiguity > .7)
{
doRejectUpdate = true;
}
if(mt1.rawFiducials[0].distToCamera > 3)
{
doRejectUpdate = true;
}
}
if(mt1.tagCount == 0)
{
doRejectUpdate = true;
}

if(!doRejectUpdate)
{
m_poseEstimator.setVisionMeasurementStdDevs(VecBuilder.fill(.5,.5,9999999));
m_poseEstimator.addVisionMeasurement(
mt1.pose,
mt1.timestampSeconds);
}

Configuration de la Pose Robot-Space de votre Limelight

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