חיפוש מטרות נסתרות
יישום התנהגות חיפוש יכול להיות שימושי במספר מצבים. בחלק מהמשחקים, היעד שאליו אתה מנסה לקלוע עשוי להיות במיקום לא צפוי, כך שאינך יכול להסתמך על קוד אוטונומי מבוסס מיקום מדויק כדי להגיע "קרוב מספיק". למשל, ב-2009, היעדים היו מחוברים לרובוטים של היריבים שגם הם נעו. סיבה נוספת שבגללה תרצה ליישם חיפוש היא אם מערכת ההנעה של הרובוט שלך אינה אמינה/חוזרת מספיק כדי למקם אותך בדיוק במיקום הרצוי. לפעמים מערכות הנעה מסוג swerve או הנעה רב-כיוונית עלולות להתקשות לנוע למיקומים מדויקים (זו לא ביקורת על מערכות הנעה מסוג swerve או רב-כיווניות; פשוט יותר מאתגר לגרום להן לנוע למיקומים חוזרים). חלק מהמשחקים אפילו אפשרו אינטראקציה בין רובוט לרובוט במהלך מצב אוטונומי. ב-2006 לעתים קרובות השתתפנו בקרבות אוטונומיים שבהם רובוטי ההגנה ניסו להוציא את רובוטי ההתקפה ממצב קליעה. במקרה כזה אינך יכול להיות בטוח בשום דבר! בתקווה שזה גורם לך לחשוב על דרכים שבהן יכול להיות שימושי לגרום לרובוט שלך לחפש באופן אוטומטי יעד שהוא לא רואה בהתחלה.
למרבה המזל, הוספת לוגיקת חיפוש לרובוט שלך היא קלה מאוד. כדי ליישם חיפוש, פשוט גרום לרובוט שלך לסרוק אחר מטרה וברגע שהוא מוצא אותה, התחל להפעיל את קוד הכיוון. נשתמש בערך 'tv' או 'target valid' המדווח על ידי limelight כדי לדעת אם אנחנו רואים מטרה או לא.
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;