दूरी का अनुमान लगाना
निश्चित कोण वाले कैमरे का उपयोग करना
यदि आपका विज़न ट्रैकिंग कैमरा आपके रोबोट पर इस तरह से लगा हुआ है कि जमीन के समतल और उसकी दृष्टि रेखा के बीच का कोण नहीं बदलता है, तो आप इस तकनीक का उपयो ग करके लक्ष्य तक की दूरी का बहुत सटीक अनुमान लगा सकते हैं। फिर आप इस दूरी के मान का उपयोग या तो अपने रोबोट को आगे-पीछे चलाकर सही रेंज में लाने के लिए या किसी प्रक्षेपण तंत्र की शक्ति को समायोजित करने के लिए कर सकते हैं।
नीचे दिए गए चित्र को देखें। इस संदर्भ में, सभी चर ज्ञात हैं: लक्ष्य की ऊंचाई (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-अक्ष टरेट के लक्ष्य को समायोजित करने के लिए किया था, जो गोल से हमारी दूरी पर आधारित था।