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