FTC Java और Blockly प्रोग्रामिंग गाइड
(Blockly स्क्रीनशॉट जल्द ही आ रहे हैं!)
सुनिश्चित करें कि आपने FTC प्रोग्रामिंग क्विक स्टार्ट पढ़ लिया है।
FTC Limelight Javadoc: Javadoc
बेसिक FTC उदाहरण: FTC Sample
पूर्ण उदाहरण रेपो: Limelight FTC Examples Repo
सफलता के लिए टिप्स
- पहले सरल चीज़ करें। FRC में, हमने सीखा है कि सर्वश्रेष्ठ सॉफ्टवेयर टीमें अक्सर सबसे सरल दृष्टिकोण का उपयोग करती हैं। उदाहरण के लिए, FRC टीम 2056 ने 2024 में गेम पीस को ट्रैक करने के लिए न्यूरल नेटवर्क के बजाय मानक 90FPS कलर पाइपलाइन का उपयोग किया।
यहां एक उदाहरण है जिस प्रकार का प्रश्न आप प्रोग्रामिंग शुरू करते समय पूछ सकते हैं: टेलीऑप में, क्या आपको अपने रोबोट की फील्ड पर स्थिति जानने की आवश्यकता है, या आपको बस तब तक स्ट्रेफ करने की आवश्यकता है जब तक आपका क्रॉसहेयर किसी विशिष्ट टैग पर केंद्रित न हो जाए (strafeSpeed = result.getTx()*.03)?
मुख्य अवधारणाएँ
1. प्रारंभीकरण
हमें अपने रोबोट कोड में अपने Limelight3A को से ट करने की आवश्यकता है।
import com.qualcomm.hardware.limelightvision.LLResult;
import com.qualcomm.hardware.limelightvision.LLResultTypes;
import com.qualcomm.hardware.limelightvision.LLStatus;
import com.qualcomm.hardware.limelightvision.Limelight3A;
Limelight3A limelight;
@Override
public void init() {
limelight = hardwareMap.get(Limelight3A.class, "limelight");
limelight.setPollRateHz(100); // यह सेट करता है कि हम Limelight से कितनी बार डेटा मांगते हैं (प्रति सेकंड 100 बार)
limelight.start(); // यह Limelight को देखना शुरू करने के लिए कहता है!
}
2. पाइपलाइन प्रबंधन
पाइपलाइन छोटे, तु रंत बदलने योग्य प्रोग्राम की तरह हैं जो बदलते हैं कि Limelight दुनिया को कैसे देखता है। आप Limelight वेब इंटरफेस में 10 अलग-अलग पाइपलाइन सेट कर सकते हैं, प्रत्येक एक अलग कार्य के लिए। यहां बताया गया है कि आप उनके बीच कैसे स्विच करते हैं:
limelight.pipelineSwitch(0); // पाइपलाइन नंबर 0 पर स्विच करें
यह फायर-एंड-फॉरगेट है। Limelight मिलीसेकंड के भीतर अपनी पाइपलाइन बदल देगा, लेकिन आपका कोड जारी रखने से पहले इसका इंतजार नहीं करेगा। यदि आप वर्तमान पाइपलाइन इंडेक्स की जांच करना चाहते हैं, तो कॉल करें
result.getPipelineIndex()
LLResult ऑब्जेक्ट प्राप्त करने के बारे में जानने के लिए अगला अनुभाग देखें।
3. परिणाम प्राप्त करना और उपयोग करना
LLResult एक ऐसा कंटेनर है जिसमें Limelight क्या देखता है, इसके बारे में जानकारी भरी होती है। यहां बताया गया है कि हम उस जानकारी को कैसे प्राप्त करते हैं और उपयोग करते हैं:
LLResult result = limelight.getLatestResult();
if (result != null && result.isValid()) {
double tx = result.getTx(); // लक्ष्य कितना बाएं या दाएं है (डिग्री)
double ty = result.getTy(); // लक्ष्य कितना ऊपर या नीचे है (डिग्री)
double ta = result.getTa(); // लक्ष्य कितना बड़ा दिखता है (छवि का 0%-100%)
telemetry.addData("Target X", tx);
telemetry.addData("Target Y", ty);
telemetry.addData("Target Area", ta);
} else {
telemetry.addData("Limelight", "No Targets");
}
4. Python SnapScripts से बात करना
आप वेब इंटरफेस में अपनी खुद की Python SnapScript पाइपलाइन लिख सकते हैं। अपना कोड लिखने में मदद के लिए हमारे LLM-आधारित SnapScript जनरेटर का उपयोग करें।
यहां बताया गया है कि आप रोबोट कोड से Python को नंबर कैसे भेजते हैं और नंबर वापस कैसे प्राप्त करते हैं:
// Python को नंबर भेजना
double[] inputs = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0};
limelight.updatePythonInputs(inputs);
// Python से नंबर प्राप्त करना
double[] pythonOutputs = result.getPythonOutput();
if (pythonOutputs != null && pythonOutputs.length > 0) {
double firstOutput = pythonOutputs[0];
telemetry.addData("Python output:", firstOutput);
}