अदृश्य लक्ष्यों की खोज
खोज व्यवहार को लागू करना कुछ स्थितियों में उपयोगी हो सकता है। कुछ गेम्स में, जिस गोल में आप स्कोर करने की कोशिश कर रहे हैं वह पूर्वानुमानित स्थान पर नहीं हो सकता है इसलिए आप "काफी करीब" पहुंचने के लिए dead-reckoning autonomous कोड पर निर्भर नहीं रह सकते। उदाहरण के लिए 2009 में, गोल विरोधी रोबोट से जुड़े थे जो खुद भी घूम रहे थे। खोज को लागू करने का एक और कारण यह हो सकता है कि आपके रोबोट का ड्राइवट्रेन इतना विश्वसनीय/दोहराने योग्य नहीं है कि आपको ठीक उसी स्थान पर ले जाए जहां आप चाहते हैं। कभी-कभी swerve drives या omni-directional drives को सटीक स्थानों पर ड्राइव करने में परेशानी हो सकती है (यह swerve या omni-directional drivetrains की आलोचना नहीं है; बस उन्हें दोहराने योग्य स्थानों पर ले जाना अधिक चुनौतीपूर्ण है)। कुछ गेम्स ने autonomous mode के दौरान robot-robot interaction की भी अनुमति दी है। 2006 में हम अक्सर autonomous duels में शामिल होते थे जहां defense robots offense robots को scoring position से बाहर धकेलने की कोशिश करते थे। इस मामले में आप किसी भी चीज़ के बारे में निश्चित नहीं हो सकते! उम्मीद है कि यह आपको कुछ तरीकों के बारे में सोचने पर मजबूर करेगा कि कैसे आपके रोबोट का स्वचालित रूप से उस गोल की खोज करना जो वह शुरू में नहीं देख सकता, उपयोगी हो सकता है।
सौभाग्य से, आपके रोबोट में खोज तर्क जोड़ना बहुत आसान है। खोज को लागू करने के लिए, आप बस अपने रोबोट को लक्ष्य के लिए स्कैन करवाते हैं और जब वह इसे ढूंढ लेता है, तो aiming कोड चलाना शुरू करते हैं। हम limelight द्वारा रिपोर्ट किए गए 'tv' या 'target valid' मान का उपयोग यह जानने के लिए करेंगे कि हम लक्ष्य देख रहे हैं या नहीं।
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
{
// हम लक्ष्य देख रहे हैं, aiming कोड चलाएं
float heading_error = tx;
steering_adjust = Kp * tx;
}
left_command+=steering_adjust;
right_command-=steering_adjust;
