メインコンテンツまでスキップ

FTC プログラミングクイックスタート

基本的なFTCの例: FTCサンプル

FTCでは、Android Studio、OnBot Java、Blocklyを使用してLimelightと連携することができます。

ほとんどのアプリケーションは10行未満のコードで済みます。以下にプロセスの概要を示します。

基本的な使用方法

  1. Control Hubのセットアップ時に使用したのと同じ名前でLimelight3Aを初期化します。
  2. pipelineSwitch()を呼び出して、Webインターフェースで設定した10個のパイプラインの1つを選択します。
  3. start()を呼び出して、1秒あたり100回のポーリングで結果のバックグラウンド取得を開始します。
public class Teleop extends LinearOpMode {

private Limelight3A limelight;

@Override
public void runOpMode() throws InterruptedException
{
limelight = hardwareMap.get(Limelight3A.class, "limelight");

telemetry.setMsTransmissionInterval(11);

limelight.pipelineSwitch(0);

/*
* データのポーリングを開始します。
*/
limelight.start();
.
.
  1. 自律モードとテレオプモードのループでgetLatestResult()を呼び出して、最新のLLResultオブジェクトを取得します。
  2. LLResultのgetTx()、getTy()、getBotpose()を使用してロボットを誘導します。
    while (opModeIsActive()) {
LLResult result = limelight.getLatestResult();
if (result != null) {
if (result.isValid()) {
Pose3D botpose = result.getBotpose();
telemetry.addData("tx", result.getTx());
telemetry.addData("ty", result.getTy());
telemetry.addData("Botpose", botpose.toString());
.
.

高度な使用方法

  1. 高度なユースケースでは、LLResultのgetColorResults()、getFiducialResults()などの使用が必要になる場合があります。
    // 検出された各ターゲットのデータを表示
if (result.isValid()) {
// フィデューシャル結果へのアクセス
List<LLResultTypes.FiducialResult> fiducialResults = result.getFiducialResults();
for (LLResultTypes.FiducialResult fr : fiducialResults) {
telemetry.addData("Fiducial", "ID: %d, Family: %s, X: %.2f, Y: %.2f", fr.getFiducialId(), fr.getFamily(),fr.getTargetXDegrees(), fr.getTargetYDegrees());
}

// カラー結果へのアクセス
List<LLResultTypes.ColorResult> colorResults = result.getColorResults();
for (LLResultTypes.ColorResult cr : colorResults) {
telemetry.addData("Color", "X: %.2f, Y: %.2f", cr.getTargetXDegrees(), cr.getTargetYDegrees());
}
}
  1. 最大限の3D位置推定精度を得るには、updateRobotOrientation()を呼び出してgetBotPose_MT2()を使用します。MegaTag2は、AprilTagなどの平面ターゲットに共通する曖昧性の問題を解決するためにIMUを利用するIMU融合ロボット位置推定システムです。
    while (opModeIsActive()) {
YawPitchRollAngles orientation = imu.getRobotYawPitchRollAngles();

telemetry.addData("Yaw (Z)", "%.2f Deg. (Heading)", orientation.getYaw(AngleUnit.DEGREES));

limelight.updateRobotOrientation(orientation.getYaw(AngleUnit.DEGREES));
LLResult result = limelight.getLatestResult();
if (result != null) {
if (result.isValid()) {
Pose3D botpose = result.getBotpose_MT2();
.
.

詳細については、FTCプログラミングページをご覧ください。