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