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):メートル単位、回転(Roll,Pitch,Yaw):度単位、総遅延時間(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_wpiblue | doubleArray | フィールド空間でのロボットの変換(青ドライバーステーションWPILIB原点)。並進(X,Y,Z):メートル単位、回転(Roll,Pitch,Yaw):度単位、総遅延時間(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_wpired | doubleArray | フィールド空間でのロボットの変換(赤ドライバーステーションWPILIB原点)。並進(X,Y,Z):メートル単位、回転(Roll,Pitch,Yaw):度単位、総遅延時間(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_orb | doubleArray | フィールド空間でのロボットの変換(Megatag2)。並進(X,Y,Z):メートル単位、回転(Roll,Pitch,Yaw):度単位、総遅延時間(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_orb_wpiblue | doubleArray | フィールド空間でのロボットの変換(Megatag2)(青ドライバーステーショ ンWPILIB原点)。並進(X,Y,Z):メートル単位、回転(Roll,Pitch,Yaw):度単位、総遅延時間(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
botpose_orb_wpired | doubleArray | フィールド空間でのロボットの変換(Megatag2)(赤ドライバーステーションWPILIB原点)。並進(X,Y,Z):メートル単位、回転(Roll,Pitch,Yaw):度単位、総遅延時間(cl+tl)、タグ数、タグスパン、カメラからの平均タグ距離、平均タグ面積(画像の割合) |
camerapose_targetspace | doubleArray | 視界内の主要AprilTagの座標系におけるカメラの3D変換(配列(6))[tx, ty, tz, pitch, yaw, roll](メートル、度) |
targetpose_cameraspace | doubleArray | カメラの座標系における視界内の主要AprilTagの3D変換(配列(6))[tx, ty, tz, pitch, yaw, roll](メートル、度) |
targetpose_robotspace | doubleArray | ロボットの座標系における視界内の主要AprilTagの3D変換(配列(6))[tx, ty, tz, pitch, yaw, roll](メートル、度) |
botpose_targetspace | doubleArray | 視界内の主要AprilTagの座標系におけるロボットの3D変換(配列(6))[tx, ty, tz, pitch, yaw, roll](メートル、度) |
camerapose_robotspace | doubleArray | ロボットの座標系におけるカメラの3D変換(配列(6)) |
tid | int | 視界内の主要AprilTagのID |
stddevs | doubleArray | MegaTag標準偏差 [MT1x, MT1y, MT1z, MT1roll, MT1pitch, MT1Yaw, MT2x, MT2y, MT2z, MT2roll, MT2pitch, MT2yaw] |
camerapose_robotspace_set | doubleArray | ロボットの座標系におけるカメラのポーズを設定する |
priorityid | int | tx/tyターゲティング用の必要なIDを設定する。他のターゲットを無視する。位置推定には影響しない |
robot_orientation_set | doubleArray | ロボットの方向と角速度を度と度/秒で設定する[yaw,yawrate,pitch,pitchrate,roll,rollrate] |
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 | 標準 - WebカメラがLimelightに接続されている場合、並列ストリーム表示 |
1 | PiPメイン - セカンダリカメラストリームがプライマリカメラストリームの右下角に配置 |
2 | PiPセカンダリ - プライマリカメラストリームがセカンダリカメラストリームの右下角に配置 |
crop | (配列) 切り取り範囲を設定。パイプラインはWebインター フェースのデフォルトの切り取り範囲を使用する必要があります。配列は必ず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スクリプトによって送信される数値配列。これはロボットコード内で アクセス可能です。 |
llrobot | ロボットによって送信される数値配列。これは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.....] |
生検出:
すべての有効な(フィルタリングされていない)ニューラル検出結果を取得
rawdetections | [id, txnc, tync, ta, corner0x, corner0y, corner1x, corner1y, corner2x, corner2y, corner3x, corner3y, id2.....] |
生バーコード:
すべての有効な(フィルタリングされていない)バーコード結果を取得
rawbarcodes | バーコードデータの文字列配列 |