VTX電波を利用した高機能なFPVレース計測システムであるRotorHazardのプラグインを作るべく調査中です。結局のところ公式ドキュメントを読んでも今ひとつ分かりにくいので、実際に動きそうなプラグインを読んだりRotorHazardのソースを読むのが手っ取り早いです。
タイトルには作り方などと書きましたが、とりあえず最低限の動作可能なコードを示しておくに留めます。何かしらお作法的なことに抜けがあるかもしれませんので予めご了承ください。またプラグインを公開する際にはマニュフェストも書いた方が良いようですが、それもまだ未調査です。
[ 言語と実行環境 ]
プラグインはPython3で記述します。RotorHzard自体がPythonで記述されておりPythonの仮想環境で実行されています。もしpip3で新たなモジュールの導入が必要な場合は、その仮想環境に入ってpip3の実行を行う必要があります。仮想環境に入るにはRotorHazardが導入されているユーザーのホームでsource ./.venv/bin/activate
を実行します。ターミナルでsystemctl cat rotorhazard
を実行すればRotorHazardがどこに導入されていてどの仮想環境が使われているかは確認できます。
[ プラグインの作成 ]
/home/pi/RotorHazard/src/server/plugins
以下にディレクトリーを作ります。私はテスト用に
mkdir rh_myTestLog
などとしました。
そしてそのディレクトリー下に
__init__.py
というpythonコードを作成します。コードの中身は以下の通りです。
# my first plugin test
import logging
logger = logging.getLogger(__name__)
from eventmanager import Evt
def myTestLog(args):
node = args['node_index']
logger.info("My test plugin - LAP (" + str(node) + ")")
def initialize(rhapi):
rhapi.events.on(Evt.RACE_LAP_RECORDED, myTestLog)
initialize(rhapi)が必須の関数で、ここでは主にトリガーとなるイベントを登録します。この例ではドローンが計測点を通過してラップタイムが記録されたタイミングでmyTestLog(args)という関数が呼ばれるように定義しています。トリガーとなるイベントはeventmanager.pyで定義されていますので、このコードを参照して名前から必要なイベントを探ってみてください。
myTestLog(args)の引数argsにはイベントに対応したデータが渡されます。この例ではargs[‘node_index’]にてラップタイムが記録されたノードの番号を取得しています。そしてそれをログに書き込んでいます。
このRACE_LAP_RECORDEDにどんなデータが付いてくるかはソースコードRHRace.pyに記述されていました。
[ テスト ]
プラグインを書き込んだらsudo systemctl restart rotorhazardの実行あるいはシステムを再起動します。
RotorHazard起動したらログを確認します。正常にプラグインが組み込まれれば以下のようなログが記録されます。
2024-07-06 08:21:47.296: __main__ [INFO] Loaded plugin 'rh_myTestLog'
no comment untill now