運動エネルギー、ポテンシャルエネルギーを計算するユーザサブルーチン
Overview
MotionSolveで各ボディの運動エネルギー、ポテンシャルエネルギーを計算するユーザサブルーチンを紹介します。
3次元運動のエネルギを計算するにはマトリクス演算を用いると簡単ですので、ユーザーサブルーチンの記述にはマトリクス演算が記述しやすいAltair Composeを使用します。
Pre-Requisite
本ページで使用したモデル、スクリプトはこちらからダウンロードいただけます。
Usage/Installation Instructions
サンプルモデルとして、定期トレーニングで使用している2重振子モデルを使用します。
定期トレーニングではY軸回りのXZ面内運動のみで、運動エネルギーの計算としては面白くないため、Revolute JointをBall Jointに変更して、かつ、Y方向の並進初速度を与えています。
これにより、3次元運動を行う振子としています。
用意したユーザーサブルーチンはREQSUB.omlです。アウトプット作成用のサブルーチンとなります。
冒頭にコメントを書いておりますが、下記5つの値を計算して、出力します。
%result 1 : 並進運動エネルギー
%result 2 : 回転運動エネルギー
%result 3 : 運動エネルギー(並進+回転)
%result 4 : ポテンシャルエネルギー
%result 5 : 運動エネルギ+ポテンシャルエネルギ
m_body_mass_propertyでボディの重心位置、質量、慣性モーメントを取得しています。
また、m_sysaryでボディの速度、角速度を取得しています。
あとは、マトリクス演算で運動エネルギー1/2 mv^2、1/2 Iω^2を計算します。
MotionView上でユーザーサブルーチンの設定を行います。
Outputを作成し、Composeのスクリプト、関数名を指定します。
引数はbodyのidとbodyの重心マーカのidの二つです。
重心マーカのidはグラフィックから計算する場合(Get Properties from associated Graphic)とユーザが指定する場合で記述が異なります。ご注意ください。
`USER({b_pendulum.id},{b_pendulum.cm.id})` : ユーザが指定する場合
`USER({b_pendulum.id},{b_pendulum.geomprops.cm.id})` : グラフィックから計算する場合
あとは、計算を実行してグラフを描画します。
ユーザサブルーチンの出力はTYPE = REQSUBに出力されます。
5番が運動エネルギ+ポテンシャルエネルギですので、これを全ボディに対して和を取ると、エネルギが保存していることを確認できます。
Post-Requisite
Altair Composeを用いたMotionSolveのユーザーサブルーチンに関しては、チュートリアルやCommunity記事をご参照ください。
MV-7013: Inverted Pendulum Control Using MotionSolve with Compose Subroutines
使用製品:Altair MotionSolve/MotionView、Altair Compose
よくあるエンジニアからの質問はこちら