Main Content

MATLAB での単純な振子の作成

この例では、MATLAB で単純な振子を作成します。"simscape.multibody.*" パッケージの下のさまざまなクラスを示して、MATLAB で単純なマルチボディ システムを構築します。

振子はピボットから片方の端で吊るされた単一のリンクで構成されます。X-Y 平面上で、-Y 方向の重力を受けてスイングするものと考えられています。ゼロ位置はまっすぐにぶら下がっている振子に対応し、正の速度は、振子を +Z 軸から見たときのピボットを中心とした反時計回りの動きに対応します。

次のコードのセクションでは、単純な振子が作成されます。

% Import MATLAB Classes package so the "simscape.multibody." qualifier is not needed in front of class names.  
% Also import useful classes from Simscape.  (This shortcut can also be used at the command line.)
import simscape.multibody.* simscape.Value simscape.op.*

ブリック ジオメトリを使用して振子のリンクを構築します。

linkDimensions = Value([20 2 1], "cm");
link = RigidBody;
color = [0 1 1];
addComponent(link, "Body", "reference", Solid(Brick(linkDimensions),SimpleVisualProperties(color)));
addFrame(link, "pin", "reference", ...
         RigidTransform(StandardAxisTranslation(linkDimensions(1)/2, Axis.NegX)));
addConnector(link, "pin");

follower 座標系の +X 軸を base 座標系の -Y 方向に合わせる剛体変換を構築します。これは、振子が X-Y 平面でスイングし、ゼロ位置ではまっすぐにぶら下がるようピボットを位置づけるために使用されます。

rotator = RigidTransform(AlignedAxesRotation(Axis.PosX, Axis.NegY, Axis.PosZ, Axis.PosZ));

マルチボディ オブジェクトを作成し、重力加速度が既定の -Z 方向ではなく -Y 方向になるように変更します。

pendulum = Multibody;
pendulum.Gravity = circshift(pendulum.Gravity, -1);

マルチボディ オブジェクトに必要なコンポーネントを追加します。

addComponent(pendulum, "World", WorldFrame);
addComponent(pendulum, "Rotator", rotator);
addComponent(pendulum, "Link", link);
addComponent(pendulum, "Pivot", RevoluteJoint);

コンポーネント間に適切な接続を作成します。マルチボディ オブジェクトの connectVia メソッドは、あるジョイントで 2 つの座標系を接続するために使用されます。

connect(pendulum, "World/W", "Rotator/B");
connectVia(pendulum, "Pivot", "Rotator/F", "Link/pin");

操作点を作成して、振子のリンクを垂直方向から反時計回りの方向に 30 度の位置で、1 回転/秒で反時計回りの方向に回転するようにします。

op = OperatingPoint;
op("Pivot/Rz/q") = Target(simscape.Value(30, "deg"), "High");
op("Pivot/Rz/w") = Target(simscape.Value(1, "rev/s"), "High");

振子を可視化します。

compiledPendulum = compile(pendulum);
state = computeState(compiledPendulum, op);
visualize(compiledPendulum, state, "simple_pendulum");

振子の Simulink モデルを生成する

makeBlockDiagram(pendulum, op, "simple_pendulum")

参考

|