お久しぶりです。
ブログ放置気味でしたがちょっとチューニングについてメモ書きしようと思いまして、つらつら書きます。
あくまでメモ書きレベルですが、Emuflight 0.4.0のチューニングについてある程度参考になればと思います。
ちなみにMobula 6 のレギュラーエディションでいろいろテストしてます。
Emuflight 0.4.0ってぶっちゃけどうなの?
ここではBetaflightを普段使っている人向けに書くと、Emuflightはちょっとセットアップに苦戦すると思います。なぜなら単純にパラメーターが多くて、考え方がBetaflightとちょっと異なるからです。
Betaflightと比べて、Emuflightはスティックの入力のフィーリングを細かく変化させることができます。その分、セットアップに迷いやすいです。私はEmuflightの旧バージョンまで好きになれなったのですが、それはセットアップが決まらないことにありました。
主にBetaflightにない項目として、
- SPA
- i-Decay
- Feathered PIDs
- Motor Mixers / Thrust Linearization
- Smith Predictor
- IMUF
- Rate Dynamics
ざっと私のわかる範囲でもこれだけあります。もっと他にもありますが、EmuBoostなんかはFeedforwardと目的は同じですし、I-term Relaxは同じ役割です。
が、改めていじってみると、部分的な機能だけ使ってもかなりいい感じに仕上がります。
順に私のわかる範囲で解説します。
SPA:スティック入力に対するPID変化
スティックのセンターと端でPIDを乗算できます。
SPAが1なら特に変化なし。Betaflightと同じです。SPA-Roll-P-0.80ならロール軸の入力がマックスのとき、P値を現在値×0.8にできます。これは各軸とPIDそれぞれセットアップできるので9個のマトリクスになります。
これはまだ私は使いこなせていません。なのですべて1にしています。利用用途としては、フリースタイルの時の激しい動きと緩やかな動きでPID変化させられるので、いいところどりができそうです。Rate Dynamicsもあるのでここらへんうまく組み合わせると非常に柔軟なセットアップができそうです。
i-Decay:I値の高い時のネガを消しつつ高い値を実行できるようにする
ちょっと動作を追い切れていませんが、要するに「素早い動作の時のI値の蓄積(i-trem windup)を参照して素早くI値を減少させる係数」らしいです。I-trem Relaxとちょっと似てますが、Relaxが溜まるのを抑制するのに対し、Decayは減少を加速させます。
I値が過剰にたまると、動きを収束させるのに余計に時間がかかるので、適切に下げたいという目的です。逆にI値が十分に高くないと、動きが一向に収束せず、不安定な動きにつながります。
これを二次的にDecayとRelaxで制御できるわけです。
私はDecayは8と高めのほうが良い気がします。(10がマックス)
高くしてもそんなにネガを感じませんし、下げると激しい動きの際に動きがバタつきます(Iの蓄積が開放されていないとこうなる)
基本的には4~8で好みのセットアップでいいと思います。
Feathered PIDs:D値の挙動の調整
よくKISSはなめらかでBetaflightはそうではない、と言われるポイントはここだと思われます。Feathered PIDsが0のときKISSの計算(エラーベース)、100のときBetaflightの計算(測定ベース)になるそうです。
コードをみてみると(src/main/flight/pid.cのcalculate D component)、Gyroベースでの計算がエラーベース、Setpointベースでの計算が測定ベースと思われます。
細かい話を抜きにすると、原理的に素早く応答するのはFeathered PIDsが0のときですが、細かな動きに反応しすぎるかもしれません。100の時はセットポイントの差が生まれてから動くので若干鈍いはずですが、滑らかになりそうです。
私は0がいいですね。KISSとおなじ計算方法です。ちなみに50は半々になりミックスできます。これは言葉だとフィーリングが伝わりずらいのでぜひ0と100で飛ばして比較してください。
Motor Mixers / Thrust Linearization:モーターのミキサーを最適化する/推力の線形化
これかなりトピックだと思います。
Motor Mixerは通常のミキサーの問題点をいくつかのアプローチから解決します。詳しくは調べ切れていませんが、ミキサーが飽和するゼロスロットル付近とフルスロットル付近の挙動がかなり変わります。2PASSを使っていますが、Legacyと比較してよりスムーズにつながる印象です。
Thrust Linearizationは推力線形化という形で、スロットルに対してリニアな推力を提供します。実は、プロペラとモーターの組み合わせによって、スロットルはエキスポがかかった状態になっており、まっすぐではありません。これをあらかじめ補正し、直線的にします。
なので、どのスロットル位置でも立ち上がりがリニアになり、操作性が向上します。
もう一つは、2PASS時にmixer_laziness
オプションをつけることで、推力線形化とミキサーの双方でいいことがあるようです。解説読んでもよくわからんので、誰か教えて…
Smith Predictor:スミス予測器を使用
スミス予測器って何ぞや?
って疑問には、文献調べてくださいってしか言えない(制御工学の知識がいるし僕も説明しきれない)ですが、具体的にはIMUの実際の入力値と出力されるデジタル値の間に遅延があり、これを見かけ上PIDループから切り離すことができます。
つまるところ、Gyroのもともと持っている遅延がPIDループに入っちゃうとデメリットなので、それを分離することでよりよいPID計算しましょう、ってことです。
基本的にはONですね。OFFとの差が微妙ですが、動きの正確性が増すイメージです。デメリットを感じません。
IMUF:カルマンフィルターベースのIMUフィルター
これもちょっと知識不足で申し訳ない、通常のLPFとIMUFの関係性が整理しきれていません。
つまるところ、Gyroの値をカルマンフィルターかけるってことです。値が高いほどGyroを信頼しフィルタリングが薄くなります。低いと強いフィルターがかかり滑らかになります。
結構飛びが変わりまして、3000と12000だと全然違います。ぱっきぱっきに動くのが12000で、3000はかなりなだらかです。
Tinyは高めが合うと思います。私は12000です。
その他Wの値の調整とかもありますが、これはフィーリングなのでいろいろ試してほしいです。
Rate Dynamics:スティックレートのダイナミックな変化
これもちょっと私は追い切れていませんが、要するにスティックのセンターとエンドで動的にレートを変化させるオプションです。
いわば、プロポのスティックの動きそのものを仮想的に変化させます。
なので、PIDやフィルターと分離して動きのチューニングが可能です。
難しくてまだいいセットアップが見つかりませんが、公式のWIKIにいくつか凡例があるので試してみてください。
とりあえず、Betaflightと全然違うけど、うまく決まるとすげー滑らかに飛ぶ
これがEmufightの特色ではないでしょうか。
特に上で説明した特徴的なセットアップを活用できると、Betaflightでは絶対できない動きを実現できます。
弱点は答えが多数ありすぎて迷子になることです。難しい。
また分かったことあったら追記します。