MegaTag2 के साथ रोबोट लोकलाइजेशन
2024 में पेश किया गया, Megatag2 मोबाइल रोबोट के लिए एक सटीक और अस्पष्टता-मुक्त AprilTag-आधारित लोकलाइज़र है। इसे निम्नलिखित लक्ष्यों के साथ बनाया गया था:
- पोज़ अस्पष्टता समस्या को समाप्त करें और इमेज/कॉर्नर नॉइज के खिलाफ मजबूती बढ़ाएं।
- एकल टैग के आधार पर उत्कृष्ट पोज़ अनुमान प्रदान करें, चाहे परिप्रेक्ष्य कुछ भी हो।
- भौतिक AprilTag प्लेसमेंट अशुद्धियों के खिलाफ मजबूती बढ़ाएं
- अच्छे पोज़ अनुमान परिणामों के लिए आवश्यक फिल्टरिंग की मात्रा को कम करें
Megatag2 किसी भी दूरी पर एकल टैग के साथ उत्कृष्ट परिणाम प्रदान करता है। इसका मतलब है कि केवल उन टैग्स पर ध्यान केंद्रित करना पूरी तरह से व्यवहार्य है जो प्रासंगिक और सहनशीलता के भ ीतर हैं, और अन्य सभी टैग्स को फिल्टर करें। यदि कोई टैग सही स्थान पर नहीं है, तो उसे MegaTag2 के साथ पेश किए गए डायनामिक फिल्टर फीचर के साथ फिल्टर करें।
int[] validIDs = {3,4};
LimelightHelpers.SetFiducialIDFiltersOverride("limelight", validIDs);
MT1 के विपरीत, MT2 मानता है कि आप अपने रोबोट की हेडिंग (यॉ) जानते हैं। वैकल्पिक रूप से, Megatag2 एक पूर्ण रोबोट ओरिएंटेशन और एंगुलर वेलोसिटी स्वीकार करता है।
आवश्यकताएँ:
- आपके Limelight का रोबोट-स्पेस पोज़ वेबUI या API के माध्यम से कॉन्फ़िगर किया गया है
- एक फील्ड मैप (.fmap) अपलोड किया गया है
- LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) रोबोट-साइड कोड में हर फ्रेम पर कॉल किया जाता है
- SetRobotOrientation एक केंद्रित (मैप जनरेटर देखें) या ब्लू-कॉर्नर ओरिजिन मानता है। CCW-पॉजिटिव, 0 डिग्री -> FRC में रेड अलायंस वॉ ल की ओर मुख।
NetworkTables कीज़:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
JSON कीज़:
- botpose_orb_wpiblue
- botpose_orb_wpired
- botpose_orb
- (प्रति फिड्यूशियल टारगेट) t6r_fs_orb - फील्ड स्पेस में रोबोट पोज़ जो केवल इस टैग के आधार पर megatag2 का उपयोग करता है (कोई मल्टीटैग नहीं)
इस अत्यधिक अस्पष्ट सिंगल-टैग केस में MegaTag2 (लाल रोबोट) और Megatag (नीला रोबोट) के बीच अंतर देखें
- गोल्ड सिलेंडर / रेड रोबोट: अनफिल्टर्ड Megatag2 botpose
- येलो सिलेंडर्स: अनफिल्टर्ड सिंगल-टैग Megatag2 botposes
- व्हाइट सिलेंडर/ब्लू रोबोट: MegaTag1 Botpose
- ग्रीन सिलेंडर: इंडिविजुअल पर-टैग बॉट पोज़ (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");
// यदि हमारी एंगुलर वेलोसिटी प्रति सेकंड 360 डिग्री से अधिक है, तो विज़न अपडेट को अनदेखा करें
if(Math.abs(m_gyro.getRate()) > 360)
{
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 फॉरवर्ड, LL राइट, और LL अप रोबोट के फॉरवर्ड, राइट, और अप वेक्टर्स के साथ दूरियों का प्रतिनिधित्व करते हैं यदि आप रोबोट को एम्बॉडी करते हैं। (मीटर में)। LL रोल, पिच, और यॉ आपके Limelight के रोटेशन को डिग्री में दर्शाते हैं। आप इन मानों को संशोधित कर सकते हैं और 3D व्यूअर में Limelight के 3D मॉडल में परिवर्तन देख सकते हैं। Limelight इस कॉन्फ़िगरेशन का आंतरिक रूप से उपयोग कैमरा स्पेस में टारगेट पोज़ से -> फील्ड स्पेस में रोबोट पोज़ तक जाने के लिए करता है।
Limelight 4 के बिल्ट-इन IMU का "imumode_set" / SetIMUMode() के साथ उपयोग करना
Limelight 4 में एक बिल्ट-इन IMU है। आप इसका उपयोग MT2 के साथ टर्निंग के दौरान और भी सटीक पोज़ अनुमान प्राप्त करने के लिए कर सकते हैं। आपको इसके काम करने से पहले IMU के प्रारंभिक ओरिएंटेशन को सीड करना होगा। इसे "सीडिंग" कहा जाता है। एक बार जब आपका limelight आपके रोबोट का प्रारंभिक ओरिएंटेशन जान लेता है, तो यह MT2 कैलकुलेशन करने के लिए अपने आप आपके रोबोट के ओरि एंटेशन को अपडेट करने में सक्षम होगा।
LL4 IMU का उपयोग करने के लिए, वर्तमान में आपका LL "लैंडस्केप" मोड में माउंट होना चाहिए।
फ्लो इस प्रकार दिखता है:
- अपने "एक्सटर्नल" IMU जैसे Pigeon या NavX के साथ SetRobotOrientation() कॉल करें। आप इस मेथड को जितनी बार चाहें कॉल कर सकते हैं।
- SetIMUMode() कॉल करें ताकि कॉन्फ़िगर किया जा सके कि आपका Limelight आंतरिक और बाहरी IMU से IMU डेटा का उपयोग कैसे करता है।
- सामान्य तौर पर, मोड 1 का उपयोग तब करें जब आपका रोबोट ऑटोनॉमस पीरियड शुरू होने की प्रतीक्षा कर रहा हो। इनेबल्ड होने पर या इनेबल्ड होने और टर्निंग के दौरान मोड 2 पर स्विच करें।
ज़ीरोइंग / सीडिंग
- SetRobotOrientation() के माध्यम से सबमिट किए गए यॉ पर आंतरिक IMU के फ्यूज्ड रोबोट यॉ को रीसेट करन े के लिए, LimelightHelpers.SetIMUMode() के साथ अपने Limelight का IMU मोड 1 पर सेट करें।
- सीडिंग के दौरान, MegaTag2 SetRobotOrientation() के माध्यम से सबमिट किए गए यॉ मान का उपयोग करना जारी रखेगा।
MT2 लोकलाइजेशन के लिए आंतरिक IMU का उपयोग करना
LL4 को MT2 लोकलाइजेशन के लिए अपने आंतरिक IMU का उपयोग करने की अनुमति देने के लिए, LimelightHelpers.SetIMUMode() के साथ अपने Limelight का IMU मोड 2 पर सेट करें।
IMU मोड:
- 0 - MT2 लोकलाइजेशन के लिए SetRobotOrientation() के माध्यम से सबमिट किए गए एक्सटर्नल IMU यॉ का उपयोग करें। आंतरिक IMU को पूरी तरह से अनदेखा किया जाता है।
- 1 - SetRobotOrientation() के माध्यम से सबमिट किए गए एक्सटर्नल IMU यॉ का उपयोग करें, और LL4 आंतरिक IMU के फ्यूज्ड यॉ को सबमिट किए गए यॉ मान से मेल खाने के लिए कॉन्फ़िगर करें।
- 2 - MT2 लोकलाइजेशन के लिए आंतरिक IMU का उपयोग करें।
- 3 -