NetworkTables API
Limelight OSはNetworkTables 4クライアントを搭載しています。設定UIで構成されたチーム番号/IDに基づいて、FRCロボットで実行されているNetworkTables 4サーバーに自動接続します。
すべてのデータは、デバイス名と一致するテーブル(例:「limelight」)に公開されます。カメラにホスト名/ニックネームが割り当てられている場合、テーブル名は完全なlimelight名(例:「limelight-top」)と一致します。
LimelightLib WPIJavaとLimelightLib WPICPPは、NetworkTablesを介してLimelightデバイスと対話します。
基本的なターゲティングデータ
以下のコードを使用してください:
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDouble(0);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumber("<variablename>",0.0);
NetworkTables.getTable("limelight").getNumber('<variablename>');
以下のデータを取得するために:
キー | 型 | 説明 |
---|---|---|
tv | int | 有効なターゲットが存在する場合は1。有効なターゲットが存在しない場合は0 |
tx | double | クロスヘアからターゲットまでの水平オフセット(LL1:-27度から27度 / LL2:-29.8度から29.8度) |
ty | double | クロスヘアからターゲットまでの垂直オフセット(LL1:-20.5度から20.5度 / LL2:-24.85度から24.85度) |
txnc | double | プリンシパルピクセルからターゲットまでの水平オフセット(度) |
tync | double | プリンシパルピクセルからターゲットまでの垂直オフセット(度) |
ta | double | ターゲットエリア(画像の0%から100%) |
tl | double | パイプラインのレイテンシー寄与(ms)。総レイテンシーを得るには"cl"に加算する |
cl | double | キャプチャパイプラインのレイテンシー(ms)。センサーの中央行の露光終了からトラッキングパイプラインの開始までの時間 |
t2d | double | マッチしたタイムスタンプの統計値を含む配列:[targetValid, targetCount, targetLatency, captureLatency, tx, ty, txnc, tync, ta, tid, targetClassIndexDetector, targetClassIndexClassifier, targetLongSidePixels, targetShortSidePixels, targetHorizontalExtentPixels, targetVerticalExtentPixels, targetSkewDegrees] |
getpipe | int | カメラの実際のアクティブパイプラインインデックス(0 .. 9) |
getpipetype | string | パイプラインタイプ(例:"pipe_color") |
json | string | ターゲティング結果の完全なJSONダンプ。'output'タブでパイプラインごとに有効にする必要がある |
tclass | string | 主要なニューラル検出器の結果またはニューラル分類器の結果のクラス名 |
tc | doubleArray | クロスヘア領域(3x3ピクセル領域)の下の平均HSV色をNumberArrayとして取得 |
hb | double | ハートビート値。フレームごとに1回増加し、20億でリセット |
hw | doubleArray | ハードウェアメトリクス [fps, CPU温度, RAM使用量, 温度] |
crosshairs | doubleArray | 2Dクロスヘア [cx0, cy0, cx1, cy1] |
tcclass | string | 分類器パイプラインの計算されたクラスの名前 |
tdclass | string | 検出器パイプラインの主要な検出の名前 |
AprilTagと3Dデータ
以下のコードを使用してください:
- Java
- C++
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").getDoubleArray(new double[6]);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->GetNumberArray("<variablename>",std::vector<double>(6));
このデータを取得するには:
キー | 型 | 説明 |
---|---|---|
botpose | doubleArray | フィールド空間でのロボットの変換。平行移動(X,Y,Z)はメートル単位、回転(ロール,ピッチ,ヨー)は度単位、総遅延(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_wpiblue | doubleArray | フィールド空間でのロボットの変換(青ドライバーステーションWPILIB原点)。平行移動(X,Y,Z)はメートル単位、回転(ロール,ピッチ,ヨー)は度単位、総遅延(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_wpired | doubleArray | フィールド空間でのロボットの変換(赤ドライバーステーションWPILIB原点)。平行移動(X,Y,Z)はメートル単位、回転(ロール,ピッチ,ヨー)は度単位、総遅延(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_orb | doubleArray | フィールド空間でのロボットの変換(Megatag2)。平行移動(X,Y,Z)はメートル単位、回転(ロール,ピッチ,ヨー)は度単位、総遅延(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_orb_wpiblue | doubleArray | フィールド空間でのロボットの変換(Megatag2)(青ドライバーステーションWPILIB原点)。平行移動(X,Y,Z)はメートル単位、回転(ロール,ピッチ,ヨー)は度単位、総遅延(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_orb_wpired | doubleArray | フィールド空 間でのロボットの変換(Megatag2)(赤ドライバーステーションWPILIB原点)。平行移動(X,Y,Z)はメートル単位、回転(ロール,ピッチ,ヨー)は度単位、総遅延(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
camerapose_targetspace | doubleArray | 視界内の主要AprilTagの座標系におけるカメラの3D変換(配列(6)) [tx, ty, tz, ピッチ, ヨー, ロール] (メートル, 度) |
targetpose_cameraspace | doubleArray | カメラの座標系における視界内の主要AprilTagの3D変換(配列(6)) [tx, ty, tz, ピッチ, ヨー, ロール] (メートル, 度) |
targetpose_robotspace | doubleArray | ロボットの座標系における視界内の主要AprilTagの3D変換(配列(6)) [tx, ty, tz, ピッチ, ヨー, ロール] (メートル, 度) |
botpose_targetspace | doubleArray | 視界内の主要AprilTagの座標系におけるロボットの3D変換(配列(6)) [tx, ty, tz, ピッチ, ヨー, ロール] (メートル, 度) |
camerapose_robotspace | doubleArray | ロボットの座標系におけるカメラの3D変換(配列(6)) |
tid | int | 視界内の主要AprilTagのID |
camerapose_robotspace_set | doubleArray | ロボットの座標系におけるカメラのポーズを設定します。 |
priorityid | int | tx/tyターゲティングに必要なIDを設定します。他のターゲットを無視します。ローカライゼーションには影響しません。 |
robot_orientation_set | doubleArray | ロボットの向きと角速度を度と度/秒で設定します[ヨー,ヨーレート,ピッチ,ピッチレート,ロール,ロールレート] |
fiducial_id_filters_set | doubleArray | ローカライゼーションに有効なフィデューシャルIDをオーバーライドします(配列) |
fiducial_offset_set | doubleArray | 3D注目点オフセットを設定します[x,y,z] |
カメラコントロール
以下のコードを使用してください:
- Java
- LabView
- C++
- Python
NetworkTableInstance.getDefault().getTable("limelight").getEntry("<variablename>").setNumber(<value>);
nt::NetworkTableInstance::GetDefault().GetTable("limelight")->PutNumber("<variablename>",<value>);
NetworkTables.getTable("limelight").putNumber('<variablename>',<value>)
このデータを設定するには:
ledMode | limelightのLED状態を設定します |
---|---|
[0] | 現在のパイプラインで設定されているLEDモードを使用 |
[1] | 強制的にオフ |
[2] | 強制的に点滅 |
[3] | 強制的にオン |
pipeline | limelightの現在のパイプラインを設定します |
---|---|
0 .. 9 | パイプライン0..9を選択 |
stream | limelightのストリーミングモードを設定します |
---|---|
0 | 標準 - ウェブカメラがLimelightに接続されている場合、サイドバイサイドのストリーム |
1 | PiPメイン - セカンダリカメラストリームがプライマリカメラストリームの右下隅に配置されます |
2 | PiPセカンダリ - プライマリカメラストリームがセカンダリカメラストリームの右下隅に配置されます |
crop | (配列) クロップ矩形を設定します。パイプラインはウェブインターフェースのデフォルトクロップ矩形を使用する必要があります。配列には正確に4つのエントリが必要です。 |
---|---|
[0] | X0 - クロップ矩形のXの最小値または最大値(-1から1) |
[1] | X1 - クロップ矩形のXの最小値または最大値(-1から1) |
[2] | Y0 - クロップ矩形のYの最小値または最大値(-1から1) |
[3] | Y1 - クロップ矩形のYの最小値または最大値(-1から1) |
- Java
- C++
double[] cropValues = new double[4];
cropValues[0] = -1.0;
cropValues[1] = 1.0;
cropValues[2] = -1.0;
cropValues[3] = 1.0;
NetworkTableInstance.getDefault().getTable("limelight").getEntry("crop").setDoubleArray(cropValues);
wip
Python
Pythonスクリプトは、任意の入出力データを可能にします。
llpython | Pythonスクリプトによって送信されるNumberArray。これはロボットコード内でアクセス可能です。 |
llrobot | ロボットによって送信されるNumberArray。これはPython SnapScripts内でアクセス可能です。 |
生デー タ
コーナー:
「Output」タブで「send contours」を有効にすると、コーナー座標がストリーミングされます:
tcornxy | コーナー座標の数値配列 [x0,y0,x1,y1......] |
生ターゲット:
Limelightは、グルーピングモードの影響を受けない3つの生の輪郭をNetworkTablesに投稿します。つまり、パイプラインパラメータでフィルタリングされますが、グループ化されることはありません。XとYは度数ではなく、正規化されたスクリーン空間(-1から1)で返されます。
rawtargets | [txnc,tync,ta,txnc2,tync2,ta2....] |
生フィデューシャル:
すべての有効な(フィルタリングされていない)フィデューシャルを取得します
rawfiducials | [id, txnc, tync, ta, distToCamera, distToRobot, ambiguity, id2.....] |
生検出:
すべての有効な(フィルタリングされていない)ニューラル検出結果を取得します
rawfiducials | [id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....] |
生バーコード:
すべての有効な(フィルタリングされていない)バーコード結果を取得します
rawbarcodes | バーコードデータの文字列配列 |