はじめに
メタヒューリスティックな手法でPIDゲインをチューニングしてみたので報告連絡相談。具体的に言うと遺伝的アルゴリズム。
ちなみにヒューリスティクスとは、ある程度のレベルで正解に近い解を得ることができる方法のことで、これに「メタ」が付くと特定の問題に依存しない汎用性の高いヒューリスティクス全般のことを指す。ざっくり言うと汎用的な最適化手法のこと。
前回の記事でドローンの制御について記載したが、角速度制御と角度制御が入れ子のような形になったフィードバック制御を構成したと思う。制御が階層構造を取り始めるとゲインチューニングする際に再帰的に調整せねばならずクッソめんどくさい。
制御つよつよ人間はびしっと制御設計できるのだろうが・・・
私は雰囲気で制御をやっているので話半分で見ていただければありがたい。
遺伝的アルゴリズムってなんね
なんかみんなこんな感じのこと言ってるよね。
評価関数
遺伝的アルゴリズム(以降GAと呼称)の目的は評価関数から出力される評価値を最小化(最大化)すること。GAは評価関数に入力する設計変数をうまーいこと調整して評価値を最小化する便利機能。
ドローンのPIDゲインチューニングを当てはめて考える。
角速度制御の比例ゲインavKp、微分ゲインavKd、角度制御の比例ゲインaKpの3変数を設計変数とし、システム全体の位相余裕と目標位相余裕の絶対値差分を評価値とするような評価関数を設定した。ゲイン(設計変数)によっては位相余裕が発散するので、評価値にリミッターを設定した。
評価関数が不連続だろうがなんだろうが一応は動いてくれるのが面白いところ。ただし、うまく最小化してくれるとは限らない。
結果
目標位相余裕80degのときのゲインとステップ応答
avKp=0.2226162
avKd=0.0
aKp=928.7563
目標位相余裕60degのときのゲインとステップ応答
avKp=0.0488557
avKd=0.0
aKp=336.86452
目標位相余裕40degのときのゲインとステップ応答
avKp=0.0460121
avKd=0.0
aKp=678.02973
上記すべてにおいて位相余裕は目標値±0.001以内、ゲイン余裕はInfになっている。
数回同じ条件で最適化すると同じようなゲインが出てくる。avKdいらん疑惑ある。
脳死状態でGAを回せばある程度チューニングされたゲインが出てくる・・・と言いたいところだが、実際はGAのチューニング要素も大いに存在している。
ソースコードは人様が見れるような状態ではないので整備したら見せびらかしたい。
まとめ
GAを使ってなんとなくPIDゲインの当たり付けをしてみた。その結果、目標の位相余裕を実現するゲインを得ることができた。