出典:https://github.com/mrRobot62/betaflight_processing
上記Betaflightの信号がどのような流れで処理されているかを示した素敵な図を見つけました。文字が小さくスクリーンショットの画像では見えにくい部分もあるかと思いますので、出典元も合わせてご覧頂くのが良いと思います。
設定で困った時はこの図を見ると何かヒントを得られるかも知れませんね!
今回はフィルターについて設定して行きたいと思います。
上記の図の中では青い四角で示したところがGyro Filters、緑の四角で示した部分がDTerm filtersなので、その部分ですね。
まず大前提として、ご存知の通りBetaflightに限らずフライトコントローラーのフィルターはモーターをはじめとする様々な原因の振動や、電気的なノイズをブロックし、必要な信号のみを抽出する為のものです。
ノイズがそのままになってしまうと、どう考えても制御の上で良くないと思うのですが、最もわかりやすいところではモーターが熱を持ち、最終的には焼けてしまうという問題が起こります。
焼けてしまったモーターは交換しなくてはならないですし、焼けて墜落した時に機体が壊れたり、制御不能で落ちるので普通に危なかったり。非常にわかりやすいノイズによる悪影響と言えます。これに関しては主にDにかかるノイズが増幅された状態でESCへ、さらにモーターへ送られる事で結果として熱を持つという事のようで、Dは特に多くのフィルターを経ているのが上記の図でも良くわかるかと思います。
では、沢山フィルタリングして信号を凄くクリーンにすればそれで良いのかというと、そうでもなく、多くのフィルターを実行していると遅延が発生するというデメリットもあります。
過剰なフィルターによって引き起こされる遅延が操作の上でのもっさり感に繋がるだけでなく、プロップウォッシュの原因にもなるので、フィルターが多すぎるのも操作の上ではトラブルにつながるとされています。どのくらいのリスクを受け入れるかにもよりますが、性能をあげたいなら、なるべく必要最低限のフィルターにする、というのが目標となります。
今回はノイズをBetaflight Blackbox Exploreで何となく見ながら、どんどんフィルターを減らして行きたいと思います。
ログをとって情報を見る事で、ノイズの周波数のピークがわかるので、これから行う作業がどの程度リスクを持っているか、という点について知ることが出来ます。
ログを参照してノイズを測定するにはBlackboxの設定でオプションを設定しておく必要があります。上記緑の四角で示した一番下のプルダウンメニューで「GYRO SCALED」を選択します。これを設定して置くことで、フィルタリング前のノイズ量をログに残すことができるようになります。
まずは一旦デフォルトの状態で飛行し、ログをとりましょう。
その際、振動の原因になるので、モーターやフレームのネジが緩んでいないか、もう一度よく確認してから飛行すると良いかと思います。機体自体がガタガタで、多くの振動がある場合、ちょっとフィルターを減らすという発想にはならないかなと思うのと、ノイズの周波数のピークも変わるので、作業が1からやり直しになってしまいます。
また、使用するプロペラによってもノイズの出方は変わるので、使いたいプロペラで調整する事、さらに新品の綺麗なプロペラでフィルターのチューニングや、この後行うPIDチューニングは行うのが良いと思います。
今回は新品ばかりではないものの、ETHIX S3 WATERMELON PROPS 5X3.1X3 を使用しました。実は最近あまり使っていなかったのですが、改めて使ってみると、やっぱり素晴らしいプロペラだなと思います。
ログをとり、Betaflight Blackbox Exploreでログを開いたら、グラフを設定します。
オプションでGYRO SCALEDを選択しておくと、グラフ設定のプルダウンでGyro Scaledを選択できるようになります。
今回は分かりやすく上記の形でグラフを設定してみました。まずカスタムでGraph1のフィルター前のデータを各軸について設定し、左上の青いAdd graphボタンで何かしらのグラフを追加するとGraph2が現れるので、Graph2に各軸のGyroを設定。これでフィルター前と後を簡単に解析する事が出来ます。
さて、グラフが現れましたよ!おお、上段の波が下段では消えている!
と、グラフに目が行きがちですが、今我々が見るべきなのはそこではありません。
緑色で示した各グラフの名前の行の一番右に四角が沢山集まったアイコンがあるのですが、実はここはボタンになっています。とりあえず一番上のGyro Scaled[roll]のボタンを押してみましょう。
すると緑の四角で示した情報が現れ、これがノイズの量と周波数の分布になります。
赤い円で示したボタンで表示を大きくすると見やすいです。
基本的には0〜80Hzの情報はPIDコントローラーにとって価値のある情報という事なので、0Hz周辺で最もグラフが赤くなっている点に関しては問題ありません。
逆に、80Hz以上の信号はノイズとして考えてよく、フィルタリングしてしまった方が良いと言えます。
上記画像で注目したいのは、ちょっと見えにくいのですが、水色の線で示したGYRO LPF2の垂直に伸びているライン。LPFはローパスフィルターなので、この場合cutoffの250Hzよりも高い周波数をカットしています。グラフ全体を見て、230Hzあたりにある山はGYRO LPF2で防げていないものの、二つ目の380Hz付近にある山に対しては効果を発揮していそうですね。
続いて、これがGyro[roll]のノイズ情報です。フィルターで綺麗にノイズがカットされているのがわかります。こういった形でフィルターの位置をノイズの山を確認しながらフィルターを調整していくと全体的な状況が把握できるような感じがしますね。
ここではroll軸しか見ていませんが、他の軸では少し違った部分にノイズのピークがあったりするので、一通りみて置く必要があります。特にYaw軸は他の二つと違ったノイズピークを持っている場合が多い気がします。自分の場合、Yawのノイズピークに向けてフィルターを調整したりはしないのですが、フィルター設定変更後の変化は必ず確認する必要がありそうです。
ちなみにこの情報は、そのログデータ上のノイズの総量を視覚化したものらしく、ノイズ量を別のログ同士で比較することは出来ないようです。
ログを見ながらフィルターを変更する手順として、資料を探すと古いものが沢山出てくるのですが、今回は下記の資料と動画を参考にしました。
Betaflight Software Filters Setup Guide
https://www.propwashed.com/betaflight-software-filters-setup-guide/
2Fiddy | Tuning a 5" 250g FPV Freestyle Quad | Step by step
https://www.youtube.com/watch?v=lLZ4U1I2R8k
まず、Gyro LPF2をオフにして様子をみました。Betaflight4.1のチューニングノートでは、基本的にフィルターはオフにせず、スライダーで変更する事が推奨されていますが、調べて見るとGyro LPFは2つとも外してしまっている人もいて、今回は外す方向で進めてみたいと思います。
フィルターに関しては、機体によって大きく状況が異なりますので、自己責任で慎重にセッティングをおこなってください。
このGyro LPF2も先程情報を確認した通り、全く役に立っていないというわけではないハズなので、無効にする事でノイズが通過してしまうリスクは当然あがります。少しの時間のフライトで一旦着陸し、モーターを手で触って温度を確認しましょう。今回この変更後触った感じでは、全く熱を感じませんでした。
上記がGyro LPF2をオフにした設定でのGyro[roll](フィルター後)のノイズ情報。
初めデフォルトで飛行した情報とあまり変わりませんね。
Gyro Scaledはフィルタリング前のノイズ情報なので今回画像を掲載しませんが、フライト毎にノイズのピークなどは若干変わります。そのフライト固有のノイズピークが仮にあった場合で、それに合わせて攻めたフィルターセッティングをしてしまうと普段は外れている可能性もあるので、心配な場合は毎回みておくと良いかと思います。
情報を見るとしっかり2つのノイズの山をカバーしてくれているのですが、思い切ってGyroLPF1もオフにしてみました。この設定で飛ばした後でも、モーターの熱はほぼ感じませんでした。
上記がGyro LPF1をオフにした設定でのGyro[roll]のノイズ情報。このフライトに関してはフライト時間が短かいので、この情報を鵜呑みに出来ない部分もあるのですが、目立った山はなく綺麗にノイズが除去されています。RPM Filterの性能が非常に良いと言えるかも知れません。
次はD Term Filterなのですが、こちらはスライダーで設定を変更しました。まずは1.5までスライダーを動かしてテスト。このテスト後もほとんどモーターの熱は感じませんでした。
ここまで来ても、フィルター後のRollに関しては、まだまだクリーンですね。
上記はGyro Scaled[roll]の情報なのですが、ここでGyro Scaledの各軸の情報を参照していて、全てにおいてノイズの山が200Hz以上にある事と、しっかり頂点の出ている山は多くて2つである事に気づきました。
そこで、RPM FilterのHarmonics Numberを3から2に減らし、Gyro RPM Filter Min Frequency[Hz]を100から150に変更しました。Gyro RPM Filter Min Frequency[Hz]は200でも大丈夫かも知れませんが、もうGyro LPFは全て外してしまったので、ちょっと保険をかけておこうかなと思いました。
フィルター後の情報を確認すると、全然大丈夫そうですね。モーターの熱も特に感じません。
最後にD Term Filterをスライダーで2まで減らしました。ここまで来ても、飛行後のモーターは冷たいままでした。ただ、この後PIDチューニングの結果Dの値を上げる事になると熱を持ってくる可能性もありますし、モーターの軸が曲がってきたりすると急激に熱を持つ可能性もあると思います。
Gyro [roll]は上記の画像。
Gyro [pitch]が1番山が目立ったのですが、上記のような感じです。
上記はBetaflight Blackbox ExploreではなくPIDtoolboxというアプリのSpectral Analyzerでデフォルトのノイズ量と設定後のノイズ量を比較したものです。
ちょっと見づらいのですが、緑の四角で示した部分がデフォルトのGyro、赤の四角がデフォルトのDterm、青が設定後のGyro、オレンジが設定後のDtermとなっていて、簡単に言えば発光しているように見えるところがノイズですね。グラフの上下の軸が周波数を示していて、左右がスロットルのパーセントです。
これに関してはまだ勉強中で細かい事は自分も良くわからないのですが、青で示した設定後のGyroを見てみると、上段(roll)と中段(pitch)についてスロットル20パーセントまでの範囲で450Hzくらいのあたりにノイズが確認出来ます。
上記はRPM Filter Harmanics NumberとMin Frequencyを変更する前[A](右側二列)と後[B](左側二列)のデータなのですが、この時点では450Hzくらいのあたりにノイズは目立たないようです。
Dynamic Notch FilterのMax Hzを350で切っているので、それがこのあたりに影響しているのかなぁという感じもしますね。ただ、モーターが熱くないので今回はそのままにします。
先程の画像に戻って、Dtermの方はスライダーのイメージの通り、どんどんフィルターが薄くなった結果という感じですね。確実にリスクは上がっている事が良くわかると思います。
全体としてスロットル100%付近にノイズがないのは、そのフライトで100%まで引き上げなかった事を表していて、本当は全てのスロットル位置を試すのが望ましいハズです。
色々見てきましたが、結論として、モーターが冷たいから良いんじゃないか、という事で次に進みたいと思います。今回はここまで。