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

Modbus API

Limelight OSは(ipaddress):502でModbus TCPサーバーを実行しています。

  • 整数: 整数は符号付きで、2の補数を使用してエンコードされます。この方式は広く認識されており、正しい符号の解釈を保証します。

  • 浮動小数点数: 浮動小数点数はIEEE 754規格を使用してエンコードされます。Modbusプロトコルの16ビットレジスタ制限に準拠するため、浮動小数点数は2つの部分に分割されます:

    • 上位16ビットは2番目のレジスタに、下位16ビットは1番目のレジスタに格納されます。
    • リトルエンディアン形式によりModbus仕様との互換性を確保しています。

USBおよびイーサネット接続のLimelightはModbusToolでテストできます。

Modbusは部品検査や産業オートメーションのユースケースをサポートします。Modbusを使い始めるには、以下の手順を実行してください:

  1. イーサネットまたはUSB-C経由でLimelightに接続し、パイプラインを設定します。

    • すべてのパイプラインがModbus経由で結果を出力しますが、Python Snapscriptパイプラインはカスタム入出力データをサポートしているため、産業用途に非常に適しています。
  2. Limelightに静的IPアドレスを割り当てます。

  3. LimelightをModbusネットワークに接続します。

Modbusレジスタ仕様

入力 / 読み取り専用レジスタ

レジスタキー説明
0hbintハートビート値。フレームごとに1増加します
1pipelineIndexint現在アクティブなパイプラインインデックス (0 .. 9)
2validTargetint有効なターゲットが存在する場合は1、それ以外は0
3resultsCountint総結果数。すべてのフィデューシャル検出、ニューラル検出などを含みます
4IDintID / チーム番号
5modbusModeintModbusサーバー出力モード
6cpuTempintCPU温度(摂氏)
7cpuUsageintCPU使用率(パーセント)
8ramUsageintRAM使用率(パーセント)
9currentFPSint現在のフレームレート(FPS)
10captureLatencyintキャプチャレイテンシ(ミリ秒)
11targetLatencyint処理レイテンシ(ミリ秒)
12-15reservedint

出力モードが0に設定されている場合:

レジスタキー説明
16,17txfloat32ターゲットへの水平角度オフセット(度)
18,19tyfloat32ターゲットへの垂直角度オフセット(度)
20,21txncfloat32ターゲットへの水平角度オフセット(主点ピクセル基準、度)
22,23tyncfloat32ターゲットへの垂直角度オフセット(主点ピクセル基準、度)
24,25tafloat32 (0-1)画像サイズに対するターゲット面積の割合
26fiducialIDint現在のAprilTag ID
27classifierClassint現在の分類パイプライン出力のクラスインデックス。分類結果がない場合は-1
28detectorClassint現在の検出パイプライン出力のクラスインデックス。検出結果がない場合は-1
29reservedint
30,31python[0]float32カスタムPython出力配列 [0]
32,33python[1]float32カスタムPython出力配列 [1]
34,35python[2]float32カスタムPython出力配列 [2]
36,37python[3]float32カスタムPython出力配列 [3]
38,39python[4]float32カスタムPython出力配列 [4]
40,41python[5]float32カスタムPython出力配列 [5]
42,43python[6]float32カスタムPython出力配列 [6]
44,45python[7]float32カスタムPython出力配列 [7]

ホールディング / 書き込み専用レジスタ

レジスタキー説明
0unlockedintパイプラインのロックを解除します。1に設定するとパイプラインの切り替えとカスタム入力データが有効になります
1pipeIndexint"unlocked"が1に設定されている場合、パイプラインインデックスを設定します
2outputModeint出力モードを設定します。0 - 標準、1 - rawtargets(開発中)
3reservedint
4reservedint
5reservedint
6reservedint
7reservedint
8pythonInput[0]intカスタムPython入力配列 [0]
9pythonInput[1]intカスタムPython入力配列 [1]
10pythonInput[2]intカスタムPython入力配列 [2]
11pythonInput[3]intカスタムPython入力配列 [3]
12pythonInput[4]intカスタムPython入力配列 [4]
13pythonInput[5]intカスタムPython入力配列 [5]
14pythonInput[6]intカスタムPython入力配列 [6]
15pythonInput[7]intカスタムPython入力配列 [7]
16,17pythonInput[8]float32カスタムPython入力配列 [8]
18,19pythonInput[9]float32カスタムPython入力配列 [9]
20,21pythonInput[10]float32カスタムPython入力配列 [10]
22,23pythonInput[11]float32カスタムPython入力配列 [11]
24,25pythonInput[12]float32カスタムPython入力配列 [12]
26,27pythonInput[13]float32カスタムPython入力配列 [13]
28,29pythonInput[14]float32カスタムPython入力配列 [14]
30,31pythonInput[15]float32カスタムPython入力配列 [15]