Betaflight の独自ファームのビルドと、手持ちのドローンへのインストール方法

7 min read読了の目安(約7100字

Betaflight とは

Betaflight とは、オープンソースで開発されているドローンの制御ソフトウェアです。現在では様々な用途にドローンが活用されていますが、Betaflight は主に FPV ドローン向けに開発されているものです。Betaflight は、フライトコントローラーと呼ばれる専用の制御基板上のマイコン(ARM ベースの STM32F4 シリーズなど)で動作するファームウェアとして利用されます。

Betaflight は、FPV ドローンの分野では大きなシェアを有しており、現在販売されている多くの機種で Betaflight が利用されています。コミュニティによる活発な開発により、毎月のように新バージョンが公開されていますが、ユーザーはその都度ファームウェアを更新することでドローンの飛行性能をアップグレードすることができます。

そしてもちろん、Betaflight はオープンソースのため、独自にビルドしたバージョンのファームウェアを手持ちのドローンにインストールすることも可能です。

FPV ドローンの世界

FPV(First Person View)とは、ドローンに取り付けられた操縦用カメラからの映像をリアルタイムに確認しながら飛行させるスタイルのことです。通常、操縦者はゴーグル(ヘッドセット)を装着し、自分自身が飛行しているかのような視点で操縦します。FPV ドローンは、一般にドローンとして想起されがちな空撮機とは趣が異なり、手動操縦による高度な運動性能を特徴としており、操縦そのものを楽しむことに重きを置かれています。

ホビーの世界では、所定のコースのタイムを競うレースや、アクロバット飛行を楽しむフリースタイルなどのジャンルがあります。最近では、映像コンテンツの作成や設備点検などの業務への応用例も出てきているようです。

機体も大型のレーサーから、Tiny Whoop と呼ばれる手のひらサイズの小型機まで様々な機種が存在します。PC のようにパーツ単位で購入して自作ドローンを組み立てる人もいます。

Betaflight の利用方法

Betaflight 自体はフライトコントローラーで動作するファームウェアですが、Betaflight Configurator と呼ばれる専用の設定ツールが公開されており、PC と USB ケーブルで接続することで、各種設定などを行うことができます。

ファームウェアのアップデートもこのツールで行うことができます。公式に配布されるバージョンはメニューから希望のバージョンを選択するだけで簡単にダウンロードできます。そして、ローカル PC 上に存在する HEX ファイル形式のイメージも選択可能です。HEX イメージさえ用意すれば、独自バージョンのインストールも簡単に行うことができます。

Betaflight の独自ビルド

ソースコードの入手

https://github.com/betaflight/betaflight/wiki

Betaflight は GitHub でホスティングされています。
いつもの通り git clone で入手しましょう。

% git clone https://github.com/betaflight/betaflight.git
Cloning into 'betaflight'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 186094 (delta 7), reused 0 (delta 0), pack-reused 186072
Receiving objects: 100% (186094/186094), 370.57 MiB | 7.31 MiB/s, done.
Resolving deltas: 100% (129681/129681), done.
Updating files: 100% (4670/4670), done.

ファームの初回ビルド(ツールチェーンの入手)

とりあえず MacOS 環境でのでのビルドを前提に説明します。なお、Windows の場合も WSL 環境を利用するなどして、ほぼ同様の手順でビルドすることができます。

ビルド手順といっても簡単で、単に make を実行するだけです。

しかし、初回は以下のようなメッセージが表示されてエラーとなってしまいます。表示されるメッセージをの通り、ARM アーキテクチャ向けのツールチェーンがインストールされていないため、ビルドができていません。

% make
make: arm-none-eabi-gcc: Command not found
make/tools.mk:267: *** **ERROR** arm-none-eabi-gcc not in the PATH. Run 'make arm_sdk_install' to install automatically in the tools folder of this repo.  Stop.

ここはメッセージの指示通り、make arm_sdk_install コマンドを実行してツールをインストールしましょう。ツールはリポジトリのディレクトリ下にインストールされるため、リポジトリを clone し直した場合には再度インストールが必要になります。

% make arm_sdk_install
mkdir -p tools
mkdir -p downloads
Warning: Illegal date format for -z, --time-cond (and not a file name). 
Warning: Disabling time condition. See curl_getdate(3) for valid date syntax.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   243  100   243    0     0    120      0  0:00:02  0:00:02 --:--:--   120
100  136M  100  136M    0     0  4200k      0  0:00:33  0:00:33 --:--:-- 5702k

これもコマンド一発で完了するため特に難しいことはありません。

その後、再度 make を実行すれば、今度はコンパイルが進み、HEX ファイルの作成まで進みます。

% make
/Applications/Xcode.app/Contents/Developer/usr/bin/make -j ./obj/betaflight_4.3.0_STM32F405_1f1ee1b82.hex
%% (optimised) ./src/main/startup/system_stm32f4xx.c 
%% startup_stm32f40xx.s 

...

%% (size optimised) ./src/main/drivers/serial_usb_vcp.c 
Linking STM32F405 
Memory region         Used Size  Region Size  %age Used
           FLASH:       10073 B        10 KB     98.37%
FLASH_CUSTOM_DEFAULTS:           8 B         6 KB      0.13%
    FLASH_CONFIG:          0 GB        16 KB      0.00%
          FLASH1:      509368 B       976 KB     50.97%
FLASH_CUSTOM_DEFAULTS_EXTENDED:          0 GB        16 KB      0.00%
   SYSTEM_MEMORY:          0 GB        29 KB      0.00%
             RAM:       98788 B       128 KB     75.37%
             CCM:       14932 B        64 KB     22.78%
     BACKUP_SRAM:          0 GB         4 KB      0.00%
       MEMORY_B1:          0 GB         0 GB
   text	   data	    bss	    dec	    hex	filename
 512457	   6992	 106344	 625793	  98c81	./obj/main/betaflight_STM32F405.elf
Creating HEX ./obj/betaflight_4.3.0_STM32F405_1f1ee1b82.hex 

この通り、obj というディレクトリに .hex ファイルが作成されました。

% ls obj/*.hex 
obj/betaflight_4.3.0_STM32F405_1f1ee1b82.hex

ブランチの選択

正常なビルドが確認できたところで、利用するブランチを選択することにします。
リポジトリを入手した直後のデフォルトである master ブランチの内容は開発中の最先端のため、開発検証目的以外での利用には少々不安があるかもしれません。現在 (2021/01/24) はバージョン 4.2.x 系が安定版としてメンテナンスされているため、通常はこちらを利用するのがよいでしょう。

存在するブランチの内容は以下のコマンドで確認できます。

% git branch -r
  origin/3.4.x-maintenance
  origin/3.5.x-akk_vtx_fix
  origin/3.5.x-maintenance
  origin/4.0.x-maintenance
  origin/4.1-maintenance
  origin/4.2-maintenance
  origin/HEAD -> origin/master
  origin/akk_vtx_fix
  origin/broken-usb-rescue
  origin/fix_pull_request_template
  origin/master
  origin/v3.2.x-maintenance
  origin/v3.3.x-akk_vtx_fix
  origin/v3.3.x-maintenance
  origin/v3.4.x-akk_vtx_fix

4.2.x 系の開発ブランチとして 4.2-maintenance というブランチがあるのがわかります。
次のようにしてこのブランチに切り替えます。これでバージョン 4.2.x 相当のファームを手元でビルドできるようになります。

% git checkout 4.2-maintenance
Branch '4.2-maintenance' set up to track remote branch '4.2-maintenance' from 'origin'.
Switched to a new branch '4.2-maintenance'

ターゲットの指定

搭載されているボードの確認

Betaflight は各社から様々な仕様でリリースされているフライトコントローラの多くをサポートしています。対象によって搭載しているマイコンや周辺デバイスの仕様が異なるため、ビルド時には適切なターゲットを指定する必要があります。

まずは、インストールしたい手元のドローンに搭載されているフライトコントローラを確認しましょう。ボードを確認するには、Betaflight Configurator で手元のドローンに接続し、CLI コマンドラインで version コマンドを実行します。board_name として表示される文字列がターゲットの指定の際に用いる文字列です。下の例だと、MATEKF411RX がそれに対応します。

ターゲットを指定してのビルド

以下のように環境変数 TARGET= でターゲットを指定してビルドを行います。

% make TARGET=MATEKF411RX
/Applications/Xcode.app/Contents/Developer/usr/bin/make -j ./obj/betaflight_4.2.7_MATEKF411RX_8b6792ef9.hex
%% startup_stm32f411xe.s 
%% (optimised) ./src/main/startup/system_stm32f4xx.c 

...

%% (size optimised) ./src/main/drivers/serial_usb_vcp.c 
%% (optimised) ./src/main/vcpf4/usbd_cdc_vcp.c 
Linking MATEKF411RX 
Memory region         Used Size  Region Size  %age Used
           FLASH:        8574 B        10 KB     83.73%
FLASH_CUSTOM_DEFAULTS:           8 B         6 KB      0.13%
    FLASH_CONFIG:          0 GB        16 KB      0.00%
          FLASH1:      397280 B       480 KB     80.83%
FLASH_CUSTOM_DEFAULTS_EXTENDED:          0 GB         0 GB       nan%
   SYSTEM_MEMORY:          0 GB        29 KB      0.00%
             RAM:       64856 B       128 KB     49.48%
       MEMORY_B1:          0 GB         0 GB       nan%
   text	   data	    bss	    dec	    hex	filename
 400034	   5828	  58624	 464486	  71666	./obj/main/betaflight_MATEKF411RX.elf
Creating HEX ./obj/betaflight_4.2.7_MATEKF411RX_8b6792ef9.hex

独自ビルドしたファームのインストール

Betaflight Configurator で、 ① Update Firmware の、② "ファームウェアを選択 [local]" から、先ほど作成した HEX ファイルを選択します。その後 ③ "ファームウェアの更新" をクリックすると、選択したファームウェアの書き込みを行います。