Yuckey Lab

主にFPVドローンレース/作ってみた系/プログラミング/工学全般などなどについて,しがないエンジニアが徒然なるままに書き連ねるブログ

【Betaflight 4.0】D_MINについて

こんにちは
Yuckeyです。

今回はBetaflight 4.0から追加されたD_MIN機能についてTuning Notesを元にまとめていきたいと思います。
(誤訳や間違った情報含まれる可能性があるのでご注意ください.
誤訳や間違いを発見された方はコメント欄からご連絡いただけますと助かります.)

前回書いたBetaflight 4.0 Tuning Notes 概要編はこちらです。

yuckey-lab.hatenablog.com

ベースとなるBetaflight公式の記事はこちらです。

github.com

D_MIN

D_MINは通常のフライトでは低いD値、フリップやロールのようなオーバーシュートの原因になりうる早い動きの時には高いD値に設定する機能です。
プロップウォッシュ時においても同様にD_MINはD値を上げます。
高い場合のD値はいつもBetaflight Configuratorで設定しているPIDのDの値を使い、
低い場合のD値はCLIOSDで設定できる d_min_xxxの値が使われます。

背景と目的

通常のフライトで低いD値を使うことで以下の利点があります。

  • ノイズの低減、モーターが熱くならない
  • フルスロットル時にに綺麗なモータートレース(cleaner motor traces at full throttle)
  • 早い入力に対して応答性の改善
  • Dに関連する振動や、アーミング時のgrinding(?)が起こりにくい

低いD値を使うことでの欠点

  • プロップウォッシュが起こりやすくなる
  • オーバーシュートやバウンスバックが起こりやすくなる
  • Pが高い場合、Dによるダンピングが減るため、早い動きに対するPによる振動の発生

D_MINの目的はこれら両方のいいとこ取りをすることです。
例えば、ゆっくりターンする場合にはD値を低くしてスムーズにフライトし、
オーバーシュートやプロップウォッシュに対応する必要があるような場合にはDを上げます。

既に問題なく飛んでいるドローンに対してD_MINによって改善されるのか?

もしドローンが問題なくフライトしており、オーバーシュートや振動、モーターの高い発熱がない場合、D_MINを追加する利点はないかもしれない。

しかし、D_MINを設定することで、P値を少し上げることができ、
Dのピークを上げることで、よりきつい操作(tighter handling)を行うことができるようになる場合があります。

D_MINの無効化

D_MINの無効化はそれぞれの軸ごとに設定でき、
d_min = 0に設定するか、
d_minの値を通常のD値より大きくすることで無効化することができます。
D_MINが無効化されると、常に一定のD値が使われます。

初めてのフライト時にどう設定するか

PIDをコピペしており、D値が変更されていない場合、roll, pitch, yawのそれぞれのD値は、
20,22,0になっているはずです。

D_MINを有効にして初のフライト時には、通常のD値を10-20%増加させ、
d_minの値を通常のD値の半分に設定することをお勧めします。

デフォルト値は?

デフォルトは全てのドローンに適している訳ではありません。
roll, pitchのそれぞれのデフォルト値は、 通常のD値は35,38、d_minは20,22です。

D_MINを追加することでプロップウォッシュが低減されるのか?

プロップウォッシュは低減されません。
D_MINは通常よりD値を下げる機能です。
D値が低いとプロップウォッシュに対する制御は弱くなります。

D_MINのアルゴリズムはプロップウォッシュを検出/反応し、D値を向上させます。
しかし、我々が期待しているほどD値を強くあげることはありません。 通常、Dは設定されたD値の約半分までしか上昇しません。
d_minを最大限に活用するには、D値を15〜20%増やすことが重要です。
通常、その場合、プロップウォッシュの処理は以前とほぼ同じになります。

もしプロップウォッシュがあなたのの一番の問題であり、モーターが熱くなければ、
d_minの値を上げてみてください。

プロップウォッシュが酷くて、D_MINを無効化すると改善されるのですが

@spatzengr (D_Boost) (AKA UAVTech) の提案によると、通常のD値とD_MINの両方を上げてみてください。
例はこちらです。

f:id:yuckey-lab:20190608162057p:plain

D_MINを追加することでオーバーシュートは改善するのか?

改善します。
D_MINのブースト効果のタイミングは通常、同じD値であったとしてもオーバーシュートを改善します。(意味をいまいち理解できてません。。。)
D_MINを有効化することによって、D値の上昇と、モーターが熱くならないことを同時に実現することが可能です。
D値を上げることによって、オーバーシュートのコントロールにかなり余裕を持たせることができます。
最適なオーバーシュート制御が得られるまでDを調整し、モーターの熱制御のためにd_minを調整します。

d_min_advanceパラメーターについて

d_min_advanceはd_minによるD値のブースト効果の開始のタイミングを早めます。
これはあなたがもしとても反応の早いドローンで高いレートでフリップした際のオーバーシュートの解消に役立ちます。

d_min_advanceは、セットポイント(set point)から導出されたブースト信号をブーストアルゴリズムに含めることによって機能します。(?)

d_min_advanceをゼロに設定すると、d_minによるD値のブーストがモーターがドローンを回転させるまで始まりまらず、スティックが動いてからしばらく時間がかかります。
これによって、まずはDによる減衰がないままでFFやPによってドローンの回転が開始され、初期の旋回のレスポンスが最大化されます。
しかし、とてもレスポンスの良いドローンでは、ジャイロから導出されるブースト信号は少し遅れてやってきます。
d_min_advanceをいくらか加えてやることで、モーターの回転を待たずに、スティックが動きによってDのブーストが開始されます。

d_min_advanceのレンジは0から200です。
デフォルトの20は、非常に高速のスティック入力を除いて、ほとんど効果がありません。
100にした場合には非常に早くブーストさせます。
高いd_min_adavanceは、最大のrateが1000deg/sを超えるような非常にレスポンスの高いドローンを除いてはほとんど必要がありません。

d_min_gainパラメーターについて

d_min_gainパラメーターは、速いスティック入力があった際にどれだけ強くDをブーストするかを決定する高度なチューニングパラメーターです。

初期値の20は多くのドローンに理想的な値です。
とても振動のないクリーンなドローンはゲインを25に上げても問題ありません。
より高い値に設定した場合、ドローンはほとんど最小値で動作せず、すぐに最大値のDまで上昇します。これは、あなたの最大の関心事がプロップウォッシュであれば、それほど悪いことではりませんが、モーターの熱を抑制したいのであれば、理想的な方法でありません。

もしロギングできるのであれば、通常使用時の理想のゲインは、debug 2と3のリアルタイムのD値が常に通常飛行の最小値から上昇したいところです。時々少しずつ上昇しますが、フリップとロールで素早く最大のD値まで上昇し、propwashで約半分まで上昇します。

実際のD値がいくらなのかフライト中に知るには?

1.OSDを使う方法:
CLIset debug_mode = D_MINを入力します。
スクリーンにdebug2を表示するためにOSDをセットアップします。
OSDで表示される番号はrollのD値を10倍した値です。
もし350と表示されている場合、実際には35がD値になります。

2.ロギングする方法:
CLIset debug_mode = D_MINを入力します。
Blackbox explorerのDebug2はrollの瞬間的なD値を示します。
debug3はpitchのD値を示します。(表示されている値は実際のD値の10倍です。)

Debug2はrollのD値を、Debug3はpitchのD値を示します。
両方ともTPAによる減衰の前の値になります。
Debug0はジャイロ、Debug1はsetpointによるブースト効果への寄与分を表示します。

d_minはどう作動するか?

プロップウォッシュは、20-60Hzの周波数帯域でジャイロが振動する特徴があります。
急激なフリップやターンはより周期の長い、10-20Hzの周波数帯域でジャイロが振動します。

ジャイロの信号に80Hzのbiquadローパスフィルタを適用することで、高周波のノイズを無視することができ、これらのイベント(フリップやプロップウォッシュ)などを検知することができます。
フリップとプロップウォッシュの両方はブースト信号を増加させます。

フィルタリングしたジャイロ信号の絶対値をとった信号に10Hzの1次ローパスフィルタを通すことで、これらのイベントが起きた際にD値を滑らかにかつ、緩やかに変化させることができます。
10Hzのローパスフィルタによってブースト効果が遅れます。これによって、急激なフリップ入力の終盤にブーストが起きます。
これはスティック入力の序盤によるドローンの反応をブーストによって抑制できないということです。

ブーストの強さはゲイン設定で調整します。

d_minによってCPU負荷は上がるのか?

少しだけ上がります。
1つのbiquadフィルタ、1つのPT1フィルタさらに、いくつかの単純な計算分のCPU負荷が増えます。
どれだけCPU負荷が増えているか確認したい場合は、一時的に全ての軸のd_minを0に設定して、CPU使用率を確認してください。

F3のボードでd_minは使えるのか?

使えません。
いつかのF3チップはd_minを書き込むのに十分な容量がありません。
これらのチップはCLIOSD上で、d_minが表示されません。
特別にビルドすることでF3チップでd_minを含むファームウェアを作成できますが、容量を開けるために他の機能を無効化する必要があります。

以上、d_minについてでした。
ご参考にしてください。
誤訳等ありましたらコメント欄やtwitterからご連絡ください。


閲覧いただきありがとうございました.
ご質問等ありましたらコメント欄からお問い合わせいただければ幸いです.
また,Youtubeの方も「チャンネル登録」や「いいねボタン」を押していただけると幸いです. www.youtube.com

ブログよりTwitterの方が頻繁に更新しています.
お気軽にフォローください.
Twitter : @YuckeyLab

当ブログをサポートいただける方へ,
商品を購入される際に以下の方法で購入いただけますと,
有益な記事作成のモチベーション向上,記事作成のための商品購入に繋がります.

  • ブログ内に記載されているBanggoodやAmazonのリンクから商品を購入いただく
  • Banggoodで商品を購入する際に,URLの「.html」の後ろに「?p=P220095499837201607C」を追加し,商品を購入いただく

当ブログをサポートいただけますと幸いです.
宜しくお願い致します.