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

הגעה לטווח

רובוטי FRC לעיתים קרובות צריכים להיות ממוקמים במרחק ספציפי ממטרת הניקוד כדי שמנגנון הניקוד שלהם יעבוד היטב. אתה יכול להשתמש בלולאת בקרה פרופורציונלית פשוטה יחד עם הכוונת של limelight המכוילת כדי בקלות רבה לגרום לרובוט שלך לנסוע למרחק ספציפי מהמטרה.

לדוגמה זו, עליך לוודא שהרובוט שלך מכוון למטרה. בהמשך נשלב כיוון והתאמת מרחק לפונקציה אחת אבל לדוגמה זו אנחנו מתמקדים רק בקוד שמניע את הרובוט למרחק הנכון.

בדומה לדוגמת הכיוון, כאן אנחנו מציגים פונקציה שיכולה לרוץ בלולאת העדכון של הרובוט שלך.

float KpDistance = -0.1f;  // קבוע בקרה פרופורציונלית למרחק
float current_distance = Estimate_Distance(); // ראה 'מקרה בוחן: הערכת מרחק'

if (joystick->GetRawButton(9))
{
float distance_error = desired_distance - current_distance;
driving_adjust = KpDistance * distance_error;

left_command += distance_adjust;
right_command += distance_adjust;
}

עם כיוונון מסוים של הגדרת KpDistance, הרובוט שלך אמור לנסוע במהירות ובדיוק רב למרחק הרצוי. בהשוואה לכיוון, נסיעה למרחק הנכון היא בדרך כלל קלה יותר כי רוב הרובוטים נוסעים קדימה ואחורה הרבה יותר בקלות מאשר הם מסתובבים במקום.

בהמשך נתאר טריק פשוט שהופך את הנסיעה למרחק הנכון לקלה עוד יותר. במקום לחשב בפועל את המרחק, אתה יכול להשתמש בכוונת של limelight. פשוט מקם את הרובוט שלך במרחק האידיאלי שלך מהמטרה וכייל את מיקום ה-y של הכוונת. עכשיו זווית ה-y שלך תדווח כ-0.0 כשהרובוט שלך נמצא במרחק הנכון. באמצעות טריק זה, אתה לא צריך אף פעם לחשב בפועל את המרחק האמיתי והקוד שלך יכול להיראות משהו כזה:

float KpDistance = -0.1f; 

std::shared_ptr<NetworkTable> table = NetworkTable::GetTable("limelight");
float distance_error = table->GetNumber("ty");

if (joystick->GetRawButton(9))
{
driving_adjust = KpDistance * distance_error;

left_command += distance_adjust;
right_command += distance_adjust;
}

אם אתה צריך לשנות את מרחק הירי, פשוט הזז את הרובוט שלך למרחק החדש וכייל מחדש את כוונת limelight.

Image

הנה דוגמה לרובוט שמשתמש ברעיון הנ"ל. שים לב איך הוא נוסע אחורה לטווח הנכון אוטומטית כשהנהג מפסיק לנהוג ולוחץ על כפתור "כיוון":

Image