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