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ボルトとナイロックナットを使用
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経由でコンピューターに接続した後:
- 緑のステータスライトがアクティブになるまで待ちます(約15-20秒)
- 以下のいずれかの方法で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の場合
- USBケーブルでLimelightをラップトップに接続します
- セクション3で説明したようにWebインターフェースにアクセスします
- 設定タブに移動して チーム番号を設定し、「Restart Vision Client」をクリックします
- 必要に応じてパイプラインを設定します(AprilTag、ニューラルネットワーク、カスタムPythonなど)
- 競技の準備ができたら、Limelight 3AをControl HubのUSB 3.0ポートに接続します
- FTC DriverStationアプリで「Configure Robot」をクリックします
- アクティブな設定がない場合は、新しい設定を作成する必要があるかもしれません
- 「scan」ボタンをクリックします
- 「Ethernet Device」が表示されるはずです
- このデバイスの名前を「limelight」に編集して分かりやすくできます
- これでハードウェアマップを使用してコード内でLimelight3Aオブジェクトを初期化できます
FRCの場合
- Limelight 3Aをラップトップに接続し、ステータスライトがアクティブになるまで待ちます
- セクション3で説明したようにWebインターフェースにアクセスします
- 設定タブでチーム番号を設定し、「Restart Vision Client」をクリックします
- 必要に応じてパイプラインを設定します
- 準備ができたら、Limelight 3AをroboRIOのUSBポートに接続します
- お好みのダッシュボードを開いて 、3AがroboRIOのNetworkTablesにデータを送信していることを確認します
- ロボットのネットワークに接続中にライブパイプライン編集を有効にするためにポートフォワーディングを追加します:
- Java
- CPP
// (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);
// (robotIP):5801 はLimelight3A(id 0)のWebインターフェースストリームを指すようになります:
// (robotIP):5800 はLimelight3A(id 0)のビデオストリームを指すようになります:
wpi::PortForwarder::GetInstance().Add(5801,"172.29.0.1",5801);
wpi::PortForwarder::GetInstance().Add(5802,"172.29.0.1",5802);
wpi::PortForwarder::GetInstance().Add(5803,"172.29.0.1",5803);
wpi::PortForwarder::GetInstance().Add(5804,"172.29.0.1",5804);
wpi::PortForwarder::GetInstance().Add(5805,"172.29.0.1",5805);
wpi::PortForwarder::GetInstance().Add(5806,"172.29.0.1",5806);
wpi::PortForwarder::GetInstance().Add(5807,"172.29.0.1",5807);
wpi::PortForwarder::GetInstance().Add(5808,"172.29.0.1",5808);
wpi::PortForwarder::GetInstance().Add(5809,"172.29.0.1",5809);
// (robotIP):5811 はLimelight3A(id 1)のWebインターフェースストリームを指すようになります:
// (robotIP):5810 はLimelight3A(id 1)のビデオストリームを指すようになります:
wpi::PortForwarder::GetInstance().Add(5811,"172.29.1.1",5801);
wpi::PortForwarder::GetInstance().Add(5812,"172.29.1.1",5802);
wpi::PortForwarder::GetInstance().Add(5813,"172.29.1.1",5803);
wpi::PortForwarder::GetInstance().Add(5814,"172.29.1.1",5804);
wpi::PortForwarder::GetInstance().Add(5815,"172.29.1.1",5805);
wpi::PortForwarder::GetInstance().Add(5816,"172.29.1.1",5806);
wpi::PortForwarder::GetInstance().Add(5817,"172.29.1.1",5807);
wpi::PortForwarder::GetInstance().Add(5818,"172.29.1.1",5808);
wpi::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センサーフュージョンを備えたマルチタグローカライゼーションアルゴリズム、ニューラルネットワークなど。