मुख्य कंटेंट तक स्किप करें

NetworkTables API

Limelight OS में NetworkTables 4 Client की सुविधा है। यह FRC Robots पर चल रहे NetworkTables 4 Server से Settings UI में कॉन्फ़िगर किए गए Team Number / ID के आधार पर स्वचालित रूप से कनेक्ट होता है।

सभी डेटा एक ऐसी तालिका में प्रकाशित किया जाता है जो डिवाइस नाम से मेल खाती है (जैसे "limelight")। यदि आपके कैमरे को होस्टनेम / निकनेम असाइन किया गया है, तो तालिका का नाम पूरे लाइमलाइट नाम से मेल खाएगा (जैसे "limelight-top")।

LimelightLib WPIJava और LimelightLib WPICPP, NetworkTables के माध्यम से Limelight डिवाइसों के साथ इंटरैक्ट करते हैं।

बेसिक टारगेटिंग डेटा

निम्नलिखित कोड का उपयोग करें:

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

इस डेटा को प्राप्त करने के लिए:

keytypeविवरण
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पाइपलाइन का लेटेंसी योगदान (ms)। कुल लेटेंसी प्राप्त करने के लिए "cl" में जोड़ें।
cldoubleकैप्चर पाइपलाइन लेटेंसी (ms)। सेंसर की मध्य पंक्ति के एक्सपोज़र के अंत से ट्रैकिंग पाइपलाइन की शुरुआत तक का समय।
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 डंप। 'आउटपुट' टैब में प्रति-पाइपलाइन सक्षम किया जाना चाहिए
tclassstringप्राथमिक न्यूरल डिटेक्टर परिणाम या न्यूरल क्लासिफायर परिणाम का क्लास नाम
tcdoubleArrayक्रॉसहेयर क्षेत्र (3x3 पिक्सेल क्षेत्र) के नीचे औसत HSV रंग को NumberArray के रूप में प्राप्त करें
hbdoubleहार्टबीट मान। प्रति फ्रेम एक बार बढ़ता है, 2 अरब पर रीसेट होता है
hwdoubleArrayHW मेट्रिक्स [fps, cpu तापमान, ram उपयोग, तापमान]
crosshairsdoubleArray2D क्रॉसहेयर्स [cx0, cy0, cx1, cy1]
tcclassstringक्लासिफायर पाइपलाइन के कंप्यूटेड क्लास का नाम
tdclassstringडिटेक्टर पाइपलाइन के प्राथमिक डिटेक्शन का नाम

AprilTag और 3D डेटा

निम्नलिखित कोड का उपयोग करें:

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

इस डेटा को प्राप्त करने के लिए:

keytypedescription
botposedoubleArrayफील्ड-स्पेस में रोबोट ट्रांसफॉर्म। ट्रांसलेशन (X,Y,Z) मीटर में, रोटेशन (रोल, पिच, यॉ) डिग्री में, कुल लेटेंसी (cl+tl), टैग काउंट, टैग स्पैन, कैमरे से औसत टैग दूरी, औसत टैग क्षेत्र (इमेज का प्रतिशत)
botpose_wpibluedoubleArrayफील्ड-स्पेस में रोबोट ट्रांसफॉर्म (नीले ड्राइवरस्टेशन WPILIB मूल)। ट्रांसलेशन (X,Y,Z) मीटर में, रोटेशन (रोल, पिच, यॉ) डिग्री में, कुल लेटेंसी (cl+tl), टैग काउंट, टैग स्पैन, कैमरे से औसत टैग दूरी, औसत टैग क्षेत्र (इमेज का प्रतिशत)
botpose_wpireddoubleArrayफील्ड-स्पेस में रोबोट ट्रांसफॉर्म (लाल ड्राइवरस्टेशन WPILIB मूल)। ट्रांसलेशन (X,Y,Z) मीटर में, रोटेशन (रोल, पिच, यॉ) डिग्री में, कुल लेटेंसी (cl+tl), टैग काउंट, टैग स्पैन, कैमरे से औसत टैग दूरी, औसत टैग क्षेत्र (इमेज का प्रतिशत)
botpose_orbdoubleArrayफील्ड-स्पेस में रोबोट ट्रांसफॉर्म (मेगाटैग2)। ट्रांसलेशन (X,Y,Z) मीटर में, रोटेशन (रोल, पिच, यॉ) डिग्री में, कुल लेटेंसी (cl+tl), टैग काउंट, टैग स्पैन, कैमरे से औसत टैग दूरी, औसत टैग क्षेत्र (इमेज का प्रतिशत)
botpose_orb_wpibluedoubleArrayफील्ड-स्पेस में रोबोट ट्रांसफॉर्म (मेगाटैग2) (नीले ड्राइवरस्टेशन WPILIB मूल)। ट्रांसलेशन (X,Y,Z) मीटर में, रोटेशन (रोल, पिच, यॉ) डिग्री में, कुल लेटेंसी (cl+tl), टैग काउंट, टैग स्पैन, कैमरे से औसत टैग दूरी, औसत टैग क्षेत्र (इमेज का प्रतिशत)
botpose_orb_wpireddoubleArrayफील्ड-स्पेस में रोबोट ट्रांसफॉर्म (मेगाटैग2) (लाल ड्राइवरस्टेशन WPILIB मूल)। ट्रांसलेशन (X,Y,Z) मीटर में, रोटेशन (रोल, पिच, यॉ) डिग्री में, कुल लेटेंसी (cl+tl), टैग काउंट, टैग स्पैन, कैमरे से औसत टैग दूरी, औसत टैग क्षेत्र (इमेज का प्रतिशत)
camerapose_targetspacedoubleArrayप्राइमरी इन-व्यू AprilTag के कोऑर्डिनेट सिस्टम में कैमरे का 3D ट्रांसफॉर्म (एरे (6)) [tx, ty, tz, pitch, yaw, roll] (मीटर, डिग्री)
targetpose_cameraspacedoubleArrayकैमरे के कोऑर्डिनेट सिस्टम में प्राइमरी इन-व्यू AprilTag का 3D ट्रांसफॉर्म (एरे (6)) [tx, ty, tz, pitch, yaw, roll] (मीटर, डिग्री)
targetpose_robotspacedoubleArrayरोबोट के कोऑर्डिनेट सिस्टम में प्राइमरी इन-व्यू AprilTag का 3D ट्रांसफॉर्म (एरे (6)) [tx, ty, tz, pitch, yaw, roll] (मीटर, डिग्री)
botpose_targetspacedoubleArrayप्राइमरी इन-व्यू AprilTag के कोऑर्डिनेट सिस्टम में रोबोट का 3D ट्रांसफॉर्म (एरे (6)) [tx, ty, tz, pitch, yaw, roll] (मीटर, डिग्री)
camerapose_robotspacedoubleArrayरोबोट के कोऑर्डिनेट सिस्टम में कैमरे का 3D ट्रांसफॉर्म (एरे (6))
tidintप्राइमरी इन-व्यू AprilTag का ID
stddevsdoubleArrayमेगाटैग स्टैंडर्ड डेविएशन [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw]
camerapose_robotspace_setdoubleArrayरोबोट के कोऑर्डिनेट सिस्टम में कैमरे का पोज सेट करें।
priorityidinttx/ty टारगेटिंग के लिए आवश्यक ID सेट करें। अन्य टारगेट्स को अनदेखा करें। लोकलाइजेशन को प्रभावित नहीं करता
robot_orientation_setdoubleArrayरोबोट ओरिएंटेशन और एंगुलर वेलोसिटी डिग्री और डिग्री प्रति सेकंड में सेट करें [yaw,yawrate,pitch,pitchrate,roll,rollrate]
fiducial_id_filters_setdoubleArrayलोकलाइजेशन के लिए वैध फिड्यूशियल आईडी को ओवरराइड करें (एरे)
fiducial_offset_setdoubleArray3D पॉइंट ऑफ इंटरेस्ट ऑफसेट सेट करें [x,y,z]

कैमरा कंट्रोल्स

निम्नलिखित कोड का उपयोग करें:

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

इस डेटा को सेट करने के लिए:

ledModeलाइमलाइट के LED स्टेट को सेट करता है
[0]वर्तमान पाइपलाइन में सेट किए गए LED मोड का उपयोग करें
[1]बलपूर्वक बंद करें
[2]बलपूर्वक ब्लिंक करें
[3]बलपूर्वक चालू करें
pipelineलाइमलाइट की वर्तमान पाइपलाइन सेट करता है
0 .. 9पाइपलाइन 0..9 चुनें
streamलाइमलाइट का स्ट्रीमिंग मोड सेट करता है
0स्टैंडर्ड - यदि लाइमलाइट से वेबकैम जुड़ा है तो साइड-बाय-साइड स्ट्रीम
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 कंट्रोल्स

keytypedescription
imumode_setintIMU मोड सेट करें। 0 - बाहरी IMU का उपयोग करें, 1 - बाहरी IMU का उपयोग करें, आंतरिक IMU को सीड करें, 2 - आंतरिक का उपयोग करें, 3 - MT1 सहायता वाले कन्वर्जेंस के साथ आंतरिक का उपयोग करें, 4 - बाहरी IMU सहायता वाले कन्वर्जेंस के साथ आंतरिक IMU का उपयोग करें
imuassistalpha_setdoubleकॉम्प्लीमेंटरी फिल्टर अल्फा / स्ट्रेंथ। उच्च मान आंतरिक IMU को सहायता स्रोत पर तेजी से कन्वर्ज होने का कारण बनेगा। डिफॉल्ट एक कम मान 0.001 पर सेट है क्योंकि हम अब पहले की तुलना में आंतरिक IMU पर अधिक भरोसा करते हैं। सहायता मोड आंतरिक IMU को चुने गए सहायता स्रोत की ओर बहुत धीरे से "खींचने" के लिए बनाए गए हैं।

Python

Python स्क्रिप्ट्स मनमाने इनबाउंड और आउटबाउंड डेटा की अनुमति देते हैं।

llpythonPython स्क्रिप्ट्स द्वारा भेजा गया NumberArray। यह रोबोट कोड के भीतर पहुंच योग्य है।
llrobotरोबोट द्वारा भेजा गया NumberArray। यह Python SnapScripts के भीतर पहुंच योग्य है।

कच्चा डेटा

कोने:

कोने के निर्देशांक स्ट्रीम करने के लिए "Output" टैब में "send contours" सक्षम करें:

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 बारकोड डेटा का स्ट्रिंग ऐरे