Main Content

CAD アセンブリから Simscape Multibody モデルへの変換

Onshape®、Autodesk® Inventor®、PTC® Creo™、SolidWorks® などのアプリケーションによって作成された CAD アセンブリを使用して、Simscape™ Multibody™ モデルを作成できます。変換には 2 つの手順があります。まずエクスポート手順で、CAD アセンブリを XML ファイルと一連のジオメトリ ファイルに変換し、次にインポート手順で、エクスポートしたファイルを使用して等価の Simscape Multibody モデルを作成します。また、インポート手順では、モデル内のすべてのブロックを指定するデータを含む M ファイルを生成します。

CAD translation steps

CAD アセンブリのエクスポート

Simscape Multibody Link CAD プラグインは、有効な XML 形式で CAD アセンブリをエクスポートする 1 つの手段を提供します。このプラグインは、Autodesk Inventor、PTC Creo、および SolidWorks という 3 つの CAD アプリケーションと互換性があります。プラグインは、XML マルチボディ記述ファイルと、変換されたモデルでの可視化に必要なあらゆるジオメトリ ファイルを生成します。

関数 smexportonshape を使用して、Onshape から CAD アセンブリをエクスポートすることもできます。Onshape からの CAD モデルのエクスポートの詳細については、Onshape インポートを参照してください。

CAD アセンブリがその他の CAD アプリケーションによって作成されている場合に、マルチボディ記述ファイルとパーツ ジオメトリ ファイルを生成するには、CAD API と Simscape Multibody の XML スキーマを使用するプログラムを作成します。このタスクには、XML ドキュメント、XSD スキーマ定義および CAD API の知識が必要です。XSD スキーマ定義については、スキーマの Web サイトを参照してください。SolidWorks CAD API に基づいて作成されたプログラム例については、MATLAB Central を参照してください。

CAD アプリケーションに URDF コンバーターがある場合は、CAD アセンブリを URDF 形式にエクスポートし、その URDF ファイルを使用して等価の Simscape Multibody モデルを作成できる可能性があります。ただし、URDF の仕様では、4 節リンク機構やギア アセンブリなどの閉連鎖モデルのトポロジが禁止されていることに注意してください。詳細については、URDF モデルのインポートを参照してください。

Simscape Multibody Link プラグインでパーツ ジオメトリ ファイルをエクスポートできない場合や、CAD 拘束セットを変換できない場合、エラー メッセージが返されます。エラー メッセージでは、ジオメトリ ファイルを欠いたボディや、サポートされていない拘束が特定されます。生成した XML マルチボディ記述ファイルを Simscape Multibody にインポートすることはできますが、結果のモデルは元の CAD アセンブリを正確に表していない可能性があります。

モデルのインポート

エクスポート手順で生成したファイルを指定した関数 smimport を使用して、等価の Simscape Multibody モデルを作成できます。この関数は、XML ファイルを解析し、必要なデータを抽出し、CAD アセンブリのボディ、拘束、ジョイントに Simscape Multibody ブロックを使用して Simscape Multibody 環境でアセンブリを再構築します。CAD アセンブリ モデルを、その XML ファイルを介してインポートする詳しい手順については、CAD アセンブリ モデルのインポートを参照してください。

変換したマルチボディ モデル

既定では、作成されたモデルでソース CAD アセンブリの階層構造が維持されます。CAD アセンブリにサブアセンブリとパーツがある場合、関数 smimport はそれらを Simscape Multibody サブシステムに変換します。たとえば、CAD アセンブリ モデルのインポートの例では、グリップのサブアセンブリに 7 つのパーツがあります。

CAD robotic arm model hierarchy

変換後のグリップには、対応するパーツを表す 7 つのサブシステムが含まれます。

Grip system with seven subsystems

CAD アセンブリのパーツを表すために、関数 smimportSimscape Multibody の固体ブロックを使用してボディのジオメトリ、慣性、および色を指定し、Rigid Transform ブロックを使用して位置と向きを指定します。たとえば、次の図はロボット アセンブリの上腕部を示しています。

Image of a robotic arm

変換されたモデルは、1 つの固体ブロックを Rigid Transform ブロックのペアに接続して構成されます。固体ブロックはアームのジオメトリと慣性の特性をモデル化し、Rigid Transform ブロックはベースと前腕部のボディに対するアームの位置と向きを指定します。

Block diagram of the upper arm body

エクスポートされたジオメトリ ファイルが無効であるか欠損している場合、変換しても、対応するボディは Simscape Multibody 可視化ユーティリティには表示されません。

変換中に、関数 smimport は、CAD アセンブリのジョイント、拘束、メイトを Simscape Multibody のジョイント ブロックと拘束ブロックの組み合わせに変換します。たとえば、ロボット アームの例では、上腕部と前腕部の間の拘束は Revolute Joint ブロックに変換されます。このジョイント ブロックは、上腕部と前腕部を表すサブシステムを接続します。

Block diagram of the robotic arm

CAD アセンブリで、サポートされていない拘束の組み合わせがボディ間に含まれている場合、Simscape Multibody は、影響を受けるボディとその接続座標系を特定する警告メッセージを返します。

Warning: The set of constraints between the Upper Arm Part and Lower Arm Part
could not be mapped to a joint. A rigid connection has been added between port F
of the Upper Arm Part and port F1 of the Lower Arm Part for these constraints.

また、Simscape Multibody は拘束を剛結合に置き換えます。

Rigid connection due to unsupported constraints

剛結合は座標系を直接接続するライン、Rigid Transform ブロック、または Weld Joint ブロックの形式をとることができます。

ブロック データ

変換中に、関数 smimport は、Simscape Multibody モデル内のすべてのブロックのデータを格納する M ファイルを生成します。ブロック データは MATLAB® 変数としてパラメーター化されています。これらの変数は、ブロック タイプに従って名前を付けられた構造体配列に格納されます。構造体配列は、smiData という名前の親データ構造体か、指定したカスタム文字列の中に入れ子になります。

smiData という名前のデータ構造体をもつ、変換したモデルを考えます。モデルに Revolute Joint ブロックがある場合、これらのブロックのパラメーター データは、構造体配列 smiData.RevoluteJoint です。この構造体配列には、それぞれが異なるブロック パラメーターに対応する複数のデータ フィールドが含まれています。

構造体配列のフィールドには、ブロック パラメーターに従って名前が付けられます。たとえば、Revolute Joint ブロックの位置状態ターゲット データは、Rz_Position_Target という名前のフィールドにあります。モデルに 2 つの Revolute Joint ブロックがある場合、このフィールドには smiData.RevoluteJoint(1).Rz_Position_TargetsmiData.RevoluteJoint(2).Rz_Position_target の 2 つのエントリが含まれます。

それぞれの構造体配列の添字は、変換したモデルの特定のブロックに対応します。更新した XML マルチボディ記述ファイルから M ファイルを再生成すると、添字の割り当てが変更される場合があります。関数 smimport では、前のデータ ファイルを指定した場合にそれをチェックして、添字の割り当てが同じ値に維持されることを確認します。変換したモデルの更新を参照してください。

変換したモデルの更新

ソース CAD アセンブリの変更を反映するには、ImportMode=modelAndDataFile 引数または ImportMode=dataFile 引数を指定した smimport を使用します。ImportMode=modelAndDataFile 引数を使用すると、関数 smimport は変換したモデルと M ファイルの両方を更新します。

ImportMode=dataFile 引数を使用すると、関数 smimport は M ファイルのみを更新します。関数 smimport では以前の M ファイルを使用して、構造体配列の添字とブロックのマッピングの一貫性を維持します。この関数ではブロック線図は更新されません。ソース CAD アセンブリでボディの追加や削除を行った場合は、以前に変換したマルチボディ モデル内の対応するブロックを手動で追加または削除しなければなりません。M ファイルを再生成する前に、更新済みの CAD アセンブリから新しい XML マルチボディ記述ファイルをエクスポートしなければなりません。関数 smimport は新しい XML ファイルのデータを使用して新しい M ファイルを生成します。

CAD update steps

モデル トポロジの単純化

関数 smimportModelSimplification 引数を使用して、変換したモデルのトポロジを単純化できます。この引数は次のように設定できます。

  • 剛結合されたパーツの各セットを新しいサブシステムにグループ化し、すべてのジョイントをモデルの階層構造の最上位にプロモートするには、bringJointsToTop を使用。

  • 剛結合されたパーツをサブシステムにグループ化する (ジョイントはモデルの階層構造内の元の場所に残す) には、groupRigidBodies を使用。

  • モデルを単純化せず、そのままインポートするには、None を使用。

ソース CAD アセンブリに剛結合されたコンポーネント (ナットとボルトなど) が多数含まれる場合は、bringJointsToTop または groupRigidBodies を使用します。ブロック線図を見ただけでモデルの主要コンポーネントをより直感的に把握するには、グループ化が好ましいです。

ソース CAD アセンブリのサブアセンブリ内にジョイントがあり、ジョイントをさまざまなサブシステム内で探さなくともジョイントの作動と検出信号を扱えるよう、それを最上位レベルに表示する場合は、bringJointsToTop を使用します。

モデルの単純化は、CAD アセンブリでのみ利用できることに注意してください。URDF モデルのトポロジは平易であり、単純化はほとんど必要ありません。

関連するトピック