モードドライバー第1回
自動車は10・15モードやJC08モード燃費というのを聞いたことがあると思います。
これは自動車の燃費を考えるうえで日本国内の規格でして、いろいろ細かい条件定められています。簡単に言えば決められた時間の車速パターンを逸脱しない様に自動車のアクセル、ブレーキを操作して燃費を計測するというものです。
概ね図1の様なパターンで、アイドリングからの時速20km/hまで徐々に加速したのち20km/hをキープしその後減速・・・ こうした目標車速追従をどのように実現するか?というのは意外と難しかったりもします。そして、このパターンを決められたスペック内で実現できるものを”モードドライバー”と呼ぶことにします。
- アイドリング状態(20秒)
- 20km/hまで加速する(7秒)
- 20km/hをキープして走行(15秒)
- 20km/hから減速して停止(7秒)
- アイドリング状態(16秒)
- 40km/hまで加速する(14秒)
- 40km/hをキープして走行(15秒)
- 40km/hから20km/hまで減速(10秒)
- 20km/hをキープして走行(2秒)
- 20km/hから40km/hまで加速(12秒)
- 40km/hから減速して停止(17秒)
(なぜか11?たぶん9が一つのモードというよりアクセル/ブレーキの踏みかえ時間)
よく知られるPID制御などの手法を用いたとしても、車両(エンジン、トランスミッション等)が強非線形のためにゲインスケジューリングしなければモードドライバーを実現できませんが、そのゲイン設定が簡単ではなく苦労します。個人的な経験として下記があげられます。
・最初はアクセル操作の程度がわからず目標車速と実車速の差を見ながら操作
→フィードバックゲイン大で振動的
・慣れてくると応答遅れ分見越してアクセル操作
→フィードフォワードゲインの調整およびマッピング、FBゲインは減少
・繰り返しチャレンジすることにより誤差が小さくなる
→強化学習
人間の感覚としてはこんな感じです。
そこで機械学習(ニューラルネットワーク、サポートベクターマシン)の回帰を用いれば、そこそこ性能の良いモードドライバーができるのでは?と思い設計してみたいと思います。今、この記事を書いている段階でうまくできるかどうかはわかりません。ただ、10年以上前に個人的な趣味でゲインスケジューリング試してそこそこうまく行ったのですが、とにかくゲイン設計(設定)がめんどくさい。これを機械学習つかって出来たら面白いだろうというアイデアです。
Simulinkでシミュレーションモデルを作成、実行
pythonで機械学習→Matlab連携
ハードル高そうですが試してみたいと思います。