Dropbox

HDZeroに限らずAvata2などにも応用可能な手順です。標準的なUSB接続の受信機以外からの映像をTinyViewPlusに認識してもらう方法についてのまとめです。

いきなり設定方法を書いていきます。後から説明を少しだけ書きます。

[ 接続 ]
HDZeroゴーグルにGUERMOK USB 3.0 HDMI to USB C オーディオ キャプチャ カード、4K 1080P60 キャプチャ デバイスを使用しPCに接続した。

[ カメラの名前を調べる ]
macOSの場合は「システム情報のカメラのセクションを見ます。(リンゴマーク->このマックについて->詳細情報->システムレポート)

Windows11の場合はデバイスマネージャーのカメラセクションを開きます。(スタートボタンを右クリックでデバイスマネージャー)

Mac, Winの双方にUSB2.0 PC CAMERAという名前があります。これがTinyViewPlusが既定値のままで認識するUSB接続の受信機です。Macで”USB3 Video”、Windows11では”USB2 Video”として認識されているのがHDZeroゴーグルの接続に使用したHDMIからUSBに変換するアダプターです。この名前をTinyViewPlusに知らせる必要があります。

[ 設定ファイルの編集 ]
設定ファイルはWindowsの場合は実行ファイルと同じフォルダー下のdata/camera/fpv.xmlです。MacOSの場合、Tiny View Plus.appを右クリックし、パッケージの内容を表示を実行します。その中のContents/Resources/data/camera/fpv.xmlです。
最初から入っているfpv.xmlはサンプルで、これが存在しなくてもTinyViewPlusは動作します(GV-USB2に相当するビデオキャプチャーを利用している場合を除き)。心置きなく弄ることができます。以下はオリジナルの内容です。

<camera>
    <name>GV-USB2</name>
    <description>squeezed 16:9</description>
    <grab>
        <width>704</width>
        <height>480</height>
    </grab>
    <crop>
        <x>0</x>
        <y>0</y>
        <width>704</width>
        <height>480</height>
    </crop>
    <draw>
        <aspectRatio>16:9</aspectRatio>
    </draw>
</camera>

二行目の<name>GV-USB2</name>を先に調べたカメラの名前に書き換えるだけでTinyViewPlusでHDZeroの画面が表示できるようになります。余談ですが、ここをFaceTimeとするとMacBookのカメラがTinyViewPlusに表示されたりもします。
縦横比とか解像度を正しくしておく方が良いと思い、二つの設定ファイルを試してみました。ひとつめはゴーグルで見ているままに全ての情報を表示する設定です。
以下、私のMacOSでの設定例です。

<camera>
    <name>USB3 Video</name>
    <description>squeezed 16:9</description>
    <grab>
        <width>1920</width>
        <height>1080</height>
    </grab>
    <crop>
        <x>0</x>
        <y>0</y>
        <width>1920</width>
        <height>1080</height>
    </crop>
    <draw>
        <aspectRatio>16:9</aspectRatio>
    </draw>
</camera>

HDZeroを飛ばしている人の多くはカメラ設定を4:3にして飛ばしていると思います。この場合16:9の画面の中央部分にだけカメラ映像が表示されています。その部分だけを抜き出してTinyViewPlusに表示させることが出来ます。

<camera>
    <name>USB3 Video</name>
    <description>4:3</description>
    <grab>
        <width>1920</width>
        <height>1080</height>
    </grab>
    <crop>
        <x>240</x>
        <y>0</y>
        <width>1440</width>
        <height>1080</height>
    </crop>
    <draw>
        <aspectRatio>4:3</aspectRatio>
    </draw>
</camera>

これで表示すると、

こんな感じです。私的にはこれがお勧めだと思います。
以上で設定の説明は終わりです。まだ実際に計測で使えるかどうかのテストは行っていません。

[ 補足説明 ]
fpv.xmlの説明文は見つからなかったのでソースコードを少し眺めてみました。

fpv.xmlを読み込んでいるのはloadCameraProfileFile()です。fpv.xmlのパス名はofApp.hで定義されています。ここで分かるのはfpv.xmlというのが唯一のカメラ設定ファイルで、また追加するカメラ名はひとつだけであるということです。同じカメラ名で複数のデバイスを扱うことは出来そうです。


実際の設定を行っているのはreloadCameras()です。”USB2.0 PC CAMERA”がハードコードされているのが分かります。また解像度や画面のクロップのロジックも読み取れます。この辺りを改造すれば複数のカメラ名を認識させることも出来そうです。

ゴーグルの出力をTinyViewPlusに送り込むのは実験的には問題ないですがケーブルの取り回しが大変で実用性はないと思います。実際のレースではHDZero Event VRXとか最近発売が始まったHDZero Monitorを使用することになると思います。どちらもAnalog VTXの映像も拾えるのでHDZero, Analog混合レースが簡単に可能になると思います。直接PCに接続できるわけではないので、やはりHDMIからPCに繋ぐためのアダプターは必要です。

HDZeroゴーグルをアナログVTXで使うべく手持ちのWildfireを付けたものの画像的に今ひとつでした。そこで新しく受信機を入手することにしました。定番はRaidfireですが、もうちょっと安価なSkyzone SteadyView Xにしました。ところが、これが素直にHDZeroゴーグルに搭載することができませんでした。ということで、その顛末を書いておきます。

SteadyView Xは電源を接続してAV端子に映像を出せるグランドステーションとして出荷されてきます。分解して受信機モジュールを取り出してみると違和感。

右側のWildfireと比べるとピンがだいぶ短いです。HDZeroゴーグルのExpansion Moduleに入れてみると、やや斜めに入れれば動かすことは出来るのですが、ちょっと受信機に触ると外れてしまいます。間に何か入れるかピンを立て直すかと思い、手持ちのピンを見たら全く同じ長さのものしかありません。 

ピンの出荷時の長さ配分のまま受信機に付けられているので、基板の上側にピンがだいぶ飛び出しています。これを基板ギリギリまで押し込んで見ることにしました。

修正途中の写真です。ハンダゴテで温めながら押し込んでやると簡単に修正できます。

あと、念の為、下から2本目のピンは抜いておきました。最初のテストでは全ピン挿入して問題はありませんでしたが、過去にHDZeroゴーグル+SteadyView Xでは、このピンを抜かないと不具合があるという情報がありました。もしかすると解決済みなのかもしれません。

SteadyView Xのピンを修正後にExpansio Moduleに入れてみると収まりが良い感じがします。裏からみるとピンが奥まで入っているが確認できました。

問題はもう一つあって、カバーが色々と付属しているのですが全く使えません。こういう用途のためのカバーがあってキッチリとハマるのですが装着するとロータリースイッチが全く効かなくなります。手で回す部分は問題ないのですがスイッチ本体が横に傾いてしまい回転部分から外れてしまいます。何度も試すと壊してしまいそうです。

Pintsbalesに有ったモデルをTPUで出力して被せてみました。カッチリ感はありませんが、実用にはなると思います。

HDZeroのDVRはTSフォーマットが推奨されています。そのあたりの事情は以前書いた記事をご覧ください。

その時に手作業でTSファイルからMP4への変換方法を書きましたが、やはり面倒です。ということで少しでも楽をするためのプログラムを書いてみました。

[ 特徴 ]
– 再エンコードなしで動作が速い
– ワンクリックでSDカードのTSファイルをまとめて変換
– TSファイルのタイムスタンプをMP4にも反映(手作業の時は諦めていた) -> DVRファイルの時刻を何時も正しくするためにはHDZeroゴーグルにバッテリーを取り付けます

https://github.com/nkozawa/ts2mp4

[ 前提 ]
プログラムを書いたと言っても実際に動画を変換するのはffmpegというツールです。もしffmpegが導入されていない場合は、まずこれを導入しコマンド窓でffmpegと打ち込んで動くようにしておく必要があります。Windowsの場合、おそらく自分でPATHを通すという作業を行わないといけません。

[ 実行ファイル ]
Python3の環境がある場合、公開されているts2mp4.pyを実行してください。MacOSとWindows11のPython 3.11でテストしています。試してはいませんがLinuxでも動くと思います。MacOSとWindows用にはPythonの環境がなくても稼働する実行ファイルも用意しています。

[ 使い方 ]

– Input path(TS files)ボタンを押してTSファイルのある場所を指定します。HDZeroゴーグルのSDカードを指定する事が多いと思います。その場合、SDカード下のmoviesフォルダーを指定します。
– Output path(MP4 files)ボタンを押してMP4ファイルを格納する場所を指定します。
– TSファイルのタイムスタンプをMP4ファイルに反映させる場合はUse Original File Timestampにチェックを入れます。チェックを入れない場合はMP4ファイルのタイムスタンプは現在の時刻になります。
– Start, no overwriteもしくはStart, overwrite allを押して変換を開始します。
“Start, no overwite”は出力先にすでに該当のMP4ファイルがあれば何もしません。新しく録画したものだけを変換するので普通はこのボタンが便利です。ただし判定はファイル名のみで行っています。SDカードを初期化した場合などは考慮が必要です。”Start, overwrite all”は出力先の状態に関係なく全てのTSファイルを変換します。

[ INIファイル ]
Input path(TS files)、Output path(MP4 files)、Use Original File Timestampの設定値はINIファイルに記録されます。次にプログラムを起動するとINIファイルを自動的に読み込みます。

INIファイルはユーザーのホームディレクトリーにts2mp4.iniという名前で書き込みます。

INIファイルの書き込みは、今のところStart, no overwriteもしくはStart, overwrite allを押した時に行なっています。

HDZeroゴーグルにはHDMI出力があり常にゴーグル内で見ている画像を外部のディスプレイに映し出すことが出来るようになっています。MacBookの外付けディスプレイを時々切り替えてゴーグルの画像を見ていましたが、その時にはMacBookで使用できる無くなるわけで色々と不自由をしていました。そこで入手したのがHDMIからUVCに変換してくれるデバイスです。そういうわけで、これはHDZeroゴーグルに限らずHDMI出力をPCや端末で表示させるための方法です。出張先でFire TV Stickを見るなんてことも出来そうです。

GUERMOK USB 3.0 HDMI to USB C オーディオ キャプチャ カード、4K 1080P60 キャプチャ デバイスというものです。

試したのは小米MiPad5というアンドロイドタブレットです。USB Cameraというアプリを導入したところ何も悩むことなく画面が表示できました。

ただしHDZeroゴーグル側はHDMIコネクターちょっと小さいやつです。それとキャプチャーデバイスを単純な接続すれば大丈夫です。

MacBookでもQuickTome Playerで入力デバイスをUSB3 Videoを選択したら表示できました。

HDZero関連記事を連投したので、ここで目次を書いておきます。

HDZeroゴーグルのRecord Option/Audio SourceにはMic, Line in, A/V inの選択肢があります。規定値はMicになっています。どうもゴーグルには内蔵マイクロフォンがあるようでDVRには何かしら録音されていますが、ほとんどファンノイズらしきものに埋もれてしまった役に立ちません。そこで外部マイクを取り付けることにしました。

必要なのはTRRSコネクター(4極)で接続されるマイクロフォンです。世の中にはTRSコネクター(3極)のマイクロフォンも沢山ありますので間違えないようにします。

私が用意したのはこのマイクロフォンです。

このマイクを写真のようにヘッドセットマークのあるジャックに接続しました。Audio SourceをLine Inに設定すれば準備完了です。A/V inはアナログモジュールとAV IN 3.5mmコネクターに接続されるようですがコネクターの仕様が違うのでTRRSマイクロフォンは使用できません。3.5mmコネクターのピンアサインはゴーグルのマニュアルに図解されています。

ゴーグルのファンがうるさいですが、十分にモーター音を捉えられるようになりました。

HDZero推奨のTS形式によるDVR録画は試した限りより確実に録画ファイルを残すことが出来るようです。当然、ゴーグルでのPlaybackは問題ありません。ただしPCに取り出した時には使い勝手が悪くなります。その辺りを検証していきます。macOSでの検証ですが、Windowsでもほぼ同じと思います。

今回の事例はHDZeroの60FPSモードのみで有効です。

macOSでのプレビューはできないですし、一般的な動画編集アプリケーションでは動画ファイルとして認識してくれません。そこで何かしらツールを使う必要があります。私が試したのはお馴染みのVLCメディアプレイヤーとコマンドラインツールのffmpegです。

[ VLCメディアプレイヤー ]
動画ならなんでも扱えるVLCはPCに最初に導入すべきアプリケーションと言って良いと思います。もちろん、TSファイルの再生もそのまま普通に行うことが出来ます。
MP4に変換するのも簡単です。ネット上にもVLC以外の変換方法、あるいはVLCでの手順も紹介されていますが、注意すべき点は再エンコードさせないということです。再エンコードは時間がかかりますし、何より画質が劣化する可能性があります。このTSファイルは中身はそのままで器を変えることによりMP4に変換出来ます。以下、その手順です。VLCのバージョンによって画面は異なるかもしれません。

変換のためのメニューを開きます。


カプセルとしてMP4を選択。


再エンコードしないので「オリジナルのビデオトラックを保持」を選択。


「オリジナルのオーディオトラックを保持」を選択。


適当な名前で新しいプロファイルとして保管します。


変換したいファイルを選び、作成したプロファイルを選択、「名前を付けて保存」を押す。


変換後のパス名を指定して保存。

私のVLCでは複数ファイルの一括変換が出来ませんでしたが、もしかするとWindowsなどでは一括処理が可能かもしれません。

出来上がったファイルは相変わらずmacOSではプレビュー出来ませんが、DaVinci Resolveでは正しく映像ファイルとして認識されます。

[ ffmpeg ]
コマンドラインツールのffmpegは最強の動画関連ツールです。導入の仕方は、ここでは説明しません(macOS向けの手順は複数あって、どの方法で導入したか忘れました)。

出来ることがあまりに多いし、もとより動画ファイルのフォーマットに関する専門的な知識が足りないのでコマンドの前葉を理解することは出来ません。そこで私はもっばら使用事例を探しては自分の用途に適用することに徹しています。今回も複数の事例の組み合わせです。

TSファイルの再生はffplayというコマンドで行います。単純にファイル名をパラメーターとして渡せば再生されます。再生中にはショートカットキーで操作できます。

変換にはffmpegコマンドを使用します。
ffmpeg -i hdz_146.ts -vcodec copy -tag:v hvc1 -acodec copy hdz_146.mp4
見ての通りでhdz_146.tsというファイルをmp4に変換する例です。’-tag:v hvc1’を指定するとVLCの時とは違いmacOSでmacOSでプレビュー出来るmp4ファイルにすることが出来ます。またこのオプションはHEVC(H.265)だけに有効です。

その他にffprobeというコマンドが動画ファイルの属性を見ることが出来るので解析するのに便利です。

まだ作ってはいませんがファイル名の入力を楽にしたり一括変換するスクリプトも簡単に出来そうです。
-> 作りました。https://www.nkozawa.com/blog/archives/7677

[ 結論 ]
DVRファイルを利用する際にはマイクロSDからPCにコピーすることが多いわけですし、そのコピーの代わりにマイクロSD上のTSファイルを変換しつつPCのSSD/HDD上に保管する手順を確立すれば、まあまあ良い使い勝手になると思います。ということで私はHDZeroが推奨するままにTSフォーマットを使用することにします。

HDZeroゴーグルのDVRには録画形式としてMP4とTSフォーマットの二つの選択肢があります。

ゴーグルのマニュアルにはMP4は壊れるからTS推奨とあります。そうは言ってもTSファイルはDaVinci Resolveで認識されないし、なんとかMP4形式を使ってみたいと思うので色々と試してみました。

MP4ファイルが壊れるのはGoProなどでもお馴染みの現象で、主に映像ファイルとして正しく閉じる前に電源を落としてしまった時に発生します。ゴーグルのマニュアルにも同様の記述があり、MP4ファイルを壊さないための手順も書かれています。
– Auto record mode(自動録画モード、VTXの電波を受信すると録画を開始し電波がなくなると停止するモード):
> ゴーグル左のボタンを長押ししてメニューを表示してからゴーグルの電源を落とす。もしくは、
> ドローンの電源を切り、10秒待ってからゴーグルの電源を落とす。
– Manual record mode(ゴーグルの右ボタンで録画の開始、停止を行うモード): 録画を停止してからゴーグルの電源を落とす。

常識的な対策ですし難しくはなさそうです。わざとルール無視することも含め何度か録画をしてみました。一連のテストでは、思い通りの結果が得られました。わざと壊れるような操作をしたMP4ファイルもVLCでは再生可能だったので修復して使用することは出来そうでしたしゴーグルでのPlayBackも可能でした。不可解なことにひとつだけTSファイルも出来あがっていました(githubにバグレポートあり)。

まあ、なんとか使えそうな気もします。ただ、油断してなんかの拍子に使えないMP4ファイルを量産してしまいそうでもあります。

日本では使用しないので問題はありませんがカメラを90FPSモードにすると、そのままでは使用出来ないMP4ファイルが出来上がってしまいました。PlaybackやVLCでは再生できますがDaVinci Resolveは動画として認識してくれませんでした。色々と弄ってみましたが、調べた限りでは時間をかけて再エンコードしないとDaVinci Resolveには読み込めませんでした。

YouTubeに90FPSモードのレビューがあり、そこの概要欄にDVRファイルがあります。そのファイルは問題がないのでどこかのファームウェアレベルでおかしくなった可能性があります。

おそらく突然電源オフにした時だと思いますが全く使えないMP4ファイルになったケースもありました。

HDZeroの推奨ですし、次回はTSファイルの検証を行います。

HDZeroをアマチュア無線として開局するためには帯域幅を17MHzにする必要があります。その設定手順の覚え書きです。

まずはカメラの解像度を540P@60に変更しSAVE&EXITを実行します。現在のところ、この設定が使用できるカメラはRunCam Nano 90だけです。カメラメニューの出し方は前記事を参照ください。

ゴーグルをNarrow BWに変更するようメッセージが表示されます。OKを実行すると実際にモードが変わり、VTXとゴーグルの帯域幅が合わなくなり画面が乱れます。

ゴーグルのメニューを開きSourceの中でHDZero BWをWideからNarrowに変更します。

気になる画質ですが一般的なアナログVTXよりは良いと思います。以前、飛ばしていた初代DJI Digital FPV Systemを初めて飛ばした時のような感動は得られませんでしたが、致し方なし。

HDZeroのハードウェア設定が完了すれば、なんとか飛ばせます。OSDの設定はフォントの設定を除けばアナログと変わりませんしVTXのチャネル変更も従来の知識でなんとかなります。HDZeroゴーグルのメニュー体系も操作もわかりやすく出来ています。ということでマニュアルを読まなくともなんとか飛べるようにはなります。しかしながらVTX側の操作は完全には出来ていません。

このVTX側の設定変更はDJIなどのデジタルFPVシステムとは違いゴーグルのメニューからは出来ません(DJIはゴーグルとVTXで双方向通信を行なっているがHDZeroはアナログVTXと同様にVTXからしか電波を発信していない)。そのための操作はスティックコマンドでFCを経由して行います。HDZero VTXマニュアルに詳細が記述されています。

HDZero VTXマニュアルからの抜粋

二番目はお馴染みのBetaflight Menuです。一番上のVTX Menuと三番目のFor HDZero Cameras(Camera Menu)を覚えておく必要があります。
一番下の出力を0mWにする操作も何かの時には役に立つかもしれないので練習しておくと良いです。

VTX Menuでは周波数や出力の変更が行えます。またVTXファームウェアレベルもここで確認できます。

Camera Menuはカメラの明るさ、色合いなどカメラ固有の設定を行えます。カメラ解像度の設定もここで行います。