Modbus API
Limelight OSは(ipaddress):502でModbus TCPサーバーを実行しています。
-
整数: 整数は符号付きで、2の補数を使用してエンコードされます。この方式は広く認識されており、正しい符号の解釈を保証します。
-
浮動小数点数: 浮動小数点数はIEEE 754規格を使用してエンコードされます。Modbusプロトコルの16ビットレジスタ制限に準拠するため、浮動小数点数は2つの部分に分割されます:
- 上位16ビットは2番目のレジスタに、下位16ビットは1番目のレジスタに格納されます。
- リトルエンディアン形式によりModbus仕様との互換性を確保しています。
USBおよびイーサネット接続のLimelightはModbusToolでテストできます。
Modbusは部品検査や産業オートメーションのユースケースをサポートします。Modbusを使い始めるには、以下の手順を実行してください:
-
イーサネットまたはUSB-C経由でLimelightに接続し、パイプラインを設定します。
- すべてのパイプラインがModbus経由で結果を出力しますが、Python Snapscriptパイプラインはカスタム入出力データをサポートしているため、産業用途に非常に適しています。
-
Limelightに静的IPアドレスを割り当てます。
-
LimelightをModbusネットワークに接続します。
Modbusレジスタ仕様
入力 / 読み取り専用レジスタ
| レジスタ | キー | 型 | 説明 |
|---|---|---|---|
| 0 | hb | int | ハートビート値。フレームごとに1増加します |
| 1 | pipelineIndex | int | 現在アクティブなパイプラインインデックス (0 .. 9) |
| 2 | validTarget | int | 有効なターゲットが存在する場合は1、それ以外は0 |
| 3 | resultsCount | int | 総結果数。すべてのフィデューシャル検出、ニューラル検出などを含みます |
| 4 | ID | int | ID / チーム番号 |
| 5 | modbusMode | int | Modbusサーバー出力モード |
| 6 | cpuTemp | int | CPU温度(摂氏) |
| 7 | cpuUsage | int | CPU使用率(パーセント) |
| 8 | ramUsage | int | RAM使用率(パーセント) |
| 9 | currentFPS | int | 現在のフレームレート(FPS) |
| 10 | captureLatency | int | キャプチャレイテンシ(ミリ秒) |
| 11 | targetLatency | int | 処理レイテンシ(ミリ秒) |
| 12-15 | reserved | int |
出力モードが0に設定されている場合:
| レジスタ | キー | 型 | 説明 |
|---|---|---|---|
| 16,17 | tx | float32 | ターゲットへの水平角度オフセット(度) |
| 18,19 | ty | float32 | ターゲットへの垂直角度オフセット(度) |
| 20,21 | txnc | float32 | ターゲットへの水平角度オフセット(主点ピクセル基準、度) |
| 22,23 | tync | float32 | ターゲットへの垂直角度オフセット(主点ピクセル基準、度) |
| 24,25 | ta | float32 (0-1) | 画像サイズに対するターゲット面積の割合 |
| 26 | fiducialID | int | 現在のAprilTag ID |
| 27 | classifierClass | int | 現在の分類パイプライン出力のクラスインデックス。分類結果がない場合は-1 |
| 28 | detectorClass | int | 現在の検出パイプライン出力のクラスインデックス。検出結果がない場合は-1 |
| 29 | reserved | int | |
| 30,31 | python[0] | float32 | カスタムPython出力配列 [0] |
| 32,33 | python[1] | float32 | カスタムPython出力配列 [1] |
| 34,35 | python[2] | float32 | カスタムPython出力配列 [2] |
| 36,37 | python[3] | float32 | カスタムPython出力配列 [3] |
| 38,39 | python[4] | float32 | カスタムPython出力配列 [4] |
| 40,41 | python[5] | float32 | カスタムPython出力配列 [5] |
| 42,43 | python[6] | float32 | カスタムPython出力配列 [6] |
| 44,45 | python[7] | float32 | カスタムPython出力配列 [7] |
ホールディング / 書き込み専用レジスタ
| レジスタ | キー | 型 | 説明 |
|---|---|---|---|
| 0 | unlocked | int | パイプラインのロックを解除します。1に設定するとパイプラインの切り替えとカスタム入力データが有効になります |
| 1 | pipeIndex | int | "unlocked"が1に設定されている場合、パイプラインインデックスを設定します |
| 2 | outputMode | int | 出力モードを設定します。0 - 標準、1 - rawtargets(開発中) |
| 3 | reserved | int | |
| 4 | reserved | int | |
| 5 | reserved | int | |
| 6 | reserved | int | |
| 7 | reserved | int | |
| 8 | pythonInput[0] | int | カスタムPython入力配列 [0] |
| 9 | pythonInput[1] | int | カスタムPython入力配列 [1] |
| 10 | pythonInput[2] | int | カスタムPython入力配列 [2] |
| 11 | pythonInput[3] | int | カスタムPython入力配列 [3] |
| 12 | pythonInput[4] | int | カスタムPython入力配列 [4] |
| 13 | pythonInput[5] | int | カスタムPython入力配列 [5] |
| 14 | pythonInput[6] | int | カスタムPython入力配列 [6] |
| 15 | pythonInput[7] | int | カスタムPython入力配列 [7] |
| 16,17 | pythonInput[8] | float32 | カスタムPython入力配列 [8] |
| 18,19 | pythonInput[9] | float32 | カスタムPython入力配列 [9] |
| 20,21 | pythonInput[10] | float32 | カスタムPython入力配列 [10] |
| 22,23 | pythonInput[11] | float32 | カスタムPython入力配列 [11] |
| 24,25 | pythonInput[12] | float32 | カスタムPython入力配列 [12] |
| 26,27 | pythonInput[13] | float32 | カスタムPython入力配列 [13] |
| 28,29 | pythonInput[14] | float32 | カスタムPython入力配列 [14] |
| 30,31 | pythonInput[15] | float32 | カスタムPython入力配列 [15] |