DeviceDriversライブラリ ~シミュレーション中の入力~

OpenModelica例題・練習

興味深いライブラリを見つけた。Modelica_DeviceDriversというもので、シミュレーション中にキーボード、マウス、ジョイスティック等からの入力を受け付けたり、別のソフトウェアとのデータ通信を行ったりできるライブラリだ。

例により、記事を通して言いたいことを、冒頭に書いておこう。

  • 既存かつ無償公開されているlibraryに、計算中に入力を与えると言ったインタラクティブシミュレーションを実現できる素晴らしいものが有る。活用すれば、Modelicaによるシミュレーションが何倍も面白くなる可能性を秘めている。

これを使えば、途中で入力操作を行える航空機やエンジンのシミュレーションモデルを作れそうだ。さらに、他ソフトとのデータ通信も行えるなら、FlightgearやX-planeのフライトモデルをModelicaで作ったものに入れ替えてフライトすることが出来るようになる可能性も高い。(X-planeには他ソフトや自作プログラムをシミュレーション内に組み込むためのAPIが有るようだがハードルが高いし、Documentaion,Exampleが充実していなくてモデル入れ替え実現できていない。)

ちなみに、DeviceDriversライブラリはリアルタイムシミュレーション(シミュレーションの一秒と現実の1秒を合わせる)を行う必要があるので、使うにはリアルタイムシミュレーション用のModelica_Synchronousライブラリもインストール・ロードしておく必要が有る。

どちらも、OpenModelicaをインストールすると3rd partyライブラリとして付いてくるので、OpenModeilca導入済みの方は改めてダウンロード・インストールする必要は無い。OpenModelicaのOptionから読込み設定を行うだけで使えて、ソースコードも観れる。だが、ソースコードだけ見たい方、doc/helpだけ見たい方向けにgithubページリンクを載せておく。

TestInputKeyboard_03

下図はExampleに収録されているデモモデル。リアルタイムシミュレーション実行Componentと、カーソルキー、スペースキー、エンターキーの入力操作を検知しconnectorから出力するコンポーネントが配置されたシンプルなもの。早速、シミュレーション時間を長めに設定し直して(デフォルトでは1 [s]になっていたと記憶している)、実行してみよう。

TestInputKeyboard_00

シミュレーション時間を5 [s] に設定し実行した。進捗バーの進みがゆっくり進む。これは正しい挙動で、1 [s] 分の実行に現実の1 [s] を意図して費やしているためだ。実行時間データを見ると、誤差は有れど約5 [s] 所要していることが確認できる。

TestInputKeyboard_01

下図が、シミュレーション実行中に4回「↑」キーを押下した結果。keyUpというvariableの値がキーを押した時に1になり、4回パルスが立っている事を確認できる。そして、押下継続時間がパルス幅となる。4回目の押下を意図的に長押しにしており、意図通りパルスが大幅に長くなっている。

TestInputKeyboard_02

これは興味深いライブラリだ。AircraftDynamicsライブラリの飛行機の飛行挙動解析のようなシミュレーション題材は、rampやtime tableによる予め定められたinputだけでなく、インタラクティブに、シミュレーションを実行して結果を見ながらinputを操作出来る方が遥かに面白くなる。outputを作りこみ出来れば簡易なフライトシミュレータゲームを作れることになる。

本記事ではinputを使ってみた速報に過ぎないが、以後output周りを調べ、AircraftDynamicsライブラリの可視化とシミュレーションのインタラクティブ化を実施していこうと思う。

以上

コメント

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