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

Limelight 3A クイックスタート

ハードウェア仕様

  • フットプリント: 2.839in x 1.894in (72.11mm x 48.11mm)
  • 厚さ: 0.661in (16.80mm)
  • 重量: 0.20 lb
  • マウント: 4x #10 貫通穴、4x M3、6x M4 ネジ穴
  • 電源入力: USB経由で4.1V-5.75V
  • 最大消費電力: 4W
  • センサー: OV5647 カラーローリングシャッター (640x480 @ 90FPS)
  • LED照明なし
  • 視野角: H:54.5° V:42°
  • USB-C接続のみ(RJ45ポートなし)
  • ステータスライト: 緑(ターゲット検出)
  • FTC互換性に最適化

ソフトウェア機能 (Limelight OS)

  • プラグアンドプレイの高性能ビジョン。経験不要。
  • ビジョンパイプライン設定用のセルフホスト型ブラウザベースUI
  • FTC(直接Java統合)およびFRC(NetworkTablesインターフェース)のサポート
  • 露出、センサーゲイン、解像度、フレームレートの設定が可能
  • 10個のホットスワップ可能なビジョンパイプラインを設定:
    • OpenCV 4.10、numpyなどを使用したカスタムPythonパイプライン
    • 2D、3D AprilTagトラッキングとロボットローカライゼーション
      • MegaTag1によるフル3Dローカライゼーション(ロボットGPS)
      • MegaTag2による外部IMUフュージョンを使用した高精度フル3Dローカライゼーション(ロボットGPS)
      • 20fps @ 1280x960(2xダウンスケール)、50fps @ 640x480(2xダウンスケール)
      • Webインターフェースでのフル3Dビジュアライザー
    • 90FPS カラーブロブパイプライン
    • ニューラルオブジェクト検出パイプライン(CPU推論のみ)
    • ニューラル画像分類パイプライン(CPU推論のみ)
    • バーコードトラッキングパイプライン
  • 内蔵Charucoイントリンシクスキャリブレーションインターフェース
  • 内蔵低遅延MJPEGストリーミング

1. Limelight 3Aの取り付け

ネジ穴マウント(推奨)

  • 少なくとも2本のM3またはM4ネジを使用して、ネジ穴を使ってLL3AをRevまたはGoBildaチャンネルに取り付けます
  • VHBテープやタイラップを使用してLimelightを固定することもできます

貫通穴マウント

  • 1 1/4" #10-32または#10-24ボルトとナイロックナットを使用
  • または、28mm M4ボルトとナイロックナットを使用
Limelight 3A 図面

2. Limelight 3Aの配線

ロボットでLimelightを使用する準備ができたら:

FTCの場合

  • USB-CからUSB-Aケーブルを使用して、Limelight 3AをControl HubのUSB 3.0ポートに接続します
  • USB 3.0ポート(青いポート)に接続してControl Hubに接続します

FRCの場合

  • Limelight 3AをroboRIOのUSBポートに接続します
  • USB-CからUSB-Aケーブルを使用します

Limelight 3AはGoogle Coralをサポートしていません。ニューラルネットワークランタイムエンジンを「CPU」に設定することで、ニューラル検出および分類パイプラインを使用できます。

3. Webインターフェースへのアクセス

Limelight 3AをUSB経由でコンピューターに接続した後:

  1. 緑のステータスライトがアクティブになるまで待ちます(約15-20秒)
  2. 以下のいずれかの方法でWebインターフェースにアクセスします:
    • 方法1: Limelight Hardware Managerアプリケーションを開き、Limelightをスキャンし、Limelight 3Aが表示されたらダブルクリックします
    • 方法2: Webブラウザを開き、http://limelight.local:5801にアクセスします

接続すると、以下にアクセスできます:

  • 設定タブ - チーム番号、ホスト名、その他のシステム設定を構成
  • ビジョンパイプラインタブ - ビジョン処理パイプラインの設定と調整
  • カメラ&クロスヘアタブ - カメラ設定とクロスヘアパラメータの調整
  • 3Dビジュアライゼーションタブ - リアルタイムのAprilTag検出とローカライゼーションを表示

すべての設定はこのWebインターフェースを通じて行います。変更はLimelightに自動的に保存されます。

4. LimelightOSの更新

備考

Limelightはプリインストールされたイメージで出荷されます。今のところこのステップはスキップできる可能性があります。

更新手順(Windows)
警告

LimelightOSを更新する前にパイプラインを保存してください。更新中に削除されます。

  • ダウンロードページから最新のUSBドライバー、Limelight OSイメージ、Balena Flashツールをダウンロードします
  • ドライバーをインストールした後、マシンを再起動します
  • Limelightの青い設定ボタンを押し続けます
  • 押し続けながら、ラップトップからLimelightにUSB→USB-Cケーブルを接続します(Limelightは自動的に電源が入ります)
  • LLをラップトップに接続したら、青い設定ボタンを離すことができます
  • Limelightはフラッシュモードになり、LEDは点滅しません
  • 「Balena Etcher」を管理者として実行します
  • マシンがカメラを認識するまで最大20秒かかる場合があります
  • ダウンロードフォルダ内の最新の.zipイメージを選択します
  • 「Drives」メニューで「Compute Module」デバイスを選択します
  • 「Flash」をクリックします
  • フラッシュが完了したら、LimelightからUSBケーブルを取り外します
更新手順(上級者向け)(macOS & Linux)
警告

LimelightOSを更新する前にパイプラインを保存してください。更新中に削除されます。

注記

macOSとLinuxでの更新プロセスを大幅に簡素化する作業を進めています

  • ダウンロードページからLimelight OSイメージとBalena Flashツールをダウンロードします
  • USB Bootドライバーを自分でビルドします:
brew install libusb
brew install pkg-config
git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot
make
cd mass-storage-gadget64
sudo ../rpiboot -d .
# rpibootが実行されている限り、カメラはmacOSとLinuxで正しく認識されます
# フラッシュするたびにrpibootを実行する必要があります。
  • Limelightの青い設定ボタンを押し続けます
  • 押し続けながら、ラップトップからLimelightにUSB→USB-Cケーブルを接続します(Limelightは自動的に電源が入ります)
  • LLをラップトップに接続したら、青い設定ボタンを離すことができます
  • Limelightはフラッシュモードになり、LEDは点滅しません
  • 「Balena Etcher」を実行します
  • マシンがカメラを認識するまで最大20秒かかる場合があります
  • ダウンロードフォルダ内の最新の.zipイメージを選択します
  • 「Drives」メニューで「Compute Module」デバイスを選択します
  • 「Flash」をクリックします
  • フラッシュが完了したら、LimelightからUSBケーブルを取り外します

5. セットアッププロセス

FTCの場合

  1. USBケーブルでLimelightをラップトップに接続します
  2. セクション3で説明したようにWebインターフェースにアクセスします
  3. 設定タブに移動してチーム番号を設定し、「Restart Vision Client」をクリックします
  4. 必要に応じてパイプラインを設定します(AprilTag、ニューラルネットワーク、カスタムPythonなど)
  5. 競技の準備ができたら、Limelight 3AをControl HubのUSB 3.0ポートに接続します
  6. FTC DriverStationアプリで「Configure Robot」をクリックします
  7. アクティブな設定がない場合は、新しい設定を作成する必要があるかもしれません
  8. 「scan」ボタンをクリックします
  9. 「Ethernet Device」が表示されるはずです
  10. このデバイスの名前を「limelight」に編集して分かりやすくできます
  11. これでハードウェアマップを使用してコード内でLimelight3Aオブジェクトを初期化できます

FRCの場合

  1. Limelight 3Aをラップトップに接続し、ステータスライトがアクティブになるまで待ちます
  2. セクション3で説明したようにWebインターフェースにアクセスします
  3. 設定タブでチーム番号を設定し、「Restart Vision Client」をクリックします
  1. 必要に応じてパイプラインを設定します
  2. 準備ができたら、Limelight 3AをroboRIOのUSBポートに接続します
  3. お好みのダッシュボードを開いて、3AがroboRIOのNetworkTablesにデータを送信していることを確認します
  4. ロボットのネットワークに接続中にライブパイプライン編集を有効にするためにポートフォワーディングを追加します:
// (robotIP):5801 はLimelight3A(id 0)のWebインターフェースストリームを指すようになります:
// (robotIP):5800 はLimelight3A(id 0)のビデオストリームを指すようになります:
PortForwarder.getInstance().add(5801, "172.29.0.1", 5801);
PortForwarder.getInstance().add(5802, "172.29.0.1", 5802);
PortForwarder.getInstance().add(5803, "172.29.0.1", 5803);
PortForwarder.getInstance().add(5804, "172.29.0.1", 5804);
PortForwarder.getInstance().add(5805, "172.29.0.1", 5805);
PortForwarder.getInstance().add(5806, "172.29.0.1", 5806);
PortForwarder.getInstance().add(5807, "172.29.0.1", 5807);
PortForwarder.getInstance().add(5808, "172.29.0.1", 5808);
PortForwarder.getInstance().add(5809, "172.29.0.1", 5809);

// (robotIP):5811 はLimelight3A(id 1)のWebインターフェースストリームを指すようになります:
// (robotIP):5810 はLimelight3A(id 1)のビデオストリームを指すようになります:
PortForwarder.getInstance().add(5811, "172.29.1.1", 5801);
PortForwarder.getInstance().add(5812, "172.29.1.1", 5802);
PortForwarder.getInstance().add(5813, "172.29.1.1", 5803);
PortForwarder.getInstance().add(5814, "172.29.1.1", 5804);
PortForwarder.getInstance().add(5815, "172.29.1.1", 5805);
PortForwarder.getInstance().add(5816, "172.29.1.1", 5806);
PortForwarder.getInstance().add(5817, "172.29.1.1", 5807);
PortForwarder.getInstance().add(5818, "172.29.1.1", 5808);
PortForwarder.getInstance().add(5819, "172.29.1.1", 5809);

6. 利用可能なパイプラインタイプ

Limelight 3Aは他のLimelightモデルと同じビジョン処理機能を提供します:

  • AprilTagトラッキングとロボットローカライゼーション
  • カラーブロブトラッキング
  • ニューラルネットワークオブジェクト検出(CPUのみ)
  • ニューラルネットワーク分類
  • バーコードトラッキング
  • カスタムPythonパイプライン

各3AにはFTC用のInto The Deepフィールドマップが内蔵されています。

7. FTCプログラミング

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

ほとんどのアプリケーションは10行未満のコードで済みます:

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();

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());
}
}
}
}
}

最大の3Dローカライゼーション精度を得るには、updateRobotOrientation()を呼び出し、getBotPose_MT2()を使用します:

while (opModeIsActive()) {
YawPitchRollAngles orientation = imu.getRobotYawPitchRollAngles();
limelight.updateRobotOrientation(orientation.getYaw(AngleUnit.DEGREES));
LLResult result = limelight.getLatestResult();
if (result != null) {
if (result.isValid()) {
Pose3D botpose = result.getBotpose_MT2();
// botposeデータを使用
}
}
}

詳細については、FTCプログラミングページを参照してください

8. トラブルシューティング

ステータスライトインジケーター

  • 緑のライト: ゆっくり点滅(ターゲットなし)、速く点滅(ターゲット検出)

FAQ

  • Limelightがとても熱く感じるのはなぜですか? Limelightができるだけ涼しく動作するためには、必然的に触れると可能な限り熱く/安全な範囲で熱く感じる必要があります。その筐体は高伝導性のヒートシンクであり、CPUを適度に涼しい温度に保つのに役立ちます。

  • 画像がとてもノイズが多いのはなぜですか? 遅延を最小限に抑えるため、通常の民生用カメラに存在するいくつかのフィルターがスキップされています。ストリームもビットレートを最小限に抑えるために圧縮されています。2024.10.1では、人間の目により自然で鮮やかに見えるようにデフォルトのカラーバランス値を変更しました。

  • Control Hub上のOpenCVと比べてLimelightは何を提供しますか? すぐに使える、コード不要の、ロボットIMUセンサーフュージョンを備えたマルチタグローカライゼーションアルゴリズム、ニューラルネットワークなど。