Dropbox

Led4Vtx.lua v1.3

LEDの色とVTXチャネルを同時に設定するLuaスクリプト」をいくつか改良しました。おそらく、これで完成版です。

[ 改良点 ]
v1.1
大きな画面を持つ送信機(T15以上)ではボタンを大きくした

v1.2
切り替えを素早く繰り返すとVTXチャネルとLEDの色の組み合わせがズレる(LED変更がミスる)ことの修正

v1.3
現在のVTXチャネル設定(ELRS TXモジュールに保管されている)を取得して画面右上に表示するようにした。

LED色のVTXチャネル連動、4波版

現在タイニードローンのレースや練習会で使用されている4波のチャネルにはいくつかの組み合わせがあります。中には3波の頃に行っていたVTXチャネル連動のLEDの色変更が使える組み合わせもあります。下の動画のようにVXTXチャネルを何等かの方法で設定するだけでBetaflightが対応する色を自動的に設定してくれるというものです。

[ 実際に使用されている4波の組み合わせ例 ]

1. (E2)5685[LED2], (A8)5725[LED3], (A5)5785[LED4], (A4)5805[LED6]
2. (E1)5705[LED2], (A8)5725[LED3], (A5)5785[LED4], (F5)5820[LED6]
3. (E2)5685[LED2], (E1)5705[LED2], (F3)5780[LED4], (F5)5820[LED6]

この表記は私の https://github.com/nkozawa/IMDAvoider3 で使用しているものです。チャネルと周波数は説明の必要がないと思います。それに続くLED2などと書かれているのがこの説明のキーポイントです。これはLEDストリップ画面にあるラーパレットの番号です。

この画面の数値の部分です。周波数とパレットの番号の関連付けはRacebandを基準にBetaflightの内部で固定的に決められています。詳しくはSetting LED color to the VTx Frequencyをご覧ください。

4波の組み合せ例に戻ると、例の1と2は、LED2,LED3,LED4,LED6と別々のパレットが使われます。反して、例3ではLED2が2回現れます。
< 例1と例2 > チャネル毎に違うパレットが選ばれるためVTXチャネルによるLEDの色変更が可能です。
< 例3 > E2とE1が同じパレットを使用するため、ここで紹介する設定は使用出来ません。VTXチャネルとLEDの色を個別に設定しないといけません。別々の設定をスクリプトで一度に行おうという試みについては「LEDの色とVTXチャネルを同時に設定するLuaスクリプト」をご覧ください。

[ 設定 ]
ここからが本編です。VTXチャネルの組み合わせを全部調べた訳ではありませんが、おそらくLEDカラーパレット2, 3, 4, 6でほぼ網羅出来ると思います。以下、このパレットを使用する設定です。


LEDストリップ画面で設定する場合は上のようになります。カラーパレットの2, 3, 4, 6番の設定は以下の通りです。

パレット番号 H S V
2 Red 0 0 255
3 Green 120 0 255
4 Blue 240 0 255
6 Yellow 60 0 255

プリセットも用意しました。

CLI用のコマンドは以下の通りです。

#--- Set up status mode ---

feature LED_STRIP
set ledstrip_profile = STATUS

# --- Set LED ---

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

# color
color 2 0,0,255
color 3 120,0,255
color 4 240,0,255
color 6 60,0,255

macOSでBlackboxログファイルのコピーを少しだけ便利にする方法

macOSでBlackboxログファイルは普通にコピー出来ますが、そのあとでファイル名を変更をするためにはまずロックを外さなければなりません。これが何気に面倒です。そこでコピーしたあとで自動的にロックを外す仕組みを作りました。

[ 手順 ]
– 下にあるスクリプトをbblcopy.scptという名前でどこかに保管します。
– ドローンを接続してBetaflight Configurator/blackboxで「大容量ストレージモードを有効化」を行います。
– Finderからbblcopy.scptをダブルクリックするとスクリプトエディターが立ち上がります。
– スクリプト/実行
– コピー元であるドローンのログが表示されますのでコピーしたいものを選択します(複数可)。
– 次のダイアログでコピー先を選択。
以上でログファイルがコピーされロックも外れます。すぐにファィル名の変更が可能です。

[ メニューバーからスクリプトを起動する ]
まず、bblcopy.scptを所定の場所にコピーする。私は以下の手順をとりました。

mkdir ~/Library/Scripts
cp bblcopy.scpt ~/Library/Scripts

Finderから行う場合は、移動メニューを出してOptionを押すとメニューにライブラリが現れるのでそこで作業します。

そして、スクリプトエディタを立ち上げて設定を開き「メニューバーにスクリプトメニューを表示」にチェックを入れます。


こんな感じで何時でもサクッと起動できるようになります。

[ 補足 ]
コピー先を覚えておくために~/Library/Application Support/bblcopy/にファイルを作っています。

# bblcopy.scpt — Blackbox log コピー用 AppleScript

property lastDestPath : ""

on run
    set prefsFolder to (POSIX path of (path to home folder)) & "Library/Application Support/bblcopy/"
    set prefsFile to prefsFolder & "last_dest.txt"
    do shell script "mkdir -p " & quoted form of prefsFolder

    try
        set savedPath to (do shell script "cat " & quoted form of prefsFile)
        if savedPath ≠ "" and (do shell script "test -d " & quoted form of savedPath & " && echo yes || echo no") = "yes" then
            set lastDestPath to savedPath
        end if
    end try

    if lastDestPath = "" then
        set lastDestPath to POSIX path of (path to desktop folder)
    end if

    set volumeMounted to (do shell script "test -d /Volumes/BETAFLT && echo yes || echo no") = "yes"
    if not volumeMounted then
        display dialog "/Volumes/BETAFLT がマウントされていません。Betaflight Configuratorから大容量ストレージモードを有効にして下さい。" ¬
            with title "ボリュームが見つかりません" ¬
            buttons {"OK"} default button "OK" ¬
            with icon caution
        return
    end if

    set srcFiles to choose file ¬
        with prompt "コピー元ファイルを選択(複数可)" ¬
        default location (POSIX file "/Volumes/BETAFLT/") ¬
        multiple selections allowed true

    if srcFiles = {} then return

    set destFolder to choose folder ¬
        with prompt "コピー先フォルダーを選択" ¬
        default location (POSIX file lastDestPath)

    set lastDestPath to POSIX path of destFolder
    do shell script "echo " & quoted form of lastDestPath & " > " & quoted form of prefsFile

    set destPOSIX to POSIX path of destFolder
    set copiedCount to 0
    set skippedCount to 0
    set overwriteAll to false

    repeat with f in srcFiles
        set srcPOSIX to POSIX path of f
        set baseName to (do shell script "basename " & quoted form of srcPOSIX)
        set destPath to destPOSIX & baseName
        set fileExists to (do shell script "test -e " & quoted form of destPath & " && echo yes || echo no") = "yes"

        set doCopy to true
        if fileExists and not overwriteAll then
            display dialog (baseName & " は既にコピー先に存在します。上書きしますか?") ¬
                with title "同名ファイルの確認" ¬
                buttons {"スキップ", "すべて上書き", "上書き"} ¬
                default button "上書き"
            set theButton to button returned of result
            if theButton = "スキップ" then
                set doCopy to false
            else if theButton = "すべて上書き" then
                set overwriteAll to true
            end if
        end if

        if doCopy then
            do shell script "cp -f " & quoted form of srcPOSIX & " " & quoted form of destPath
            do shell script "chflags nouchg " & quoted form of destPath
            set copiedCount to copiedCount + 1
        else
            set skippedCount to skippedCount + 1
        end if
    end repeat

    set resultMessage to (copiedCount as text) & " 件のファイルをコピーしました"
    if skippedCount > 0 then
        set resultMessage to resultMessage & "(" & (skippedCount as text) & " 件スキップ)"
    end if

    display notification resultMessage ¬
        with title "Blackbox Log コピー完了" ¬
        subtitle destPOSIX

    display dialog (resultMessage & "。" & return & return & destPOSIX) ¬
        with title "コピー完了" ¬
        buttons {"OK"} default button "OK"
end run

LEDの色とVTXチャネルを同時に設定するLuaスクリプト

WTW四国ではタイニーレースにおいてLEDの装着と周波数毎に決められた色で発光させることをレギュレーションに取り入れています。これにより観戦者のレースへの理解度が深まることは間違いありません。

3波でのレースにおいてはVTX周波数とLEDの色の対応付けを行うことが容易でした。それが4波になって、この関連付けが不可能なチャネルの組み合わせが出てきました。そのためVTXチャネルとLEDの色を別々に設定する必要があり事前準備も実際の使用にも煩雑さが生じました。

そこで長い間、温めていたアイデアを実装いたしました。準備作業は比較的簡単で済みます。またレースの現場では送信機のLuaスクリプト上のワンアクションでVTXとLEDの設定が行えるものです。

Luaスクリプトはhttps://github.com/nkozawa/Led4Vtxで公開しています。以下の説明はGitHubサイトにあるREADMEにほんの少しだけ追加の情報を付け加えたものでほぼ同じです。

[ ドローンの設定 ]

LEDストリップ画面で機能にカラーを設定し、何かしら任意の色でLEDが光るようになれば準備完了です。

CLIで変更する場合は以下のコマンドを使用します。
https://github.com/nkozawa/Led4Vtx/blob/main/LED_Simple_Color.txt

プリセットも用意しました。

[ 二つのスクリプト ]
フルスペックなLed4Vtx.luaと簡易版のLed4VtxLite.luaがあります。

< Led4Vtx.lua >
単体ではLEDの色の設定しか出来ません。VTXチャネルの設定はEasyVTXchのお気に入り機能を使用します。EasyVTXchでお気に入りを登録した後でLed4VtxでLEDの色の長押しでお気に入り登録を行います。そうすると自動的にEasyVTXchでお気に入りしたVTXチャネルがLEDの色のお気に入りと関連付けられます。

導入はLed4Vtx.luaを送信機のSCRIPTS/TOOLSにコピーします。もしすでに古いバージョンのLed4Vtx.luacが存在する場合は削除してから新しいLed4Vtx.luaをコピーして下さい。

< Led4VtxLite.lua >
画面での設定を一切省いたものです。頻繁に設定を変更する場合には全く不向きです。予め設定してあるled4vtxlite.favが必要となります。現在四国のレース設定である、E2=赤、E1=緑、F3=青、F5=黄に設定したファイルをGitHubで提供しています。
もし変更が必要であればled4vtxlite.favを編集します。

E2,Red
E1,Green
F3,Blue
F5,Yellow

内容は見ての通りです。使用出来る色名はRed, Orange, Yellow, Green, Cyan, Blue, Violetです。

導入はLed4VtxLite.luaとled4vtxlite.favをSCRIPTS/TOOLSにコピーします。もしすでに古いバージョンのLed4VtxLite.luacが存在する場合は削除してから新しいLed4VtxLite.luaをコピーして下さい。

[ 注意点 ]
– 現在のバージョンでは素早くLED、VTXチャネルを切り替えようとすると正しく動きません。連続して操作する場合は少し時間をあける必要があります。
– このプログラムを実行するとBetaflightのカラーパレットが全て変更されます。もし元の状態に戻す必要がある場合は下のCLIコマンドを実行して下さい。
https://github.com/nkozawa/Led4Vtx/blob/main/defaultPalette.txt

EACHINE ROTG01 PRO 受信機 x 4 => HDMI x 1

EACHINE ROTG01 PROで受信したVTXからの映像4台分を一つのHDMI画面にまとめてみようという試みです。つまりはHawkeye Four EyesあるいはHDZero Event VRXの真似をしようということです。

[ 目的 ]
TinyViewPlusNGFPVTrackSideの入力として使用するためです。

TinyViewPlusのMac版ではROTG01 PROを4台接続することは出来ますが、どの受信機が何番目に出てくるかが全く制御できません。レースの現場ではとても使用できるものではありませんでした。Four EyesやEvent VRXで一つの映像にまとめたものをTinyViewPlusNGでそれを分割することがMacにおける唯一の解です。
– FPVTrackSideでは今の所、複数のROTG01 PROを接続しても一つの画像しか得られません。そのため画面分割を使用するしかありません。Windows版は複数ROTG01 PROが使用できるように改善される見込みです。
– そもそもPCのUSBポートが少なくて4台もROTG01 PROを接続できない。そのためFour Eyesを使えるようにということでTinyViewPlus-NGが出来たそうです。

[ ハードウェア ]
– ROTG01 PROという受信機でUVC (USB Video Class)を持ったものを4台。他の似たような受信機も使用できると思います。
– Raspberry Pi4BとRaspberry Pi5でテストしました。 (メモリーはおそらく小さめでも大丈夫です)
– microHDMIケーブル。Raspberry PiのHDMIコネクターはとても小さいやつです。
– HDMI to USB変換器、私が使っているのは「GUERMOK USB 3.0 HDMI to USB C オーディオ キャプチャ カード」というやつです。似たようなものでも性能的に問題がある製品もあるようなので要注意です。

USB-AにROOTG01 PROを接続します。システムが立ち上がってからUSBを挿入していくと、その順番でデバイス番号が割り当てられます。電源投入前に全て接続しておけば、USBコネクターとデバイス番号がいつも同じ関係に出来ます。HDMIコネクターは二つあるどちらでも稼働できるようにシステムを構成しています。
電源はRaspberry Pi用に販売している容量の少し大きいものを使用しています。
必要性はよくわかりませんがRaspberry Piには冷却ファンを付けています。この構成で12時間以上連続稼働可能でした。

[ ソフトウェア ]
githubでraspi4eyesを公開しました。導入手順も詳しく書いてますので、実際の導入にあたってはgithubをご覧ください。導入にあたっていくつかの選択肢があります。それについて書いておきます。

< Raspberry Pi Desktop上で動かす >
README.mdに書いてある手順に従ってください。

< 軽量化システムを構築する >
Rasoverry Piのシステムは容量小さめのMicroSDカードに収まります。専用のシステムを構築するのが良いと思います。Desktopを使わない「Cageを使用したヘッドレス環境での起動手順」というのを用意しています。私はRaspiberry Pi4BにOSはRaspberry Pi OS Lite (64-bit)を新規に導入して専用システムを構築しました。
またOSの起動時に自動的にraspi4eyesが立ち上げる設定についても、この手順書に書いてあります。
軽量化システムのメモリーの様子です。

               total        used        free      shared  buff/cache   available
Mem:         3886904      399860     3189784       65496      424224     3487044
Swap:              0           0           0

< ターンキーシステム化 >
いきなり電源オフしても壊れないようにします。使用後にいちいちログインしてシャットダウンするのはあまりカッコの良いものではありません。使用する時は、必要な接続を行い電源を入れるだけ。使用後は電源をいきなり止めて仕舞えば良いという構成にすれば使い勝手がとてもよくなります。最近のRaspberry OSではとても簡単に実現できます。「ターンキーシステム化のための Overlay File System 設定手順

< noise_threshold >
raspi4eyesの機能の一つに砂嵐画面を検知して黒い画面に切り替えるというものがあります。これはHDZero Event VRXの同様の機能を真似してみようと実装しました。それを制御するための項目がconfig.jsonの中の”noise_threshold”です。規定値として0.4が入っています。受信機の特性や環境によっては砂嵐が時々見えてしまうかも知れません。その時はこの数値を少し増やしてみてください。私はある一つの受信機のために数値を0.42に変更しました。おそらく0.5くらいまでは増やしても大丈夫そうです。


< adjust.json >
砂嵐画面を出さないと困ることがひとつあります。それはROTG01 PROの周波数調整を行う時です。微調整はドローンからの画像が出ているときにすれば良いですが、最初に設定する時は砂嵐画面を出しておきたいです。そのためには先の”noise_threshold”を0にすれば良いです。これを0にしたconfigファイルadjust.jsonを用意しています。これをconfig.jsonの代わりに使用すれば良いです。DISPLAY=:0 .venv/bin/python raspi4eyes.py --config adjust.jsonあるいはcage -s -- .venv/bin/python raspi4eyes.py --config adjust.jsonのように使用します。

[ TinyViewPlusNG ]
fpv.xmlをこんなふうに設定しました。

<camera>
    <name>USB3 Video</name>
    <camnum>4</camnum>
    <description>4:3</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>4:3</aspectRatio>
    </draw>
    <fourCamHorizontal>0</fourCamHorizontal>
</camera>

[ FPVTrackSide ]
最初、4:3の解像度を選ぶべきと思っていましたが、どれが最適かよくわかっていないです。いろいろ試してみて下さい。レートは60Hzが良いと思います。
Video Inputの設定でChannel Splitsを2 x 2にすると画面を4分割してくれます。

DJI Avata 360の動画をDaVinci Resolveでグリグリ編集する

空飛ぶ360度カメラ、DJI Avata 360、とりあえず良さそうなところをゆったり飛ばして後からどこを見せるかを考えれば良いというシチュエーションによっては最強のツールです。

そのため従来の編集作業に加えてグルグル回すという作業が必要になります。そのためのツールとしてDJI Studioという動画編集アプリケーションとAdobe Premiere用のプラグインがありました。それに加えて待望のDaVinci Resolve用のプラグインDJI Reframeもついに提供されました。pkgファイルをダウンロードして導入すれば準備完了です。

最初にDJI StudioとDJI Reframeプラグイの違いについて書いておきます。

DJI Studioではあらかじめプログラムされた動きが用意されているので、簡単にグリグリ出来ます。また、目標を設定して追従させるインテリジェントトラッキングという機能はDJI Studioにしかありません。自分で細かく動きを決めるキーフレームという機能もあります。普通に軽く編集するだけならDJI Studioで十分です。

Premiereは持っていないので分かりませんがDaVinci ResolveのDJI Reframeで行えることはDJI Studioのキーフレームの機能だけです。キーフレーム間の変化量はDaVinci Resolveの方が自由度が高いです。なんと言っても、その他の多彩な動画編集機能と同時に使えることが最大の強みです。

簡単に手順を紹介します。

[ DJI StudioでDaVinci Resolve向けにExportする ]

DJI Studioに元の動画ファイルを読み込んでタイムラインを作成し「エクスポート/パノラマ動画/DaVinci Resolveフォーマット」を実行します。かなり時間がかかるので予め必要な部分だけに編集しておくのが良いと思います。

[ DaVinci Resolveに動画を読み込む ]

動画を読み込みタイムラインを作成したところです。360度全てが映り込んだ画面が表示されます。

[ DJI Reframeを適用する ]

「エフェクト/OpenFX/フィルター」にDJI Reframeがあります。それをタイムラインにドラッグ・ドロップします。するとプレビュー画面が変わります。

[ パラメーターを表示する ]

赤丸で囲った四角のアイコンをクリックしてパラメーターを表示します。これは表示しなくても編集作業は出来ますが、出しておいた方が格段にわかりやすくなります。

[ 横回転させてみる ]
360度の編集を横回転を例として紹介します。目標はタイムラインの35秒から左にパンを始めて40秒で360度回転して終了するというものです。

まずインスペクタでエフェクト/OpenFXを出しておきます。タイムラインの現在位置を35秒のところにしてインスペクタのPanの右の方にある小さな菱形をクリックします。すると菱形が赤くなりキーフレームが記録されます。これを起点とします。

40秒のところに移動して先ほどと同様にPanの小さな菱形をクリックし、ここを終点とします。そしてPanの数値を360とします。タイムラインのパラメーターを見るとどこにキーフレームを打ったが明確に分かります。

これで回転動作が出来ました。タイムラインを再生させて確認します。

この要領でTiltやRotate, FOVなどを組み合わせていきます。

このままだと二つのキーフレームの間の数値の変化は一定速度です。これを例えば最初はゆっくりでだんだん加速するみたいなこともできます。

パラメーターの左横のカーブしたアイコンとPanの左端のカーブアイコンをクリックした状態です。これで表示されるグラフを変更すると数値変化の具合を調整できます。

最後に複数の動作を組み合わせた例を紹介しておきます。

VTXバンド、チャネルを表示するEdgeTXのウィジェットを作りました

このELRSVTXウィジェットはExpressLRSもしくはEasyVTXchでVTXのチャネルを変更した時にのみ有効です。

[ 導入 ]
ELRSVTXのリリースページから最新版のELRSVTX.zipをダウンロードして展開したものをEdgeTX送信機のSDカードのWIDGETS下にコピーします。コピー後は以下のような配置になります。

/WIDGETS/ELRSVTX/main.lua

ウィジェットの配置方法、設定方法についてはここでは説明しませんので、別途調査してください。

[ 技術的背景 ]
送信機上でExpressLRS LuaスクリプトあるいはEasyVTXch Luaスクリプトを使用してVTXチャネルの変更を行うとELRS TXモジュールを経由してドローンのVTXチャネルを変更していることは容易に想像できると思います。実際に使用していると、一度変更を実施すると、別のドローンを接続した際にスクリプトでの操作を行わなくても前回設定したVTXチャネルが新たに接続したドローンにも反映されることに気づくと思います。また送信機のオフオンを行っても前回設定したVTXチャネルを覚えています。

このVTXチャネル設定はEdgeTXが覚えているわけではなくELRS TXモジュールが記憶していることがelrs.luaを解析することによりわかりました。

さらにいうならばExpressLRS Luaスクリプトを起動すると以下のメニューが出ますが、これらの項目は全てELRS TXモジュールに格納されている文字列、設定項目です。

このメニューの中にVTX Admin (F:4:1)という部分があるので、このスクリプトを起動すればELRS TXモジュールが記憶しているVTXチャネルはわかります。ただ面倒です。そこでこのデータを取得し表示するウィジェットを作成すれば、送信機の電源投入直後に確認できて便利であるというのが、このウィジェットの目的です。

私的Betaflightプリセット、github編

公式のプリセット設定ガイドではguthub上で開発およびテストを行う方法が紹介されています。この方法で自分だけのプリセットを作ることが出来ます。

ただしgithubの仕組みについてある程度の知識が必要です。当然、githubのアカウントも必要です。また、仕組み上URLを知る人全てに公開することにもなります。gitによる履歴管理が出来るのが大きなメリットでもあります。なんでもgitで管理したい人には超お勧めです。

githubを使用しない方法は別の記事で解説しています。

以下、私的プリセットの作り方ですがgithubの操作が出来ることを前提としています。

本家のリポジトリは以下のURLです。
https://github.com/betaflight/firmware-presets

手順は、概ねこのリポジトリのreadmeに書かれている通りです。
– 自分のgithubアカウントにfirmware-presetsをforkします(readmeではcloneすると書かれている)。
– PCに自分のアカウントのfirmware-presetsをcloneします。
– 独自のbranchを作成する。
– presers以下にBetafliightバージョン、カテゴリー別に分類されてプリセットファイルが配置されているので、既存のファイルに倣って自分のプリセットファイルを作成します。#$で始まるヘッダーは見ればわかる内容なのでそれなりに真似をします。それ以下は基本的にはCLIコマンドを並べるだけです。オプションによる選択肢付きの記述例は私のLEDプリセットをご覧ください。
自分のものと関係のないプリセットは削除してしまうのが良いと思います。
– 以下のコマンドを実行する。(Node.jsが導入されていることが必要です)

node indexer/indexer.js
node indexer/check.js

AI任せで生成したPython版のインデックス作成ツールもあります。実行方法は以下の通り。

python3 -m python_indexer.indexer

– [readmeにはないステップ] “.gitignore”を編集し”/index.json”と”/index_hash.txt”取り除く。
– 自分のgithubのbranchにpushする。

プリセットソースに自分のgithub URLとbranch名を設定すれば使えるようになります。具体的な手順は「BetaflighのLED設定を行うプリセットを作りました」をご覧ください。

私的Betaflightプリセット、webサーバー編

私的Betaflightプリセット、Visual Studio Code+Live Server編」の続きとして書きます。実際はサーバー上で全ての作業を完結させることも可能ですが、ここではPC上で作成したデータを使用することにします。

どこかにwebサーバーをお持ちの方は上の記事で作成したfirmware-presetsフォルダーをサーバーにアップロードすればほぼ完成と言っても良いです。サーバーは家庭内、インターネット上、どちらでも大丈夫と思います。私自身は家庭内で常時稼働しているNAS上のwebサーバーを使用しています。インターネット上のサーバーでも変わりはないと思いますが、私の考慮が足りないこともありますので稼働するに当たって何か問題があってまご容赦願います。

Betaflight Configuratorがアプリ版の場合は問題ありませんが、2025.12以降のweb版を使用する場合は”firmaware-presets/.htaccess”に以下の一行を設定する必要があります。

Header set Access-Control-Allow-Origin: https://app.betaflight.com

私の場合、NAS上で稼働していたwebサーバーがNginxであったため上の設定が正しく反映できませんでした。Apacheに入れ替えて正しく機能するようになりました。

あとはローカルの時と同様にプリセットソースにサーバーのURLを設定すれば使えます。

まだ環境的には完成していませんが、MacBook Air上でプリセットを作成、NASに同期、家庭内では常時稼働のNASをプリセットソースとして使用。出先ではVSCodeのLive Serverをプリセットソースとして使用するという方式で運用することにしました。

私的Betaflightプリセット、Visual Studio Code+Live Server編

プリセットを自分で持つためには何かしらBetaflight Configuratorにデータを提供するための仕組みが必要です。その基本要素はwebサーバーです。ここでは自分のPC上にwebサーバーを持つ手段としてVisual Studio Codeの拡張機能を使用する方法を紹介します。これが一番手軽な方法と思います。

以下の手順はmacOS, Windows 11共に確認しています。Windowsの場合はPython3の導入(とても簡単)が必要です。

[ Visual Studio Codeの導入 ]
とても使いやすく多機能なテキストエディターです。もし持っていなければ導入しておいて損はないと思います。導入は難しくないのですし情報も多く見つかると思いますので導入手順は省略します。

[ Live Server拡張機能の導入 ]
– Visual Studio Code、以下VSCodeと表記、で”表示/拡張機能(View/Extensions)”を開く
– “Live Server”を検索しインストールする

– 続いて歯車アイコン/設定(Settings)を開きます

– [重要] Corsという設定を探してチェックを入れます、Betaflight Configuratorのwebアプリ版では必須です

これでローカルのwebサーバーを起動する準備ができました。

[ firmware-presetsのダウンロード ]
– 本家のfirmware-presetsもしくは私のfirmare-presets udonのページを開きます
– Codeボタンを押してDownload ZIPを行います
– ダウンロードしたZIPファイルをどこかに展開します

[ プリセットの作成 ]

展開したZIPファイルの中のpresetsフォルダー以下にファームウェアのバージョンを記したフォルダー、その下にカテゴリーのフォルダーがあり、そこにプリセットを置きます。自分自身だけのプリセットデータを置くので、既存のデータは全部消します。

ここでは例として私のタイニー用のモード設定のプリセットを作ってみます。
– パス名はpresets/2025.12/other/TinyMode.txtとします
– 内容は下のようにしました。

#$ TITLE: My Mode settings for TinyWhoop
#$ FIRMWARE_VERSION: 2025.12
#$ CATEGORY: OTHER
#$ STATUS: COMMUNITY
#$ KEYWORDS: tiny, mode
#$ AUTHOR: KozakFPV

#$ DESCRIPTION: My Mode settings for TinyWhoop

# aux
aux 0 0 0 900 1300 1 0
aux 1 1 1 1700 2100 0 0
aux 2 13 2 1300 1700 0 0
aux 3 28 1 900 1300 0 0
aux 4 28 4 900 1700 0 0
aux 5 35 2 900 1300 0 0

上の方の#$の部分は見様見真似で大丈夫と思います。下の方の実際のコマンドは既存のdiff allから必要な部分をコピーしたものです。

[ index.jsonの生成 ]
公式なやり方ではNode.jsの導入が必要です。以下のようなコマンドでindex.jsonを作成、更新します。

node indexer/indexer.js
node indexer/check.js

Node.jsを導入したくない場合、Pythonでも実行できるようにしました。
indexerのスクリプト群をGeminiにお願いしてPythonのコードに変換してみました。私のudonリポジトリーのpython_indexerにアップロードしています。最近のmacOSならば最初から導入されているPython3で次のコマンドでindex.jsonが作れます。ただし、色々なケースでのテストは出来ていないので結果の保証はありません。

python3 -m python_indexer.indexer

[ Live Serverの起動 ]
– VSCodeを開きます
– メニューから「ファイル/フォルダーを開く…(File/Open Folder…)」で”firmware-presets”フォルダーを選択する
– VScodeの右下の「Go Live」をクリックしてサーバーを起動する

[ Betaflight Configuratorのプリセットを使う ]

– 機体を接続してBetaflight Configuratorのプリセットを開く
– 「プリセットソース…」ボタンを押す
– 「新しいソースを追加」でNameは任意の文字列、Urlにhttp://127.0.0.1:5500を指定し「有効にする」を押す、既存のプリセットソースを無効にすると最初は分かりやすいかもしれません

– 必要に応じてカテゴリーやキーワード、作者などから検索して自分のプリセットを見つけて開く
– 「CLIを表示」して中身を確認し「選択」を押す
– 「保存して再起動」を押してプリセットを適用する

以上で完了です。チェックボックスを付けてCLIを選択できるようにすることも出来ます。このあたりは既存のプリセットを見てやり方を真似すると良いでしょう。