अदृश्य लक्ष्यों की खोज
सीकिंग व्यवहार को लागू करना कुछ परिस्थितियों में उपयोगी हो सकता है। कुछ गेम्स में, जिस गोल में आप स्कोर करने की कोशिश कर रहे हैं वह एक पूर्वानुमानित स्थान पर नहीं हो सकता है, इसलिए आप "काफी करीब" पहुंचने के लिए डेड-रेकनिंग स्वायत्त कोड पर भरोसा नहीं कर सकते। उदाहरण के लिए 2009 में, गोल प्रतिद्वंद्वी रोबोट से जुड़े थे जो चारों ओर चल रहे थे। सीकिंग को लागू करने का एक और कारण यह हो सकता है कि यदि आपके रोबोट का ड्राइवट्रेन सटीक स्थान पर पहुंचने के लिए विश्वसनीय/दोहराने योग्य नहीं है। कभी-कभी स्वर्व ड्राइव या ऑम्नी-डायरेक्शनल ड्राइव को सटीक स्थानों पर ड्राइव करने में परेशानी हो सकती है (यह स्वर्व या ऑम्नी-डायरेक्शनल ड्राइवट्रेन पर एक कटाक्ष नहीं है; बस उन्हें दोहराने योग्य स्थानों पर ड्राइव करना अधिक चुनौतीपूर्ण है)। कुछ गेम्स में स्वायत्त मोड के दौरान रोबोट-रोबोट इंटरैक्शन की भी अनुमति थी। 2006 में हम अक्सर स्वायत्त द्वंद्वों में शामिल होते थे जहां रक्षा रोबोट आक्रमण रोबोट को स्कोरिंग पोजीशन से बाहर धकेलने की कोशिश करते थे। इस मामले में आप किसी भी चीज के बारे में निश्चित नहीं हो सकते! आशा है कि यह आपको कुछ तरीकों के बारे में सोचने में मदद करेगा कि आपका रोबोट स्वचालित रूप से एक ऐसे लक्ष्य की खोज कैसे कर सकता है जिसे वह शुरू में नहीं देख सकता।
सौभाग्य से, अपने रोबोट में सीकिंग लॉजिक जोड़ना बहुत आसान है। सीकिंग को लागू करने के लिए, आप अपने रोबोट को लक्ष्य के लिए स्कैन करते हैं और एक बार जब यह इसे खोज लेता है, तो एमिंग कोड चलाना शुरू कर देता है। हम लाइमलाइट द्वारा रिपोर्ट किए गए 'tv' या 'टारगेट वैलिड' मान का उपयोग यह जानने के लिए करेंगे कि हम लक्ष्य को देखते हैं या नहीं।
std::shared_ptr<NetworkTable> table = NetworkTable::GetTable("limelight");
float tv = table->GetNumber("tv");
float tx = table->GetNumber("tx");
float steering_adjust = 0.0f;
if (tv == 0.0f)
{
// हम लक्ष्य को नहीं देखते, सुरक्षित गति पर स्थान पर घूमकर लक्ष्य की खोज करें
steering_adjust = 0.3f;
}
else
{
// हम लक्ष्य को देखते हैं, एमिंग कोड निष्पादित करें
float heading_error = tx;
steering_adjust = Kp * tx;
}
left_command+=steering_adjust;
right_command-=steering_adjust;