[この記事は2016年8月31日に書かれました。最新の状況を反映していない可能性もありますのご注意ください。]
PIDチューニングに関するご質問が度々ありますので、自分は「こうやってる」というのをまとめてみようと思います。
私も試行錯誤をしながらやっていますので、これが正解というものでは決してありません。PIDチューニングの日本語での解説があまり無いようですので、皆さんのご意見なども聞かせていただきながら良いものにしていければと思います。
PID制御のメカニズム等については別の機会に解説するとして、ここではとにかくPIDをチューニングをして気持ち良く普通に飛ばせるようにするための方法について記載します。
PIDの設定値はフライトコントローラーのバージョンや機体、使用しているパーツ、プロペラ、使用するバッテリー等によって変わるので他人のPIDをそのまま使ってもダメと言われますが、似たような構成の機体であればある程度他の人の設定や自分がこれまで他の機体で使用してきた値も参考にすることができるかと思います。
PIDチューニングが適切に行われている機体は飛ばした時にとても気持ちの良い音がします。スロットルを上げていった時に「シュイーン」とか「チュイーン」などの音がするのがよくチューニングされた状態です。また急旋回や急上昇、急下降からの停止などの激しい動作をした時に最小限の振動でキビキビと意図した動作ができるのが理想の状態となります。
これに対してチューニングが適切に行われていない機体は飛ばした際にあまり気持ちの良くない音がします。「ブルブル」「ボボボボ」「ゴー」といった音はチューニングが必要なサインです。このほか普通に飛ばすだけで振動が出てしまう、スティックの動作に対して機体が思うように反応しないといったような状態もチューニングが必要な状態です。
PIDチューニングの一般的な手順は以下の通りになります。
1 フライトコントローラーのバージョンを最新のものにする。
2 設定可能な最小のループタイムを設定する。
3 PIDコントローラーを選択する。
4 ロール、ピッチ、ヨー、のP, I, Dの各値をチューニングする。
5 必要に応じてレート(ロール、ピッチ、ヨー、RC)及びRC Expoを変更する。
フライトコントローラーのバージョンや設定を変更するとPIDの再調整が必要となる事がありますので、先に各種設定を済ましてからチューニングを行いrます。
1 フライトコントローラーのバージョンを最新のものにする。
2016年現在フライトコントローラーは凄まじい勢いでアップデートを繰り返して日々改善が行われています。PID制御に関しても同様ですのでなるべく新しいバージョンのフライトコントローラーを使用した方がPIDチューニングを楽に行うことができるでしょう。私は現在BetaflightとKiss Flight Controllerを使用していますが今後はF4のボードでRaceflightも使用したいと考えています。
2 設定可能な最小のループタイムを設定する。
ループタイム(looptime)はパソコンでいうCPUのクロック数のような意味を持ち、フライト制御のための信号をESCに送り出す間隔をマイクロ秒(μs)で表現した数字になります。またクロック数として表現される場合もありますので、ループタイムとして表示される数字が処理時間(μs)なのかクロック数(Hz)なのか気をつけます。
デフォルトのループタイムはフライトコントローラーのファームウェアや使用しているチップによって変わってきます。一般にループタイムが短い(クロック数が大きい)方が滑らかな操作が可能となりますので、なるべく小さな値になるように設定します。2016年8月の時点では250μs(4KHz)、500μs(2KHz)、1000μs(1KHz)から選択するのが一般的かと思います。
ループタイムの決定にはまず加速度センサー(accelerometer)を使用するか否かということと、ESCが対応可能な速度かということを考慮する必要があります。ループタイムを短くすると加速度センサーが利用できなくなります。そのため、安定した飛行姿勢を半自動制御するためのAngleやHorizonといったフライトモードを使用する場合は加速度センサーの利用が必須ですので、加速度センサーが利用可能な最小のループタイムを設定します。(フライトコントロラーで加速度センサーをONした状態で設定可能な下限。Betaflightでは使用可能な下限より小さいループタイムが設定されている場合、アームスイッチをONにしてもアームしないのでこれを見て下限を判断します)。
加速度センサーを使用しない場合はフライトコントローラーの設定画面で加速度センサーをOFFにするとさらに小さな値を設定することが可能となります。あまり短いサイクルでフライトコントローラーを動作させてもESC側で制御信号を受け取れなければ意味がありません。2016年8月現在広く利用されているESCのOneShot125は125μsのサイクルで動作しますのでこれよりも遅い250μsがフライトコントローラーのループタイムの下限となるのが一般的です。これよりも動作の速いMultiShot対応(5-25μs)やOneShot42(42μs)対応のESCも出てきていますので、これら製品と対応するフライトコントローラー(F4ボードでのRaceflightなど)を利用する場合はより短いループタイムを設定することも可能となります。
3 PIDコントローラーを選択する。
PIDコントローラーとはフライトコントローラーに内蔵されたPID制御を行うためのソフトウェアです。フライトコントローラーのチップがF1の場合は整数演算を用いるMW Rewrite、F3の場合は浮動小数点演算を用いたLUX Floatを使用するのが一般的です。F1とF3のチップの違いが主にF3だと浮動小数点演算が早くなるということなのでその利点を活かすことができるのがLUX FloatのPIDコントローラーなのです。
Betaflight3.0 からはBetaflight独自のPIDコントローラーが採用されました。まだ詳細はよくわかっていませんが使用したところ私の機体ではデフォルトの状態でも非常にスムーズな制御が行われました。今後BetaflightではBetaflight PID コントローラーを使用するのが良さそうです。
4 ロール、ピッチ、ヨー、のP, I, Dの各値をチューニングする。
PIDの設定は都度パソコンをフライトコントローラーにUSB接続する方法の他にBluetoothで接続する方法(対応するFCまたは接続モジュールが必要)や対応するOSDから設定する方法などがあります。OSDで設定する方法が一番楽なのでオススメです。MW OSDでPID設定のメニューを起動するにはArmをOFFにした状態でスロットルを中央、ヨーを右、ピッチを上(前進)とします。
ロール、ピッチ、ヨー、のP, I, Dの値を変更する際、最初にいつでもデフォルト設定に戻せるように値を記録しておきます。パソコンの画面の保存やOSD経由の場合はDVR録画しておくと良いでしょう。
PIDの設定は機器構成やファームウェア、ループタイム、PIDコントローラー等を変更した場合は変更をし直す必要がありますので注意します。(PIDコントローラーLux Floatの場合はループタイムを変更してもPIDはそのままで良いようです。)
まず最初にデフォルトの設定のまま飛ばしてみて特に問題がなければそのまましばらく飛ばしてみます。あまり気持ちの良いモーター音がしない、機体が安定せず振動する、飛行後モーターが熱くなっているといった場合はPIDチューニングが必要です。
似た構成で公開されているPID値があればそれを設定してみます。なければデフォルトのまま。そこを起点に以下のルールで最適値を探ります。
・P→I→Dの順に設定する。
・ロール、ピッチ、ヨーの順に設定する。
・いろんな動作をさせて振動が発生しない値を探る。その際、PとIはなるべく大きな値、Dはなるべく小さな値にする。
・ロー、ピッチ、ヨーのそれぞれの動きを試してみてブルブルと速い振動が発生する場合はそれぞれの軸に対応するP値を下げてみる。どれかわからない場合は3つとも下げる。遅めの振動が発生する場合は同様にI値を下げる。
・最初のうちはPIDそれぞれデフォルトのロール、ピッチ、ヨーの比率(例えば上の画像だと4.5:6:8)を参考に複数の値を同時に大きく値を変更する。
・値の変更量を小さくしながら最適値の範囲を絞っていく。
モーターの気持ち悪い音がなくなり機体の振動が感じなくなればPID値の調整は完了です。うまくチューニングされた機体はスティック操作に機敏に反応し小さなゲートを狙う時にもピタッとコースが定まる感じがします。これを英語ではLocked-Inと表現されます。
5 必要に応じてレート(ロール、ピッチ、ヨー、RC)及びRC Expoを変更する。
PIDチューニングした状態でスティック操作に対して機体の反応が鈍いような場合はレートの値を上げることによってスティック操作に対して敏感に機体が反応するようになります。ロール、ピッチ、ヨーの各レートはスティック操作に対する反応の良さとなり大きな値ほど反応が良くなります。RCレートはロール、ピッチ、ヨーの複数のレートを一度に設定することができます。ロール、ピッチ、ヨーの各レート、RCレートがスティック操作に対する反応の良さを一律に設定するのに対してRC Expoはスティック中央周辺と外側の感度の変化を調整します。スティック中央周辺の感度があまり敏感だと機体がフラついたりしやすくなるためRC Expoの値を大きくすることでスティック中央周辺の感度を下げることができます。
レートの調整がPIDに影響する場合がありますので必要に応じてPIDを再調整します。
まとめ
PIDチューニングがうまくいくととても気持ちよくドローンを飛行させることが可能となります。まさにLocked-Inを感じることができます。OSD経由でPIDを変更する場合で何度も飛行と着陸を繰り返しながらうまくいけば1つのバッテリーでチューニングが完了しますが、うまくいかない場合はバッテリー4、5個使っても最適値を見つけられない場合もあります。いつまでもチューニングをしていても時間がもったいないのである程度のところで妥協してPIを小さめの値にして振動を抑え飛行練習をしながら逐次改善していくと良いでしょう。
当方はクリーンフライトでセッティング中なので、少し勝手が違うようですが、理論的な部分を分かりやすく解説されているのでとても参考になります。
ユラユラとした振動を消すのに苦戦しておりますが、何か指標になるものがあればご教示いただけると助かります。
崎山さん。コメントありがとうございます。
多少なりともお役に立てて幸いです。
ユラユラする周期の長い振動はおそらくI(アイ)の値が高いために発生していると思われます。ユラユラが発生する軸(ロール、ピッチ、ヨー)に関するI(アイ)を一度低いものに下げてみてはいかがでしょうか。
返信ありがとうございます。
おかげさまでホバリングがかなり安定してきました。目視でのフライトトレーニングに移行できるようになりました。
現在は燃費も考慮(ゴーグルが買えないだけなんですが)し VTX,カメラ、OSD 等は搭載せず、極チープ仕様ですが、年末頃にはFPV化の完成を目指しております。
いつも記事を参考にセッティングさせて頂いてるものです。
PID設定についての記事はなかなか無いのでとても勉強になり、セッティングしてやろう!という気になってます^ ^
そこで1つ質問させて頂きたいのですが。
P値を上げて行って直線でフルスロットル時はギリギリ振動が出ない程度に数値を上げたのですが、コーナーの立ち上がり(ブレーキからの立ち上がり)でブルブルと少し震えます。
これは数値がまだ高いのでしょうか?
宜しければご教授お願い致します。
カサポンさん
サイトをご覧いただきありがとうございます。
コーナーでバシッと止めた時の踏ん張りでブルブル言うのは Pが高い場合に発生する現象かと思います。
Pを下げてみてブルブル言わなくなり他の場面での飛行に不満がなければ下げた状態が良いのではないかと思います。
激しい動きをする場合などにブルブル言うのを完全になくす必要はないかと思います。(ある程度は残ってしまうと思います。)
あとは好みでしょうか。Pをあげてクイックな反応を極限まで引き出したい場合などは多少無理な動きでブルブル言うのを許容するという考え方もあるかと思います。
参考になれば幸いです。
早速のお返事ありがとうございます。
了解しました!現在の使用機種はQAV-Xなのですが、動きが機敏なので程々の感度にしてみます。
多少のブルブルは仕方ない、というのが分かったことでまた一歩セッティングの面白さへ踏み込めたようにおもいます。
宜しければ、またコメントさせて下さい。
失礼します。m(__)m
お役に立ててよかったです。
直感的な操作性に関してはRCレートやレートの影響もかなり大きいのでPIDと合わせて好みに合うセッティングが見つかれば良いですね。
疑問点や気付かれたことなど何でも気軽にコメントしてください。
今後ともよろしくお願いします。