0.はじめに
今回は、TinyViewPlusとRotorhazardの連携をするところまで説明しますが、上手く出来れば、FPVTracksideとの連携は、単にRotorhazardと接続するだけなので、すんなりいくと思います。
実運用でどうかは未知数ですが、お試しいただければ幸いです。
1. TinyViewPlus
TinyViewPlusは、コース上にarUcoと呼ばれるマーカーを設置し、それを認識することでラップタイムを計測するソフトウェアです。MITライセンスで公開されており、WindowsおよびMacで動作するため、日本国内の室内Whoopレースでは広く利用されています。
単発のレースを行う分には申し分ない機能を備えていますが、大規模なイベントでは機能に不足を感じることがあります。そのため、TinyViewPlusにはOSC(OpenSoundControl)を介して、パイロット名やラップタイムなどの情報を他のレース管理ソフトウェアと送受信する機能を持っています。
大規模なレースを運営する場合、主催者は、独自のレースフォーマットに対応したレース管理ソフトを用意する場合が多いようです。
2. FPVTrackside
FPVTracksideは、タイミングシステムというより、レース管理ソフトといった感じのものです。ImmersionRC LAP RF、RotorHazard、Chorusなどのタイミングシステムと連携して動作します。(TinyViewPlusとは直接連携できません。これを連携させるのが今回の目的です。)FPVTracksideの特徴は以下の通りです。
- 幅広いレースフォーマットに対応(ユーザーからの多様な機能要望に応え続けた結果、さまざまなレース形式に対応)
- パイロット登録、予選・決勝などの各ヒート管理、結果管理が可能(TinyViewPlusは単体レースの管理のみで、大規模イベントの場合はExcelなどで管理が必要)
- ビデオ録画に対応し、レース中の各パイロットのVTX映像の表示だけでなく、レース終了後に再生・検証が可能(FPVTracksideの最も魅力的な機能)
- レース後の録画再生時に、画面を確認しながらラップタイムの修正が可能
- オリジナルのテーマを設定し、UIのカスタマイズが可能
- WebSocketを使用してOBSと連携可能
ただし、TinyViewPlusを利用している場合、以下の点で戸惑うことがあります。
- キーボードの配列がUS仕様のため、一部記号の入力時に異なる文字が入力される
- 日本語入力が直接FPVTracksideではできないため、テキストエディタで入力後にコピー&ペーストする必要がある
- 音声出力のカスタマイズが可能だが、一部修正しきれない箇所がある
- レース開始時の「3 2 1 START!」の設定方法が良くわからない
3. 本題
FPVTracksideでレース管理を行いたい場合、タイミングシステムとしてIRC LAP RFかRotorHazardを使用することになります。これらはVTXからの電波を受信し、RSSI値を元にゲート通過を判定するシステムです。
しかし、使い慣れたarUcoマーカーを用いたラップ計測をしつつFPVTracksideを活用したい。
そこで考えたのが、RotorHazardのRX5808を取り外し、本来RX5808がRSSIを出力するところに、擬似的なRSSI信号を出力する方法です。
この方法の利点:
- 擬似的なRSSI信号(0〜1.1V程度の電圧)を用意するだけなので、FPVTracksideやRotorHazardのバージョンアップや仕様変更の影響を受けない。
ただし、ソフトウェア・ハードウェア的に無駄が多いという欠点もあります。
4. 完成したらこんな感じ
この方法を実装して、模擬的に1機分の映像を3台の受信機で同時に受信し、レースをしている感じにした動画がこちらです。
本来なら全く同じタイムになるはずですが、実際には異なります。同じ映像を受信していてもちらつくタイミングが異なったり、明るさに違いがあることが、ラップタイムのズレにつながっていると考えられます。
5. この方法を実現するのに必要なもの
-
Windows PC 1台目(TinyViewPlusとRotorHazardを動作させる)
-
Windows PC 2台目(FPVTracksideを動作させる)
-
VTX受信機(UVC対応、3機でレースする場合は3台必要。例:EachineROTG、SKYDROID、FUAV など)
-
HDMI → UVCコンバータ(1台目PCの画面出力を2台目PCに取り込み、FPVTracksideのビデオソースとして利用するために使用)
Amazonリンク -
基板
- 回路図
-
JLCPCB発注用データ
現在発注中のため、動作確認後に更新予定です。
必要な部品:
- 抵抗 2KΩ(24本)※2.2KΩでも代用可
- 抵抗 1KΩ(17本)
- 抵抗 10KΩ(7本)
- Arduino Nano(ATmega328P搭載の無印Nano推奨)
ファームウェア - STM32C8T6搭載Bluepill + STLINKV2(C6T6はメモリ不足のため不可)
ファームウェア
STM32CubeProgrammer - ピンヘッダ、ピンソケット(Arduino NanoやBluepillの取り外しが可能な構造推奨)
- USBシリアルコンバータ
Adafruit CP2102N Friendがファーストチョイスですが、Pololu製、SwitchScienceでもよいうかもしれません。 - 2N7000(NCH FET)
6. ソフトウェアのインストール(TinyViewPlus As Sensors 以下TVPAS)
- こちらよりTinyViewPlusAsSensors.zipをダウンロードし、解凍
-
bin
フォルダ内のTinyViewPlusAsSensors.exe
を実行 - 実行出来なかった場合、Microsoft Visual C++ 再頒布可能パッケージをインストール後、実行
- Arduino NanoのCOMポートを調べ、
data
フォルダ内のsettings.xml
を開き、設定を更新
6. ソフトウェアのインストール(Rotorhazard)
https://github.com/rickgode/Windows-RotorHazard-Install
ここを参考にTVPASをインストールした1台目PCにRotorhazardをインストールします。
config.jsonを編集して、CP2102Nのcomポートを指定することを忘れずに。
起動logを確認し、赤い線の所、設定したcomポートと接続されているか。Nodeが4つ認識されているかを確認してください。
最後に、デスクトップにrotorhazard起動用のショートカットをデスクトップあたりに作っておきましょう。
私の場合、C:\User Program\RotorHazard-4.2.1\以下にrotorhazardをインストールしているので、リンク先は以下の通りになります。
C:\Windows\System32\cmd.exe /K "cd C:\User Program\RotorHazard-4.2.1\ && python -m venv --system-site-packages .venv && .venv\Scripts\activate.bat && cd src\server
7. 動作確認
TVPASとRotorhazardを起動した後、webブラウザで http://localhost:5000 を開きます。
TVPASの4分割画面と、RotorhazardのNodeは、このように対応しています。
それを参考にRotorhazardのFrequencySetupを実行してください。
Sensor Tuningの画面を開いて、Arucoを認識させて反応があれば、導入は成功です。
8.マーカーの認識状況と、RSSIの値
マーカーを認識した後、次のフレームでマーカーが消えると、TVPASは、Rotorhazardに、ゲート通過の信号を送ります。通過信号は、マーカーの認識状況によって違います。
有効マーカー(Valid Marker):
マーカーが映像の中心部を向いている場合、有効マーカーとして認識されます。この場合、機体はゲートの輪の中心を飛行していると推定されます。
無効マーカー(Inalid Marker):
マーカーが映像の中心部を向いていない場合、無効マーカーとして認識されます。この場合、機体はゲートの輪の外側を飛行していると推定されます。
マーカー検出状況によるRSSIの違い:
2.2個以上の有効マーカーを検出したが、無効マーカーも検出している。
0.2秒間 rssi =110のパルスを出します。
3.有効マーカーを検出せず、無効マーカーだけ検出した。
0.2秒間 rssi=70のパルスを出します。
以上を踏まえ、各ノードのEnterAt ExitAtを設定してください