דלג לתוכן הראשי

חיפוש מטרות נסתרות

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

CS_seeking_anim