איתור מיקום רובוט עם MegaTag
אם תנוחת הרובוט של ה-Limelight שלך הוגדרה בממשק המשתמש באינטרנט, ומפת השדה הועלתה דרך ממשק המשתמש באינטרנט, אז מיקום הרובוט במרחב השדה יהיה זמין דרך getBotpose() ומערך ה-"botpose" ב-networktables (x,y,z במטרים, roll, pitch, yaw במעלות).
אלגוריתם איתור המיקום שלנו נקרא MegaTag. אם יותר מתג אחד נראה, הוא עמיד בפני דו-משמעויות של תגים בודדים ורעש בתמונה. אם כל נקודות המפתח נמצאות במישור אחד, עדיין קיים סיכון להיפוך דו-משמעי.
- גליל ירוק: תנוחת רובוט לכל תג בנפרד
- גליל כחול: תנוחת רובוט ישנה
- גליל לבן: תנוחת רובוט MegaTag
שימו לב לדו-משמעות הברורה כאן:
שימו לב כיצד תנוחת הרובוט החדשה (גליל לבן) יציבה מאוד בהשוואה לתנוחת הרובוט הישנה (גליל כחול). אתם יכולים לצפות גם בערכי tx ו-ty.
זה לא מוגבל לתגים מישוריים. זה מתרחב לכל מספר של תגים בתלת-ממד מלא ובכל כיוון. תגי רצפה ותגי תקרה עובדים בצורה מושלמת.
הנה תרשים המדגים היבט אחד של איך זה עובד במקרה מישורי פשוט. התוצאות למעשה טובות יותר ממה שמוצג, כיוון שה-MegaTag המוצג כולל שגיאה משמעותית בשלוש נקודות במקום בנקודה אחת. ככל שה-MegaTag התלת-ממדי המשולב גדל במספר נקודות המפתח, היציבות שלו עולה.
שימוש במעריך התנוחה של WPILib
ב-2024, רוב המערכת האקולוגית של WPILib עברה למערכת קואורדינטות עם מקור יחיד. ב-2023, מקור מערכת הקואורדינטות שלך השתנה בהתאם לצבע הברית שלך.
עבור 2024 ואילך, מקור מערכת הקואורדינטות שלך צריך תמיד להיות המקור "הכחול". קבוצות FRC צריכות תמיד להשתמש ב-botpose_wpiblue עבור פונקציונליות הקשורה לתנוחה
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);
}
הגדרת תנוחת הרובוט של ה-Limelight שלך
LL Forward, LL Right, ו-LL Up מייצגים מרחקים לאורך וקטורי הקדימה, ימינה ולמעלה של הרובוט אם היית מגלם את הרובוט (במטרים). LL Roll, Pitch, ו-Yaw מייצגים את הסיבוב של ה-Limelight שלך במעלות. אתה יכול לשנות ערכים אלה ולצפות במודל התלת-ממדי של ה-Limelight משתנה בתצוגה התלת-ממדית. Limelight משתמש בתצורה זו באופן פנימי כדי לעבור מתנוחת המטרה במרחב המצלמה -> לתנוחת הרובוט במרחב השדה.