バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/
はじめに
引き続きにシミュレーションの話。
前回はExcelをつかったメンドクサイ側の手法だったが、
今回はちゃんとSimulinkを使う。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
モデル作成
うー。
前回はひどい目にあった。
でも、
ツールの有難みがわかったでしょ?
うん。それはもう。
じゃー、
Simulinkモデルなんかはチョロいってことだね。
んー、
自身満々ってことは無いけど、
楽が出来るって意味では抵抗感はかなり和らいだかな。
では早速、SimlinkモデルでPID制御と疑似車両のMILS(Model In the Loop System)を組んでみて。
うん。
これは前回よりも早くできるよ!
きっと。
~10分後~
どうだ!
良いね。
一応、指令値を作るためにSignal Builderも入れたんだね。
各係数は?
PIDの各係数とか、車両側のパラメータってどうしようか?
PIDの各係数はとりあえず、1.0未満の値を入れておけば良いよ。
指定するならば、以下かな。
\(K_p=0.8\)
\(K_i=0.6\)
\(K_d=0.0\)
車両側の質量はとりあえず、\(1[t]\)強ってことで
\(m=1150[kg]\)
あれ?そんなんでいいの?
PIDに関しては限界感度法とかいろいろあった気がするんだけど・・・。
今回は制御対象の性質を凡そ掴んでいるからね。
例えば、
アクセル開度\(100%\)の時の凡その車速を\(100[km/h]\)と仮定すると、
PID制御器の手前で目標車速と実車速を\(\displaystyle\frac{1}{100}\)にする。
アクセル開度\(100[\%]\)の時の出力を\(200[kW]\)とするならば、
PID制御器直後に\(200000\)のゲインを入れる。
これにより、
PID制御器の中は「\(-1.0~+1.0\)の範囲で動作すれば良い」
という感じのお膳立てができる。
PID制御器の中はいじらないの?
そうだね。
本来は制御対象をブラックボックスと捉え、各係数を徐々に調整していけるのがPID制御の良いところなんだけど、
判明しているパラメータは可能な限り制御器から排除するとチューニング難度が大きく下がるんだ。
結果、究極系として「1.0未満の値ならば何でもよい」という状態に持ってこれる。
おー。
これもモデルベース開発ならではなのかな?
モデルベース開発以前でもやっていたことだとは思うけど、
シミュレーションの敷居が下がった今だからこそ、
更に突き詰められるようになったのも事実だね。
なるほどー。
テストパターン
次はテストパターンを考える。
Signal Builderが設置されているんで、こいつにテスト信号を入れてしまおう。
人間がある程度踏み込んで、途中から自動制御するイメージだね。
そうそう。
これですべてのテストがOKとはならないが、トライアル&エラーによる大筋OKの判定には使えるだろう。
なるほど。
可能な限り問題が引き当てやすそうなテストパターンで複数回試行した方が効率が良いってことだね。
そういうこと。
テスト結果
で、テスト結果はこんなん。
おー。
なんか期待通りの動きをしているいる!
そんなに複雑なことをやっているわけじゃないからねー。
位置型PIDだとどうなる?
そういえば、今回は速度型PIDを採用しているわけだけど、位置型PIDに対してこのテストパターンを入れるとどうなるのかな?
うん。
やってみると良いよ。
PIDの出力側の積分要素のサチュレーションを無くせば、位置型PIDと同等になるんで、それに対してテストパターンを流す。
わ!
これはちょっとまずいね。
積分器が暴発してる!
ついでに自動制御直前にPIDの各変数を初期化するパターンをはこれ。
うーん、
車速だけ見ると問題無いように見えるけど、
AP開度が結構急激に変動しているから条件によっては問題が発生しそうだ。
じゃー、
やっぱり位置型PIDではなく速度型PIDを採用して正解だったってことだね!
そーだね。
アルゴリズムとしては問題無さそうなんでいろいろ自信が付いてきた!
まとめ
まとめだよ
- 制御器と制御対象をつないでMILSにすることができる。
- SignalBuilderを使ってテストパターンを作れる。
- わざと問題のあるモデルと比較すると、今回の対策の効能が見えるのでやってみると良い。
バックナンバーはこちら
コメント