MV-2021:車のドア閉鎖のシミュレーション

本チュートリアルでは、弾性体モデルと剛体モデルを作成し、ドアの閉鎖のシミュレーションを行う方法について学習します。

チュートリアルのタスクとして以下のものが含まれます:
  • FEMファイルを用いた弾性体ファイルの作成
  • ボディのデータを使った剛体モデルの作成
  • ドアを弾性体とし、作成された弾性体ファイルをモデルで使用
  • ドア閉鎖のシミュレーションのセットアップ
注: mbd_modeling\flexbodiesフォルダーにあるファイルmetro_door.femおよびcar_body_graphics.hmを、自身の<working directory>にコピーします。

弾性体ドア用の有限要素モデルの確認

このステップでは、弾性体作成のスターティングポイントとなる有限要素(FE)モデルの内容を確認します。

  1. モデルmetro_door.femHyperMeshにインポートします。
  2. モデリングウィンドウの左側にあるModelブラウザをクリックし、モデルツリーを展開して、モデルのすべてのコンポーネント、プロパティおよび材料を確認します。


    図 1.

    FEMモデルは下記の属性を有しています:

    • すべてのコンポーネントについて、質の高い適正なメッシュ
    • すべてのコンポーネントに断面プロパティが割り当てられている
    • すべてのコンポーネントは、適切な材料を参照している
  3. 弾性体の取り付け節点を確認します。節点9751、9750、10090をチェックしてください。
  4. FEMをmetro_door_flex.femとしてFlexbody Generationのためにエクスポートします。

Flex Prepによる弾性体の作成

このステップでは、Step 1で作成したFEMファイルを使い、Flex Prepで弾性体H3Dファイルを生成します。本チュートリアルのこのステップを実行するにあたっては、MV-2010:Flex PrepとOptiStructを使った弾性体の作成で説明されているFlex Prepの理解が前提とされます。

  1. MotionViewでFlexToolsメニューからFlex Prepを選択します。
    FlexBodyPrepダイアログが表示されます。


    図 2.
  2. FlexBodyPrepダイアログで、ドア閉鎖モデル構築用の弾性体を作成するための以下の情報を入力します。


    図 3. データの入ったFlexPrepユーティリティ
  3. 上の図を参考に、#2のSelect Bulk Data file (fem/nas/bdf/dat)を選択してStep 1で作成された入力ファイルmetro_door_flex.femを指定します。
  4. #3のSave the h3d file as:には、出力H3Dファイルをmetro_door_flex.h3dと指定します。
  5. #4のSpecify Interface Node Listには、取り付け節点番号を9751+9750+10090と指定します。
  6. #5のCutoff type and value:には、Highest Mode #を選択し、20と入力します。
  7. #6では、Perform stress recoveryPerform strain recoveryの両方をアクティブにし、Perform element check in OptiStruct modelにNoを選択します。
  8. Mass unitsにMegagramを選択します。
  9. OKをクリックし、弾性体の生成を開始します。
    弾性体H3Dファイルは、metro_door_flex.h3dという名称で、選択されたフォルダに作成されます。

車のドアのMBDモデルを作成

このステップでは、車のドアのMBDモデルを作成します。これが終わると、ドア閉鎖のシミュレーションを行うことが可能になります。

このモデルには、長さにミリメーター、質量にメガグラム、力にニュートン、時間に秒の単位を使用します。

モデルユニット

Formsパネルで、Massの単位をデフォルトのKilogramからMegagramに変更します。

ポイント

このモデルを作成するには、全部で6つのポイントを作成する必要があります。

ProjectブラウザModelを右クリックし、Add Reference Entity > Pointを選択、またはツールバーからPoints を 右クリック)します。下の一覧に示すポイントを追加します。


図 4. モデルに必要なポイント

Bodies

このモデルには2つのボディが含まれます。1つは車を、もう1つは弾性体ドアを表します。

  1. ProjectブラウザModelを右クリックし、Add Reference Entity > Bodyを選択、またはツールバーからBodies を 右クリック)します。ボディを1つ追加し、Car Bodyと命名します。
  2. CM Coordinatesタブで、ボディの重心をポイントCar Body CGに指定します。
  3. Car BodyのPropertiesタブをクリックし、下の表に示すとおり、質量および慣性プロパティを入力します。


    図 5. Car Bodyの質量および慣性プロパティ
  4. ボディをもう1つ追加し、Car Doorと命名します。
  5. PropertiesタブでFlex Bodyチェックボックスをクリックします。
  6. Door BodyのGraphic fileおよびH3D fileにmetro_door_flex.h3d fileをブラウズして指定します。上のStep 2で作成した弾性体ファイルを使用します。

Graphics

上のPoint 6の後、Door Bodyはグラフィック表示されていますが、Car Bodyはまだです。ファイルのグラフィックをCar Bodyに追加し、モデルの可視状態がより意味をもつようにします。

  1. ToolsメニューからImport CAD or FEを選択します。
  2. Input FileドロップダウンメニューからHyperMeshを選択します。ファイルブラウザを使って、HyperMeshファイルcar_body_graphics.hmを選択します。
    Output Graphic File欄は自動的に入力されます。


    図 6.
  3. OKをクリックします。
    HyperMeshファイルはH3Dに変換され、MotionViewウィンドウに読み込まれます。
  4. Graphicsパネルで、今しがた追加されたグラフィックをクリックします。
  5. Connectivityタブで、Bodyをダブルクリックし、ボディとしてCar Bodyをピックします。
    これで、選択されたグラフィックがCar Bodyに関連付けされます。

ジョイント

このボディには、4つの拘束 / ジョイントを追加する必要があります。これらのジョイントの1つは、XMLテンプレートを使って追加しなくてはなりません。

  1. ProjectブラウザModelを右クリックし、Add Constraint > Jointを選択、またはツールバーからJoint を 右クリック)します。
  2. 下の一覧に示すとおり、ジョイントを追加します。


    図 7. 作成すべきジョイントとそのトポロジー

    ジョイントが指定されたら、モデル内に弾性体が存在するため、弾性体の取り付け節点を対応するジョイントマーカーに関連付ける必要があります。

  3. BodiesパネルでCar Doorを選択します。
  4. Propertiesタブで、Nodesをクリックします。
  5. Nodesダイアログで、Find Allをクリックして取り付け節点番号を探し、それぞれのマーカーに結合させます。

初期条件

本シミュレーションでは、ボディの初速度がモデルへの主運動の入力として機能します。

  1. Projectブラウザで、左側のフィルタからDoor Bodyを選択します。
  2. Initial Conditionsタブをクリックします。
  3. WZをアクティブにし、値5.0を指定します。
    これが、Door Bodyに掛けられる全体Z軸周りの初期角速度の大きさとなります。
  4. テストシミュレーションを実行し、この初期速度と拘束でモデルがどのような挙動を示すかをチェックします。

Markers

車のドアのロック機構を表すため、当初は非アクティブとなっているCar BodyとDoor Bodyの間のfixedジョイントをアクティブにするセンサーを使用します。固定ジョイントは、XMLテンプレートを使って作成する必要があります。これは、MotionViewインターフェースでは、ボディとポイントを使ってジョイントが作成できるためです。ここでは、初めは一致していない2つのマーカー間にジョイントを作成しなくてはなりません。

  1. ProjectブラウザModelを右クリックし、Add Reference Entity > Markerを選択、またはツールバーからBodies を 右クリック)します。
  2. 下の一覧に示すとおり、マーカーを追加します。


    図 8. 作成すべきマーカーとそのトポロジー
  3. マーカーを作成したら、上記Jointsの項の手順3.から5.までを繰り返し、Car Doorの節点とマーカーDoor Lock Markを結合させます。

Sensors

このモデルでは、ドアの閉鎖を検知するためにEvent Sensorを使用します。この事象が検知された瞬間、ドアとボディの間の固定ジョイントがアクティブとなり、実際のロック機構をシミュレートします。

  1. ProjectブラウザModelを右クリックし、Add General MDL Entity > Sensorを選択、またはツールバーからSensor を 右クリック)します。
  2. センサーを1つ追加し、Lock Recognizeと命名します。
  3. Signalタブをクリックし、信号のタイプをLinearからExpressionに変更します。
  4. 信号として、下に示す式を使用します:。
    DY({MODEL.m_door.idstring},{MODEL.m_car.idstring},{MODEL.m_car.idstring})

    DY関数は、3つのマーカーを引数として受け入れます。この関数は、3番目のマーカーの基準枠内の2番目のマーカーからの最初のマーカーのY距離を戻します。ここでは、最初のマーカーはDoor Lock Markとラベル付けされ、これはCar Door Bodyに属しています。2番目と3番目のマーカーはCar Body Lock Markで、Car Bodyに属しています。

  5. Compare Toタブで、Valueに0.0010、Errorに0.0001と指定します。
  6. Respond ifの下で、Signal is less than VALUE + ERRORを選択します。
  7. PropertiesタブでReturn to command fileチェックボックスをクリックします。

テンプレート

ドアロックをシミュレートするためには、ドアとボディの間に固定ジョイントが必要です。この固定ジョイントは、センサーで作動する必要があります。ジョイントの作動とセンサーの非アクティブ化は、1つのシーケンシャルシミュレーションの操作を使って行うことができます。

  1. ProjectブラウザModelを右クリックし、Add General MDL Entity > Templateを選択、またはツールバーからTemplate を 右クリック)します。テンプレートをモデルに追加し、Lock Fix Jointとラベル付けします。
  2. テンプレートのPropertiesタブのType: の下で、Write text to solver input deckを選択します。
  3. パネルのテンプレート領域で、XML形式の固定ジョイントの定義を次のように入力します:
    <Constraint_Joint
    id                  = "1001"
    type                = "FIXED"
    i_marker_id         = "{the_model.m_door.idstring}"
    j_marker_id         = "{the_model.m_car.idstring}"
    />

    これは、2つのマーカーDoor Lock MarkおよびCar Body Lock Markの間の固定ジョイントを定義します。

  4. Projectブラウザで、Modelを右クリックし、Add General MDL Entity > Templateを選択して別のテンプレートを追加します。
  5. ラベルはSeq Sim Commandsと指定します。
  6. テンプレートのPropertiesタブで、Type:の下にWrite text to solver command fileを選択します。
  7. 以下は、シーケンシャルシミュレーションのXMLコマンドです。パネルのテンプレート領域で、下記のXMLコマンドのブロックを入力します:
    <Deactivate
    element_type = "JOINT"
    element_id   = "1001"
    />
    <Simulate
    analysis_type  = "Transient"
    end_time       = "1.0"
    print_interval = "0.001"
    />
    <Activate
        element_type = "JOINT"
    element_id   = "1001"
    />
    <Deactivate
    element_type = "SENSOR"
    element_id   = "{the_model.sen_0.idstring}"
    />
    <Simulate
    analysis_type  = "Transient"
    end_time       = "2.5"
    print_interval = "0.001"
    />
    <Stop/>

    これらのXMLブロックのセットは、以下の手順に指定されたシーケンシャルシミュレーションの操作を定義します:

    1. Fixed Jointを非アクティブ化(最初に)
    2. 1秒間シミュレーションを実行
    3. Fixed Jointを有効にします。
    4. Sensorを非アクティベートします。
    5. 1.5秒間シミュレーションを実行
    6. シミュレーションを停止
  8. FileメニューからExport > Solver Deckを選択することにより、モデルを一旦保存します。
  9. Runパネルで、Save and run current modelの横のファイルブラウザをクリックし、ソルバーXMLファイルの名称を指定します。
  10. Runをクリックし、MotionSolveでモデルを実行します。
  11. 実行が完了したらAnimateボタンをクリックし、シミュレーションの結果をアニメーション表示します。