Main Content

Simulink でのマルチボディの作成方法

この例では、Simscape™ Multibody™ を使用した機械モデル作成の主な概念と推奨手順を取り上げます。この目的のために簡単な設計問題を選びました。次の節でこの設計問題について、その後の節でそれを解決する方法について説明します。

問題の説明

次の図は、照準装置として機能する機構を示します。

問題は、機構の平面内を狙うように単純化されています。図は機構の概念的スケッチを示し、機構の動作の基本的な性質のみをとらえています (これは通常、設計プロセスの初期段階に該当します)。リンク "C" はリンク "A" 上でスライド可能です。モーターがトルク $ {\bf \tau} $ を回転ジョイント "Ri" に加えます。タスクは、回転角 $ {\bf \beta} $ の固有の軌跡を追跡することです。

モデルの作成

モデルを作成する際に従うべき重要な原則は、基本的な機構が機能するようにするために、単純な近似から始めることです。その後の反復で、モデルに複雑度を追加します。Simscape Multibody で推奨するモデル作成プロセスは、次の手順に分けることができます。

  1. 機構内の剛体を特定します。

  2. 剛体同士を互いに接続する方法 (ジョイント、拘束など) を特定します。

  3. それぞれの剛体を単独で考えます。剛体の単純な近似を作成し、その剛体に剛性的に付加する座標系を定義します。

  4. ジョイントや拘束を使用して剛体を組み立てます。Model Report を使用して、モデルのアセンブリに関する問題を特定します。

  5. Mechanics Explorer を使用して、モデルに関するその他の問題を特定して修正します。

  6. ジョイント ターゲットを設定して、目的の構成に向けてアセンブリをガイドします。

  7. 入出力を機構に接続します。モデルのテストと検証を行います。該当する場合、コントローラーを付加してモデルをテストします。

  8. モデルが実際の機構をより正確に表すようにするために、個々の剛体に詳細を追加します。

以下のセクションで、これらの手順を詳しく説明します。以下のセクションで取り上げているすべてのモデル ファイルは、この例を開いた後、MATLAB® の現在のフォルダー ブラウザーで確認できます。

剛体とジョイントの特定

機構には 4 つの剛体があります。

  • 剛体 A (オレンジ)

  • 剛体 B (青)

  • 剛体 C (緑)

  • 剛体 D (グレー)

機構には次のジョイントがあります。

  • 剛体 A と剛体 D は、回転ジョイント Ro を介して接続されています。

  • 剛体 A と剛体 C は、直進ジョイント Pg を介して接続されています。

  • 剛体 C と剛体 B は、回転ジョイント Rg を介して接続されています。

  • 剛体 B と剛体 D は、回転ジョイント Ri を介して接続されています。

さらに、剛体 D は動かないため、ワールド座標系 W に剛結合されています。

剛体とそのインターフェイスの定義

剛体を定義するには、形状、質量特性および他のパーツとのインターフェイスを指定します。それぞれの剛体は、単独で特定および定義します。上の例では、機構は 4 つの剛体 A、B、CD で構成されています。

以下に剛体 A を単独で示します。

最初に、Simscape Multibody で剛体 A の形状を定義します。オブジェクトの形状を定義して密度を指定すると、Simscape Multibody で慣性を自動的に計算できます。上記のやや複雑な形状を定義する代わりに、最初の近似として、剛体の形状を元のパーツと長さの等しい単純な円柱として定義できます。

剛体 A の形状 (最初の近似) を定義したら、密度を指定します。これで、Simscape Multibody で動的シミュレーションに必要な慣性特性を計算するのに十分な情報が得られました。Simscape Multibody で、Solid ブロックを使用して単純な形状の剛体を定義します。

Solid ブロックを使用すると、固定パラメーターをもつ単純な固体を定義できます。これには、直方体、円柱、多角形押し出し、正角柱、球体、楕円体などがあります。パラメーター化された各固体を、基準座標系に対して定義します。以下の図は、一部のパラメーター化された固体の基準座標系を示します。Solid ブロックは、この基準座標系を、ブロック上で「R」というラベルが付けられた座標系端子として表示します。

剛体のインターフェイスは、剛体に付加した座標系を定義することによって確立します。剛体は、剛性的に付加された座標系を介して、機構の他のパーツに接続されます。Simscape Multibody では、ジョイントは時間によって変化する関係を 2 つの座標系間に確立します。たとえば、回転ジョイントは、付加された 2 つの座標系の Z 軸が平行で原点が一致する関係を確立します。直進ジョイントは、付加された 2 つの座標系の Z 軸が同一直線上にあり、X 軸と Y 軸が常に平行な関係を確立します。座標系自体はジョイントとは独立して定義されることに注意してください。ジョイントは既存の座標系間に関係を確立するだけです。また、Z 軸は回転ジョイントの場合は回転軸になり、直進ジョイントの場合はスライド軸になることにも注意してください。この情報は、剛体に剛性的に付加する座標系を定義することによって、剛体のインターフェイスを定義する際に重要です。

この例では、剛体 A の一方の端には円柱型の穴があります。この穴をペグにはめると、A を円柱型の穴の軸の周りで回転させることができます。これは、座標系を穴の中心に定義し、その Z 軸の向きを穴の軸 (回転軸) に揃えるべきであることを示しています。上図ではこの座標系に $ F_{AD} $ というラベルが付いています。$ F_{AD} $ における "X" 軸と "Y" 軸の向きの選択は、$ F_{AD} $ の接続先となるジョイントの零点構成を一部決定します (零点構成に関する以下の説明を参照)。また A は、パーツ C がその上をスライドするシャフトとしても機能します。これは、座標系を A の中心 (任意に選択した位置) に定義し、その Z 軸の向きを A の長さ方向 (スライド方向) に揃えるべきであることを示しています。上図ではこの座標系に $ F_{AC} $ というラベルが付いています。座標系 $ F_{AD} $ と座標系 $ F_{AC} $ は、剛体 "A" のインターフェイスを定義します。モデル "HowToBuildAMultibodyInSimulinkBodyAApproximate" は、"Solid" ブロックと "Rigid Transform" ブロックをどのように使用して剛体 "A" の形状、慣性、インターフェイスが定義されているかを示しています。"Body A Ref""Reference Frame" ブロックです。このブロックは必須ではありませんが、特定の座標系を他の座標系の基準となる座標系として固定するという、便利なモデル化機能を果たしています。座標系 $ F_{AC} $ と座標系 $ F_{AD} $ は、"Body A Ref" ブロックが接続されている座標系を基準にして定義されています。さらにブロックの複雑なネットワークで剛体を定義する場合、そのような基準座標系は、その他すべての座標系の位置と向きを定義するための開始点として機能します。

モデル "HowToBuildAMultibodyInSimulinkBodyAApproximate" を実行して、"Mechanics Explorer" でモデルを可視化します。

剛体 B を考えます。ここでも、剛体の形状を単純な円柱として近似できます。この剛体には、ペグにはまる円柱型の穴が両端にあります。剛体 B はそれぞれの穴の軸を中心に回転できます。これは、2 つの座標系を定義する必要があることを示します。それぞれの穴の中心に座標系を 1 つずつ定義し、その Z 軸を穴の軸に揃えます。

モデル "HowToBuildAMultibodyInSimulinkBodyBApproximate" は、"Solid" ブロックと "Rigid Transform" ブロックをどのように使用して、剛体 "B" の形状、慣性およびインターフェイスを定義しているかを示しています。

モデル "HowToBuildAMultibodyInSimulinkBodyBApproximate" を実行して、"Mechanics Explorer" でモデルを可視化します。剛体 D の最初の近似を作成する際にも、同様のアプローチをとることができます。

剛体 C を考えます。

この剛体には、ペグ上でスライドする円柱型の穴があります。さらに、別のボディがその周りを回転できるペグもあります。これは、2 つの座標系を定義する必要があることを示します。1 つは穴の中心に定義し、Z 軸を穴の軸に揃えます。もう 1 つはペグの中心に定義し、Z 軸をペグの軸に揃えます。これらは上図で $ F_{CA} $ および $ F_{CB} $ としてマークされています。

剛体 C の形状は、単純な立方体で近似できます。剛体の最初の近似では、座標系 $ F_{CB} $ と座標系 $ F_{CA} $ の原点間のオフセットもゼロにできます。この結果、以下に示すような、剛体の簡略表現が得られます。

モデル "HowToBuildAMultibodyInSimulinkBodyCApproximate" は、"Solid" ブロックと "Rigid Transform" ブロックをどのように使用して、剛体 "C" の形状、慣性およびインターフェイスを定義しているかを示しています。

ジョイントを使用した個々のボディの組み立て

個々のボディはすべて単独で作成されています。アセンブリのプロセスには、剛体に付加された座標系間の関係の確立 (ジョイントを使用) が含まれます。次のジョイントによって、機構を組み立てるために必要な、座標系間のすべての関係が確立されます。

  • 座標系 $ F_{DA} $ と座標系 $ F_{AD} $ 間の "回転ジョイント"

  • 座標系 $ F_{AC} $ と座標系 $ F_{CA} $ 間の "直進ジョイント"

  • 座標系 $ F_{CB} $ と座標系 $ F_{BC} $ 間の "回転ジョイント"

  • 座標系 $ F_{BD} $ と座標系 $ F_{DB} $ 間の "回転ジョイント"

すべての剛体のインターフェイス (つまり、剛体に付加された座標系) を注意深く定義しておけば、適切な座標系の間にジョイントを追加するだけで、きわめて簡単に機構を完成できます。機構の既定のアセンブリを得るために、ジョイントをカスタマイズする必要はありません。機構は複数の構成に組み立て可能なため、結果として得られたアセンブリは、望ましい構成になっている場合も、いない場合もあります。モデル "HowToBuildAMultibodyInSimulinkAssemblyWithError" は、組み立てた機構を示します。

Model Report を使用した問題の特定

このモデルでは、剛体 "C" に付加された座標系 $ F_{CA} $ の定義に意図的な誤りが含まれています。そのため、アセンブリは失敗します。下図は、座標系 $ F_{CA} $ の望ましい向きと実際の向きを示しています。

$ F_{CA} $ の向きを、"Z" 軸を中心に 90 度回転して修正しなければなりません。モデル "HowToBuildAMultibodyInSimulinkAssemblyWithError" を更新 (Ctrl-D) して、機構を可視化します。アセンブリの失敗を示すエラーが報告されます。Mechanics Explorer で、[Tools] プルダウン メニューから [Model Report] オプションを選択します。[Model Report][Joints] セクションによって、ジョイント Pg がアセンブリに失敗したことがわかります。これは、ジョイント Pg に付加された座標系の仕様にエラーが存在する可能性があることを示します。この例では実際に、座標系 $ F_{CA} $ の仕様にエラーがあります。

Rigid Transform "HowToBuildAMultibodyInSimulinkAssemblyWithError/Rigid Body C/Slide Frame Transform" のパラメーターを下図に示すように変更すると、問題が修正され、アセンブリが成功するようになります。

ジョイントの零点構成

ジョイントの零点構成は、すべてのジョイント角度が 0 度の場合における、base 座標系と follower 座標系の相対的な位置と向きとして定義されます。Simscape Multibody のほとんどのジョイントでは、零点構成における base 座標系と follower 座標系は同一です。つまり、原点が一致し、軸の向きが揃っています。ジョイント角度が 0 度の場合における、ジョイントによって接続された 2 つのボディ間の相対的な位置と向きを定義するには、それぞれのボディの base 座標系と follower 座標系の位置と向きを調整します。

たとえば、剛体 B、剛体 C、それらを接続するジョイント Rg を考えます。座標系 $ F_{CB} $ と座標系 $ F_{BC} $ は、ジョイント "Rg" の base 座標系と follower 座標系です。下図は、剛体 "C" に付加された座標系 $ F_{CB} $ の向きの選択が異なると、ジョイントの角度がゼロの場合に組み立てた構成の結果がどのように異なるかを示しています。座標系の向きを選択する際には、望ましい零点構成を念頭に置かなければなりません。

この照準機構では、座標系の向きを選択することで、すべてのボディの中心軸が同一のライン上に揃う既定のアセンブリ構成が得られます。

ジョイント ターゲットを使用したアセンブリのガイド

モデル "HowToBuildAMultibodyInSimulinkAssemblyWithError" (エラー修正後) を更新 (Ctrl-D) して、組み立てた機構を可視化します。すべてのボディが共通のライン上にまとめられたことがわかります。これが、既定のアセンブリ構成です。この構成では、すべての回転ジョイントの角度はゼロです。したがって、各回転ジョイントの base 座標系と follower 座標系は同一の位置にあり、互いに対して同一の向きになります。対応する座標系のペアは $ F_{DA} $$ F_{AD} $$ F_{CB} $$ F_{BC} $$ F_{BD} $$ F_{DB} $ です。一方、座標系 $ F_{CA} $ は座標系 $ F_{AC} $ から並進しているため、ジョイント "Pg" はゼロ状態にありません。Model Report を開いて、このアセンブリ構成におけるジョイント位置の値を確認してください。これは、望ましいアセンブリ構成ではありません。

機構の概略図に示された構成が、望ましい初期アセンブリ構成です。概略図から、初期構成では角度 $ \beta $ が約 35 度であることがわかります。ジョイントの位置ターゲットと速度ターゲットを指定することで、アセンブリ アルゴリズムをガイドできます。この例では、ジョイント Ro の位置ターゲットを設定して、アセンブリを望ましい初期構成にガイドできます (下図参照)。ターゲットの優先順位は [High] に設定されています。モデルのターゲットはこれ以外にないため、Simscape Multibody は正確にターゲットを満たすことができます。

モデルを更新 (Ctrl-D) して、可視化に変更を反映します。アセンブリが概略図の構成に近づきます。Model Report をチェックして、Ro のジョイント ターゲットが正確に満たされたことを確認します。

残念ながら、組み立てられた構成は意図したものと異なります。剛体 B の向きが概略図に示したものと異なるためです。$Ro$$Ri$ の両方のジョイント角度を正確に指定しようとすると、この自由度 1 の機構では指定過剰になります。これは禁止されていませんが、矛盾がある場合、どちらのターゲットも達成されません。さらに、ジョイント Ri の望ましい角度はそもそも正確にわかっていません。

この状況で便利なアプローチは、Ro に設定された優先順位の高いターゲットの 35 度はそのままにして、優先順位の低い位置ターゲットによって Ri の角度を指定することです。後者は、望ましいジョイント角度の近似値またはヒントとなります。この場合、明らかに角度 $ \theta $ を鈍角にすべきです。望ましい値のおおまかな推定値は 150 度です。このターゲットをジョイント Ri に、優先順位 [Low] で設定します。

新しいターゲットを設定した後に組み立てた構成を以下に示します。

モデルのシミュレーションを実行 (Ctrl-T) して、重力下における機構の動きを表示します。

Control Design 用のモデル設定

この例の目的は、ジョイント "Ri" にトルクを加えることにより、角度 $ \beta $ が望ましい軌跡を辿るようにすることです。ジョイント "Ri" はトルクによって作動し、ジョイント角度 $ \beta $ とその微分 (角速度) はジョイント "Ro" から検出されます。機構全体を、トルクの入力をとり、角度 $ \beta $ と角速度 $ \dot{\beta} $ を出力するサブシステムで囲むことができます。このサブシステムを、Control Design の用語で正準型の Plant といいます。モデル "HowToBuildAMultibodyInSimulinkPlant" は、Control Design 用の機構設定を示します。

Plant サブシステムの詳細を以下に示します。

モデル "HowToBuildAMultibodyInSimulinkVersion1" は、"Plant""Controller" に接続されている様子を示します。コントローラーの追従性能は、スコープで見ることができます。追跡を達成するために、単純な PD コントローラーが設計されています。

剛体への詳細の追加

これで、基本モデルが機能するようになりました。次の手順では詳細を追加し、モデルの現実感と正確性を高めます。剛体のジオメトリに関する詳細情報が入手できていないうちに、モデルの最初のバージョンを作成することもあります。剛体のインターフェイスを注意深く定義しておけば、モデルの残りの部分に影響を与えたり変更を及ぼしたりすることなく、各剛体に対して比較的簡単に詳細を追加できます。

たとえば、剛体 A のインターフェイスを変更せずに、この剛体に詳細を追加することを考えます。下図は、剛体 A をより単純なボディの複合体として示します。剛体 "A" で明らかになるインターフェイスは、これまでと同様に座標系 $ F_{AD} $ と座標系 $ F_{AC} $ のペアです。位置と向きは変わりません。座標系 $ F_{12} $$ F_{21} $$ F_{23} $、および $ F_{32} $ は剛体内部にあり、剛体の個々のピースを組み立てて一体化するために作成する必要があります。モデル "HowToBuildAMultibodyInSimulinkBodyAComplex" は、剛体 "A" の構造の複雑なバージョンを示します。

モデルの 2 番目のバージョン "HowToBuildAMultibodyInSimulinkVersion2" は、"HowToBuildAMultibodyInSimulinkVersion1" から得られ、剛体 "A" に相当するサブシステムを、"HowToBuildAMultibodyInSimulinkBodyAComplex" からの複雑なバージョンと置き換えただけです。インターフェイスが変わっていないため、単にブロックを置き換えるだけの操作です。モデル "HowToBuildAMultibodyInSimulinkVersion2" のシミュレーションを実行して、変更した機構を可視化します。

追従性能はほぼ同じです。その理由は、コントローラーが剛体 A の単純なバージョンと詳細なバージョンにおける慣性のわずかな違いを扱うのに十分なロバスト性を備えているためです。同様のプロセスに従って、他のパーツにも詳細を追加できます。さまざまなレベルの詳細をもつ各剛体のさまざまなバージョンをライブラリに維持し、モデルをこれら各種のバージョンでテストすることができます。ここでは Configurable Subsystem が便利です。

まとめ

要約すると、以下の手順を実行したことになります。

  • 機構の概略図から始め、機構にある剛体とジョイントを特定した。

  • 各剛体の最初の近似を単独で作成した。

  • ジョイントを使用して剛体を組み立て、アセンブリ機構の最初のバージョンを得た。

  • Model Report ツールを使用して、アセンブリの問題を特定した。

  • ジョイントの位置ターゲットを使用して、アセンブリを望ましい構成にガイドした。

  • 単純なコントローラーをモデルに追加し、ターゲット角度の追跡を達成した。

  • モデルの最初のフル バージョンが完成した後で、剛体のインターフェイスを変更せずに、剛体の 1 つに詳細を追加した。詳細を他の剛体にも追加することができた。

Simscape Multibody でモデルを作成する際には、単純なものから始め、後続の反復で複雑度を加えていくこの方法を推奨します。

参考

|