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