運動エネルギー、ポテンシャルエネルギーを計算するユーザサブルーチン

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee
edited May 2023 in Altair Exchange

Overview

MotionSolveで各ボディの運動エネルギー、ポテンシャルエネルギーを計算するユーザサブルーチンを紹介します。

3次元運動のエネルギを計算するにはマトリクス演算を用いると簡単ですので、ユーザーサブルーチンの記述にはマトリクス演算が記述しやすいAltair Composeを使用します。

Pre-Requisite

本ページで使用したモデル、スクリプトはこちらからダウンロードいただけます。

Usage/Installation Instructions

サンプルモデルとして、定期トレーニングで使用している2重振子モデルを使用します。

定期トレーニングではY軸回りのXZ面内運動のみで、運動エネルギーの計算としては面白くないため、Revolute JointをBall Jointに変更して、かつ、Y方向の並進初速度を与えています。

これにより、3次元運動を行う振子としています。

image

用意したユーザーサブルーチンは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を計算します。

image

MotionView上でユーザーサブルーチンの設定を行います。

Outputを作成し、Composeのスクリプト、関数名を指定します。

引数はbodyのidとbodyの重心マーカのidの二つです。

image

重心マーカのidはグラフィックから計算する場合(Get Properties from associated Graphic)とユーザが指定する場合で記述が異なります。ご注意ください。

`USER({b_pendulum.id},{b_pendulum.cm.id})` : ユーザが指定する場合

`USER({b_pendulum.id},{b_pendulum.geomprops.cm.id})` : グラフィックから計算する場合

image

あとは、計算を実行してグラフを描画します。

ユーザサブルーチンの出力はTYPE = REQSUBに出力されます。

5番が運動エネルギ+ポテンシャルエネルギですので、これを全ボディに対して和を取ると、エネルギが保存していることを確認できます。

image

 

 

Post-Requisite

Altair Composeを用いたMotionSolveのユーザーサブルーチンに関しては、チュートリアルやCommunity記事をご参照ください。

MV-7013: Inverted Pendulum Control Using MotionSolve with Compose Subroutines

Altair Composeでユーザーサブルーチンを記述

 

使用製品:Altair MotionSolve/MotionViewAltair Compose

よくあるエンジニアからの質問はこちら