Main Content

平面マニピュレーター モデルにおけるジョイントの運動の指定

この例では、平面マニピュレーターのエンドエフェクタの軌跡を指定して、マルチボディ ダイナミクスのモデルでマニピュレーター ジョイントの必要なアクチュエータ トルクを測定する方法を示します。マルチボディ ダイナミクスのシミュレーションの詳細については、マルチボディ ダイナミクスを参照してください。

Illustration of the manipulator

この例では、エンドエフェクタ座標系の時変軌跡座標を、6-DOF Joint ブロックを使用することによりワールド座標系を基準にして指定します。このブロックは、2 つの座標系間に必要とされる自由度を与えます。このモデルでは、6-DOF Joint ブロックは物理的接続としては動作しません。

シミュレーション中に、エンドエフェクタは指定された四角形のパターンを追跡し、回転ジョイントでは必要なアクチュエータ トルクが計算されます。

バーチャル ジョイントの追加

  1. MATLAB® コマンド プロンプトで、「openExample("sm/DocDoublePendulumModelExample")」と入力して、モデルを開きます。このマルチボディ ダイナミクスのモデルを作成する手順については、開ループ連鎖のモデル化を参照してください。

  2. 6-DOF Joint ブロックをモデルに追加し、ブロック間を図に示すように接続します。

    Double pendulum with 6-DOF joint

    このモデルでは、6-DOF Joint ブロックはワールド座標系とエンドエフェクタ座標系との間の仮想接続として動作します。ブロックは位置の入力を使用して、エンドエフェクタ座標系の軌跡をワールド座標系を基準にして指定します。6-DOF Joint ブロックの base 座標系がワールド座標系に接続されており、follower 座標系がエンドエフェクタ座標系に接続されていることを確認します。

運動入力の指定

  1. 6-DOF Joint ブロックをダブルクリックしてブロックのダイアログ ボックスを開き、次のパラメーターを指定します。

    パラメーター選択
    [Y Prismatic Primitive (Py)][Actuation][Motion]Provided by Input
    [Z Prismatic Primitive (Pz)][Actuation][Motion]Provided by Input

    ブロックに端子 [py] および [pz] が表示されます。

  2. 2 つの Simulink-PS Converter ブロックと 1 つの Signal Editor ブロックをモデルに追加します。

  3. Signal Editor ブロックを使用して位置入力を指定します。

    • Signal Editor ブロックをダブルクリックしてダイアログ ボックスを開きます。

    • [信号プロパティ] で、[信号エディターを起動します] ボタン をクリックして [信号エディター] ウィンドウを開きます。

    • 左側のペインで [シナリオ] を展開し、signal 1 の名前を py に変更し、[プロット/編集] チェック ボックスをオンにして、図に示すようにデータを編集します。

      Signal Editor UI showing position data py

    • 左側のペインで [シナリオ] を右クリックし、[挿入][信号] を選択し、新しい信号の名前を pz に変更し、[プロット/編集] チェック ボックスをオンにして、図に示すようにデータを編集します。

      Signal Editor UI showing position data pz

    • [信号エディター] タブで [保存] をクリックしてデータを MAT ファイルに保存します。[信号エディター] ウィンドウを閉じます。

    • ダイアログ ボックスの [信号プロパティ][アクティブな信号]py に設定して [データを内挿する] を選択します。次に、[アクティブな信号]pz に設定して [データを内挿する] を選択します。[適用] および [OK] をクリックします。

  4. Simulink-PS Converter ブロックを使用して Simulink® 信号を物理量信号に変換します。

    2 つの Simulink-PS Converter ブロックで、次のパラメーターを指定します。

    パラメーター
    [単位][入力信号単位]cm
    [入力の取り扱い][フィルター処理と微分][入力のフィルター処理、微分の算出]
    [入力の取り扱い][入力フィルター次数][2 次フィルター処理]
    [入力の取り扱い][入力フィルター処理時定数 (秒)]0.1

    時間フィルター処理定数が小さいと、シミュレーションの速度が大幅に低下する場合があります。ほとんどの Simscape™ Multibody™ モデルでは、多くの場合、0.1 秒の値で、シミュレーション時間と精度の十分なバランスが得られます。

  5. 次の図のようにブロックを接続します。Block diagram with signal editor

ジョイントの作動トルクの検出

  1. 2 つの Revolute Joint ブロックで、次のパラメーターを設定します。

    パラメーター設定
    [Actuation][Torque]Automatically Computed
    [Sensing][Actuator Torque]選択

    メモ

    Simscape Multibody では、運動入力によるジョイント プリミティブの自由度の数が、自動的に計算されたジョイントの作動力とアクチュエータ トルクをもつジョイント プリミティブの自由度の数と等しくなる必要があります。モデルがこの条件を満たさない場合、シミュレーションではエラーが発生して失敗します。

  2. 2 つの PS-Simulink Converter ブロックと 2 つの To Workspace ブロックをモデルに追加します。

  3. PS-Simulink Converter ブロックで、[ベクトル形式]1-D 配列に設定します。PS-Simulink Converter ブロックによって、物理量信号出力が Simulink 信号に変換されます。

  4. 2 つの To Workspace ブロックで、[変数名] パラメーターをそれぞれ t1t2 として指定します。

  5. 次の図のようにブロックを接続します。Block diagram with ps-simulink Converter blocks and To Workspace blocks

モデルのシミュレーション

シミュレーションを実行すると、Simulink ではエラーが発生して失敗します。

メモ

Simscape Multibody では、閉じた運動学的ループには少なくとも 1 つの、運動入力も自動計算された作動力やアクチュエータ トルクもないジョイント ブロックが含まれていなければなりません。

このエラーを解決するには、Weld Joint ブロックを Binary Link A サブシステムに追加し、ブロック間を図に示すように接続します。

Binary link subsystem with Weld Joint block

シミュレーションを再度実行します。Mechanics Explorer に、平面マニピュレーター モデルの動的 3 次元表示が開きます。

Planar manipulator model in the Mechanics Explorer

リンク機構で 2 つの回転ジョイントに働く、計算された作動トルクをプロットします。MATLAB コマンド ラインで次のように入力します。

figure; 
hold on;
plot(t1.time, t1.data, 'color', [60 100 175]/255); 
plot(t2.time, t2.data, 'color', [210 120 0]/255); 
xlabel('Time'); 
ylabel('Torque (N*m)'); 
grid on;
プロットに時変作動トルクが表示されます。これらのトルクによって、マニピュレーターの末端座標系が、指定した正方形の軌跡をたどるようになります。

Plot of the time-varying actuation torques

関連する例

詳細