דלג לתוכן הראשי

איתור רובוט עם MegaTag2

MegaTag2, שהושק ב-2024, הוא מאתר מבוסס AprilTag מדויק וחד-משמעי לרובוטים ניידים. הוא נבנה עם המטרות הבאות:

  • לבטל את בעיית העמימות בתנוחה ולהגביר את העמידות כנגד רעשי תמונה/פינות
  • לספק הערכות תנוחה מצוינות בהינתן תג בודד, ללא קשר לזווית הראייה
  • להגביר את העמידות כנגד אי-דיוקים בהצבה הפיזית של AprilTag
  • להפחית את כמות הסינון הנדרשת לקבלת תוצאות טובות בהערכת התנוחה

MegaTag2 מספק תוצאות מצוינות בכל מרחק בהינתן תג בודד. משמעות הדבר היא שניתן להתמקד רק בתגים שהם גם רלוונטיים וגם בתוך הסבולת, ולסנן את כל התגים האחרים. אם תג אינו במיקום הנכון, סננו אותו באמצעות תכונת הסינון הדינמי שהושקה יחד עם MegaTag2.

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

בשונה מ-MT1, MT2 מניח שאתם יודעים את כיוון הרובוט (yaw). באופן אופציונלי, MegaTag2 מקבל אוריינטציה מלאה של הרובוט ומהירויות זוויתיות.

דרישות:

  • תנוחת הרובוט של Limelight הוגדרה בממשק הווב או דרך ה-API
  • מפת שדה (.fmap) הועלתה
  • LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) נקרא בכל פריים בקוד בצד הרובוט
  • SetRobotOrientation מניח מקור ממורכז (ראו במחולל המפות) או בפינה הכחולה. חיובי נגד כיוון השעון, 0 מעלות -> פונה לקיר הברית האדומה ב-FRC.

מפתחות NetworkTables:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb

מפתחות JSON:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb
  • (לכל מטרת fiducial) t6r_fs_orb - תנוחת הרובוט במרחב השדה באמצעות megatag2 בהתבסס על תג זה בלבד (ללא multitag)

שימו לב להבדל בין MegaTag2 (רובוט אדום) ו-Megatag (רובוט כחול) במקרה זה של תג בודד עם עמימות גבוהה


  • גליל זהב / רובוט אדום: תנוחת רובוט Megatag2 לא מסוננת
  • גלילים צהובים: תנוחות רובוט Megatag2 לתג בודד לא מסוננות

  • גליל לבן/רובוט כחול: תנוחת MegaTag1
  • גליל ירוק: תנוחת רובוט לכל תג בנפרד (MT1)
  • גליל כחול: ממוצע של תנוחות רובוט לכל תג בנפרד (MT1)

info

ב-2024, רוב המערכת האקולוגית של WPILib עברה למערכת קואורדינטות עם מקור יחיד. ב-2023, מקור מערכת הקואורדינטות שלכם השתנה בהתאם לצבע הברית שלכם.

עבור 2024 ואילך, מקור מערכת הקואורדינטות שלכם צריך תמיד להיות המקור "הכחול". קבוצות FRC צריכות תמיד להשתמש ב-botpose_orb_wpiblue עבור פונקציונליות הקשורה לתנוחה

שימוש במעריך התנוחה של 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) // אם המהירות הזוויתית שלנו גדולה מ-720 מעלות לשנייה, התעלם מעדכוני ראייה
{
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);
}

הגדרת תנוחת הרובוט של Limelight שלכם

LL Forward, LL Right, ו-LL Up מייצגים מרחקים לאורך וקטורי הקדימה, ימינה ולמעלה של הרובוט אם הייתם מגלמים את הרובוט (במטרים). LL Roll, Pitch, ו-Yaw מייצגים את הסיבוב של Limelight במעלות. אתם יכולים לשנות ערכים אלה ולצפות במודל התלת-ממדי של Limelight משתנה בתצוגה התלת-ממדית. Limelight משתמש בתצורה זו באופן פנימי כדי לעבור מתנוחת המטרה במרחב המצלמה -> תנוחת הרובוט במרחב השדה.