मुख्य कंटेंट तक स्किप करें

MegaTag2 के साथ रोबोट लोकलाइज़ेशन

2024 में पेश किया गया, Megatag2 मोबाइल रोबोट के लिए एक सटीक और अस्पष्टता-मुक्त AprilTag-आधारित लोकलाइज़र है। इसे निम्नलिखित लक्ष्यों के साथ बनाया गया था:

  • पोज़ अस्पष्टता समस्या को समाप्त करना और इमेज/कॉर्नर नॉइज़ के खिलाफ मजबूती बढ़ाना।
  • किसी भी दृष्टिकोण से एक टैग दिए जाने पर उत्कृष्ट पोज़ अनुमान प्रदान करना।
  • भौतिक AprilTag प्लेसमेंट अशुद्धियों के खिलाफ मजबूती बढ़ाना
  • अच्छे पोज़ अनुमान परिणामों के लिए आवश्यक फ़िल्टरिंग की मात्रा कम करना

Megatag2 एक टैग दिए जाने पर किसी भी दूरी पर उत्कृष्ट परिणाम प्रदान करता है। इसका मतलब है कि केवल उन टैग पर ध्यान केंद्रित करना पूरी तरह से व्यवहार्य है जो प्रासंगिक और सहनशीलता के भीतर दोनों हैं, और अन्य सभी टैग को फ़िल्टर करना। यदि कोई टैग सही स्थान पर नहीं है, तो MegaTag2 के साथ पेश की गई डायनामिक फ़िल्टर सुविधा के साथ इसे फ़िल्टर करें।

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

MT1 के विपरीत, MT2 मानता है कि आप अपने रोबोट की हेडिंग (yaw) जानते हैं। वैकल्पिक रूप से, Megatag2 एक पूर्ण रोबोट ओरिएंटेशन और कोणीय वेग स्वीकार करता है।

आवश्यकताएं:

  • आपके Limelight का robot-space पोज़ webUI या API के माध्यम से कॉन्फ़िगर किया गया है
  • एक फ़ील्ड मैप (.fmap) अपलोड किया गया है
  • LimelightHelpers.SetRobotOrientation(robotYawInDegrees,0,0,0,0,0) रोबोट-साइड कोड में हर फ्रेम में कॉल किया जाता है
  • SetRobotOrientation एक केंद्रित (मैप जनरेटर देखें) या ब्लू-कॉर्नर ओरिजिन मानता है। CCW-पॉज़िटिव, 0 डिग्री -> FRC में रेड एलायंस वॉल की ओर मुख करना।

NetworkTables Keys:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb

JSON Keys:

  • botpose_orb_wpiblue
  • botpose_orb_wpired
  • botpose_orb
  • (प्रति fiducial टारगेट) t6r_fs_orb - केवल इस टैग के आधार पर megatag2 का उपयोग करके फ़ील्ड स्पेस में रोबोट पोज़ (कोई multitag नहीं)

इस अत्यधिक अस्पष्ट सिंगल-टैग केस में MegaTag2 (रेड रोबोट) और Megatag (ब्लू रोबोट) के बीच अंतर देखें


  • गोल्ड सिलेंडर / रेड रोबोट: अनफ़िल्टर्ड Megatag2 botpose
  • येलो सिलेंडर: अनफ़िल्टर्ड सिंगल-टैग Megatag2 botposes

  • व्हाइट सिलेंडर/ब्लू रोबोट: MegaTag1 Botpose
  • ग्रीन सिलेंडर: व्यक्तिगत प्रति-टैग बॉट पोज़ (MT1)
  • ब्लू सिलेंडर: व्यक्तिगत प्रति-टैग बॉट पोज़ का औसत (MT1)

info

2024 में, अधिकांश WPILib इकोसिस्टम ने सिंगल-ओरिजिन कोऑर्डिनेट सिस्टम में ट्रांज़िशन किया। 2023 में, आपका कोऑर्डिनेट सिस्टम ओरिजिन आपके एलायंस कलर के आधार पर बदलता था।

2024 और उसके बाद के लिए, आपके कोऑर्डिनेट सिस्टम का ओरिजिन हमेशा "ब्लू" ओरिजिन होना चाहिए। FRC टीमों को पोज़-संबंधित कार्यक्षमता के लिए हमेशा botpose_orb_wpiblue का उपयोग करना चाहिए

WPILib के Pose Estimator का उपयोग करना

  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 का Robot-Space Pose कॉन्फ़िगर करना

LL Forward, LL Right, और LL Up रोबोट के फॉरवर्ड, राइट, और अप वेक्टर के साथ दूरियों का प्रतिनिधित्व करते हैं यदि आप रोबोट को मूर्त रूप देते हैं। (मीटर में)। LL Roll, Pitch, और Yaw डिग्री में आपके Limelight के रोटेशन का प्रतिनिधित्व करते हैं। आप इन मानों को संशोधित कर सकते हैं और 3D व्यूअर में Limelight के 3D मॉडल को बदलते हुए देख सकते हैं। Limelight इस कॉन्फ़िगरेशन का आंतरिक रूप से उपयोग करता है कैमरा स्पेस में टारगेट पोज़ से -> फ़ील्ड स्पेस में रोबोट पोज़ में जाने के लिए।

"imumode_set" / SetIMUMode() के साथ Limelight 4 के बिल्ट-इन IMU का उपयोग करना

Limelight 4 में एक बिल्ट-इन IMU है। आप इसे MT2 के साथ उपयोग कर सकते हैं ताकि मुड़ते समय और भी अधिक सटीक पोज़ अनुमान प्राप्त कर सकें। इसके काम करने से पहले आपको IMU के प्रारंभिक ओरिएंटेशन को सीड करना होगा। इसे "सीडिंग" कहा जाता है। एक बार जब आपका limelight आपके रोबोट का प्रारंभिक ओरिएंटेशन जान लेता है, तो यह MT2 गणना करने के लिए अपने आप आपके रोबोट के ओरिएंटेशन को अपडेट करने में सक्षम होगा।

LL4 IMU का उपयोग करने के लिए, वर्तमान में आपका LL "लैंडस्केप" मोड में माउंट होना चाहिए।

फ्लो इस तरह दिखता है:

  1. अपने "एक्सटर्नल" IMU जैसे Pigeon या NavX के साथ SetRobotOrientation() कॉल करें। आप इस मेथड को जितनी बार चाहें कॉल करना जारी रख सकते हैं।
  2. SetIMUMode() कॉल करें ताकि कॉन्फ़िगर कर सकें कि आपका Limelight आंतरिक और बाहरी IMU से IMU डेटा का उपयोग कैसे करता है।
  3. सामान्य तौर पर, जब आपका रोबोट ऑटोनॉमस पीरियड शुरू होने की प्रतीक्षा कर रहा हो तो मोड 1 का उपयोग करें। इनेबल होने पर या इनेबल होने और मुड़ते समय मोड 2 पर स्विच करें।

ज़ीरोइंग / सीडिंग

  • SetRobotOrientation() के माध्यम से सबमिट किए गए yaw पर आंतरिक IMU के फ्यूज्ड रोबोट yaw को रीसेट करने के लिए, LimelightHelpers.SetIMUMode() के साथ अपने Limelight का IMU मोड 1 पर सेट करें।
  • सीडिंग के दौरान, MegaTag2 SetRobotOrientation() के माध्यम से सबमिट किए गए yaw मान का उपयोग करना जारी रखेगा।

MegaTag2 के साथ आंतरिक IMU का उपयोग करना

LL4 को MT2 लोकलाइज़ेशन के लिए अपने आंतरिक IMU का उपयोग करने की अनुमति देने के लिए, LimelightHelpers.SetIMUMode() के साथ अपने Limelight का IMU मोड 2 पर सेट करें।

IMU मोड:

  • 0 - MT2 लोकलाइज़ेशन के लिए SetRobotOrientation() के माध्यम से सबमिट किए गए एक्सटर्नल IMU yaw का उपयोग करें। आंतरिक IMU को पूरी तरह से अनदेखा किया जाता है।
  • 1 - SetRobotOrientation() के माध्यम से सबमिट किए गए एक्सटर्नल IMU yaw का उपयोग करें, और LL4 आंतरिक IMU के फ्यूज्ड yaw को सबमिट किए गए yaw मान से मिलान करने के लिए कॉन्फ़िगर करें।
  • 2 - MT2 लोकलाइज़ेशन के लिए आंतरिक IMU का उपयोग करें।
  • 3 -