メインコンテンツ

MATLAB でのマルチボディ システムのモデル化

R2026b

この例では、Simscape Multibody の MATLAB クラスを使用して 4 節リンク機構システムをモデル化する方法を示します。この例では、長さが 5 cm、8 cm、10 cm、12 cm の 4 つのリンクをもつクランク ロッカー機構を作成します。

クラスの名前空間名を入力せずに済むようにするには、import関数を使用します。

import simscape.Value simscape.op.* simscape.multibody.*;

4 節リンク機構システムの作成

まず、4 節リンク機構システムを表すsimscape.multibody.Multibodyオブジェクトを作成し、そのオブジェクトに fb という名前を付けます。Multibody オブジェクトは、コンポーネント オブジェクトの階層コンテナーです。各コンポーネント オブジェクトは、マルチボディ システムのパーツまたはサブシステムを表します。

fb = Multibody
fb = 
  Multibody:

  No connectors.

  No components.

  No connections.

  Multibody with properties:

     ComponentNames: [0×1 string]
    FrameConnectors: [0×1 string]

このオブジェクトは最初は空で、コネクタは 0 個です。

次に、4 節リンク機構システムのリンクとジョイントを作成します。4 節リンク機構システムの各リンクは、2 つの端部フレーム コネクタと、ボディの重心に配置された基準フレームをもつ剛体です。

リンクを作成するには、補助関数 link を使用します。MATLAB でリンクを作成する詳細な手順については、MATLAB での剛体のモデル化を参照してください。

まず、システムの図に従って各リンクの長さと色を指定します。長さと色を定義するには、simscape.Valueオブジェクトとsimscape.multibody.SimpleVisualPropertiesクラスを使用します。

bottomLength = Value(12,"cm");
topLength = Value(10,"cm");
leftLength = Value(5,"cm");
rightLength = Value(8,"cm");
bottomColor = SimpleVisualProperties([0 0 .8]);
topColor = SimpleVisualProperties([1 .8 0]);
leftColor = SimpleVisualProperties([.8 0 0]);
rightColor = SimpleVisualProperties([0 .8 0]);

リンクを作成するには、指定のリンクの長さと色で補助関数 link を使用します。最初の 2 つの引数で長さと色を設定し、3 番目の引数でリンクの基準フレームにコネクタを追加するかどうかを指定します。3 番目の引数が true の場合、リンクの基準フレームは、他のフレームまたはコンポーネントに接続するためのフレーム コネクタになります。この関数では、幅に 2 cm、高さに 1 cm というハードコードされた値を使用します。

下側リンクの基準フレームはワールド フレームに接続するため、下側リンクの 3 番目の引数を true に設定し、その基準フレームをフレーム コネクタとして公開します。

Bottom_Link = link(bottomLength,bottomColor,true);
Top_Link = link(topLength,topColor,false);
Left_Link = link(leftLength,leftColor,false);
Right_Link = link(rightLength,rightColor,false);

addComponentメソッドを使用して、作成したリンクを 4 節リンク機構システムに追加します。

addComponent(fb,"Bottom_Link",Bottom_Link);
addComponent(fb,"Top_Link",Top_Link);
addComponent(fb,"Left_Link",Left_Link);
addComponent(fb,"Right_Link",Right_Link);

addComponent メソッドを使用してワールド フレームを 4 節リンク機構システムに追加し、connectメソッドを使用して下側リンクの基準フレームをワールド フレームに接続します。

addComponent(fb,"World",WorldFrame);
connect(fb,"World/W","Bottom_Link/reference");

リンクを組み立てて 4 節リンク機構システムを構成するには、4 つの回転ジョイントを使用します。これらのジョイントを作成するには、simscape.multibody.RevoluteJointクラスを使用します。各ジョイントの位置に基づいてジョイントに名前を付け、addComponent メソッドを使用して 4 節リンク機構システムに追加します。

joint = RevoluteJoint;
addComponent(fb,"Bottom_Right_Joint",joint);
addComponent(fb,"Top_Left_Joint",joint);
addComponent(fb,"Top_Right_Joint",joint);
addComponent(fb,"Bottom_Left_Joint",joint);

connectViaメソッドを使用して、回転ジョイントでリンクを接続します。

connectVia(fb,"Bottom_Left_Joint","Bottom_Link/neg_end","Left_Link/neg_end");
connectVia(fb,"Bottom_Right_Joint","Bottom_Link/pos_end","Right_Link/neg_end");
connectVia(fb,"Top_Left_Joint","Top_Link/neg_end","Left_Link/pos_end");
connectVia(fb,"Top_Right_Joint","Top_Link/pos_end","Right_Link/pos_end");

既定では、重力はワールド フレームの負の z 方向に沿っています。この例では、4 節リンク機構システムはワールド フレームの X-Y 平面上を動くため、重力は負の y 方向に沿っていなければなりません。4 節リンク機構システムの重力を指定するには、simscape.multibody.UniformGravity クラスを使用します。

gravity = UniformGravity(Value([0 -9.80665 0],"m/s^2"));

4 節リンク機構システムの初期構成を設定するには、ジョイント プリミティブのターゲットを指定します。たとえば、simscape.op.OperatingPointオブジェクトとsimscape.op.Targetを使用して、左下のジョイントのジョイント プリミティブ ターゲットを 60 度に設定します。

JointOP = OperatingPoint;
JointOP("Bottom_Left_Joint/Rz/q") = Target(60,"deg","High")
JointOP = 
  OperatingPoint with children:

  OperatingPoints:

   ChildId              Size
   ___________________  ____

   'Bottom_Left_Joint'   1x1

システムのコンポーネントと構造を確認します。

fb
fb = 
  Multibody:

  No connectors.

  Components:

  Name                  Type          
  ____________________  ______________

  "Bottom_Left_Joint"   Revolute Joint
  "Bottom_Link"         Rigid Body    
  "Bottom_Right_Joint"  Revolute Joint
  "Left_Link"           Rigid Body    
  "Right_Link"          Rigid Body    
  "Top_Left_Joint"      Revolute Joint
  "Top_Link"            Rigid Body    
  "Top_Right_Joint"     Revolute Joint
  "World"               World Frame   

  Connections:

  Connector 1              Connector 2           
  _______________________  ______________________

  "Bottom_Left_Joint/B"    "Bottom_Link/neg_end" 
  "Bottom_Left_Joint/F"    "Left_Link/neg_end"   
  "Bottom_Link/pos_end"    "Bottom_Right_Joint/B"
  "Bottom_Link/reference"  "World/W"             
  "Bottom_Right_Joint/F"   "Right_Link/neg_end"  
  "Left_Link/pos_end"      "Top_Left_Joint/F"    
  "Right_Link/pos_end"     "Top_Right_Joint/F"   
  "Top_Left_Joint/B"       "Top_Link/neg_end"    
  "Top_Link/pos_end"       "Top_Right_Joint/B"   

  Multibody with properties:

     ComponentNames: [9×1 string]
    FrameConnectors: [0×1 string]

Simulink モデルの作成

マルチボディ システムをシミュレーションする機能を含め、Simscape Multibody の機能を十分に活用するには、makeBlockDiagramメソッドを使用して fb オブジェクトから Simulink モデルを作成します。

makeBlockDiagram(fb,JointOP,"FourBar")

MATLAB でマルチボディ システムを構築する場合、Simscape Multibody ではジョイント プリミティブの状態を別の方法で指定します。ジョイント ブロック内のジョイント ターゲットを通じて状態を指定する代わりに、fb オブジェクトでは、simscape.op.OperatingPointオブジェクト JointOP を使用してジョイント プリミティブの状態ターゲットを定義します。したがって、fb オブジェクトから Simulink モデルを作成するには、makeBlockDiagram メソッドで JointOP オブジェクトと fb オブジェクトが必要です。makeBlockDiagram メソッドは、JointOP オブジェクト内のデータを使用して、生成された Simulink モデル内のジョイント ブロックのジョイント ターゲット パラメーターに値を設定します。

FourBar モデルは、他の Simulink モデルと同じように変更できます。ただし、fb オブジェクトでも行える変更については、FourBar モデルで直接変更しないことがベスト プラクティスです。代わりに、fb オブジェクトを生成するコードを変更し、オブジェクトを再生成してから、新しい Simulink モデルを作成します。この方法により、コードをモデルの主要なソースとして維持できます。

参考

| |

トピック