איתור רובוט עם 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)
ב-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 משתמש בתצורה זו באופן פנימי כדי לעבור מתנוחת המטרה במרחב המצלמה -> לתנוחת הרובוט במרחב השדה.