Yuckey Lab

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

D Setpoint WeightとD Setpoint Transitionについて

こんにちは
Yuckeyです.

今回はBetaflightの設定項目のD Setpoint WeightとD Setpoint Transitionについて説明します.
D Setpoint WeightとD Setpoint Transitionは下図のようにBetaflight ConfigulatorのPID Turningタブから設定ができます.

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

詳しく知らなくてもとりあえず設定しておきたい方

参考元の oscarliang.com に著者が使っている値が記載されていたので,こちらをまずは設定いただくのが良いと思います.

  • Setpoint Weight: 0.95-1.00
  • Setpoint Transition: 0.1-0.3

また,結論から言うと,
Setpoint Weightを上げると,キビキビした動きになり,1にしておくと,スティック操作となるべく同じ動きになります.
Setpoint Transitionを上げると,フリップなどのアクロでスティックを中央に急激に戻した際の振動などを滑らかにすることができます.

Setpointについて

Setpointとは,パイロットのスティック操作から「どれだけの速さでドローンを回転させたいか」を表す値です.
これはスティックの操作量とRateの設定から算出されます.
制御工学的に言えば,ドローンの回転速度に対する制御目標量の事です.

MeasurementとErrorについて

Setpointを説明する上で,大事な考え方であるErrorとMeasurmentについて説明します.
それぞれ日本語に直訳すると,

  • Measurement:計測値
  • Error:誤差

です.

Measurementとは

ドローンが実際に今どれくらいの速さで回転しているかを示します.
これはFCに搭載されているジャイロセンサから算出されます.

Errorとは

前述したSetpointとMeasumrentとの差です.
Error = Measurement - Setpoint
つまり,回転して欲しい速さに対してどれだけ実際のドローンの回転が遅れているかを示します.
回転して欲しい速さと同じ速さでドローンが回転していた場合には,Errorは0になります.

Setpoint Weightの役割

Setpoint Weightは前述したMeasurementとErrorをどれだけの割合で使ってドローンを制御するかを決める値です.

  • Setpoint Weightが0 → Measurementのみ
  • Setpoint Weightが1 → Errorのみ

ソースコードを読んだわけではありませんが,予想するに,

制御出力 = Dゲイン x (Measurement - SetpointWeight x Setpoint)

のような形で計算されていると考えます.
Setpoint Weightという名前的にもSetpointに対する重みとして記述されるため違和感がありません.
また,恐らくですが,Dゲインがある程度大きく設定されている方が,Setpoint Weightの影響を感じやすいと考えます.

Setpoint Weightがドローンの動きに与える影響

一般的に,

  • Setpoint Weightが0(Measurementのみ) → スムーズ,なめらか,ゆっくりした動きになります.
  • Setpoint Weightが1(Errorのみ) → 早い,キビキビした動きになります.

これらはなぜかというと,
FCがMeasurementやErrorを少なくするように制御するためです.
Measurementは,ドローン自体の回転の速さを現すので,FCはドローンの回転を遅くするように制御します.
そのため,スティック操作の割には,ゆっくりとした,滑らかな動きになります.

Errorは,回転して欲しい速さに対してどれだけ実際のドローンの回転が遅れているかを表すので,回転して欲しい速さと実際のドローンの回転が同じになるように制御します.
そのため,スティック操作通りのキビキビした動きになります.

Setpoint Weightを1以上に設定することもでき, 1 〜 2.55まで設定可能です.
1以上に設定した場合,スティック操作に対して非常に早くドローンが動くことなります.

Setpoint Transitionについて

Setpoint Transitionは素早い反応と,フリップ終盤の滑らかな動きの両立を実現します.
Setpoint Transitionはフリップなどによってスティックが外側に位置する状態からセンターに戻った際にSetpoint Weightをの影響を減らすよう影響を与えます.
これによってフリップ後にスティックをセンターに戻した際にドローンが滑らかに収束します.

そのため,Setpoint TransitionはSetpoint Weightの影響を減らすためのスティックの位置を表します.

  • 0:スティックが中央
  • 1:スティックが外側

◯ Setpoint Transitionが0の場合: Setpoint Weightはスティックの位置に関わらず常に設定した値のままです.

◯ Setpoint Transitionが0以外の場合: 設定したSetpoint Transitionに対応するスティックの位置から,スティックが中央になるまで,Setpoint Weightを線形に0にします.

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

Betaflightのソースコード確認

github.com

githubにあるソースコードを直接確認し,Setpoint Weightがどのように実装されているのか確認してみました.

Setpoint Weightの使われている箇所

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

flightModeFlagsの値に応じてdtermSetpointWeightがdynCdという変数に格納されています.

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

pidFeedForwardというフィードフォワード項の算出にdynCd(SetpointWeight)が使用されています.

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

pidSetpointDeltaは現在のSetpointから前回のSetpointを引いた値になります.
SetPointがドローンの回転角速度を示すため, pidSetpointDelta*pidFrequencyがSetPointの微分値を示します.
以上の理由から,スティックを早く動かすとpidFeedForwardの値が大きくなり,ドローンが機敏に反応するようになります.

以上!

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

www.youtube.com

参考

oscarliang.com www.youtube.com