Betaflight の独自ファームのビルドと、手持ちのドローンへのインストール方法
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 の独自ビルド
ソースコードの入手
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 ファイルを選択します。その後 ③ "ファームウェアの更新" をクリックすると、選択したファームウェアの書き込みを行います。
Discussion