दूरी का अनुमान लगाना
निश्चित कोण वाले कैमरे का उपयोग
यदि आपका विज़न ट् रैकिंग कैमरा आपके रोबोट पर इस तरह से लगा है कि जमीन के समतल और उसकी दृष्टि रेखा के बीच का कोण नहीं बदलता है, तो आप इस तकनीक का उपयोग लक्ष्य तक की दूरी की सटीक गणना के लिए कर सकते हैं। आप इस दूरी के मान का उपयोग या तो अपने रोबोट को सही रेंज में लाने के लिए आगे-पीछे चलाने या लॉन्चिंग मैकेनिज्म की शक्ति को समायोजित करने के लिए कर सकते हैं।
नीचे दिए गए चित्र को देखें। इस संदर्भ में, सभी चर ज्ञात हैं: लक्ष्य की ऊंचाई (h2) ज्ञात है क्योंकि यह फील्ड का गुण है। फर्श से आपके कैमरे की ऊंचाई (h1) ज्ञात है और इसका माउंटिंग कोण ज्ञात है (a1)। लाइमलाइट (या आपकी विज़न प्रणाली) आपको लक्ष्य तक का y कोण (a2) बता सकती है।
हम निम्नलिखित समीकरण का उपयोग करके d के लिए हल कर सकते हैं:
tan(a1+a2) = (h2-h1) / d
"d = (h2-h1) / tan(a1+a2)"
"tan" फ़ंक्शन आमतौर पर रेडियन में मापे गए इनपुट की अपेक्षा करता है। डिग्री से रेडियन में कोण माप को बदलने के लिए, (3.14159/180.0) से गुणा करें। नीचे पूरा कोड उदाहरण देखें।
- Java
- C++
NetworkTable table = NetworkTableInstance.getDefault().getTable("limelight");
NetworkTableEntry ty = table.getEntry("ty");
double targetOffsetAngle_Vertical = ty.getDouble(0.0);
// आपका लाइमलाइट पूर्ण रूप से ऊर्ध्वाधर से कितने डिग्री पीछे घूमा हुआ है?
double limelightMountAngleDegrees = 25.0;
// लाइमलाइट लेंस के केंद्र से फर्श तक की दूरी
double limelightLensHeightInches = 20.0;
// लक्ष्य से फर्श तक की दूरी
double goalHeightInches = 60.0;
double angleToGoalDegrees = limelightMountAngleDegrees + targetOffsetAngle_Vertical;
double angleToGoalRadians = angleToGoalDegrees * (3.14159 / 180.0);
//दूरी की गणना करें
double distanceFromLimelightToGoalInches = (goalHeightInches - limelightLensHeightInches) / Math.tan(angleToGoalRadians);
std::shared_ptr<NetworkTable> table = nt::NetworkTableInstance::GetDefault().GetTable("limelight");
double targetOffsetAngle_Vertical = table->GetNumber("ty",0.0);
// आपका लाइमलाइट पूर्ण रूप से ऊर्ध्वाधर से कितने डिग्री पीछे घूमा हुआ है?
double limelightMountAngleDegrees = 25.0;
// लाइमलाइट लेंस के केंद्र से फर्श तक की दूरी
double limelightLensHeightInches = 20.0;
// लक्ष्य से फर्श तक की दूरी
double goalHeightInches = 60.0;
double angleToGoalDegrees = limelightMountAngleDegrees + targetOffsetAngle_Vertical;
double angleToGoalRadians = angleToGoalDegrees * (3.14159 / 180.0);
//दूरी की गणना करें
double distanceFromLimelightToGoalInches = (goalHeightInches - limelightLensHeightInches)/tan(angleToGoalRadians);
इस तकनीक का उपयोग करते समय अपने कैमरे का माउंटिंग कोण सावधानीपूर्वक चुनना महत्वपूर्ण है। आप लक्ष्य को तब भी देख सकें जब आप बहुत नजदीक हों और तब भी जब बहुत दूर ह ों। आप यह भी नहीं चाहेंगे कि यह कोण बदले, इसलिए इसे सुरक्षित रूप से माउंट करें और अपनी माउंटिंग ज्यामिति में स्लॉट का उपयोग करने से बचें।
यदि आपको कोण a1 का पता लगाने में परेशानी हो रही है, तो आप a1 के लिए हल करने के लिए उपरोक्त समीकरण का भी उपयोग कर सकते हैं। बस अपने रोबोट को एक ज्ञात दूरी पर रखें (अपने कैमरे के लेंस से मापें) और a1 के लिए वही समीकरण हल करें।
जिस स्थिति में आपका लक्ष्य आपके कैमरे के लगभग समान ऊंचाई पर है, यह तकनीक उपयोगी नहीं है।
दूरी का अनुमान लगाने के लिए क्षेत्रफल का उपयोग
दूरी का अनुमान लगाने का एक और सरल तर ीका है जिस कंटूर को आप ट्रैक कर रहे हैं उसके क्षेत्रफल का उपयोग करना। यह लागू करने का एक बहुत ही सरल तरीका है लेकिन यह आपको बेहद सटीक परिणाम नहीं देता। आपको बस अपने विजन कैमरे को एक ज्ञात दूरी से लक्ष्य की ओर इंगित करना है और ब्लॉब के क्षेत्रफल को नोट करना है। सुनिश्चित करें कि आप वास्तविक फील्ड के विजन टारगेट का सटीक प्रतिनिधित्व कर रहे हैं और सुनिश्चित करें कि आप अपने वांछित शूटिंग स्थान से इसकी ओर इंगित कर रहे हैं। आप इसे कुछ अलग-अलग दूरियों से कर सकते हैं और इन मानों की एक तालिका बना सकते हैं। 2016 में हमने इस विधि का उपयोग गोल से कितनी दूर थे इसके आधार पर अपने 2-एक्सिस टरेट के लक्ष्य को समायोजित करने के लिए किया था।