0. はじめに
TinyViewPlusやその派生品(TVPAS)では、同時飛行する機体の数だけUSB接続の受信機(当時もっとも入手性に優れていたEachineのROTGシリーズなど)を用意する必要があります。
この制約により、特にWindowsのノートPCやミニPCでは、
- USBポートが不足する
- PC周りがUSBケーブルだらけになり、すっきりしない
といった問題が発生しがちです。
一方、海外のFPVレース事情を調べてみると、レースバンドで6機同時飛行する際、複数のVRX映像を1画面にまとめて表示し、それを1つのWEBカメラとしてPCに取り込み、PC上で各機体の映像に分割していることが分かりました。
(ただし、この映像を利用してラップタイムを計測しているわけではありません。)
今回のテーマは、この方法をTinyViewPlus(および派生品のTVPAS)で実現するという話です。
1. テスト用映像データ
HDMIを4つまとめて1画面に表示する機器として、Amazonではこのような製品が販売されています。
信頼性と性能は未知数(というか安すぎてダメな予感)ですが、私はAliExpressで約3,000円のものを購入しました。(まだ届いていません。)
想定スペック
- 1080P 60FPSで出力出来る
-
最低でも720P 60FPSは欲しい
このスペックは、HDMI4入力を1画面に合成して1本のHDMIで出力する機器と、厚生されたHDMIの信号をUVC(USB)に変換する機器の2つが満たしている必要があります。
本当は、BlackmagicのATEM Mini Proが欲しいところですね。
USB(UVC)出力付きで、なんと48,980円!
これにHDZero Event VRXを組み合わせれば……夢が広がります。
とはいえ、現実に戻り、今のところ4画面表示の機器(約3,000円)が手元に届いていないため、動画編集でそれっぽい素材を作成します。
これらの素材をHDMI→USB変換アダプタでTinyViewPlusに入力すれば、テストが可能でしょう。
テスト用動画の種類
3パターンの映像を用意し、それぞれに対応できるかを検証します。
各タイプには、私の独断で名前を付けました。
-
DJIタイプ
-
Hawkeyeタイプ
- Hawkeye Little Pilot Four Eyesのような製品を想定。
- 4分割後、16:9のアスペクト比を4:3に変換する必要あり。
-
HDZeroタイプ
2. 検証動画
これら3つの形式について、TinyViewPlus(および改造版TVPAS)がどのように対応するかを検証しました。
TinyViewPlusの検証動画
FPVTrackside + Rotorhazard + TVPASの検証動画
FPVTracksideの方が見た目が華やかですね。
私自身、TVPASと連携してラップ計測に集中しているため、まだFPVTracksideを十分に活用できていませんが、レース運営に便利な機能がたくさんあるようです。
いつか詳しく紹介できればと思います。
3. 使用方法
TinyViewPlus(改造版)は、こちらからダウンロードできます。
FPVTracksideやRotorhazardと組み合わせて使うTVPASはこちらからダウンロードできます、(バージョン0,0,2)
バイナリはWindows版のみですが、Macユーザー向けに、リポジトリのsrcフォルダ内にソースコードが含まれています。
本家をビルドできる方なら、以下の3つのファイルを上書きしてビルドできるかもしれません。(他に必要な設定ファイル等は、Windows版のリリースからコピーしてください。)
main.cppofApp.cppofApp.h
設定ファイルの編集(1)(fpv.xml)
ダウンロード後、/data/camera/fpv.xmlをテキストエディタ(メモ帳など)で開きます。
<camera>
<name>C8 USB3.0 Video</name>
<camnum>4</camnum>
<description>4:3</description>
<grab>
<width>1280</width>
<height>720</height>
</grab>
<crop>
<x>160</x>
<y>0</y>
<width>960</width>
<height>720</height>
</crop>
<draw>
<aspectRatio>4:3</aspectRatio>
</draw>
</camera>
name は、HDMI->USBにする機器の登録名をデバイスマネージャで確認して入力します。
camnum には、1から4の数字を入力します。
- camnumが1の場合 TinyViewPlusはHDMIの映像を分割しません。以前のTinyViewPlusと同じようにデバイスからの映像を1の受信機分として扱います。
- camnumが2から4の場合 TinyViewPlusは、このデナイス以外を無視します。HDMIの映像は、camnumで指定された数字で分割されます。(3機同時飛行なら3分割。)
その他の指定パラメータについては、DJIタイプ、Hawkeyeタイプ、HDZeroタイプについてそれぞれ1080P,720Pの解像度の設定ファイルをsampleの中に入れてあります。fpv.xmlを上書きし、適宜修正して利用ください。
<system>
<sysStat>1</sysStat>
<speechJpn>1</speechJpn>
<allFrameDetect>0</allFrameDetect>
<minimumGateCount>2</minimumGateCount>
<smallSizeGateCheck>1</smallSizeGateCheck>
</system>
<view>
<fullscreen>0</fullscreen>
<camTrim>0</camTrim>
<camFrame>0</camFrame>
<bgImage>system/background.png</bgImage>
<lapHistMode>1</lapHistMode>
</view>
<oscMonitor>
<enabled>1</enabled>
<host>127.0.0.1</host>
<port>4001</port>
</oscMonitor>
<race>
<arMode>1</arMode>
<duraSecs>0</duraSecs>
<duraLaps>10</duraLaps>
<lapAfterTmo>0</lapAfterTmo>
<minLapTime>1</minLapTime>
<staggStart>0</staggStart>
</race>
設定ファイルの編集(2)(system.xml)
allFrameDetect は通常0です。この場合、SCREEN FPS:の半分の頻度でマーカー検知を行います。
どうしてもSCREEN FPS:30になってしまう場合は、allFrameDetectを1にしてください。その場合、SCREEN FPS:と同じ頻度でマーカー検知を行います。
SCREEN FPS 60: allFrameDetect 0 だと検出頻度は1秒間30回
SCREEN FPS 30: allFrameDetect 0 だと検出頻度は1秒間15回
SCREEN FPS 30: allFrameDetect 1 だと検出頻度は1秒間30回
PCが高スペック場合、SCREEN FPS 60でallFrameDetect1に設定すると、マーカー検出頻度を1秒間60回に設定することが出来るはずです。スペックが足りない場合、SCREEN FPS自体が下がります。
設定ファイルの編集(3)(system.xml)TinyViewPlusのみ
TinyViewPlusの方のみのオマケです。
minimumGateCount は通常2に設定します。(2に設定すると従来のTinyViewPlusと同じ設定になります。)
minimumGateCountが2だと、最低限2個のマーカーを認識した後でないと、ラップ通過として判定されません。1にすれば、1個のマーカー認識でゲート通過とみなします。1の方が、ラップの取りこぼしが少なくなりますが、マーカー以外のものをマーカーとして認識してしまうリスクもあります。
smallSizeGateCheck はデフォルトでは1に設定してあります。(既存TinyViewPlusと同じ設定)この場合、1だと、どんなに小さなマーカーでも検出できれば認識しますが、以下のようなリスクもあるので是非0にするのをおすすめします。
-
OSDの文字をマーカーとして認識してしまうことがある 時にsmallSizeGateCheckが1の場合は即ラップの誤検出につながるので危険です。以下の写真はF:1:25の1がマーカーとして検出された所です。

-
大規模レースによく見かけられる大き目なゲートでは、ゲートのかなり前からマーカーが検出されがちで、ゲートのかなり前にラップが計測される場合がある
大抵の場合、その後にマーカーが検出されますが、後で計測されたラップは捨てられます。
TVPASでは、設定項目ではなく、常時0の設定(小さなマーカーは検出しない。)の設定になっています。
以上簡単に説明してみました。試してみていただければ幸いです。


