Dropbox

HappymodelのExpressLRSシリーズを試してきてかなり調子が良いので手持ちのFrSkyは一掃してCrossfireとELRSだけにしようと思っています。こうなるとELRSの受信機と200mW VTXが搭載された1S Whoop FCも試してみるしかありません。

[ Betaflight ]
いまだRelease Candidateも出ていない4.3が搭載されています。SPI接続なELRS受信機のためのファームが入った特殊なバージョンですので、他のバージョンのBetaflightを導入するわけには行きません。そのためテスト版のBetaflight Configuratorの導入が必要です。また正式版ではないため、いろいろと不都合もあります。

[ ELRSのバインド ]
最初は他のELRS受信機のようにbinding phrase付きのファームを焼いてと思いましたが、SPI接続の受信機のファームはBetflightと一体のためそういう訳には行きませんでした。バインドモードはBetaflight ConfigurtorのReceiverタブにあるBind Receiverを押すことにより入ります。ELRSも開発中のためバージョンによる互換性が心配でしたが1.0.0-RC9を導入したTXから問題なくバインド出来ました。

記事の投稿直後にツイッターで教えてもらいました。SPIレシーバーでもパスフレーズが使えるそうです。

[ ESC ]
blheli_s 16.8が入っていました。RPMフィルターは必要ないですが48KHz PWMで稼働するためにファームの更新を試みました。ただJESC、Bluejay, Blheli_Mどれもうまく行きません。どうもESCタイプO-H-5というのが鬼門のようです。仕方がないのでJazzmavericの16.8をダウンロードして焼きました。

これでまあ何とか飛んでいます。しっくり来ないところもあり設定をいじり続けていますが、まあお試し的には満足しています。

Happymodel 2.4GHz ExpressLRSのTXとRXは出荷時のファームウェア(かなり低いレベルと思う)で問題なく稼働していましたが、少し思うこともありRC8版を導入してみました。手順についてはOscar Liangのサイトに詳しく書かれていますので、そちらをご覧いただくのが良いと思います。わたしの場合、いくらか例外的な事が発生しましたのでそれについて書いておきます。

出荷時のレベルで困ってはいなかったのですが、実際に更新してみると手動バインドの必要が無くなるBinding Phraseの便利さを実感しました。それだけのために更新する価値があると思います。

[ ファームウェアのビルド ]
最新のExpressLRS Configuratorを導入します。

自分用のファームウェアをビルドするのですがGUIで必要事項を埋めていくだけでビルド出来るので簡単です。

ステップとしては4項目です。
– まずはRelease、この記事を書いている時点での最新は1.0.0-RC8です。
– Targetは自分のハードウェアとファームウェアの導入方法によって選択します。わたしの受信機にはWiFiで導入するつもりなので”HappyModel_EP_2400_RX_via_WIFI”を選択しました。
– Device optionsはStandard modeではGUIでオプションを選択する画面が出るはずですが、私の場合上のスクリーンショットのように赤文字でエラーになってしまいました。これはネットワークに問題(地域的問題)があると思われます。問題を回避することも考えましたがManual Modeでやってみることにしました。赤い文字で表示されているエラーメッセージの中にURLがあるのでそこにアクセスするとuser_defined.txtというファイルが表示されます。それをコピーしてManual Modeにすると現れるテキストエリアに貼り付けます。そして必要なオプションを変更します。内容についてはOscar LiangのGUIでの設定例を見るとだいたい検討が付きます。

わたしの設定例を以下に貼り付けておきます。

### The Legal Stuff ###

# The use and operation of this type of device may require a license and some countries may forbid its use entirely.
# It is entirely up to the end user to ensure compliance with local regulations. No claim of regulatory compliance is made. In most cases a HAM license is required.
# This is experimental software/hardware and there is no guarantee of stability or reliability. USE AT YOUR OWN RISK

# HOW TO USE THIS FILE: https://github.com/AlessandroAU/ExpressLRS/wiki/User-Defines
# SIMPLY SEARCH WHICH DEFINE YOU NEED HELP WITH AND

### BINDING PHRASE: ###
# Uncomment the line below to use a hardcoded binding phrase
# Leave commented to use traditional binding
-DMY_BINDING_PHRASE=”MyBindingPhrase”

### REGULATORY DOMAIN: ###

#-DRegulatory_Domain_AU_915
#-DRegulatory_Domain_EU_868
#-DRegulatory_Domain_AU_433
#-DRegulatory_Domain_EU_433
#-DRegulatory_Domain_FCC_915
-DRegulatory_Domain_ISM_2400

### SWITCHES: ###

-DHYBRID_SWITCHES_8

### PERFORMANCE OPTIONS: ###

#unlocks >250mw output power for R9M and Happy Model ES915TX (Fan mod suggested: https://github.com/AlessandroAU/ExpressLRS/wiki/R9M-Fan-Mod-Cover)
#-DUNLOCK_HIGHER_POWER

#-DNO_SYNC_ON_ARM

-DFEATURE_OPENTX_SYNC
#-DFEATURE_OPENTX_SYNC_AUTOTUNE

-DLOCK_ON_FIRST_CONNECTION

### COMPATIBILITY OPTIONS: ###

-DUART_INVERTED

#-DUSE_R9MM_R9MINI_SBUS

#-DTLM_REPORT_INTERVAL_MS=320LU

### OTHER OPTIONS: ###

-DAUTO_WIFI_ON_INTERVAL=30

#-DJUST_BEEP_ONCE
#-DDISABLE_STARTUP_BEEP
#-DMY_STARTUP_MELODY=”B5 16 P16 B5 16 P16 B5 16 P16 B5 2 G5 2 A5 2 B5 8 P4 A5 8 B5 1|140|-3″

-DUSE_500HZ

# Comment this to disable advanced telemetry.
#-DENABLE_TELEMETRY

#Comment this to disable diversity function
#-DUSE_DIVERSITY

既定値から変更したのは3か所だけです。
#-DMY_BINDING_PHRASE="default ExpressLRS binding phrase"
最初の”#”を取り除き、任意の文字列をBindng Phraseとして書き込みます。自分の全てのTX, RXのファームウェアに同じPhraseを指定します。こうすることにより自動的にバインドされるので手作業によるバインドは必要がなくなります。これはとても便利です。
#-DRegulatory_Domain_ISM_2400
Domainのリストから適切なものをひとつコメントアウト(最初の”#”を取り除く)します。2.4GHzの場合はこの行をコメントを外します。
#-DHYBRID_SWITCHES_8
3ポジョンスイッチを使用するためには、このコメントを外します。
#-DUSE_500HZ
これもコメントを外しました。

– ActionsでBUILDボタンを押すとファームウェアが出来上がり、ファームウェアファイル”firmware.bin”がFinderで表示されます。

[ RXへのWiFi書き込み ]
これは問題なく手順通り出来ました。簡単に手順を書くと、TXをオフにしてRXに電源を投入し30秒ほど待つとLEDが速い点滅になりWiFiが有効になります。PCから”ExplessLRS RX”に接続します。WiFiパスワード”expresslrs”です。ブラウザーから10.0.0.1に接続するとExpressLRSの画面が表示されます。下の方のファイル選択ボタンで先のfirmware.binを選択しUpdateボタンを押します。ボタンを押してもPC画面はすぐには反応しません。暫く待つと成功した旨のメッセージが出てRXが再起動します。RXのLEDはUploadが始まると消えるので、そちらを見ているとUpdateボタンが押されたかどうかはわかります。

[ TXのアップデート ]
TXをWiFiアップデートするためにはLuaスクリプトからWiFi Updateを起動するのですが、わたしのTXでは何故かWiFiが立ち上がりませんでした。TX上のUSBコネクターを使用してアップデートすることにしました。
– TX上のジャンパー変更が必要です。出荷時には6個のジャンパーの中央の二組にジャンパーが入っています。これを下の二組に移動します。

– リモートの電源を上げてTXにUSBケーブルを接続します。ELRS ConfiguratorのSerial Monitorで接続を確認できます。ただし、そこから接続したままだとファームウェアの更新が出来ません。確実にDisconnectするかELRS Configuratorを立ち上げ直します。
– TargetをUART接続のものを選択します。わたしの場合は”HappyModel_ES24TX_2400_TX_via_UART”です。RXと同様にDevice optionsを設定します。ActionsではSerial Deviceを選択してBUILD & FLASHボタンを押して書き込みが終了するのを待ちます。

わたしの場合はLua Scriptも最新版にする必要がありました。

これで完了です。Binding Phraseを使用したので再バインドも必要なくすぐに使用できる状態になりました。

日本語で書いてもあまり意味がないかもな情報です。Facebookの関連グループにはシェア済みです。Blackbox Logの活用事例とも言えるのでともかく書いておきます。

TBS Tango2の外部モジュールとしてExpressLRS 2.4GHzを接続しています。PID調整の実験でBlackbox Logを見ていてSetpointが階段状になっているのに気付きました。

SetpointはBetaflightが計算したGyro値の目標値ですが、元々はスティックの動きから来ています。その解像度はいろいろな要因がありますが、TXモジュールに依存していると言っても良いと思います。ExplessLRSの設定では250Hzにしています。上のスクリーンショットでは36Hzくらいの更新頻度しかありません。

どこかがおかしいということで調べていくとFreedom TX 1.29のリリースノートに”added: CRSFshot for external modules”という記述を見つけました。ということでTango2のFreedom TXを更新してSetpointが滑らかになることを確認しました。

Happymodel 2.4GHz ExpressLRS Micro TX Module ES24TXは2.4GHz ExpressLRS用の送信側モジュールです。自作する場合をのぞけば2.4GHz TXとしては唯一の選択肢です、たぶん(追記:ImmersionRC Ghostにファームを焼くことも可能なようです)。この製品はJRベイ用に設計されているためTBS Tango2にはそのままでは接続できません。スリムベイにJRベイを取り付けるアダプターを使用すれば良いのですが、かなり大きくなってしまいます。そこで直接取り付けるためのアダプターを自作しました。

スリムベイとJRベイは形状及びコネクターが違うだけで結線は同じです。形状を合わせるための3Dモデル(一部、GithubでExpressLRS用に公開されているものを流用)とジャンパーケーブルを作るだけで実現できました。詳細はThingiverseで公開しています。

ExpressLRSはオープンソースプロジェクトでTBS Crossfire以上の性能を目指すラジオコントロールリンクです。900MHz帯と2.4GHz帯があります。ハードウェアも自作することが基本でした。部品点数が少ないので、さほど難しくはないとは言えプリント基板から起こさねばならないので万人向けではありませんでした。書き忘れ: Frsky R9Mハードウェアのファームウェアを書き込む方法もありました。

そこに登場したのがHappymodelの完成品です。900MHz帯はすでにTBS Crossfireを使用しているので2.4GHzの製品を試すことにしました。2.4GHz受信機は3種類あります。チップセットの違いとアンテナの違いです。わたしの入手したのはEP1_RXとEP2_RXです。EP2_RXは基板上にセラミックスのアンテナが搭載されているためWhoopに搭載するとかなりコンパクトに出来そうです。送信機はJRベイです。今どきの小型RCではアダプターが必要です。

完成品ですのでベータ版ながらファームウェアは書き込まれていますので基本的な設定だけで使用することが出来ます。設定など必要な情報はExpressLRS Wikiに書かれています。以下、私が最初にテスト飛行するまでに行った設定の概要です。

[ 送信機 ]
ExLRS Lua ScriptをTango2のScripts/Toolsフォルダーにコピーしました。
モデルはExternal RFでCRSFモードを設定します。ExpressLRSはOpenTXもBetaflightもCRSFとして動作します。

[ 受信機 ]
受信機とFCの結線はCrossfireと同じで任意のTX/RXを使用します。SBUSの様に信号が反転しているかどうかなどは気にしなくても大丈夫です。

まずはLEDの意味を理解しておきます。

バインドモードの入れ方です。

バインドモードになったら送信機のELRS LuaスクリプトからBindを実行し受信機のLEDが点灯しっぱなしになれば完了です。

[ Betaflight ]
ほぼCrossfireと同じです。ReceiverはSerial based receiver/CRSFを選択します。アナログVTXの場合はOSDでLQを選択すると信号が確認できます。信号強度RSSIもありますが、一般的にはLQだけ見ておけばよいです。DJI Digital FPVの場合はOSDがフルサポートではないので従来通りのAUXに割り当てられたLQ/RSSIをOSDで見るようにします。AUX11がLQ, AUX12がRSSIをあらわします。

Telemetryも取得できるようにしておきます。

[ テスト飛行 ]
設定さえ出来れば、当たり前ですが普通に飛びます。レンジテストとかしようとは思わないので普通に飛べばわたしとしては完了です。

もともとTPUはサポートされていない3Dプリンターですし、何度もひどい失敗を重ね、一年越しでやっと使えるレベルの出力が得られるようになりました。

重要なポイントは、

  1. いわゆるダイレクト式ではないので、押出機構からエクストルーダーに素材を送るチューブを内径の細いものにする。フィラメントの直径1.75mmに対して内径が1.9mmのテフロン・チューブに変更しました。Capricornが有名ですが、なもなき中国製を格安(5.8元≒100円)で購入しました。
  2. 実績のある良いTPUフィラメントを使用する。
  3. 適切な印刷速度を設定する。PLAよりだいぶ遅い速度になります。今は、以下のスピードで試しています。

かなり常識的なところでTPUの出力出来ていますが、ここにいたるまで挫折の繰り返しでした。簡単に書くと、最初はeSUN eLasticというフィラメントを使用。これがすぐに送り機構内で絡まってしまいます。絡まったフィラメントを取り除くためにはプリンターの分解が必要なので、一度発生させるとしばらくはやる気が失せます。チューブを交換後にも絡まったりして随分と時間が経過しました。次にお試し用の少量のTPUを購入したのですが、これが煮ても焼いても食えない代物でした。絡まらないもののまともにフィラメント送りが出来ません。しばらくして、気を取り直してeLasticで極端に速度を落としたら何とか出力出来ました。ただ柔らかすぎ。そこで友人におすすめTPUを聞いて購入した無印TPU、これが今までの事が嘘のように出力出来ました。と、かれこれ一年がかりでTPUを使えるようになった次第です。

この無印TPU、推奨温度も書いてありません。適当に高めの温度を設定すると出力の質が今ひとつ。友人におすすめを聞いて210度で出力したら十分に使える出力が得られました。速度は上のスクリーンキャプチャの通り。形状によってはかなり糸を引くので引き戻しを0にしています。それでも糸を引いていますが、まあまあ使える状態にはなりました。まだまだ試行錯誤中。

糸引き対策の一つとして、エクストルーダーの冷却を良くするWindDuctのSTLファイルをもらってきて交換してみましたが、効果があるのかどうかは不明。気持ち的には効いてると信じています。

だいぶ前から中国メーカーの作る三脚が良いという話は色々なところで見ていて気にはなっていました。

そしてたまたまライブで見ていたTJさんの開封動画に背中を押されてBENRO SC05Kを購入しました。上海に在庫のあるお店に発注したのでライブ配信の翌日には手元に届きました。

堅牢な作りですが軽量です。作りの良さで所持するだけでも嬉しくなる製品です。脚の長さも変わらないミニサイズに徹した三脚です。脚の広がる角度が三段階に変化するので、かなり大きなレンズを載せた一眼レフでも安定しています。

大きなレンズ付きの一眼レフを縦位置にすると、さすがにバランスを取るのが難しいです。

携帯電話を取り付けるホルダーも付属しています。

さっそく実際に使ってみました。三脚を使うシーンといえばスローシャッターか動画撮影です。やや無理やりですが小型ドローンの離陸を一眼レフで動画撮影してみました。

時折風が強く吹く日でしたが、とても安定していてまったく不安を感じさせませんでした。撮影した動画は冒頭のほんの一部ですが、この時に撮影したインスタ動画を貼っておきます。

私が中国で購入した価格は340元、およそ5000円ほどでした。それよりはだいぶ高くなりますが日本のアマゾンでも見つかります。

BlackBox Logを利用した動画スタビライズ」の続きです。前回は、一眼レフで撮影した動画をBlackboxログでスタビライズする試みでmacOSを使用していました。今回はいよいよドローンで撮影した動画のスタビライズに挑戦です。使用する環境はWindows10で、ビルド済みの実行ファイルを利用するのでセットアップがかなり簡単になっています。細かなオプションの解説とかではなく、わたしの実例にそってそれなりに実用的な出力を得られるまでの一連の手順を紹介します。

前回も書いていますがBlacboxログを利用した動画スタビライズ関連のおさらいから始めます。現在、2つの方法があります。一つはBlackboxToGPMFというプログラムを使用してBlackboxログから抽出したジャイロデータを動画ファイルに組み込んでGoProと互換性を持たせてしまうものです。それをReelSteadyGoという定評のあるプログラムでスタビライズするものです。詳しい手順については井上さんのブログをご覧ください。

もう一つがこれから紹介するGyroflowというプログラムで、これひとつでBlackboxログの解析とスタビライズを一度に行います。

Blackboxログの取得から書いていきますので、かなり長いエントリーになることを予めお断りしておきます。

事例として紹介するのはDJI Digital FPV SystemのゴーグルのDVRのスタピライズです。解像度は960×720,60FPSの動画です。Blackboxログは既定値のままで取得したものを使用します。

[ Blackboxログ関連の設定 ]
まずはBlackboxログが取得出来るFCを使わないことには始まりません。Whoopタイプだと取得できないものの方が多いです。まずはBetaflight Configuratorに接続してBlackboxタブを見てください。下のような画面なら大丈夫です。もし、もっと簡単な画面でBlackbox logging deviceがNo LoggingとSerial Portだけの場合は、そのままではログの取得が出来ないのであきらめます。ログ取得には(シリアルポートに外付けのログデバイスを付けるか)FCを交換する必要があります。

ログの取得にSDカードを使用するものだと、そこそこ多くのログが取れます。Onboard Flashの場合はせいぜい3フライト分しか取得できないので、こまめにログの保管とErase flashでの消去が必要です。ログのエリアが一杯なると書き込みを停止します。

必要のないログ項目を削除してなるべく長くジャイロデータを取得する手法などもありますが、とりあえずは既定値のままで大丈夫です。

Blackboxログは既定値でアームからディスアームまで取得するようになっています。Modes画面を見ると分かりますが送信機のスイッチでコントロールすることも可能ですが既定値のままで良いと思います。

飛行前にErase flashで空きを作っておくことだけを忘れ無いようにして、とりあえず飛ばしてみましょう。

[ Blackboxログのコピー ]
上の画面にあるActivate Mass Storage Device Modeボタンを押すとBlackboxログの格納されたストレッジがUSB接続されます。macOSでもWindowsでも、あるいはAndroid端末でも普通のUSBドライブとして見えるようになります。

btfl_001.bbl
btfl_002.bbl
btfl_003.bbl
btfl_all.bbl

みたいな感じでファイルが見えるので、あとから動画と関連付けられるように工夫してどこかにコピーしておきます。保管したらUSBドライブを切断、USBケーブルの抜き差しでBetaflight Configuratorに戻りErase flashしておきます。

[ Blackbox Viewer ]
Bteaflight Blackbox Explorerとも呼ばれます。ログの解析に使うツールですが、ここでは動画とログの時間差の計測とログのcsv形式での出力に使います。 導入はとくに難しくは無く、リンク先の実行ファイルをダウンロードして実行するだけ稼働します。

どのログファイルに欲しいデータが入っているかは開いてみて動画と合わせてみないことには分かりません。またひとつファイルには複数のフライトが入っている可能性もあります。

この例では4つのパートが含まれています。時間の長さを目安に選択します。この場合は4番目が目的のログでした。右上のOpen log file/videoをクリックして動画ファイルを重ねて読み込みます。

再生してみて動画とログが一致しているかどうかと、どれくらいのズレがあるかを調べます。アームしたところとか、最初にスロットルを入れて離陸したところ、あるいは急激なターンなどが目印になります。Gyroflowは5秒までのズレを自動的に補正しますので、あまり細かく追求する必要はありません。わたしの例ですとDJIゴーグルDVRもログと同様にアーム時に自動スタートしますのでその差は確実に5秒以内なのでログと動画が合っているかどうかの確認だけでも大丈夫です。

ズレの計測方法はまず動画で特徴的な動きを探します。右下にあるタイムスタンプを記録します。次にジャイロもしくはスティックの動きを見て対応する所のタイムスタンプを記録し、その差を求めます。オフセットは動画-ログになります。+/-は実際に確認してみれば分かるので深く考えなくても良いです。

計算したズレをSyncに入れて再生してだいたい一致していることを確認します。

次にExport CSVボタンを押してログをCSV形式で保管しておきます。

[ Gyroflow ]
上のリンク先のDownloadページから実行ファイルをもらってきて適当な場所にコピーして実行します。Windowsの場合はgyroflow-presets-*.zipもダウンロードして適当な場所に展開しておきます。macOS版もWindows版もプログラムが動き出すのに少々時間がかかりますので辛抱強く待ってください。もし自力でPythonを動かすことが出来ると立ち上げの時間は節約できます。ただし立ち上がったあとの処理時間は同じです。

Video Stabilizerを起動します。

まずInput画面でビデオファイル、カメラプリセット、CSV形式のログファイルを選択します。カメラプリセットはgyroflow-presersの中に格納されているものから適当に選びます。私の例ではCaddx_Vista_4by3というそのものズバリのプリセットがありました。自分でプリセットを作る方法も作者自身がYouTubeで解説されていますが、わたしは今の所必要としていないので、まだ試したことが無いです。
-> 日本語でのカメラキャリブレーションの方法井上さんが書かれました。そのうち試してみたい。

Blackboxログは拡張子bblの物も読み込めるようになってはいますが、うまく動かないことがあるので先にCSVに変換したものを使用します。
加えてCamera to gyro angleを設定します。わたしの場合Caddx Vistaのカメラアングルがおおよそ30度にしていますので30と入力します。

次にSync/StabilizationにてInitial rough gyro offset/Auto sync timestamp 1/Auto sync timestamp 2を入力します。自動的に+/-5秒の間で同期ポイントを調べてくれるのでInitial rough offsetは本当にラフな数値で大丈夫です(画面では-2と入力していますが、5秒以内なので実際には0のままでも問題ないです)。動画とジャイロは最初と最後で随分とズレます。そのためgyroflowは2つのポイントで画像データとgyroデータを解析してオフセットを計算してくれます。そのために動画のどのあたりで解析すべきかを指示するためにAuto sync timestampを指定します。動画を再生してみてクラッシュ以外で大きな動きをしている場所を動画の最初の方と終わりの方で調べておき、その時間を秒数でAuto sync timestmap 1とAuto sync timestamp 2に指定します。

Smoothnessは好みで変更しますが、とりあえずは20%で良いでしょう。Apply settings and compute syncを押すと同期のための処理が始まります。

後ろにあるコマンドラインのメッセージで処理の進行状況が分かります。また何かしら問題が発生したときにはヒントとなるエラーメッセージも確認できます。しばらくすると上のようなグラフが出るので、そのウインドウを閉じると続きの処理が始まります。

2つ目のグラフです。これは閉じるとすぐに次のグラフが表示されます。

このグラフを閉じるとまたしばらく処理が続きます。

しばらくすると下の方のDelay for sync 1とDelay for sync 2に数値が入ります。これでsync作業が終わりました。次はExportです。

Export画面で最低限入力が必要なのはExport bitrateです。これが足りないと元の動画より画質が劣ってしまいます。ビットレートはコーデックにより変わりますが、とりあえずは元の動画と同じくらいにしておけば良いでしょう。この例では40Mbsにしています。
もうひとつ必ず必要かどうかは分かりませんが、FFmpeg color space selectionにyuvj420pを指定しました。わたしの場合、これを入れておかないとyuv444pというカラープロファイルの動画になってしまいました。これだとDaVinvi Resolveなどで読み込めないので使えない動画ということになってしまいます。最初からyuv420pもしくはyuvj420pを指定すれば良いと思います。

Export (hopefully) stabilized videoを押して出力ファイル名を指定すると動画の書き出しが始まります。進捗が100%に達してpreview画面が消えれば終了です。

出力された動画はフレーム付きでフレームが揺れ動くものになります。これを動画編集で中央部分だけ切り取れば完成です。

もし出力されたファイルが再生できない場合は何かしら問題があります。進捗が出力されているコマンドウインドウに何かエラーが出ているかもしれないので調べて下さい。わたしが経験した事例をひとつ紹介しておきます。

[ トラブル事例 ]
Exportは出来るが普通では再生出来ない動画になった。VLCプレーヤーなら再生できる。あるいは再生は出来るが画質が悪い。
別の観点で調べてみると元の動画にかかわらず25FPS固定、ビットレートも指定通りになっていない。
以下のエラーメッセージがExport時に出力されていた。

11:47:26 :: Helper :: DEBUG :: No Custom FFmpeg path provided. Auto-Installing FFmpeg static binaries now. Please wait…
11:47:28 :: Helper :: ERROR :: HTTPSConnectionPool(host=’ffmpeg.zeranoe.com’, port=443): Max retries exceeded with url: /builds/win64/static/ffmpeg-latest-win64-static.zip (Caused by ProxyError(‘Cannot connect to proxy.’, OSError(0, ‘Error’)))

これは最初にExportする時に内部で使用するためのffmpegというプログラムを自動的に取りに行っているのですが、我が家のネットワーク事情により失敗していました。これが無いと高度な動画ファイルの作成が出来ません。そのため限られた範囲でExportされていました。ネットワーク環境を正しくして実行するとffmpegが取得され正しい動画がExportされました。

以下サンプル動画です。

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ケーブルを抜いて電源を切るようにします。

[ 録画 ]
後からジャイロデータと動画の同期を行う必要があるので、動画の最初と最後にわかりやすい動きを記録しておきます。カメラを大きく横と縦に振っておくと良いです。

[ 実際の手順 ]
動画にまとめましたので、それを見ていただくのがわかりやすいと思います。

いくつか動画の補足を書いておきます。
– 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なので、左のスティックはスロットルだけに集中し右スティックだけでコーディネートターンを行おうという狙いです。まだまだ練習中ですが、慣れてくると動きが省略されるので楽な気がします。速くなったかどうかは不明です。

以下、わかりにくいですがスティックカムを含めた動画です。