目次
Section 1
Betaflightのフィルターの全体像

前回の【Betaflight ノート#1】からの続きとして、Flywoo Firefly 1S FR16 Nano Baby V2を使用してBetaflightのPIDチューニング作業を進めていきます。
BetaflightのPIDチューニングと言っておきながら、まずはフィルターの設定を行うのですが、なぜ、PIDチューニングに取り掛かる前にフィルターの設定を行うのか。
この記事を読んでいる方の中でわからない、という方は少ないかもしれないのですが、念の為ざっくり説明すると、フィルターの設定によってPIDの設定も大きく影響を受けてしまうためです。
特にジャイロフィルターについては、このフィルターを通過してきた信号に対してPID制御の計算を行うため、まずはこの部分に問題や加不足がないかという点が、後ほどPIDを調整していく上でも重要です。
Dtermフィルターに関しては、Dtermフィルターを厚めに残しておいてDの値を高く設定できる方向で考えるのか、Dtermフィルターもなるべく減らして、Dの値もそこまで上げない最終形を目指すのか、という全体的な戦略や判断に大きく影響があります。
そもそもフィルターとは何か、ということなのですが、簡単にいうと機体は飛行中にモーターなど様々な原因による振動に晒されますが、その振動をソフトウェアフィルターで除去することで制御信号やセンサーの計測値をクリーンに保ちましょう、という目的で搭載されているものです。
クリーンであることが常に正しいなら、どんどんフィルターを追加していけば良い、と言う話になりますが、フィルターである以上何か必要なものは通過させたい、と言うことが前提となります。
Betaflightの場合、通過させたいのは機体の制御信号で、これは周波数帯で言うと 20Hz 未満の帯域であるとされています。
さらに、Betaflightのフィルターは換気扇のフィルターやコーヒーフィルターのように物理的なものではなく、ソフトウェアのフィルターです。
その為、フィルタリングの範囲や量が多ければ多いほど演算処理能力を使ってしまい、結果的に全体の動遅延につながります。
動作が遅延すると多くのエラーが発生し、逆に100Hz未満の振動が発生する原因にもなってしまいます。
逆に、フィルターが足りないと、膨大なノイズにそのまま反応してしまってほぼ暴走に近い状態になったり、モーターが焼けてしまったりします。
つまり、何も考えずにフィルター設定を変更することや、特に減らしていくのは非常に危険です。
なるべく振動は除去しながら、最低限のフィルタリングに調整する必要があります。
フィルター調整をどのくらい攻めるのか、という点については、機体の種類や使い方、個人の経験値によって様々な判断があると思います。
撮影機で撮影用のカメラが重く、どうしても振動がでてしまう場合や、フリースタイル用途でクラッシュ後に多少プロペラが曲がっても操縦者の近くまでひこうして戻らなければならない場合など、これらの違った目的や使い方の中で、フィルターは全く方向性が変わってくるでしょう。
Flywoo Firefly 1S FR16 Nano Baby V2くらい小さな機体であれば、仮に暴走したりモーターが焼けたりした場合でも、大事故には繋がりにくいので、比較的色々試しやすいと思います。
撮影用のカメラを搭載する必要がないのであれば、最終的にはフィーリング優先で作業していけば良いので、非常に分かりやすいですね。
さて、ざっくりフィルターについておさらいしたところで、Betaflightのフィルター設定を見ていきたいと思います。
Betaflightのフィルターと一口に言っても、フィルターページ内に何種類ものフィルターがあります。
今回作業するフィルターはフィルターページ内の一部なのですが、その中でも大きく分けて2種類のフィルターがあります。

まず1種類目が[ジャイロフィルター]で、赤枠で囲った部分が該当します。
このフィルターはジャイロセンサーが取得した情報に対して、不要なノイズを除去する目的があります。
2種類目が[Dtermフィルター]で、緑枠で囲った部分が該当します。
このフィルターはPIDコントローラーで計算されたDの信号をそのままモーターに送信してしまうと、モーターがすぐに熱くなり焼けてしまうため、それを防ぐ目的があると考えると分かりやすいかと思います。
この2種類の中にも、いくつもフィルターがあるのですが、まずは大きく2種類あり、それぞれ別の作業をしていることを念頭におく事は重要です。
また、上に2つのスライダーがあるのですが、上のスライダーは[ジャイロローパスフィルター]という [ジャイロフィルター]の中の1種類に対応しています。
一方下のスライダーは[Dtermローパスフィルター]という[Dtermフィルター]の中の1種類に対応している形になります。
今回枠で示したものの他に、D値ノッチフィルターとヨーローパスフィルターがあります。
これらは基本的にはデフォルトのままで良いようですが、特別な事情がある場合は役に立つかもしれません。
Section 2
ジャイロフィルターの調整
スライダーがあるのだから、とりあえずスライダーを動かしていけば良い、と思ってしまいがちですが、 [ジャイロフィルター]に関しては、それで結果が良い時もあるでしょうし、良くない時も恐らくあるでしょう。

[ジャイロフィルター]の中に、さらにそれぞれ違った動作をする4種類のフィルターが存在します。
まずは赤枠で囲った [ジャイロローパスフィルター]。
音楽などをやっていた方はローパスフィルターというものに馴染みが深いと思うのですが、その名の通り低い部分(Low)を通過(Pass)させる、つまり高い部分をカットするフィルターです。
ドローンの制御に必要な信号は20Hz未満にあるので、その信号を通過させ、高い周波数のノイズをカットする重要なフィルターになります。
先程紹介した画面上部の上のスライダーに対応するのはこのフィルターになります。
次にジャイロノッチフィルターですが、これは特定の周波数を設定し、その周波数を切り取るように動作するフィルターとの事。
現在のBetaflightのバージョンではデフォルトでオフになっていると思います。
現在は特別な事情がない限り、オフのままで問題ないと思うのですが、非常にネガティブな事情がある場合は活用できるかもしれません。
次に青枠で囲った[ジャイロRPMフィルター]。
これはBetaflight4.0で導入されたRPMフィルターが、Betaflight4.1で [ジャイロRPMフィルター]となり、バージョンを追うごとにブラッシュアップされているフィルターです。その優秀さから、その後他のファームウェアでも多く利用可能となっていったフィルターですね。
基板やESCがあまりにも古い場合、利用できない可能性も考えられますが、現在のBetaflightでは非常に重要な[ジャイロフィルター]になります。
最後に紫の枠で囲った[動的(ダイナミック)ノッチフィルター]
フレーム共振など主にハードウェアに起因するノイズを効果的に除去してくれるフィルターとのこと。
こちらもジャイロRPMフィルターと合わせて重要なフィルターで、例えばクラッシュでプロペラが曲がり、通常では発生しない周波数に大きなノイズが発生した場合などにノイズを補足し除去してくれるのは主にこのフィルターのようです。

それぞれ設定の方法があるのですが、今回は上記のように設定しました。
自分はPID toolboxというツールを使用してログデータの解析を行っています。
1つ1つログデータを細かくみていかなくてはならないので、今回は全体感の理解の為に割愛します。
大まかな流れとしては、まず倍音の数(高調波数)と周波数最小値を調べ、緑枠で示した [ジャイロRPMフィルター]を設定しました。
この段階では屋内で作業しており、スロットルを100パーセントまで引き上げたログデータを取得できなかったので、不完全なデータで設定したのですが、意外と悪くないかなと思っています。
屋外テストフライトを行ったデータをみると、[高調波数]は2でも良いかなという点と、周波数最小値を150くらいまで下げる方が良いな、という2点が気になりましたが、この時点では上記値としています。
次に、ノイズの分布と量から動的ノッチフィルターは減らして問題ないと判断し、[ノッチ数]を1に、[Q係数]を700に設定しました。
プロペラの損傷などの特殊な状況への対応もあるので、範囲は変えていません。
最後に[ジャイロローパスフィルター]なのですが、ほとんどの場合必要ないとされている[ジャイロローパス1]をオフに設定しました。
残された[ジャイロローパス2]の数値はスライダー画面上部のスライダーの位置で変化するのですが、今回PIDループを2kに設定していますので、スライダーは変更せずに静的カットオフ周波数は500のままにしています。
PIDループの設定によってはスライダーをかなり動かせるはずです。
Section 3
Dtermフィルターの調整
続いて[Dtermフィルター]の設定作業です。
[Dtermフィルター]の設定はスライダーを右に動かすとよりフィルターが減り、左に動かすと増える、という形で調整する形が一般的なようです。

スライダーを動かすとD値ローパスフィルター区画内の数値が変化しますが、 [Dtermフィルター]を下げ過ぎてしまうとモーターが焼けてしまいますので、モーターの温度を良く確認しながら作業を進めます。

今回設定したフィルターは上記。
Flywoo Firefly 1S FR16 Nano Baby V2のモーターが小さいためか、あまりモーター温度は変化がなく、一方でログデータ上のノイズはフィルターを減らす毎に顕著に増えていくという状況。
この判断はどうしたものかと思ったのですが、とりあえず上記の形に一旦おく事にしました。
Section 4
フィルター調整の成果
さて、フィルターの調整を行ったものの、どのくらいの成果があったのか?
これが分からないと面白くありませんね。
PIDtoolboxの画面で確認してみましょう。

上記はBetaflightデフォルト状態のフィルターで取得したデータで、PIDもBetaflightデフォルト状態にしています。
少し分かりづらいのですが、右列の画面の右上にフィルターによる遅延が表示されています。
Roll軸のGyroフィルターによる遅延が2.375ms、Dtermは2.5ms
Pitch軸のGyroフィルターによる遅延が2.5ms、Dtermは2.625ms
Yaw軸のGyroフィルターによる遅延が2.25ms

上記は今回作業したフィルターで取得したデータです。
フィルターのみの違いを比較するために、こちらもPIDはBetaflightのデフォルトです。
Roll軸のGyroフィルターによる遅延が1.125ms、Dtermは2.125ms
Pitch軸のGyroフィルターによる遅延が1ms、Dtermは2ms
Yaw軸のGyroフィルターによる遅延が1.125ms
[ジャイロフィルター]についても[Dtermフィルター]についても、そこまで大幅に減らした訳ではありませんが、先程のデフォルトフィルターのデータと比較して、大体1msちょっとの遅延が解消されています。
では、実際の操作で体感的にどのくらいの違いがあるのか。
比較の見せ方をいくつか検討したのですが、PIDtoolboxで[SP-gyro delay]を表示するのが最もわかりやすいのではないかと思いましたので、この方法で遅延を比較します。
体感とは必ずしも一致しないと思いますが、Betaflight Blackbox Explorerで個別のグラフを取り上げるよりも総合的に比較できますので、全体感としてはわかりやすいのではないかと思います。

上記はフィルターとPID設定がデフォルトの状態のままで取得したログデータの数値です。
Roll軸遅延 8.375ms
Pitch軸遅延 10.375ms
Yaw軸遅延 2.875ms
上記の結果になりました。

次に今回設定したフィルターを使用し、PIDはデフォルトのままで取得したログデータの数値です。
Roll軸遅延 9.875ms
Pitch軸遅延 11.125ms
Yaw軸遅延 2.75ms
上記の結果になりました。
ほとんど変化がない、もしくは逆に遅延が増えていますね。
フィルターの変更だけでは飛行性能の大幅な改善にはならない場合もあるようです。
この作業単体の成果はどうあれ、PID調整を始める前の振動とフィルターの調整は最低限完了しましたので、気にせず次のステップに進む事にしましょう。
次回はいよいよPIDを設定します。
---
いつもご覧いただきありがとうございます。
DAYSCAPEのブログは、皆さまからの応援によって成り立っています。
「いいね」と思っていただけたら、無理のない範囲でご支援いただけると嬉しいです。
下記のボタンより、PayPalを通じて応援いただけます。
応援はこちら
※この応援は任意のものです。商品やサービスの購入を伴うものではありません。



