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