חיפוש מטרות נסתרות
יישום התנהגות חיפוש יכול להיות שימושי במספר מצבים. במשחקים מסוימים, השער שאתה מנסה להבקיע בו עשוי לא להיות במיקום צפוי, כך שאי אפשר להסתמך על קוד אוטונומי מבוסס ניווט מת כדי להגיע "קרוב מספיק". ב-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;
