ממשק NetworkTables
Limelight OS כולל לקוח NetworkTables 4. הוא מתחבר אוטומטית לשרת NetworkTables 4 שרץ על רובוטי FRC בהתבסס על מספר הקבוצה / מזהה שהוגדר בממשק הגדרות.
כל המידע מפורסם לטבלה שתואמת את שם המכשיר (למשל "limelight"). אם הוקצה שם מארח / כינוי למצלמה שלך, שם הטבלה יתאים לשם המלא של ה-limelight (למשל "limelight-top").
LimelightLib WPIJava ו-LimelightLib WPICPP מתקשרים עם מכשירי Limelight באמצעות NetworkTables.
נתוני מעקב בסיסיים
השתמש בקוד הבא:
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDouble(0);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumber("<variablename>",0.0);
NetworkTables.getTable("limelight").getNumber('<variablename>');
כדי לאחזר את הנתונים הבאים:
מפתח | סוג | תיאור |
---|---|---|
tv | int | 1 אם קיימת מטרה תקפה. 0 אם אין מטרות תקפות |
tx | double | היסט אופקי מהצלב למטרה (LL1: -27 מעלות עד 27 מעלות / LL2: -29.8 עד 29.8 מעלות) |
ty | double | היסט אנכי מהצלב למטרה (LL1: -20.5 מעלות עד 20.5 מעלות / LL2: -24.85 עד 24.85 מעלות) |
txnc | double | היסט אופקי מפיקסל ראשי למטרה (מעלות) |
tync | double | היסט אנכי מפיקסל ראשי למטרה (מעלות) |
ta | double | שטח המטרה (0% מהתמונה עד 100% מהתמונה) |
tl | double | תרומת השהיית הצינור (מילישניות). הוסף ל-"cl" כדי לקבל השהייה כוללת |
cl | double | השהיית לכידת הצינור (מילישניות). הזמן בין סוף החשיפה של השורה האמצעית של החיישן לתחילת צינור המעקב |
t2d | double | מערך המכיל מספר ערכים לסטטיסטיקות עם חותמת זמן מותאמת: [targetValid, targetCount, targetLatency, captureLatency, tx, ty, txnc, tync, ta, tid, targetClassIndexDetector, targetClassIndexClassifier, targetLongSidePixels, targetShortSidePixels, targetHorizontalExtentPixels, targetVerticalExtentPixels, targetSkewDegrees] |
getpipe | int | אינדקס הצינור הפעיל האמיתי של המצלמה (0 .. 9) |
getpipetype | string | סוג הצינור למשל "pipe_color" |
json | string | הטלת JSON מלאה של תוצאות המעקב. חייב להיות מופעל לכל צינור בלשונית 'פלט' |
tclass | string | שם המחלקה של תוצאת הגלאי העצבי הראשי או תוצאת המסווג העצבי |
tc | doubleArray | קבל את צבע HSV הממוצע מתחת לאזור הצלב (אזור של 3x3 פיקסלים) כמערך מספרים |
hb | double | ערך דופק לב. עולה פעם אחת בכל פריים, מתאפס ב-2 מיליארד |
hw | doubleArray | מדדי חומרה [fps, טמפרטורת מעבד, שימוש בזיכרון RAM, טמפרטורה] |
crosshairs | doubleArray | צלבים דו-ממדיים [cx0, cy0, cx1, cy1] |
tcclass | string | שם המחלקה המחושבת של צינור הסיווג |
tdclass | string | שם הזיהוי הראשי של צינור הגלאי |
AprilTag ונתוני תלת-מימד
השתמש בקוד הבא:
- Java
- C++
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumberArray("<variablename>",std::vector<double>(6));
כדי לאחזר את הנתונים הבאים:
מפתח | סוג | תיאור |
---|---|---|
botpose | doubleArray | טרנספורמציית הרובוט במרחב המגרש. תרגום (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהייה כוללת (cl+tl), מספר תגים, מרווח תגים, מרחק ממוצע של תגים מהמצלמה, שטח תג ממוצע (אחוז מהתמונה) |
botpose_wpiblue | doubleArray | טרנספורמציית הרובוט במרחב המגרש (מקור WPILIB של תחנת הנהג הכחולה). תרגום (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהייה כוללת (cl+tl), מספר תגים, מרווח תגים, מרחק ממוצע של תגים מהמצלמה, שטח תג ממוצע (אחוז מהתמונה) |
botpose_wpired | doubleArray | טרנספורמציית הרובוט במרחב המגרש (מקור WPILIB של תחנת הנהג האדומה). תרגום (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהייה כוללת (cl+tl), מספר תגים, מרווח תגים, מרחק ממוצע של תגים מהמצלמה, שטח תג ממוצע (אחוז מהתמונה) |
botpose_orb | doubleArray | טרנספורמציית הרובוט במרחב המגרש (Megatag2). תרגום (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהייה כוללת (cl+tl), מספר תגים, מרווח תגים, מרחק ממוצע של תגים מהמצלמה, שטח תג ממוצע (אחוז מהתמונה) |
botpose_orb_wpiblue | doubleArray | טרנספורמציית הרובוט במרחב המגרש (Megatag2) (מקור WPILIB של תחנת הנהג הכחולה). תרגום (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהייה כוללת (cl+tl), מספר תגים, מרווח תגים, מרחק ממוצע של תגים מהמצלמה, שטח תג ממוצע (אחוז מהתמונה) |
botpose_orb_wpired | doubleArray | טרנספורמציית הרובוט במרחב המגרש (Megatag2) (מקור WPILIB של תחנת הנהג האדומה). תרגום (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהייה כוללת (cl+tl), מספר תגים, מרווח תגים, מרחק ממוצע של תגים מהמצלמה, שטח תג ממוצע (אחוז מהתמונה) |
camerapose_targetspace | doubleArray | טרנספורמציה תלת-מימדית של המצלמה במערכת הקואורדינטות של תג ה-AprilTag הראשי בשדה הראייה (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות) |
targetpose_cameraspace | doubleArray | טרנספורמציה תלת-מימדית של תג ה-AprilTag הראשי בשדה הראייה במערכת הקואורדינטות של המצלמה (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות) |
targetpose_robotspace | doubleArray | טרנספורמציה תלת-מימדית של תג ה-AprilTag הראשי בשדה הראייה במערכת הקואורדינטות של הרובוט (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות) |
botpose_targetspace | doubleArray | טרנספורמציה תלת-מימדית של הרובוט במערכת הקואורדינטות של תג ה-AprilTag הראשי בשדה הראייה (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות) |
camerapose_robotspace | doubleArray | טרנספורמציה תלת-מימדית של המצלמה במערכת הקואורדינטות של הרובוט (מערך (6)) |
tid | int | מזהה של תג ה-AprilTag הראשי בשדה הראייה |
stddevs | doubleArray | סטיות תקן של MegaTag [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw] |
camerapose_robotspace_set | doubleArray | הגדר את תנוחת המצלמה במערכת הקואורדינטות של הרובוט. |
priorityid | int | הגדר את המזהה הנדרש עבור מיקוד tx/ty. התעלם ממטרות אחרות. לא משפיע על מיקום |
robot_orientation_set | doubleArray | הגדר את כיוון הרובוט ומהירויות זוויתיות במעלות ומעלות לשנייה [yaw,yawrate,pitch,pitchrate,roll,rollrate] |
fiducial_id_filters_set | doubleArray | עקוף מזהי fiducial תקפים למיקום (מערך) |
fiducial_offset_set | doubleArray | הגדר את היסט נקודת העניין התלת-מימדית [x,y,z] |
בקרת מצלמה
השתמש בקוד הבא:
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").setNumber(<value>);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->PutNumber("<variablename>",<value>);
NetworkTables.getTable("limelight").putNumber('<variablename>',<value>)
כדי להגדיר את הנתונים הבאים:
ledMode | קובע את מצב הנורית LED של ה-limelight |
---|---|
[0] | השתמש במצב LED שנקבע בצינור הנוכחי |
[1] | כפה כיבוי |
[2] | כפה הבהוב |
[3] | כפה הדלקה |
pipeline | קובע את הצינור הנוכחי של ה-limelight |
---|---|
0 .. 9 | בחר צינור 0..9 |
stream | קובע את מצב הזרימה של ה-limelight |
---|---|
0 | סטנדרטי - זרמים זה לצד זה אם מצלמת רשת מחוברת ל-Limelight |
1 | PiP ראשי - זרם המצלמה המשנית ממוקם בפינה הימנית התחתונה של זרם המצלמה הראשית |
[2] | PiP משני - זרם המצלמה הראשית ממוקם בפינה הימנית התחתונה של זרם המצלמה המשנית |
crop | (מערך) קובע את מלבן החיתוך. הצינור חייב להשתמש במלבן החיתוך המוגדר כברירת מחדל בממשק האינטרנט. המערך חייב להכיל בדיוק 4 ערכים. |
---|---|
[0] | X0 - ערך X מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1) |
[1] | X1 - ערך X מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1) |
[2] | Y0 - ערך Y מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1) |
[3] | Y1 - ערך Y מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1) |
- Java
- C++
double[] cropValues = new double[4];
cropValues[0] = -1.0;
cropValues[1] = 1.0;
cropValues[2] = -1.0;
cropValues[3] = 1.0;
NetworkTableInstance.getDefault().getTable("limelight").getEntry("crop").setDoubleArray(cropValues);
wip
Python
סקריפטים של Python מאפשרים נתונים נכנסים ויוצאים באופן שרירותי.
llpython | מערך מספרים שנשלח על ידי סקריפטי Python. ניתן לגשת אליו בתוך קוד הרובוט. |
llrobot | מערך מספרים שנשלח על ידי הרובוט. ניתן לגשת אליו בתוך סקריפטי Python Snap. |
נתונים גולמיים
פינות:
הפעל "שלח קונטורים" בכרטיסיית "פלט" כדי להזרים קואורדינטות פינה:
tcornxy | מערך מספרים של קואורדינטות פינה [x0,y0,x1,y1......] |
מטרות גולמיות:
Limelight מפרסם שלושה קונטורים גולמיים ל-NetworkTables שאינם מושפעים ממצב הקיבוץ שלך. כלומר, הם מסוננים עם פרמטרי הצינור שלך, אך לעולם לא מקובצים. X ו-Y מוחזרים במרחב מסך מנורמל (-1 עד 1) במקום במעלות.
rawtargets | [txnc,tync,ta,txnc2,tync2,ta2....] |
סמנים פידוציאליים גולמיים:
קבל את כל הסמנים הפידוציאליים התקפים (ללא סינון)
rawfiducials | [id, txnc, tync, ta, distToCamera, distToRobot, ambiguity, id2.....] |
זיהויים גולמיים:
קבל את כל תוצאות הזיהוי העצבי התקפות (ללא סינון)
rawdetections | [id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....] |
ברקודים גולמיים:
קבל את כל תוצאות הברקוד התקפות (ללא סינון)
rawbarcodes | מערך מחרוזות של נתוני ברקוד |