Main Content

URDF モデルのインポート

URDF モデルを Simscape™ Multibody™ モデルにインポートするには、関数 smimport を使用します。ファイル拡張子を指定しなければなりません。

smimport('Humanoid.urdf')

ファイル拡張子を省略した場合、関数 smimport は、ファイルが XML 形式 (CAD モデルをインポートするために使用される) であると仮定します。たとえば、次のコマンドを使うとします。

smimport('Humanoid')

これは、関数に、Humanoid XML ファイルからマルチボディ モデルを作成するように指示しています。指定した名前の XML ファイルが見つからない場合、関数はエラーを返します。これは、同じフォルダーに同名の URDF ファイルがある場合でも同様です。URDF モデルをインポートする方法の詳細については、URDF のヒューマノイド モデルのインポートを参照してください。

サポートされている URDF の要素と属性

関数 smimport は、URDF 仕様の要素と属性のサブセットをサポートしています。サポートされていない要素または属性をもつ URDF モデルをインポートすると、関数 smimport はサポートされている要素と属性のみを認識します。次の例では、サポートされているすべての要素および属性が黒色で示されています。

<robot name>
	<link name>
		<inertial>
			<origin xyz rpy />
			<mass value />
			<inertia ixx iyy izz ixy ixz iyz />
		</inertial>
		<visual name>
			<origin xyz rpy />
			<geometry>
				<box size />
				<cylinder radius length />
				<sphere radius />
				<mesh filename scale />
			</geometry>
			<material name>
				<color rgba />
				<texture filename />
			</material>
		</visual>
		<collision name>
			<origin xyz rpy />
			<geometry>
				<box size />
				<cylinder radius length />
				<sphere radius />
				<mesh filename scale />
			</geometry>
		</collision>
	</link>
	<joint name type>
		<origin xyz rpy />
		<parent link />
		<child link />
		<axis xyz />
		<calibration rising />
		<calibration falling />
		<dynamics damping friction />
		<limit lower upper effort velocity />
		<mimic joint multiplier offset />
		<safety_controller soft_lower_limit ...
		... soft_upper_limit k_position k_velocity />
	</joint>
</robot>

要素は太字フォント、属性は標準フォントです。サポートされていない要素および属性は赤色で強調表示されています。要素または属性が上記の例に示されていない場合、関数 smimport は、その要素または属性をサポートしていません。<visual>/<geometry>/<mesh> 要素の scale 属性は、部分的にサポートされているため、オレンジ色で示されていることに注意してください。scale 属性の詳細については、メッシュ ジオメトリセクションを参照してください。

Simscape Multibody ブロックへのマッピング

URDF の <robot> 要素は Simscape Multibody モデルにマッピングされます。<robot> 要素内部の入れ子にされた <link> 要素は、そのリンク (Simscape Multibody 用語ではボディ) を表す Simulink® Subsystem ブロックにマッピングされます。<joint> 要素は、Simscape Multibody の等価なジョイント ブロックにマッピングされます。これらの要素の name 属性は、モデル名、Subsystem ブロック名、ジョイント ブロック名にそれぞれマッピングされます。

Subsystem ブロックは、固体ブロックと、InertiaRigid Transform および Reference Frame の各ブロックで構成されます。固体ブロックは、ボディのジオメトリと色を提供します。これらのブロックは、URDF モデルの <visual> タグに対応し、Visual という名前です。Inertia ブロックは、ボディの質量、重心、慣性モーメント、および慣性乗積を提供します。このブロックは、URDF モデルの <inertial> 要素に対応し、Inertia という名前です。

Rigid Transform ブロックは、ボディのローカル基準座標系からの並進オフセットと回転オフセットを Inertial 要素と Visual 要素に提供します。これらの変換は、リンクの <inertial> 要素と <visual> 要素の <origin> 要素、およびジョイントの <origin> 要素と <axis> 要素から導出されます。Reference Frame ブロックは、ボディのローカル基準座標系を特定します。

使用されるジョイント ブロックのタイプは、<joint> 要素の <type> 属性に依存します。URDF と Simscape Multibody ソフトウェア間のジョイントのマッピングは、おおむね直感に沿ったものです。type が prismatic である <joint> 要素は Prismatic Joint ブロックにマッピングされます。type が fixed である <joint> 要素は Weld Joint ブロックにマッピングされます。次の表は、残った URDF の <joint> 要素のマッピングを示しています。

URDF と Simscape Multibody ジョイントの対応関係

URDF の <joint type> 属性Simscape Multibody の Joint ブロック自由度
revoluteRevolute Joint回転 1 (制限あり)
continuousRevolute Joint回転 1
prismaticPrismatic Joint並進 1 (制限あり)
fixedWeld JointNone
floating6-DOF Joint回転 3 と並進 3
planarPlanar Joint回転 2 と並進 1

メッシュ ジオメトリ

外部ジオメトリ ファイルを使用して URDF モデルのビジュアル ジオメトリを指定するには、<mesh> 要素を使用します。たとえば、次のようにします。

<link name="link_1.3">
    <visual>
     <origin rpy="0 -1.57079632679  0" xyz="0 0 0.0425"/>
     <geometry>
       <mesh filename="package://xela_models/mesh_simplified/finger_link_3.stl" scale="0.001 0.001 0.001"/>
     </geometry>
    </visual>
</link>

ジオメトリ ファイルは URDF ファイルの一部ではなく、ジオメトリ ファイルは対応する URDF ファイルと同じフォルダーに保存する必要があります。ジオメトリ ファイルは STL 形式または STEP 形式でなければなりません。関数 smimport では Collada (DAE) ファイルがサポートされていないことに注意してください。DAE ファイルへの参照を含むモデルをインポートする場合、Simscape Multibody モデルではこれらのファイルに由来するジオメトリはレンダリングされません。可視化の欠如によってモデルを解析する能力が制限される可能性はありますが、モデルのダイナミクスには影響しません。

ビジュアル ジオメトリが外部ファイルを参照している URDF モデルをインポートする場合、ファイル内の頂点データは、scale 属性の値にかかわらず、スケーリングされないままです。scale 属性は、変換された File Solid ブロックの頂点データの単位を指定します。

単位を cm に指定するには、scale 属性の x 軸、y 軸、z 軸のスケール係数を 0.01 に設定します。単位を mm として指定するには、3 つの係数をすべて 0.001 に設定します。3 つの係数はすべて同じ値である必要があり、値は 0.01 または 0.001 のいずれかを指定しなければならないことに注意してください。値がこれらの条件を満たしていない場合、関数 smimport は単位をメートルに指定します。

物理単位

変換された Simscape Multibody モデルでは、ブロック パラメーターは国際単位系 (SI) を使用します。

URDF インポートの制限

関数 smimport は、ツリー トポロジをもつ URDF モデルのみをインポートし、SDF (シミュレーション記述形式) や DrakeURDF など、URDF の別形式をサポートしません。ただし、URDF をインポートした後で、Simscape Multibody モデルにブロックを追加して運動学的ループを形成できます。

<transmission> 要素、<gazebo> 要素、 <model_state> 要素、<sensor> 要素など、URDF の拡張部分に由来する要素や属性は関数 smimport ではサポートされません。

CAD インポートとの相違点

関数 smimport との相互依存などの類似点はありますが、CAD インポートと URDF インポートは、いくつかの重要な点で異なっています。

  • CAD モデルは中間 XML 形式でインポートされます。URDF モデルは直接に URDF 形式でインポートされます。

    中間 XML ファイルは、CAD モデルを Simscape Multibody 環境で作成し直すのに必要な情報を提供します。URDF モデルをインポートする際は、同じ情報が直接 URDF ファイルで提供されます。XML マルチボディ記述ファイルは、Simscape Multibody の XML スキーマに準拠していなければなりません。有効な XML ファイルを生成する方法については、CAD アセンブリのエクスポートを参照してください。

  • インポートされた CAD モデルは、数値パラメーターが MATLAB® ファイルで定義されています。インポートされた URDF モデルは、数値パラメーターがブロック ダイアログ ボックスにハードコードされています。

    CAD インポートでは、分離したデータ フレームワークを使用し、別の MATLAB データ ファイルで定義されたセル構造にすべてのブロック パラメーターを配置します。分離したデータ フレームワークを使用すると、ソースの CAD モデルを変更する際に、以前インポートしたモデルを更新できるようになります。URDF インポートにはこの機能がないため、モデルの更新はサポートされません。

単純な URDF モデルのインポート

例として、単純な URDF モデルの作成の節で説明されている二重振子の URDF モデルをインポートします。まだ URDF モデルを作成していない場合は、先に進む前に作成してください。モデルをインポートするために、二重振子の URDF モデルを保存したフォルダーに移動します。次に、MATLAB コマンド プロンプトで、次のコマンドを入力します。

smimport('DoublePendulum.urdf')
URDF モデルを別の名前で保存している場合は、代わりにその名前を使用してください。この関数は、URDF モデルをインポートし、等価の Simscape Multibody モデルを生成します。次の図は結果のモデルを示しており、ブロックと接続ラインの配置がいくらか変化しています。

インポートしたモデルについて

URDF モデルの link Alink Blink C という名前の <link> 要素は、同様に link Alink Blink C と名付けられた Simulink Subsystem ブロックにマッピングされます。joint Ajoint B という名前の <joint> 要素 (それぞれ typecontinuous に設定) は、同様に joint Ajoint B と名付けられた Simscape Multibody Revolute Joint ブロックにマッピングされます。

ブロック線図は、分岐のない運動学ツリーという URDF モデルのトポロジを反映します。link Clink B に要素の子として接続されています。同様に、link Blink A に要素の子として接続されています。link A はルート リンクであり、そのため接地されていますが、この状態は link AWorld Frame ブロック間の剛結合に反映されています。

URDF モデルのトポロジ

URDF の <link> 要素を表す Subsystem ブロックはそれぞれ、1 つの Reference Frame ブロック、1 つの Brick Solid ブロック、1 つの Inertia ブロック、および複数の Rigid Transform ブロックをもつ小さなブロック線図で構成されています。Subsystem ブロックはマスクされておらず、ダブルクリックで直接開くことができます。次の図は、link A Subsystem ブロックのブロック線図を示します。

Brick Solid ブロックは URDF の <visual> 要素が変換された等価物で、Visual という名前です。このブロックには、リンクのジオメトリや色など、<visual> 要素の関連パラメーターが含まれています。Inertia ブロックは URDF の <inertial> 要素が変換された等価物で、そのため Inertia という名前です。このブロックには、リンクの質量、慣性モーメント、慣性乗積など、<inertial> 要素の関連パラメーターが含まれています。

link A サブシステム

Reference Frame ブロックは、URDF の <link> 要素のローカル基準座標系を特定します。この座標系は、親リンクへのジョイント接続の座標系と一致するか、またはこのルート リンクの場合のように World Frame ブロックへのジョイント接続の座標系と一致します。Rigid Transform ブロックは、URDF の <inertial> 要素、<visual> 要素、および <joint> 要素の基準座標系に対し、並進変換と回転変換を指定します。追加の Rigid Transform ブロックは、Simscape Multibody のジョイント軸を URDF のジョイント軸に揃えるために必要な回転変換を指定します。

インポートしたモデルの組み立てとシミュレーション

意味のあるシミュレーションを得るために、モデルの作成を進めます。たとえば、次のように、ジョイントの状態ターゲットを使用して二重振子を不安定な構成に組み立て、重力下でのその落下運動をシミュレートすることができます。

  1. joint_A ブロックのダイアログ ボックスで、[State Targets][Specify Position Target] チェック ボックスをオンにし、[Value] パラメーターを 30 度に設定します。このパラメーターは上のジョイントの開始角度を設定します。

  2. [コンフィギュレーション パラメーター] ウィンドウの [ソルバー] ペインで [追加オプション] をクリックし、[最大ステップ サイズ] パラメーターを 0.01 に設定します。この値は、ソルバーのステップ サイズを、シミュレーション中に滑らかなアニメーションを生成できる程度に小さく維持します。シミュレーションの進行が遅い場合には、この値を大きくしてください。

  3. ブロック線図を更新し、シミュレーションを実行します。[モデル化] タブで、[モデルの更新] をクリックします。[実行] を選択すると、モデルをシミュレートできます。Mechanics Explorer に、重力下における二重振子の落下運動のアニメーションが表示されます。

参考

関連するトピック