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