FTC Java & Blocklyプログラミングガイド
(Blocklyのスクリーンショットは近日公開予定です!)
FTCプログラミング クイックスタートを必ず読んでください。
Javadoc: [Javadocへのリンクは近日公開予定]
完全な例のリポジトリ: Limelight FTC サンプルリポジトリ
成功のためのヒント
- まずは簡単なことから始めましょう。FRCでは、最高のソフトウェアチームが最もシンプルなアプローチを使用することがよくあります。例えば、2024年のFRCチーム2056は、ゲームピースを追跡するためにニューラルネットワークの代わりに標準的な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にデータを要求する頻度を設定します(1秒間に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("ターゲットX", tx);
telemetry.addData("ターゲットY", ty);
telemetry.addData("ターゲット面積", ta);
} else {
telemetry.addData("Limelight", "ターゲットなし");
}
4. Python SnapScriptsとの対話
ウェブインターフェースで独自のPython SnapScriptパイプラインを作成できます。LLMベースのSnapScriptジェネレーターを使用してコードの作成を支援することができます。
以下は、ロボットコードからPythonに数値を送信し、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出力:", firstOutput);
}