※ 2014年12月に執筆したものを転載
はじめに
今回はscilabの紹介をします。
こいつはオープンソースの数値計算システム。
紹介といっても、scilabの本来の数値解析の機能にはほぼ(全く?)触れません。
scilabの中にxcosというブロック線図を扱えるツールが入っており
こっちの話がメインとなります。
Matlabを知ってる人であれば、Simulink相当の機能といえば分かると思います。
ただ、Simulinkほど高機能ではないです。
片や無償、片や1ライセンス(年間?)数百万クラスのツールなので、同等であっては困るのですが。
尚、本サイトでは、Scilabに関連する記事を比較的多く書いています。
モーターモデリング例
積分、微分、伝達関数などのブロックがあるので、
それらを組み合わせて、モータープラントモデル&それのコントローラモデルなんてもの割と簡単に組めます。
とりあえず、昔こさえたモーターMILS & 動作波形↓
指令器の指示値に追従してるのでいい感じです。
こんな感じシミュレーションできます。
SILSモデリング例
ここから少し特殊な使い方を書きます。
xcosのブロックの中にCBlockというものがあり、
ブロック線図の中にC言語コードを埋め込むことができます。
こいつを利用して、先ほどのPIDコントローラのC言語版を埋め込みます。
とりあえず、PIDコントローラのコードを作成。
各定数はPIDコントローラの内部に埋め込んでいたのですが、
今回は外から入力に変えてます。
動作波形比較
こんな感じで、モデルとコードの振る舞いの比較なんかにも利用できます。
とはいえ、今回作成したコード。ちょっと問題有りなんですよね。
double型を使用してしまっているのです。
シミュレーション上はPCでやってるのでdoubleでも全然問題ないのですが、
このコードを実機に組み込む場合は大問題になります。
64bit-FPU搭載のCPUを使用しているならば大丈夫なのですが、
そんなハイスペックなCPUは望むべくも無く、
64bit-FPUが無い場合は超高負荷なsoft-float(64bit)ライブラリを呼ぶことになります。
そんなの呼ばれた日には、負荷問題一直線。
固定小数点化例
というわけで、
整数型ベースに書き直す必要があります。
今回は一律で1LSBを2^-10にしたものをやっつけ作成しました。
そして、ちゃんと動きそうかをシミュレーション。
各定数、変数の精度が落ちたので、当然ながらやや振動しちゃってます。
とはいえ、制御としては問題なさそーです。
本来は各定数、変数の取りうる範囲、制御速度を考えて、LSBやら型のサイズやらを決定するのですが、
まぁ今回はこの感じで良いでしょう。
まとめ
- ブロック線図ベースでコントローラ、プラント(制御対象)のモデルを作成してシミュレーション可能。
- ブロック線図の一部をCコードに差し替えて、問題無いか確認する。
- さらに実機搭載予定のCコードに差し替えて実機でも行けるの?ってのを確認する。
ってことができます。
Simulink様だと、コントローラモデルからコード生成なんてのもできるんで・・・。
やはり世の中金か。
コメント