FPVドローンに搭載するFCに記録されるログの中からジャイロデータを抽出し、それを利用して動画の安定化を図る方法があります。色々と解説が出ていますがWindows 10によるものがほとんどな気がします。ここではmacOS Big Surでの事例を紹介します。
本来の目的はドローンの飛行中の動画に適用するものですが、一眼レフの上にFCを単独で載せて手持ち撮影の動画の安定化を試してみようという試みでもあります。
大きな流れはBlackbox Log Viewerでログをcsv形式で保管、それをgyroflowで処理し動画をスタビライズするというものです。これとは別にBlackboxToGPMF というソフトウェアでGoProコンパチの動画ファイルを作り、既存のReelSteadyGoで処理する方法もあります。
2021/02/24追記)
以下Pythonのセットアップから書いていますが、直接実行可能なパッケージが提供されるようになりました。
Gyroflow の公式ページのDownloadにある実行可能ファイルをダウンロードします。macOSの場合は拡張子dmgになっています。これを実行するとgyroflowという実行ファイルとcamera_presetsフォルダーが見えます。これを適当な場所にコピーしてgyroflowをダブルクリックもしくはターミナルから実行するだけです。ただし起動にかなり時間がかかります。わたしのMacBook proでは一分近く待つとgyroflowのウインドウが開きます。
[ Pythonのセットアップ ]
わたしのmacOS Big SurにはPython2.7とPython3.7が最初から入っていました。必要なのはPython3系なので3.7で試してみましたがうまく行きませんでした。最新の3.9なら大丈夫そうということで、常套手段であるpyenvを導入して色々とやってみましたが問題続出でひとつひとつ片付けていってもダメでした。思い直してbrewもpyenvも忘れることにしてパッケージで導入しました。以下手順です。
– https://www.python.org/ のDownloadページから現時点での最新版3.9.1のmacOS版インストーラーをダウンロードして導入。
– ターミナルを開き直すとpython3.9が使用可能になっています(python3で起動できます)。
– “pip3.9 install numpy” でNumPyモジュールを導入します。
同様に以下のモジュールを順次導入します。
– opencv-python, PySide2, scipy, orangebox, construct, python-dateutil, hachoir, matplotlib, VidGear
[ Gyroflow のインストール ]
GuroflowのダウンロードページにmacOSの実行ファイルがありますが、今ひとつ動かし方が分かりません。GithubからソースコードをダウンロードしてPython3で起動することにします。
https://github.com/ElvinC/gyroflow のCodeボタンを押してzipで全てのコードをダウンロードし任意の場所に解凍します。
ターミナルを開き解凍したフォルダーにcdしてpython3 gyroflow.pyで起動できます。
[ FCの準備 ]
一眼レフの上に適当なマウントを作ってFPVドローン用のFlight Controllerを単独で載せました。なるべく多くのログが取得出来るようにMicroSDカードが使えるFC(MATEX F722-STD)にしました。給電はモバイルバッテリーからUSBで行います。一般的には飛行開始時に行うARM動作でログの取得を開始するようになっていますが、FC単体ではログを開始するきっかけがありません。そこで下のCLIコマンドにて電源投入と同時にログを開始するようにしました。
blackbox_mode = ALWAYS
問題はログを停止する手段がないことです。仕方がないので録画終了からしばらく時間をおいてUSBケーブルを抜いて電源を切るようにします。
[ 録画 ]
後からジャイロデータと動画の同期を行う必要があるので、動画の最初と最後にわかりやすい動きを記録しておきます。カメラを大きく横と縦に振っておくと良いです。
[ 実際の手順 ]
動画にまとめましたので、それを見ていただくのがわかりやすいと思います。
VIDEO
いくつか動画の補足を書いておきます。
– YouTubeに作者らしき人からコメントをいただきました。Initial rough gyro offsetを計算してセットしていますがgyroflowは+/-5秒で同期ポイントを探すので5秒以下のズレならば何も入力しなくても良いそうです。
– もとの動画は59.94FPSでした。これをgyroflowで処理する方法もあるのかも知れませんが、よく分からないので予めDaVinci Resolveで30FPSに変換してから使用することにしました。
– Blacbox Log Explorer でオフセットを調べていますが、これはあまり正確な数値を追求しなくても大丈夫です。gyroflowが自動的に同期タイミングの調整を行ってくれます。
– gyroflowはBlackboxログの生ログを読み込めますが、今の所うまく動かない気がします。blackbox log explorerでCSV形式で書き出したものはうまく処理出来ます。
– Gyroflowのcamera presetsが何者かは良く知りませんが、色々とためして一眼レフで取得した動画で歪の無い出力が得られるものを探し当てたものがlgg6_normal_16by9というだけです。論理的な理由があるわけでは無いです。
– Syncを計算した後にDelay for sync 1とDelay for sync2が表示されます。これを見ると動画の最初と最後では随分とオフセットが変わるのがよく分かります。
– Exportした動画は何か不具合があるようでmacOSのプレビューも出来ないですしDaVinci Resolveに読み込むことも出来ません。こんな時の定番がVLCです。VLCは他で読めない動画ファイルの再生が出来ます。VLCに読み込んで改めて書き出すことによりDaVinci Resolveに取り込むことが出来るようになりました。これはいずれgyroflowで修正されるものと思います。
=> 環境依存のようですが、Color profileがyuv444の動画になっているのが原因でした。gyroflowの画面に書かれているとおりにExportする時にyuv420pという指定を”FFmpeg color spae selection”という所に書き込めばOKです。
– Exportした動画はフレームが踊っている変わった動画です。中央を上手に切り取ることによりスタビライズした動画となります。
EmuFlight+Mockingbird設定で飛ばしている1S 65mmブラシレス機 をEmuFlight 0.3.3に更新してDAS機能を設定してみました。DASとはYawとRollをミックスさせる機能です。
以下のCLIコマンドでRollスティックにYawをミックスさせました。
set das_yaw_with_roll_input = 90
この設定はrateprofileに入りますので、スイッチでオフオン出来るようにしています。反対にYawスティクにRollをミックスさせることも出来ます。
私はモード2なので、左のスティックはスロットルだけに集中し右スティックだけでコーディネートターンを行おうという狙いです。まだまだ練習中ですが、慣れてくると動きが省略されるので楽な気がします。速くなったかどうかは不明です。
以下、わかりにくいですがスティックカムを含めた動画です。
VIDEO
以前、自作テスターを使用したFCの電流値校正 について書きました。手順はまったく同じですが、市販の電源装置を利用した校正のやり方を改めて書いておきます。
使用したのはWanptek NPS3010W という電源ですが、そこそこ正確な電流計が付いていればどんな物でも大丈夫です。
機体をBetaflight Configuratorと電源装置に接続します。大雑把に飛行中の電圧になるよう電源を設定します。
Betaflight ConfiguratorのMotorタブで(ペラを外してから)モーターを回します。電源装置の電流計を見ながら安定した電流値になるように回転を調整します。どれくらいの電流値が適当なのかは不明ですが、わたしは1Aから2Aの間にしています。
Betaflight ConfiguratorのPowerタブを確認します。
電圧は概ね正しいと思います。わずかな差はもともと電圧を確認している場所の違いもあるので気にしなくて大丈夫です。電流値も正しければ何もしなくて良いです。多くの場合は正しくは表示されていないと思います。
Calibrationボタンを押します。
電圧のところは0のままで、電流のところに電流計の読みを入力しCalibrateを押します。
設定値が表示されるのでApply Calibrationを押すと自動的にScaleがセットされる。
Power画面のSaveを押すと実際にScaleが反映される。電流値がそれなりの値になれば完成です。
以前から実験用の電源を欲しいと思っていましたが、リポバッテリーを利用した実験用電源セットで間に合っていました。いまでもそれで問題は無いのですが、良さげな電源がTBS COUCH で紹介されていたので購入してみました。中国での価格は5インチドローンのリポ、2本分くらいなので実験のためにリポを充電したりして消耗させるより良いかもです(物欲理論でやや難あり)。
リポ電池を電源とした自家製テストキット
TBS COUCH中でTrappyは電流制限機能があるのでスモークストッパーの代わりになると言っていますが、そこはやや疑問ありです。これについては後ほど詳しく書きます。
購入した電源はWanptek NPS3010Wというものです。TBSで販売しているのはDPS305U という型番なので少しスペックが違います。TBSで販売しているのは5A仕様ですが私のは10A、またTBSの物は18WのUSB充電機能が付いていますが私のはUSB出力はありません。
電源にはミノムシの付いたケーブルが付属していますが、ドローン用にXT60の付いたケーブルを作りました。XT60からの各種変換ケーブルは以前のテストキット用に作って有るので、これで何でも接続できます。
電圧は0-30Vの間で自由に設定できます。 4桁のLED(小数点以下2桁)で電圧を確認出来ます。そこそこの精度があるのでテスター等で確認する必要はありません。
簡易スコープで見る限り変なリップルもありません(高い周波数のノイズは分かりません)。
電圧が簡単に設定出来るので3.3Vの受信機の単体テストにも使えますし1Sから6Sまでリポの代わりにもなります。
この電源には定電流モードがあります。電流値を設定しておくと、それ以上の電流は流れません。設定方法がややトリッキーです。表示板の電流計はリアルな電流しか表示出来ません。そのため無負荷だと0.000Aのままです。そこで電流調整ツマミを回しても何も出来ません。電流値を設定するためには出力をショートさせないといけません(目標電流より十分に沢山の電流が流れる負荷でも良いかも)。流石に最初に試すときはビビリながらやりました。
これがあるのでどこかショートしていても安全かも知れません。ただし、これは過電流の時に電源をシャットダウンするものではありません。一定の電流を供給し続けるように設計された電源です。つまり、電流が流れすぎたら電圧を下げていって設定された電流を流し続けるように動作します。もし何かしらの不具合で電流が流れすぎた場合も、設定値までの電流は流れ続けます。燃え上がることは無いかもしれませんが、じわじわと壊すことはあるかも知れないので、この機能ををSmoke stopperとして使うことはお勧め出来ません。
12V、電流制限値1Aに設定して自作のテスターを通した先でショートさせた様子。テスター上ではショートしているので電圧は0ながら電流は1A流れているのが分かる。また電源に付いている赤いLEDの点灯が電流制限モードに入っていることを示している。
ということで私としてはVIFLY を併用することにします。
10Aも流せるのでモーターの回転方向の確認、RPMテレメトリーのテストなども余裕でこなせます。
電流表示も信用できるのでFCの電流計の校正 も手軽に出来ます。なんかこれが一番のメリットかもです。
流石に中国で購入するより少し高いけどアマゾンにもありました。
95X V3フレームのテスト飛行を行いました。そこで気がついたことをいくつか書いておきます。
[ HDカメラマウントの脱落防止 ]
V2フレームの経験から予測していたのですが、HDカメラマウントベースは転倒などで簡単に外れます。タイラップをマウントラバーの中に通しておけば外れることはなくなります。
[ FCを再びiFlightに戻す ]
これはV3フレームには直接関係はありません。V3フレームでToothpic FCが使えるようになったので、JHMCU GHF411AIO 20Aを付けてみましたがテスト飛行が散々な結果でした。いつもフィルターを弱めてpropwashに対処できるようにしているのですが、それがまったく不可能でした。むしろフィルターを強めなければまともに飛ばない状態でした。残念ながらBlackboxが無いので何が起こっているのかは分かりません。ということで、もともと使用していたiFlight SucceX-D 20A Whoop F4 AIOに戻しました。これで中身は完全に95X V2で飛ばしていた時と同じになりました。
[ Propwashが酷い ]
V3フレームで重量が10g強重くなったのと少しだけダクト形状が変わりましたが基本的な設定はV2と同じで大丈夫と思います。ところが、少し飛ばしただけで何度も酷いpropwashに入りました。考えてみると大きな違いがありました。
ダクト周りに緩衝材のEVAフォームを貼っていたのでした。これを外したら直りました。室内飛行には必要ですが、わたしの95X V3は屋外でまったりフリースタイルを行うので緩衝材無しで行くことにします。
[ フレームは丈夫かも ]
2回目のテスト飛行では今ひとつ調子が出ず(パイロットの問題)にクラッシュばかりしていました。それでもフレームは問題無しです。たぶん、以前のものより丈夫かも知れません。まだまだ何とも言えませんけど。
[ 調子よく飛んだときの動画 ]
BetaFPV 95X V3 BNFに装着されている5枚羽のプロペラがちょっと気になったので試してみました。
以前からTinyなどでは4枚羽と3枚羽でカーブでの粘りが違うなどと良く言われていましたが、わたしはまったくそのあたり無頓着でただただ評判の良いペラを使っていました。唯一自分で飛ばし比べて違いか分かったのは3インチ機 で主にはペラ自体の重量から来るパンチの強さでした。そんな違いの分からない男が5枚羽ペラについてレビューしてみようと思います。
D63とはおそらく直径が63mmということで2.5インチ相当です。形状からしてダクトありきのペラと思います。95X V3のフレームとの組み合わせで何かしら最高のパフォーマンスが得られるのではないかと期待して試すことにしました。
ただし私の95X V3のセットアップはBetaFPVの機体とは違いRCINPOWER 1207 5000KVというやや大きなモーターを使用していますのでBetaFPV 95X V3とは結果が異なる可能性については予めお断りしておきます。
比較する対象はお気に入りのHQProp DP 2.5X2.5X3です。
重量はHQPropと比べるとやや重いです。5枚ペラなので当然でしょう。
まずは飛行音を比較してみました。Gemfan D63の方が音が小さくなるかもという期待を抱いていましたが残念ながらほぼ変わりません。むしろ高い音の成分が多くて耳障りな気もします。
屋外飛行でのフィーリングは、まったりした感じです。わたしのまったりフリースタイルでもちょっとレスポンスが物足りない気がします。スロットルを入れたときのパンチも少なめです。
飛行時間については正確に測定はしていませんが、だいぶ短くなるような気がしました。
わたしの結論的にはHQPropを使い続けることになりました。
VIDEO
BetaFPV 95X V3フレームがなかなか格好良いのでV2で組んでいたInsta360 GO搭載機を移植することにしました。
フレームキットの内容(赤いダンパーとネジの小袋は撮り忘れ)です。5枚羽のペラは同時に購入したもので付属ではありません。
プッシャー専用として設計されているので良く出来ています。見た目も丈夫そうです。
ダクト部分に控え目ですが脚が付いているのでumma95のように裏蓋に脚を作る必要がありません。この方が丈夫だと思います。
以前の95Xフレームには少し大きくて使用できなかったToothpic FC, JHMCU GHF411AIO 20Aも載せられます。横に出ているUSBコネクターにアクセスするための穴もあります。ということで、今までのiFlight Succex-D F4 20AからGHF411AIOに載せ替えました。(Blackboxが取れないのがちょっと残念)
Caddx VistaはVistaのケースを取り付けているネジを外してマウントするのが正しいようです。20mmx20mmの穴もありますが、それを使うと下の蓋を取り付けるのに窮屈になります。Vistaケースの穴をしようしてマウントするためにはM1.6 6mmのネジを別途入手する必要があります。
フレーム後部に受信機のアンテナを収納する切れ込みがあります。せっかくなので今までCrossfire(海外在住です、念の為)のImmortal Tアンテナを使用していましたが普通のワイヤーアンテナに変更しました。
カーボンフレームが内側にあって、おそらく最初の95Xと同じものです。初代と違うのはモーターが直にカーボンに載ることです。問題は中央の穴が小さめでRCINPOWER 1207だと軸の大きさがギリギリなことです。マウントしてみると、順調に回るモーターもあればガッツリひかかってしまうモーターもあります。穴を広げることも考えましたが、ワッシャーを一枚入れることにしました。
前回のDJI Mini2の充電実験で気づきました。海外版のスペックを見るとバッテリーの最大充電電力は29Wなのに充電に使うACアダプターは18Wしか供給出来ません。日本版では共に18Wなので改善の余地はありませんが、海外版では十分なパワーを供給すれば充電時間を短く出来る可能性があるということです。
さっそくテストです。バッテリーは例によってLow Batteryが出たところから充電開始です。使用したのはDJIのACアダプターと前回一番大きなパワーを供給出来た小米のモバイルバッテリーです。
VIDEO
結果は予想通りです。30Wを供給出来る小米のモバイルバッテリーは1本のDJI Mini2バッテリーを52分ほどで充電完了しました。DJIのアダプターだと72分ほどです。3本充電する場合だと実に1時間ほど節約出来ることになります。
急速充電の仕組みとして充電当初は沢山のパワーを供給し、終了近くでは徐々に電力を小さくします。タイムラプスで撮影したので、その様子が分かるのも興味のある人には面白いと思います。
おそらくは積極的なリークにより、DJIのFPVドローンの写真が少し前から出回っていましたが、ついにFCC IDのサイトで資料が公開されました。製品としての詳細が分かるわけではありませんが興味深いことが沢山あるので、すこしまとめておきます。
FCCID.IO のサイトによると認証申請されたのは3製品です。
DJI FPV Drone
FCC ID: SS3-FD1W4K2006
技適番号: 211-200733
DJI FPV Googles V2
FCC ID: SS3-FGDB282006
技適番号: 211-200732
DJI FPV Remote Controller 2
FCC ID: SS3-FC7BGC2006
技適番号: 211-200734
それぞれ技適番号がありますが、添付されていたラベルに書かれていたもので、現在(2020/12/09)のところ総務省のサイトでは見つけることは出来ません。
興味深いのは技適番号があることに加えて2.4GHzと5.8GHzのデュアルバンドであることです。まるでDJI Mavicのようです。技適の詳細は分かりませんが、電波法的にはMavicなどと同様に無線の免許無しに扱える可能性が見えてきました。
すでにリーク写真もありますが、一部のドキュメントに製品の形状が垣間見えます。
ゴーグル はリンク先の31ページからです。現行のゴーグルにとても似ています。
送信機 はリンク先の29ページです。なんだかTBS Tango2のような感じです。小型で好感がもてます。
さて最大の懸念事項はAirUnitが無いことです。現在のDJI Digital FPV SystemではAirUnitという装置を任意のドローンに搭載してVTX(+受信機)として使用するのですが、それがありません。代わりにドローン自体が登録されています。これは現在のFPVドローンとは別物と言えるでしょう。
おそらくDJIの狙いはFPVでの撮影需要を狙った機体まで含めた完成されたシステムということなのでしょう。それも十分に興味深いです。
ゴーグルの名称はDJI FPV Googles V2となっているので現行DJI Digital FPV Systemへの後方互換性はあるのかもしれません。願わくば対応する2.4GHzでも使えるAirUnitを出して欲しいです。
DJI Mini2の充電アダプターはUSB-Cで出力され定格出力は18Wで電圧と電流の組み合わせをみると12V/1.5A, 9V/2A, 5V/3Aになっています。携帯電話で言うところの急速充電を行っています。急速充電の規格は分かりませんが手持ちの充電器でどんな具合で充電されるかを計器を用いて調べてみます。
[ DJI Mini2 純正充電アダプター ]
12.1V 1.51A, 18W、ということで充電アダプターの定格通りの電力で充電されています。
[ ZMI USB 65W ]
MacBook Proにも使えるUSB-PD 65Wなアダプターです。
最初、12V 2Aくらいまで上がるのですが、
最終的には、12.1V 1.55Aに落ち着きます。純正とほぼ同じです。
[ ANKER PowerPort Speed 5 ]
これはPowerIQが3ポートとQC3.0が2ポート付いています。テストはQC3.0ポートを使用しました。
11.8V 2.07Aということで24Wで充電されました。謎なのはANKERの側面には12V 1.5Aと書かれていますが実際には2A流れています。純正アダプターより大きな電力ですが、充電電圧と電流は機器同士がネゴシエーションした結果のはずですしバッテリー(海外版)のスペック表には最大充電電力29Wと書かれていますので、おそらくは問題ないのでしょう。初期の充電電力が大きいので充電時間が速くなるという期待はありますが、未検証です。
今回のテストには使用していませんが、携帯電話の充電器でも12V 2AでDJI Mini2を充電出来るものがありました。
[ 小米移動電源3 20000mAh 高配版 ]
私の場合、ほとんどの場合3本のバッテリーを使い切ることはありませんが、もしモバイルバッテリーで充電できるとしたら便利と思い検証してみました。
なんと11.8V 2.50Aということで29.5Wとテストした中で最大の電力を示しました。これは海外版DJI Mini2バッテリーの最大充電電力です。
引き続きモバイルバッテリーの容量が足りるのかどうかについても検証しました。私のDJI Mini2は海外版ですので、これから書くことはそのまま日本で販売されているDJI Mini2には当てはまりません。
まずは計算です。この20000mAhという容量はスペック表によると3.7Vで計算したものです。また実効容量は12600mAh(5V 5.4A)とも書かれています。それぞれ電力値に直すと74Whと63Whになります。一方、DJI Mini2のバッテリーのスペック表には2250mAh,標準電圧7.7V,LiPo 2S,電力量17.32Whと書かれています。電力でちゃんと書かれていますので、すなおにそれをモバイルバッテリーのものと比べれてみると三本のバッテリーで合計17.32×3=51.96Whになります。効率がいくら悪いとしても63Whあれば足りそうな気がします。
実際に充電できるかどうか試してみました。バッテリーは実際にDJI Mini2をホバリング状態にして残り飛行時間5分になりLow Batteryのアラームが出るところまで消費させた三本のバッテリー(海外仕様)を使用しました。Fly More Comboのバッテリー充電器を小米の20000mAhモバイルバッテリーに接続して三本のバッテリーが完全に充電されることを確認しました。小米のモバイルバッテリーにはバッテリー残量を示すLEDが4個付いています。そのLEDは2個点灯していました。これが本当に半分の容量を残しているわけでは無い気がします。おそらくは1/4から1/2の間ではないかと推測します。試してはいませんが更にもう一本のDJI Mini2バッテリーくらいは充電出来そうな気がします。
試したところ、あと一本のバッテリーを充電するには残量が足りませんでした。
日本版のDJI Mini2のバッテリーは8.09Whとの事ですので10000mAhのモバイルバッテリーでも大丈夫な気がします。