דלג לתוכן הראשי

ממשק NetworkTables

מערכת ההפעלה של Limelight כוללת לקוח NetworkTables 4. היא מתחברת אוטומטית לשרת NetworkTables 4 הפועל על רובוטי FRC בהתבסס על מספר הקבוצה / מזהה שהוגדר בממשק ההגדרות.

כל הנתונים מפורסמים לטבלה שתואמת לשם המכשיר (למשל "limelight"). אם הוקצה שם מארח / כינוי למצלמה שלך, שם הטבלה יתאים לשם המלא של ה-limelight (למשל "limelight-top").

LimelightLib WPIJava ו-LimelightLib WPICPP מתקשרים עם מכשירי Limelight דרך NetworkTables.

נתוני מיקוד בסיסיים

השתמש בקוד הבא:

NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDouble(0);

כדי לאחזר את הנתונים הבאים:

מפתחסוגתיאור
tvint1 אם קיימת מטרה תקפה. 0 אם אין מטרות תקפות
txdoubleהיסט אופקי מהכוונת למטרה (LL1: -27 מעלות עד 27 מעלות / LL2: -29.8 עד 29.8 מעלות)
tydoubleהיסט אנכי מהכוונת למטרה (LL1: -20.5 מעלות עד 20.5 מעלות / LL2: -24.85 עד 24.85 מעלות)
txncdoubleהיסט אופקי מפיקסל הראשי למטרה (מעלות)
tyncdoubleהיסט אנכי מפיקסל הראשי למטרה (מעלות)
tadoubleשטח המטרה (0% מהתמונה עד 100% מהתמונה)
tldoubleתרומת ההשהיה של הצינור (מ"ש). הוסף ל-"cl" כדי לקבל השהיה כוללת.
cldoubleהשהיית צינור הלכידה (מ"ש). זמן בין סוף החשיפה של השורה האמצעית של החיישן לתחילת צינור המעקב.
t2ddoubleמערך המכיל מספר ערכים לסטטיסטיקות עם חותמת זמן מותאמת: [targetValid, targetCount, targetLatency, captureLatency, tx, ty, txnc, tync, ta, tid, targetClassIndexDetector , targetClassIndexClassifier, targetLongSidePixels, targetShortSidePixels, targetHorizontalExtentPixels, targetVerticalExtentPixels, targetSkewDegrees]
getpipeintאינדקס הצינור הפעיל האמיתי של המצלמה (0 .. 9)
getpipetypestringסוג הצינור למשל "pipe_color"
jsonstringפלט JSON מלא של תוצאות המיקוד. חייב להיות מופעל לכל צינור בלשונית 'output'
tclassstringשם המחלקה של תוצאת גלאי הרשת העצבית הראשית או תוצאת מסווג הרשת העצבית
tcdoubleArrayקבל את צבע HSV הממוצע מתחת לאזור הכוונת (אזור של 3x3 פיקסלים) כמערך מספרים
hbdoubleערך פעימת לב. עולה פעם אחת לכל פריים, מתאפס ב-2 מיליארד
hwdoubleArrayמדדי חומרה [fps, טמפרטורת מעבד, שימוש בזיכרון, טמפרטורה]
crosshairsdoubleArrayכוונות דו-ממדיות [cx0, cy0, cx1, cy1]
tcclassstringשם המחלקה המחושבת של צינור המסווג
tdclassstringשם הזיהוי הראשי של צינור הגלאי

נתוני AprilTag ותלת-ממד

השתמש בקוד הבא:

NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);

כדי לאחזר את הנתונים הבאים:

מפתחסוגתיאור
botposedoubleArrayטרנספורמציית הרובוט במרחב השדה. תזוזה (X,Y,Z) במטרים סיבוב (Roll,Pitch,Yaw) במעלות, השהיה כוללת (cl+tl), מספר תגיות, טווח תגיות, מרחק ממוצע של תגית מהמצלמה, שטח תגית ממוצע (אחוז מהתמונה)
botpose_wpibluedoubleArrayטרנספורמציית הרובוט במרחב השדה (מקור WPILIB של תחנת הנהג הכחולה). תזוזה (X,Y,Z) במטרים סיבוב (Roll,Pitch,Yaw) במעלות, השהיה כוללת (cl+tl), מספר תגיות, טווח תגיות, מרחק ממוצע של תגית מהמצלמה, שטח תגית ממוצע (אחוז מהתמונה)
botpose_wpireddoubleArrayטרנספורמציית הרובוט במרחב השדה (מקור WPILIB של תחנת הנהג האדומה). תזוזה (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהיה כוללת (cl+tl), מספר תגיות, טווח תגיות, מרחק ממוצע של תגית מהמצלמה, שטח תגית ממוצע (אחוז מהתמונה)
botpose_orbdoubleArrayטרנספורמציית הרובוט במרחב השדה (Megatag2). תזוזה (X,Y,Z) במטרים סיבוב (Roll,Pitch,Yaw) במעלות, השהיה כוללת (cl+tl), מספר תגיות, טווח תגיות, מרחק ממוצע של תגית מהמצלמה, שטח תגית ממוצע (אחוז מהתמונה)
botpose_orb_wpibluedoubleArrayטרנספורמציית הרובוט במרחב השדה (Megatag2) (מקור WPILIB של תחנת הנהג הכחולה). תזוזה (X,Y,Z) במטרים סיבוב (Roll,Pitch,Yaw) במעלות, השהיה כוללת (cl+tl), מספר תגיות, טווח תגיות, מרחק ממוצע של תגית מהמצלמה, שטח תגית ממוצע (אחוז מהתמונה)
botpose_orb_wpireddoubleArrayטרנספורמציית הרובוט במרחב השדה (Megatag2) (מקור WPILIB של תחנת הנהג האדומה). תזוזה (X,Y,Z) במטרים, סיבוב (Roll,Pitch,Yaw) במעלות, השהיה כוללת (cl+tl), מספר תגיות, טווח תגיות, מרחק ממוצע של תגית מהמצלמה, שטח תגית ממוצע (אחוז מהתמונה)
camerapose_targetspacedoubleArrayטרנספורמציה תלת-ממדית של המצלמה במערכת הקואורדינטות של ה-AprilTag הראשי הנראה (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות)
targetpose_cameraspacedoubleArrayטרנספורמציה תלת-ממדית של ה-AprilTag הראשי הנראה במערכת הקואורדינטות של המצלמה (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות)
targetpose_robotspacedoubleArrayטרנספורמציה תלת-ממדית של ה-AprilTag הראשי הנראה במערכת הקואורדינטות של הרובוט (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות)
botpose_targetspacedoubleArrayטרנספורמציה תלת-ממדית של הרובוט במערכת הקואורדינטות של ה-AprilTag הראשי הנראה (מערך (6)) [tx, ty, tz, pitch, yaw, roll] (מטרים, מעלות)
camerapose_robotspacedoubleArrayטרנספורמציה תלת-ממדית של המצלמה במערכת הקואורדינטות של הרובוט (מערך (6))
tidintמזהה ה-AprilTag הראשי הנראה
stddevsdoubleArrayסטיות תקן של MegaTag [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw]
camerapose_robotspace_setdoubleArrayהגדר את מיקום המצלמה במערכת הקואורדינטות של הרובוט.
priorityidintהגדר את המזהה הנדרש למיקוד tx/ty. התעלם ממטרות אחרות. לא משפיע על לוקליזציה
robot_orientation_setdoubleArrayהגדר כיוון הרובוט ומהירויות זוויתיות במעלות ומעלות לשנייה [yaw,yawrate,pitch,pitchrate,roll,rollrate]
fiducial_id_filters_setdoubleArrayדרוס מזהי fiducial תקפים ללוקליזציה (מערך)
fiducial_offset_setdoubleArrayהגדר היסט נקודת העניין התלת-ממדית [x,y,z]

בקרות מצלמה

השתמש בקוד הבא:

NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").setNumber(<value>);

כדי להגדיר את הנתונים הבאים:

ledModeמגדיר את מצב ה-LED של limelight
[0]השתמש במצב LED שהוגדר בצינור הנוכחי
[1]כבה בכוח
[2]הבהוב בכוח
[3]הדלק בכוח
pipelineמגדיר את הצינור הנוכחי של limelight
0 .. 9בחר צינור 0..9
streamמגדיר את מצב הסטרימינג של limelight
0סטנדרטי - סטרימים זה לצד זה אם מצלמת רשת מחוברת ל-Limelight
1PiP ראשי - סטרים המצלמה המשנית ממוקם בפינה הימנית התחתונה של סטרים המצלמה הראשית
2PiP משני - סטרים המצלמה הראשית ממוקם בפינה הימנית התחתונה של סטרים המצלמה המשנית
crop(מערך) מגדיר את מלבן החיתוך. הצינור חייב להשתמש במלבן החיתוך ברירת המחדל בממשק האינטרנט. המערך חייב להכיל בדיוק 4 ערכים.
[0]X0 - ערך X מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1)
[1]X1 - ערך X מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1)
[2]Y0 - ערך Y מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1)
[3]Y1 - ערך Y מינימלי או מקסימלי של מלבן החיתוך (-1 עד 1)
throttle_set(int) אנו ממליצים להגדיר זאת ל-100-200 כשהרובוט מושבת. מגדיר את מספר הפריימים לדלג ביניהם בין פריימים מעובדים כדי להפחית עליית טמפרטורה. הפלטים לא מתאפסים במהלך פריימים שדולגו.
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);

בקרות IMU

מפתחסוגתיאור
imumode_setintהגדר את מצב ה-imu. 0 - השתמש ב-imu חיצוני, 1 - השתמש ב-imu חיצוני, זרע imu פנימי, 2 - השתמש בפנימי, 3 - השתמש בפנימי עם התכנסות בסיוע MT1, 4 - השתמש ב-IMU פנימי עם התכנסות בסיוע IMU חיצוני
imuassistalpha_setdoubleאלפא / עוצמה של פילטר משלים. ערכים גבוהים יותר יגרמו ל-imu הפנימי להתכנס למקור הסיוע מהר יותר. ברירת המחדל מוגדרת לערך נמוך 0.001 כי כעת אנו סומכים על ה-IMU הפנימי יותר מבעבר. מצבי סיוע בנויים "למשוך" בעדינות רבה את ה-imu הפנימי לכיוון מקור הסיוע שנבחר.

Python

סקריפטי Python מאפשרים נתונים נכנסים ויוצאים שרירותיים.

llpythonמערך מספרים שנשלח על ידי סקריפטי python. זה נגיש בתוך קוד הרובוט.
llrobotמערך מספרים שנשלח על ידי הרובוט. זה נגיש בתוך SnapScripts של python.

נתונים גולמיים

פינות:

הפעל "send contours" בלשונית "Output" כדי לשדר קואורדינטות פינות:

tcornxyמערך מספרים של קואורדינטות פינות [x0,y0,x1,y1......]

מטרות גולמיות:

Limelight מפרסם שלושה קווי מתאר גולמיים ל-NetworkTables שאינם מושפעים ממצב הקיבוץ שלך. כלומר, הם מסוננים עם פרמטרי הצינור שלך, אך לעולם לא מקובצים. X ו-Y מוחזרים במרחב מסך מנורמל (-1 עד 1) במקום מעלות.

rawtargets[txnc,tync,ta,txnc2,tync2,ta2....]

Fiducials גולמיים:

קבל את כל ה-fiducials התקפים (לא מסוננים)

rawfiducials [id, txnc, tync, ta, distToCamera, distToRobot, ambiguity, id2.....]

זיהויים גולמיים:

קבל את כל תוצאות הזיהוי העצבי התקפות (לא מסוננות)

rawdetections [id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....]

ברקודים גולמיים:

קבל את כל תוצאות הברקוד התקפות (לא מסוננות)

rawbarcodes מערך מחרוזות של נתוני ברקוד