MV-7012:MotionViewとMotionSolveにおけるFunctional Mockup Unit(FMU)
本チュートリアルでは、MotionViewとMotionSolveにおけるFMUの使用について学習します。
Functional Mock-up Interface(FMI)は、広範な領域と用途を跨いだモデルの交換を可能とするツールに依存しない標準インターフェースです。このインターフェースをベースとして、xmlファイル群、コンパイルされたCコードおよびその他のリソースファイル群の組み合わせを用いてモデルを記述したFunctional Mock-up Unit(FMU)は、そのようなインターフェースをサポートするアプリケーションで共有、使用することができます。
- モデル交換
- FMUは、状態量に関する必要な情報を含みます。このFMUを用いた親アプリケーションは、それらの状態量を‟内部化”して解法します。
- 連成シミュレーション
- FMUはソルバーを含むか、もしくは外部ソルバーに接続することが可能です。この場合、親アプリケーションはFMUまたは外部ソルバーと連成シミュレーションを行います。
現在は、FMI 1.0とFMI 2.0の2つのバージョンのFMIが使用されています。MotionViewとMotionSolveは、FMI 2.0のみをサポートしています。MotionViewでのFMU使用の詳細については、MotionView > MDL Reference GuideおよびMotionSolve Reference Guideをご参照ください。
本チュートリアルは、下記に必要な手順を説明しています:
- 振子モデルのオープンと確認
- MotionViewへのFMUの追加
- 入力および出力のFMUへの結合
- モデルの実行と結果の表示
本チュートリアルでは、固定されたプラットフォーム上をスライドするカートに振子が均衡を保っています。シミュレーションの開始時、振子のおもりは下を向いており、目的は、カートを動かしておもりが上向きになるよう振子をスイングさせることにあります。一旦このポジションに到達したら、同じ位置を保持する必要があります。
この目的を達成するために、FMU形式のコントローラーを用いて、振子のバランスをとるために必要な力を決定します。FMUは、異なるコントロールシステムのモデリングアプリケーションからは独立して生成されます。
振り上げ倒立振子モデルのオープンと確認
- をクリックし、MotionViewでモデルをSwingup_pendulum_FMU.mdlとして保存します。
-
モデル内に定義されているボディ、ジョイントおよびフォースを確認します。
振り上げ倒立振子モデルは以下の4つのボディで構成されています:
ボディ名 識別子 Ground Body B_Ground
Pendulum b_link
Cart b_cart
プラットフォーム b_plat
これらは以下の3つのジョイントによって互いに結合されています:ジョイント名 識別子 ジョイントタイプ Body 1 Body 2 Fix Platform to Ground j_ground_plat
Fixed プラットフォーム Ground Body Pin Pendulum to Cart j_pend_cart
Revolute Pendulum Cart Cart to Platform j_plat_cart
並進 Cart プラットフォーム コントロールフォース'Force on Cart'は現段階では値0で付与されます。振子の重りは、初期設定では下向きとなっています。シミュレーションの目的は、Y方向にコントロールフォースを付与することで、カートが動き、重りが上向きとなる位置に振子をスイングさせることにあります。これが達成されるとコントロールフォースはその位置を保持します。
本チュートリアルではFMUが追加され、カートの変位、角度および振子の回転速度がFMUへの入力として提供されます。FMUの出力はY方向の'Force on Cart'に結合され、振子のバランスをとるために必要なカートの動きを生成します。シミュレーションはMotionSolveを用いてコントローラーの効果を確認するために実行されます。
FMUの追加
-
次のいずれかの方法によって、システムにFMUエンティティを追加します。
- ControlツールバーのFMUアイコンを右クリックします。
- Project Browser内のシステムを右クリックし、コンテキストメニューから を選択します。
- Project Browserで既存のFMUフォルダのいずれかを右クリックして、コンテキストメニューから Add FMU…を選択します。
Add FMUダイアログが表示されます。 - デフォルトのラベルと識別子を保持します。
- ファイルブラウザを使ってsb_Controller.fmuファイルを探して選択します。Openをクリックします。
-
OKをクリックし、エンティティを追加します。
パネルで示すとおり、‘Model Exchange’ FMU Typeは3つの入力を受け入れ、1つの出力を与えます。
このパネルでは、FMUが由来するアプリケーションを示すGenerationツールなど、追加の情報を提供します。
-
FMUでコンプライアンスチェックを実行するには、Check FMUをクリックします。コンプライアンスツールはFMUを検証し、ワーニングやエラーをレポートします。
注: MotionViewは、モデルのチェック中およびソルバーへのエクスポート中にもCheck FMUを実行します。一般的に、変更を受けるFMUモデルの初期条件は、パラメータとして用意されています。本演習では、コントローラーについて初期条件の変更は必要ないため、パラメータは無視できます。
入力および出力のFMUへの結合
-
Edit...をクリックし、FMUを確認、編集します。
Inputs、Outputs、Parameters、Settingsタブが含まれるFMUダイアログが表示されます。
-
Inputsタブで、それぞれの入力に対してValue列の下に下記の式を入力します。
入力 # 名称 式 Details 1 Angle (rad)
振子の回転角 2 Angular Velocity
(rad/s)
振子の回転速度 3 Position (mm)
プラットフォームに対するY方向のカート変位 注: 式は、パネルの上部にあるExpression Builder(fx)を使って構築できます。 - Outputsタブに進み、リストされているシングル出力“Control Force”をReviewで確認します。
- OKをクリックしてダイアログボックスを閉じます。
- Force on Cartフォースエンティティを選択します。
- Trans Propertiesタブをクリックします。
- Fyにドロップダウンメニューを使ってExpressionを選択します。
-
パネル上部のfxボタンをクリックし、Expression Builderを表示させます。
-
Expression Builderで、下のモデルツリーを展開し、FMUのOutput Array属性にアクセスします。子の属性output_1を選択し、波括弧'{}'の間の式に追加します。
注: 出力配列には、FMU内の出力数に等しい数の出力属性が含まれます;
output_1
は1つ目の出力、output_2
は2つ目の出力、...を意味します。Expression Builder内の式は下のように表示されるはずです: -
OKをクリックし、Expression Builderを閉じます。
上の式はソルバー関数ARYVALで、これは配列の特定のインデックスの値を返します。この場合、ARYVAL関数は、FMUによって使用される出力配列の最初のインデックスの値を与えます。
これで、入力と出力がFMU用に定義されます。
- Check Modelをクリックし、モデルのエラーを確認します。
- をクリックし、モデルをSwingup_pendulum_FMU.mdlとして保存します。
モデルの実行と結果の表示
-
Runパネルに移動します。
デフォルトの設定値をそのまま使用します。
- Runボタンをクリックし、シミュレーションを開始します。
- 実行が完了したら、ソルバーウィンドウを閉じます。
- Animateボタンをクリックし、HyperViewで結果を確認します。
-
H3DファイルがHyperViewに読み出されたら、Start/Pause Animationボタン をクリックしてアニメーションを確認します。
シミュレーションが正しく実行されている場合、コントローラーによってかけられるフォースは重りを上向きにスイングさせ、残りの時間の間、バランスの保持に寄与します。
-
MotionView RunパネルのPlotボタンをクリックし、下記のY軸のType-Request-Componentを使ってカート位置とフォースをプロットします。
Y Type Y Request Y Component Marker Displacement REQ/70000002 Cart(Disp cart) DY Marker Force REQ/70000005 Force on Cart on Cart(Actuator force) FY