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