Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MATLAB での単純な振子の作成

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

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

次のコードのセクションでは、単純な振子が作成されます。まず、MATLAB パッケージをインポートして、クラス名の前に simscape.multibody.and Simscape. 修飾子を付けずに済むようにします。

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);

コンポーネント間に適切な接続を作成します。クラス Multibody の 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")

参考

|

関連するトピック