【上流検証】最小構成のモデルベース開発事例 その16【SILS】

【上流検証】最小構成のモデルベース開発事例 その16【SILS】 事例

バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/

はじめに

前回、ACG(AutoCodeGenerator:自動コード生成)を実施し、そのコードを委託先へサンプルコードという位置づけで送付。
そろそろ成果物として上がってくるが・・・。

登場人物

博識フクロウのフクさん

イラスト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

ACGを元にした成果物

太郎くん
太郎くん

一応、PIDとフィルタのCコードが仕上がったみたいだよ。

フクさん
フクさん

結構早かったね。

太郎くん
太郎くん

でも、

本当にこれが良いか僕も委託先の方々も判断が付かなくてちょっと困ってるんだよね。

フクさん
フクさん

まぁ、そうだろうね。
というよりも、

そこに疑問を持てることは良いことだよ。

太郎くん
太郎くん

おー。なんか普通に褒められた!

太郎くん
太郎くん

で、

なんか策があるようなこと言ってたけど。

フクさん
フクさん

うん。
SimulinkのS-Functionという機能を利用したSILS(Software In the Loop System)をやってみようと思う。

太郎くん
太郎くん

S-Function?

フクさん
フクさん

説明をMathworks社Webサイトから抜粋してきた。

S-Function は MATLAB、C、C++ または Fortran で記述された Simulink ブロックをコンピューター言語で記述したものです。

C、C++、および Fortran S-Function は、mex ユーティリティを使用して MEX ファイルとしてコンパイルされます。

Mathworks社Webサイトより抜粋
太郎くん
太郎くん

????

フクさん
フクさん

簡単に言うと、Cコードの関数をSimulinkのブロックとして配置できるってイメージ。
絵で描くとこんなん。

SimullinkのS-Functionの構造。内部構造はWindowsのDLLと同一。コントローラ、プラント、Cコード、コンパイル
フクさん
フクさん

Simulinkブロックの中に

S-Function Builderってのがあるんで、
これを使うと簡単にできるよ。

太郎くん
太郎くん

おー。
ソースコードとヘッダファイルを指定してあげれば良い感じだね。

フクさん
フクさん

ちゃんとコンパイルが通れば、

Simulinkのブロックとして動作する。

PIDをS-Function

フクさん
フクさん

S-Functionができところでブロックを差し替える。

PID制御ブロックをS-Functionブロックに差し替え、元々のPID制御モデルは横に捌ける。
フクさん
フクさん

そして、シミュレーションしてみる。

Simulinkシミュレーション結果、目標車速、実車速、乗っ取りモード、ユーザ操作AP開度、実AP開度
太郎くん
太郎くん

おー。バッチリなんじゃない?

フクさん
フクさん

まぁ、

精査は必要だとは思うが、

とりあえずはOKってところだね。

シグマフィルタのS-Function

フクさん
フクさん

次はシグマフィルタだね。
こっちは、元のSimulinkモデルと比較できるよう重ね合わせを想定しておこう。

標準偏差σフィルタのSimulinkモデルをS-Functionブロックと並走して配置。元々の標準偏差σフィルタモデル、標準偏差σフィルタのS-Functionブロック追加
フクさん
フクさん

そして結果。

S-FunctionブロックとSimulinkモデルの標準偏差σフィルタの出力比較
太郎くん
太郎くん

こっちもバッチリだね。

フクさん
フクさん

特性も実際の出力結果も同一だし、

大丈夫と言えるだろう。

太郎くん
太郎くん

手間とかは大してかかってないけど、

なんかすごいことしたような気分になる。

フクさん
フクさん

実際すごいことだと思うよ。
これをモデルベース開発の概念無しでやろうと思ったら、

毎回実車で確認することになるから、結構時間が掛かるし、

場合によっては危険なことにもなるかもしれない。

太郎くん
太郎くん

確かにそうだね。
モデルベース開発ってのは、

楽をするための物なんだね。

フクさん
フクさん

その発想はとても良い。
「モデルベース開発はすごいもの」というよりも、

いままで大変だったものが楽になるもの」と捉えた方が現実に即していると思うよ。

太郎くん
太郎くん

うーん。

いろいろと目から鱗だった。

まとめ

フクさん
フクさん

まとめだよ。

  • CコードをS-Function化することでSimuklinkブロックとして扱えるようになる。
    • MILSの一部を差し替えても同様の動きになるかを確認できる。
    • 元のSimulinkモデルと同一の入力にして出力を比較することで一致性確認ができる。

バックナンバーはこちら

コメント

タイトルとURLをコピーしました