הערכת מרחק
שימוש במצלמה בזווית קבועה
אם מצלמת מעקב הראייה שלך מותקנת על הרובוט כך שהזווית בין מישור הקרקע לקו הראייה שלה אינה משתנה, אז תוכל להשתמש בטכניקה זו כדי לחשב במדויק את המרחק למטרה. לאחר מכן תוכל להשתמש בערך מרחק זה כדי להניע את הרובוט קדימה ואחורה כדי להגיע לטווח המושלם או לכוונן את עוצמת מנגנון השיגור.
ראה את התרשים למטה. בהקשר זה, כל המשתנים ידועים: גובה המטרה (h2) ידוע מכיוון שהוא מאפיין של המגרש. גובה המצלמה שלך מעל הרצפה (h1) ידוע וזווית ההתקנה שלה ידועה (a1). ה-Limelight (או מערכת הראייה שלך) יכולה לומר לך את זווית ה-y למטרה (a2).
אנחנו יכולים לפתור עבור d באמצעות המשוואה הבאה:
tan(a1+a2) = (h2-h1) / d
"d = (h2-h1) / tan(a1+a2)"
פונקציית "tan" בדרך כלל מצפה לקלט הנמדד ברדיאנים. כדי להמיר מדידת זווית ממעלות לרדיאנים, הכפל ב-(3.14159/180.0). ראה את דוגמת הקוד המלאה למטה.
- Java
- C++
NetworkTable table = NetworkTableInstance.getDefault().getTable("limelight");
NetworkTableEntry ty = table.getEntry("ty");
double targetOffsetAngle_Vertical = ty.getDouble(0.0);
// בכמה מעלות לאחור מסובבת ה-limelight שלך מהמצב האנכי המושלם?
double limelightMountAngleDegrees = 25.0;
// מרחק ממרכז העדשה של ה-Limelight לרצפה
double limelightLensHeightInches = 20.0;
// מרחק מהמטרה לרצפה
double goalHeightInches = 60.0;
double angleToGoalDegrees = limelightMountAngleDegrees + targetOffsetAngle_Vertical;
double angleToGoalRadians = angleToGoalDegrees * (3.14159 / 180.0);
// חישוב מרחק
double distanceFromLimelightToGoalInches = (goalHeightInches - limelightLensHeightInches) / Math.tan(angleToGoalRadians);
std::shared_ptr<NetworkTable> table = nt::NetworkTableInstance::GetDefault().GetTable("limelight");
double targetOffsetAngle_Vertical = table->GetNumber("ty",0.0);
// בכמה מעלות לאחור מסובבת ה-limelight שלך מהמצב האנכי המושלם?
double limelightMountAngleDegrees = 25.0;
// מרחק ממרכז העדשה של ה-Limelight לרצפה
double limelightLensHeightInches = 20.0;
// מרחק מהמטרה לרצפה
double goalHeightInches = 60.0;
double angleToGoalDegrees = limelightMountAngleDegrees + targetOffsetAngle_Vertical;
double angleToGoalRadians = angleToGoalDegrees * (3.14159 / 180.0);
// חישוב מרחק
double distanceFromLimelightToGoalInches = (goalHeightInches - limelightLensHeightInches)/tan(angleToGoalRadians);
כאשר משתמשים בטכניקה זו, חשוב לבחור בקפידה את זווית ההתקנה של המצלמה. אתה רוצה להיות מסוגל לראות את המטרה גם כשאתה קרוב מדי וגם כשאתה רחוק מדי. כמו כן, אינך רוצה שזווית זו תשתנה, לכן התקן אותה בצורה מאובטחת והימנע משימוש בחריצים בגיאומטריית ההתקנה שלך.
אם אתה מתקשה לברר מהי הזווית a1, תוכל גם להשתמש במשוואה לעיל כדי לפתור עבור a1. פשוט הצב את הרובוט שלך במרחק ידוע (מדידה מהעדשה של המצלמה שלך) ופתור את אותה משוואה עבור a1.
במקרה שהמטרה שלך נמצאת כמעט באותו גובה כמו המצלמה שלך, טכניקה זו אינה שימושית.
שימוש בשטח להערכת מרחק
דרך פשוטה נוספת להעריך מרחק היא להשתמש בשטח של הקונטור שאתה עוקב אחריו. זוהי שיטה פשוטה מאוד ליישום, אך היא אינה נותנת לך תוצאות מדויקות במיוחד. כל מה שעליך לעשות הוא לכוון את מצלמת הראייה שלך אל המטרה ממרחק ידוע ולשים לב לשטח הכתם. ודא שאתה משתמש בייצוג מדויק של מטרת הראייה של המגרש האמיתי וודא שאתה מכוון אליה ממיקום הירי הרצוי. לאחר מכן תוכל לעשות זאת ממספר מרחקים שונים וליצור טבלה מערכים אלה. בשנת 2016 השתמשנו בשיטה זו כדי לכוונן את הכיוון של צריח הדו-צירי שלנו בהתבסס על המרחק שלנו מהשער.