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

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センサーフュージョンを備えたマルチタグローカライゼーションアルゴリズム、ニューラルネットワークなど。