Dropbox

自分用のBetaflightプリセットを持つススメ

複数のFPVドローンを作っていると毎回自分なりの設定、しかも全く同じ設定を施していくことになります。レース機などで全く同じハードウェアならばdiff allを移していくだけでも良いですが、レートだけ同じものを使いたいとかモード画面だけをコピーしたいという場合、必要な部分をdiff allから抜き出して保管しておくという手法を利用されている方も多いと思います。

この記事はそう言ったdiff allから必要情報を抜き出すことが出来る人を対象に書いていきます。実際のところdiff allのデータは簡単に理解出来る部分も多くあります。これを機会にdiff allを眺めていただくのも良いかと思います。

必要なデータをCLIで読み込ませるだけでも目的を達成できます。それに対してプリセットを利用するメリットは注釈付きで一元管理出来ることです。また、場合によってはチェックボックスを表示して内容を選択してから適用するような仕組みも実装出来ます。

実際の私設プリセットの様子は「BetaflighのLED設定を行うプリセットを作りました」をご覧ください。これはLED設定のCLIコマンドをプリセット化したものです。いかなる設定でもCLIさえ決まればプリセット化出来ます。しかも私的なものであれば細かい内容を考えなくとも試すことが出来ます。実際にやってみるとなかなか便利です。お勧めします。

実装の方法をいくつかのパートに分けて紹介していきます。

– 私的Betaflightプリセット、Visual Studio Code+Live Server編 / とりあえず一番お手軽
– 私的Betaflightプリセット、webサーバー編 / 自前のサーバーを持っている人向け
– 私的Betaflightプリセット、github編 / gitを使っている人、gitに挑戦したい人向け

Betaflightプリセットのススメ

Betaflight Configuratorのプリセット画面を活用されていますか?

プリセットとは様々な設定をややこしいことを考えることなく適用するための仕組みです。VTXテーブルのような基本設定から達人のレートを取り入れたいみたいなマニアックな物まで色々あります。色々たくさんありすぎて意味不明な設定画面と見られている面もあるかと思います。

私が常用している二つの公式プリセットを紹介したいと思います。

[ VTXテーブル ]
当初、VTXテーブルはどこからか設定ファイルを探してきてVTX画面で読み込むという物でしたがTBS UnifyとかOVX300などの有名どころであればプリセットの適用で設定できます。

選択するとオプションを選ぶものもあります。

どのような設定がされるかはCLIを表示すれば確認できます。

[ ELRSリンク ]
ELRSのパケットレートに応じたプリセットを適用することにより適切なFeed Forwardが設定できます。この効果を自分自身で確認できたことはありません。おまじない的に設定しています。最近のOscar Liangの記事によると、これをちゃんとしないと振動が出るとも書かれています。

以上はBetaflightから公式に提供されている物です。私が個人的に提供しているLED設定もあります。
「BetaflighのLED設定を行うプリセットを作りました」

といった具合でプリセットはなかなか便利です。というこの記事は実はまえふりで、自前の設定をプリセット化すると便利だよという内容でブログを書こうと狙っています。

S1ポッドでLEDを決まった色にする設定

元々S1スイッチでLEDの色を変更しようというアイデアは調整次第で微妙な色を出そうという物でした。レースでへ決められた色を出すためには少々無理がありました。それをEdgeTXの設定でなんとかしようという試みです。

ELRSの設定によってはS1の挙動がカクカクするため黄色がちゃんと出ないという問題がありますが、それもこの設定で解決します。

ELRSのSwitch ModeがWideの場合はAUXがスティックと同様に細かい値を取ることが出来ますが、Switch ModeをHybridにするとデータ量を節約するためにAUXでは段階的な値しか取ることが出来ません。

[ 前提 ]
Betaflightの設定は「4波対応-プロポのポット(S1, S2)でLED色を変更する」で行います。

[ EdgeTXの設定 ]
Jumper T15でS1スイッチをAUX7として使用する場合の設定した時の画面です。他機種でもおそらく同様の設定が使用できるものと想像します。

全てモデルの設定の中で行います。
– CURVES

LEDという名前で上の通りの設定を作りました。グラフの意味は横軸(X)がS1の回転を現します。縦軸(Y)は実際にchannelに出力される値です。それぞれ中心を0とした+/-100で表現されています。Betaflightの受信機タブで表示される数値で言い換えるとS1が左端にある時は1000で、徐々に右に回していくと1250になり、中央付近では1500、右端に行くと2000が出力されます。

– INPUTS

s1という名前のINPUTSを作りました。SourceにS1、CurveをCstmとして上で作成したLEDを指定しました。

– MIXES

T15の標準設定ではCH10までは埋まっていると思います。そこでCH11を新設することにしました。これはBetaflighの受信機タブではAUX7に相当します。
Sourceに上で作成したledを指定するだけで完了です。

LEDの色変更をCLIで行う

あまり需要はないかも知れませんがBetaflight ConfiguratorのCLIコマンドラインで構成されている全てのLEDの色を変更する方法の紹介です。内容的には「OSD menuでLEDの色を変更する」と全く同じもので、LEDのRACEプロファイルというものを使用するものです。

[ 前提 ]
– LEDストリップがFCに正しく接続されていること
– Betaflightをビルドする際にオプションとして”LED Strip”と”LED Strip (64)”が指定されていること、ただしFCの種類とBetaflightのバージョンの組み合わせによっていは64LEDの指定が出来ない場合もあります

[ プリセットの使用 ]
下のセクションのCLIを使うかBetaflight Configuratorのプリセットを使用するかどちらかの方法で構成します。
– BetaflighのLED設定を行うプリセットを作りました

[ CLI ]
以下のコマンドをCLIで流し込みます。

# feature
feature LED_STRIP

# led
led 0 0,0::CT:14
led 1 1,0::CT:14
led 2 2,0::CT:14
led 3 3,0::CT:14
led 4 4,0::CT:14
led 5 5,0::CT:14
led 6 6,0::CT:14
led 7 7,0::CT:14
led 8 8,0::CT:14
led 9 9,0::CT:14
led 10 10,0::CT:14
led 11 11,0::CT:14
led 12 12,0::CT:14
led 13 13,0::CT:14
led 14 14,0::CT:14
led 15 15,0::CT:14
led 16 0,1::CT:14
led 17 1,1::CT:14
led 18 2,1::CT:14
led 19 3,1::CT:14
led 20 4,1::CT:14
led 21 5,1::CT:14
led 22 6,1::CT:14
led 23 7,1::CT:14
led 24 8,1::CT:14
led 25 9,1::CT:14
led 26 10,1::CT:14
led 27 11,1::CT:14
led 28 12,1::CT:14
led 29 13,1::CT:14
led 30 14,1::CT:14
led 31 15,1::CT:14
led 32 0,2::CT:14
led 33 1,2::CT:14
led 34 2,2::CT:14
led 35 3,2::CT:14
led 36 4,2::CT:14
led 37 5,2::CT:14
led 38 6,2::CT:14
led 39 7,2::CT:14
led 40 8,2::CT:14
led 41 9,2::CT:14
led 42 10,2::CT:14
led 43 11,2::CT:14
led 44 12,2::CT:14
led 45 13,2::CT:14
led 46 14,2::CT:14
led 47 15,2::CT:14
led 48 0,3::CT:14
led 49 1,3::CT:14
led 50 2,3::CT:14
led 51 3,3::CT:14
led 52 4,3::CT:14
led 53 5,3::CT:14
led 54 6,3::CT:14
led 55 7,3::CT:14
led 56 8,3::CT:14
led 57 9,3::CT:14
led 58 10,3::CT:14
led 59 11,3::CT:14
led 60 12,3::CT:14
led 61 13,3::CT:14
led 62 14,3::CT:14
led 63 15,3::CT:14

set ledstrip_profile = RACE

set ledstrip_race_color = RED
save

– LED数が32しかない場合は、エラーメッセージが出ますが気にしなくても大丈夫です。
– 送信機と受信機が接続されていない状態では正しいLED色になりません、確認のためには送信機をオンにしてください。
– 上のコマンドは設定も全て含んでいます。色だけを変える時は”set ledstrip_race_color = RED”の部分を変更すれば良いです。使用出来る色は以下の通りです。

BLACK, WHITE, RED, ORANGE, YELLOW, LIME_GREEN, GREEN, MINT_GREEN, CYAN, LIGHT_BLUE, BLUE, DARK_VIOLET, MAGENTA, DEEP_PINK

macOSでの野良アプリの走らせ方

最近のmacOSでは正式に署名されていない、所謂「野良アプリ」は単純な実行属性を持ったシェルスクリプトも含めてダウンロードしたものは簡単には実行できないようになっています。これはマルウェアなどを防止する上で有効な手段と言えます。しかしながら人によっては有用な野良アプリを必要とするのも事実です。

そこでmacOS超初心者も含めて野良アプリを走らせるまでの手順を紹介いたします。

[ zipファイルのダウンロードと展開 ]
どこかからzipファイルでアプリケーションをダウンロードしたとします。ファイルは「ダウンロード」フォルダーに保管されます。そのzipファイルをダブルクリックすると「ダウンロード」フォルダーに展開されます。

中身は以下の拡張子で見ると3種類のどれかです。
app : フォルダーの設定で”すべてのファイル名拡張子を表示”にしないとappという文字列は見えませんが、フォルダー上の種類が「アプリケーション」となっています。
pkg : インスーラ、ダブルクリックでインストーラが起動します。
dmg : ディスクイメージ、ダブルクリックするとディスクとしてマウントされます。その中にappかpkgが入っています。zipの代わりにdmgがダウンロードされることも多いです。

一般的な野良アプリではappがzipされているケースが多いと思います。展開後は「アプリケーション」フォルダーあるいは自分の好みの場所に移動させます。

[ xattrコマンドの実行 – GUI ]
一般的にはターミナルを開いてxattrコマンドをzip, app, dmgファイルに対して実行しますが、@ninjaMoonLightさんから便利なスクリプトを提供していただきました。
xattr.scptをダウンロードしてダブルクリックするあるいは下の内容をスクリプトエディタに貼り付けます。

set selectedFile to choose file with prompt "Select zip or app file to be run:"
set posixPath to POSIX path of selectedFile
set quotedPath to quoted form of posixPath
set cmd to "xattr -d com.apple.quarantine " & quotedPath
do shell script cmd
display alert "Done"


– スクリプト/実行、あるいは右上にある三角を押します。
– ファイルダイアログが出るのでダウンロードしたzipファイルかdmg、あるいはアプリケーションファイルを選択します。
– Doneと表示されれば完了です。2回実行するとスクリプトエラーが出ますが、これは問題ないです。

[ xattrコマンドの実行 – ターミナル ]
– ターミナルとzipを展開したアプリケーションが見えているフォルダーを開き並べて起きます。

– ターミナルに以下のどちらかの文字列を打ち込んでおく。

xattr -d com.apple.quarantine 
xattr -cr 

手打ちならば二つ目が楽ですね。最後にスペースが一つ必要です。
– フォルダーからアプリケーションファイルをドラッグしターミナルにドロップし改行を押してコマンドを実行します。

TinyViewPlus-NGのMacOS版をビルドしました

一本のHDMI入力で4channelまとめて表示できるVTXチューナーを利用してお馴染みのTiny View Plusを利用できるように改造したものをzubon2003さんが「TinyViewPlusの受信機回りをスッキリさせたい。」という記事で公開されています。ただし実行ファイルはWindows版のみです。ソースコードは公開されていますのでそのままMacOS版としてビルドすることが出来ました。

私のGithubにてMacOS版のバイナリーを公開しています。

[ テスト ]
ドローン部長よりHawk eye FOUR EYESをお借りできたので動作確認を行いました。HDMIアダプターは”GUERMOK USB 3.0 HDMI to USB C“というのを使用しました。

fpv.xmlの編集が必要です。TinyViewPlusNG.appを右クリックして「パッケージの内容を表示」を行います。その中のContents/Resources/Data/Camera/fpv.xmlを私の場合は以下のようにしました。

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

nameはHDMIアダプターにより変わります。grab/width,heightも実際の解像度に合わせます。どちらもVLCもしくはQuickTime Playerでキャプチャー入力を行うと調べられます。

解像度だけ合わせて手持ちの65タイニーを写してみたところ下にゴミが出ました。

そこで勘でgrab/heightを900にしたところ良い感じになりました。

実際の動作もスムースでしたので、実際のレースでも使えると思います。

Hummingbird V3.1 RaceSpecのLED Strip設定とその他諸々

Newbeedrone Hummingbird V3.1 RaceSpecは箱だしで16g台の軽さとその重量の軽さ以上に感じられる軽快な飛びでレーサーの期待を集めています。

[ LED Strip設定 ]
マッドさんが最初の頃にFC上のLED_StripがどこであるかをXで公表されていました。その時はRGB LEDをそこに接続するだけで使えていたそうです。ところが私の購入した機体およびファームウェア(betaflight_4.5.0_HUMMINGBIRD_RS_7498f3807_KAACK_Oct252024.hex)ではLEDとしての動作をさせることとができませんでした。調べてみるとLED_Stripのリソースが割り当てられていませんでした。そこで回答です。


左の写真で黄色いリード線を接続しているところがLED_Stripになります。そしてリソース関係の設定は以下のコマンドをCLIに投入します。

resource LED_STRIP 1 B01
timer B01 AF2
dma pin B01 0

LEDの数は32灯までです。
余談ですが、HummingBird V3 FCにはFC上に4灯のLEDが載っていました。

RaceSpecではこのLEDチップが取り付けられていません。そのランドを利用して外付けのRGB LEDを取り付けることにしたのです。またメーカーとしてはLEDチップを外したのでリソースからLED_Stripを削除したのは正しいことだと言えます。

[ USBコネクター ]
USBコネクターがもげてしまったと言う話しを聞きました。


上の投稿の通りでUSBコネクターのハウジングの足がFC基板のスルーホールに刺さっているだけで半田付けされていません。半田を流し込んでみました。おそらく、これで丈夫になると思います。

[ PID ]
色々な人の意見を総合するとメーカー設定のPIDは正しく出ていない気もします。ただしBlackboxログが取れないので数値での検証は出来ません。またフレームも極端に柔らかいことも考えるとなかなか難しいです。私は別の65機で調整がうまくいったPIDを使用して様子を見るつもりです。

TinySA UltraでVTXの毒電波を発見しよう

ひょんなことからTinySA Ultraという簡便なスペクトルアナライザーが6GHzまで対応しているらしいことを知りました。これならVTXの電波が見えるのではないかと思い試すことにしました。

詳細な情報はTinySA Wikiにまとまっています。

[ セルフテストとキャリブレーション ]
最初にテストと校正を行えとのことなのでやってみます。

まずは付属しているケーブルで上下のポートを接続します。画面をタップ(今時の静電式ではなく感圧式です)するとメニューが出ますのでCONFIG/SELF TESTを実行します。

続いてLEVEL CALを実行します。

こんなふうに5.34GHzを境に分かれています。CALIBRATE 100kHz to 5.340GHzを実行します。残念ながらVTXの周波数が含まれるCALIBRATE above 5.340GHzの方はTinySA単体では実行できないようです。まぁ精密な測定を行うわけではないので校正せずに進めます。

[ ENABLE ULTRA ]
6GHzまで測定するためにはCONFIG/->MORE/ENABLE ULTRAを有効にします。この時Unlock Codeを聞かれるので4321と入力します。

[ VTXの電波を見る ]
細かい設定はまだ良くわかっていませんが、とりあえずはVTXの電波は見ることが出来ました。

 下のポートに適当なアンテナを接続して周波数を設定しただけです。

トップメニューのFREQUENCYに入ります。STARTとSTOPの周波数を設定します。私はそれぞれ5.6GHzと6GHzにしてみました。

実際の電波を見たところです。F4(5800MHz)が見えています。ピークを検出して周波数を教えてくれるのが便利です。規定値ではひとつの周波数しか教えてもらえないので設定を変更します。トップメニューのMARKERに入ります。私は4 MARKERSにしてみました。

そしてE1, F1, F4の電波を同時に出してみました。

大体良い感じです。残念ながら毒電波を吐くVTXが手元にないので、悪い事例を紹介することはできませんでした。

[ 設定の保管 ]
ここまで行った設定をいつでも呼び出せるように保管しておきます。
トップメニューからPRESET/STORE/STORE 1にVTXという名前で保管しました。

これでいつでも設定が呼び出せます。また’STORE AS STARTUP’で起動時に読み込まれます。

[ SCREEN COPY ]
STORAGE/SAVE CAPTUREで画面のコピーがSDカードにBMPフォーマットで保管できます。いちいち名前を付けないと行けないのがちょっと面倒です。このブログにしようしている画面はWindowsのアプリから取り込んだものです。こちらはPNGフォーマットでした。このアプリ、すぐに接続は切れるし思うように動かないしで今ひとつですので詳しいことは省きます。

[ Water Fall表示 ]
トップメニュー/DISPLAY/WATER FALLをオンにすると時間経過とともに一定強度の信号を受信した記録が残ります。つまり少しだけ時間を遡って電波の状態を調べることが出来ます。

[ おまけ ]
HDZeroのNarrowモードが本当に17MHz帯域幅なのかどうかを調べてみました。

[ 関連記事 ]

– ドローンにRGB LEDを搭載するもう一つの方法 <- 親記事です
– ATtiny85によるLED制御 – ハードウェア実装編
– ATtiny85によるLED制御 – BUZZパッドを利用した制御方法
– ATtiny85によるLED制御 – UART/LEDパッドを利用した制御方法

注意 : Arduino IDEに組み込むFastLEDライブラリーをバージョン3.7.4以降に更新するとこの手順で作動しなくなりました。もし動かなくなった場合は3.7.3をインストールしてください。

[ 参考記事 ]
1. VTX周波数毎に決められた色にする
2. ミニAVRマイコン『ATtiny85』にブートローダーを書き込みArduinoとして使えるようにしてみる!ATtiny85の基本的な使い方!

この二つを読んで頂ければ、このプログラムの概要とATtiny85への書き込み方法が分かります。補足的な事柄を書いておきます。

[ ATtiny85について ]
ATtiny85にはいくつかのパッケージがあります。開発用、大きめのドローンに搭載するにはDIPバッケージ、Tinyに搭載するにはさらに小型のSOPパッケージが良いと思います。SOPにプログラムを書き込む時にはDIPへの変換ソケットがあると便利です。
10MHz動作版と20MHz動作版がありますが、どちらでも大丈夫と思います。

[ ツール類 ]
PCからATtiny85に接続するために何かしらツールが必要です。上のリンクでいくつか紹介されていますが、私は手元にあるArduino Nanoを使用しました。その他にブレッドボードがあると便利です。私はAmazonで色々と部品が付属したキットを購入しました。

[ 接続 ]
上の参考記事2にある「ArduinoとATtiny85の接続」の通りに接続します。記事ではArduino Unoを使用していますが、Arduino Nanoでも全く同じです。ピンの名前を頼りに接続します。写真はDIP版ATtiny85にプログラムを書き込んでいる様子です。

[ 書き込みソフトウェアの準備 ]
ATtiny85をArduinoとして使用します。お馴染みArduino IDEを使ってソフトウェアを書き込みます。

– Arduino Nanoに書き込み用のソフトウェアを導入します。
わたしのArduino Nanoの設定はこんな感じです。

ExmapleからArduinoISPを書き込んで準備完了です。

– ATtiny85を使用するための準備
ATtiny85を使用するためにはPreference/Additional boards manager URL欄に”https://www.arduino.cc/en/software”を追加しました。参考記事2に書かれていたURLでは機能しませんでした。
Toolsメニューの設定を下のように行いBootloaderの書き込みが成功すればATtiny85がAuduinoとして使えるようになります。

[ ATtiny85へのプログラムの書き込み ]
あとはプログラムを作成し書き込むだけです。設定はBootloaderの書き込みと同じです。Sketch(プログラム)のUploadは通常の方法とは異なり”Sketch/Upload using programmer”を使用します。新しいチップに書き込む時はBootloaderの書き込みも忘れないようにしてください。

今回使用したソースコードです。ninjaMoonLightさんが書き始めて、途中から私も参加して共同作業で書いたコードです。条件コンパイルするようになっています。下の状態ではBUZZパッドもしくはスイッチを使用するプログラムになっています。7行目のコメントを外し”USE_LEDPORT”というマクロを有効にするとLEDパッドを使用するためのプログラムになります。setup()の最後にdelay(500)を入れています。これはある構成においてFCの信号が期待通りになるまでに時間がかかった時に入れたものです。現在の使用方法だと必要はないかも知れませんが安全を見込んで入れたままにしています。

2025/09/08: 4機同時飛行の可能性を見込んで黄色を増やしました。ついでに黒(消灯)も追加し、白->赤->黄->緑->青->消灯と変化します。

// Pin assign
// arduino PIN 0,button = Attiny PIN 5
// arduino PIN 4,RGB LED = ATTiny PIN 3



#include 
#include 

//LEDの数
#define NUM_LEDS 100
//LED信号ピン
#define DATA_PIN 3
//ボタンのピン
#define buzzButton 0 // Buzz port
#define ledButton 1 // LED/UART

#define NUM_COLORS 6
#define NUM_MODES 3

CRGB leds[NUM_LEDS];
CRGB color = CRGB::Black;

int currentColor = 0;
int currentMode = 0;
int prevColor = -1;
unsigned long prevTime = 0;

int flgTimer = 1;
unsigned long btnTimer;
const unsigned long shortPress = 30;
const unsigned long longPress = 800;

void blinking() {
  unsigned long time = millis() / 100;
  if (time != prevTime) {
    FastLED.setBrightness( 255 );
    for (int i = 0; i < NUM_LEDS; i++) {
      if((time % 2) == 0){
        if((i % 2) == 0){
          leds[i] = color;    
        }else{
          leds[i] = CRGB::Black;
        }
      }else{
        if((i % 2) == 0){
          leds[i] = CRGB::Black;
        }else{
          leds[i] = color;
        }
      }
    }
    FastLED.show();
    prevTime = time;
  }
}

void heartBeat() {
  unsigned long time = millis() / 100;
  if (time != prevTime) {
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = color;
    }
    FastLED.setBrightness((7 - time % 7) * 255 / 7);
    FastLED.show();
    prevTime = time;
  }
}

void normal() {
  if (currentColor != prevColor) {
    FastLED.setBrightness( 255 );
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = color;;
    }
    FastLED.show();
    prevColor = currentColor;
  }
}

void setup() {
  currentColor = EEPROM.read(0);
  if (currentColor < 0 || NUM_COLORS <= currentColor) currentColor = 0;
  currentMode = EEPROM.read(1);
  if (currentMode < 0 || NUM_MODES <= currentMode) currentMode = 0;
//#ifdef USE_LEDPORT
//  pinMode(myButton, INPUT);  // button
//#else
//  pinMode(myButton, INPUT_PULLUP);  // button
//#endif
  pinMode(buzzButton, INPUT_PULLUP);
  pinMode(ledButton, INPUT);
  ///////LED
  FastLED.addLeds(leds, NUM_LEDS);  // GRB ordering
  // following delay may not be required
  delay(500);
}

void loop() {
//#ifdef USE_LEDPORT
//  if (digitalRead(myButton) == HIGH) {
//#else
//  if (digitalRead(myButton) == LOW) {
//#endif
  if (digitalRead(ledButton) == HIGH || digitalRead(buzzButton) == LOW) {
    if (flgTimer) {
      btnTimer = millis();
      flgTimer = 0;
    }
  } else {
    if (!flgTimer) {
      unsigned long diffTime = millis() - btnTimer;
      if (diffTime > longPress) { // Long pressed
        currentMode++;
        if (currentMode >= NUM_MODES) currentMode = 0;
        EEPROM.write(1, currentMode);
      } else if (diffTime > shortPress) {
        currentColor++;
        if (currentColor >= NUM_COLORS) currentColor = 0;
        EEPROM.write(0, currentColor);
      }
      flgTimer = 1;
    }
  }

  switch (currentColor) {
    case 0: color = CRGB::Red; break;
    case 1: color = CRGB::Yellow; break;    
    case 2: color = CRGB::Green; break;
    case 3: color = CRGB::Blue; break;
    case 4: color = CRGB::Black; break;
    case 5: color = CRGB::White; break;
  }
  switch (currentMode) {
    case 0: normal(); break;
    case 1: blinking(); break;
    case 2: heartBeat(); break;
  }
}

Insta360 GO 3をFPVドローンで使う

Insta360 GO 3のカメラ本体は小型でFPVドローンに搭載するのに適しています。ただし初代Insta360 GOに比べるとだいぶ大きくなり、重量も35gほどあり超小型のドローンには少々重くなっています。
そこで試しに100g未満の2S FPV機に載せて飛ばしてみました。重さは感じますが、慣れてしまえば軽いアクロバティクな動作も可能でした。ということで、GO 3をFPV機に載せて撮影する時のわたしの設定や気がついた事柄をつらつらと書いておきます。

[ ビデオモード ]
動画の撮影には二つのモードがあります。撮影時に縦横比やスタビライズの掛け方を決めておく「動画」、撮って出しが可能な簡便な撮影モードです。もうひとつは「FreeFrame動画」で初代GOからある縦横比もスタビライズも後から携帯電話アプリもしくはPC上のアプリで決定を行うモードです。これはカメラのセンサーをフルに活用し真四角くかつ丸い動画を記録します。四角で丸いという意味は下の写真をご覧ください。これをアプリケーションで加工します。最近の流行りの縦長動画も後から作れます。またスタビライズは同時に記録されているジャイロデータを使用します。スタビライズの掛け方も後から選択できます。
FPVドローンではFreeFrame一択とわたしは考えます。

[ 録画可能時間の謎 ]
わたしのGO 3は64GBモデルです。これで実際のところどれくらいの動画が撮影できるのかが気になるところです。本体のプレビュー画面の左上に残り時間らしきものが表示されています。そこにはFreeFrame動画の場合は1h37mと出ています。FreeFrame動画もプレビュー画面で縦横比、解像度、フレーム数を選択することが出来ます。ところがどの設定を選んでも残り時間が変わりません。そこで実験です。

[ FreeFrame動画の実験 ]
まずは1440P/50FPSにして実際に録画をしてみたところ1時間35分ほど録画出来ました。表示されていた残り時間は正しいようです。次に各設定で録画したデータの検証です。結論から言うと、どの設定にしてもビットレートは約80Mb/sと変わりませんでした。つまりストレージの消費は設定に関わらず同じですので残り時間が同じになるのは当然です。

もう少し掘り下げてみます。画面上の選択肢は三種類あります。縦横比が16:9と9:16です。これはプレビュー表示の変更だけであることは容易に想像出来ました。解像度は1440Pと1080Pが選択できますが、実際に録画されたデータを検証するとどちらも2688×2688の動画になっています。動画を再生してみても差があるように思えません。もしかすると将来的には差が出るような計画なのかもしれません。フレームレートは50, 30, 25, 24が選べます。これは正しく録画されたデータに反映されていました。ただしビットレートはどれも同じです。画質に差が出ているかテストしてみましたが、ほとんど同じに見えます。1440P 50FPSがやや荒いようにも感じますが、ほぼ気のせいレベルです。静止した対象物でのテストしか行っていませんので、動きがある場合は何か違う可能性もあります。とりあえずは好みのフレームレートを選択すれば良いと思います。もしかするとこれも将来のファームウェア更新で変わってくるのかもしれません。

[ ISO/シャッタースピード/WB ]
お手軽撮影が売りのInsta360 GOシリーズですし、ISO, シャッタースピード, ホワイトバランスを自動で撮影しました。私的には概ね問題無しです。

木陰を通り過ぎる時にじわっと画面の明るさが変化しています。GoPro Hero6で同じことをすると急激にかくっと感度が変化してしまうと思います。それを経験して以来、GoProではISO固定で使用していますので、最近のモデルで何か変わったかどうかはわかりません。

じわっとした感度変化も嫌う場合はISO, シャッタースピードを手動設定するしかありません。プレビューが簡単に出来るので手動でも失敗がないのは大きな利点です。

[ スタビライズ ]
Gyroflowを使用しています。同期ポイントの手動設定は必要ありません。FOVやスタビライズの強さなど自由に変更出来るのが魅力ですが、規定値のままで問題無しです。画面の補正はリニアな感じになります。縦長の動画やワイドレンズっぽい湾曲した画面が欲しい時にはInsta360 Studioを使用すると良いでしょう。

[ カラー・プロファイル ]
シーンに合わせた多彩なフィルターが用意されていますが、わたしはFlatを使用しています。これは画像編集ソフトで色の調整が必要になります。どのLUTを使うべきか情報が見当たりませんがCaddx Peanutと同様にInsta360 X2用のLUT、ONE-X2-LUTを適用すると良い感じにノーマライズされます。X3-LUTでも良いかもしれません。X2用もX3用も、どちらもほぼ同じに見えます。

LUTファイルはInsta360のダウンロードページにあります。

[ アクションポッド ]

液晶の付いたポッドは特別なことをしなくても常にカメラ本体と接続されています。ドローンを離陸位置にセットしてからポッドでプレビューを確認し録画をスタートする。また着陸したらポッドから録画を停止する。という使い方が出来ます。FPVドローンの使用シーンにおいて完璧なリモコン装置です。

[ 風切り音 ]
動画の中にプロペラ音を取り込むのが好きなので録音機能が搭載されているのはとてもありがたいです。
音声設定は3通りあります。「風切り音低減」「ステレオ」「方向性強調」です。「風切り音低減」を使用したところ、今まで試したどんなHDカムより優秀でした。ほぼ風切り音のない動画が出来上がりました。

[ NDフィルター ]
購入時にはレンズ保護のための透明なフィルターが装着されています。まだ公式なNDフィルターは発表されていないと思います。サイズ的にはCaddx Peanut用のNDフィルターが装着可能でした。ただし、このNDフィルターは色温度が変わってしまうことが分かっています。当面、NDフィルターは使用せずに撮影することにします。

[ マウント ]

Insta360 GO 3マウント(GoPro互換)

Insta360 GO 3マウント(RunCam Thumb Pro共通)