Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

URDF のインポート

URDF モデルのインポート

URDF ファイル名を主要引数として指定した関数 smimport を使用して、URDF モデルを Simscape™ Multibody™ 環境にインポートします。この関数は、モデル タイプ (URDF または XML) をファイル拡張子で識別します。拡張子を省略した場合、関数はファイルが XML 形式であると仮定します。これは CAD インポートでより広く使用されている形式です。たとえば、次のコマンドを使うとします。

smimport('sm_humanoid.urdf')
これは、関数に sm_humanoid という名前の URDF モデルをインポートするように指示しています。次のコマンドを見てみましょう。

smimport('sm_humanoid')

これは、関数に、sm_humanoid という名前の中間 XML ファイルからマルチボディ モデルをインポートするように指示しています。指定した名前の XML ファイルが見つからない場合、関数はエラーを返します。これは、同じフォルダーに同名の URDF ファイルがある場合でも同様です。一般に、URDF モデルをインポートしようとする場合は常に、明示的に URDF ファイル拡張子を含めなければなりません。

インポートできる URDF エンティティ

Simscape Multibody ソフトウェアは、URDF の使用可能なすべての要素と属性のうち、一部のみをサポートします。サポートされていない要素または属性をもつ URDF モデルのインポートは可能ですが、そうしたエンティティはすべて無視されます。次のコードには、インポートできる要素および属性とインポートできない要素および属性が示されています。要素は太字フォント、属性は標準フォントで示されています。サポートされていない要素および属性は赤色で示されています。

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

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

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

Subsystem ブロックは、固体ブロック、Inertia ブロック、Rigid 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 Joint0 (剛結合)
floating6-DOF Joint回転 3 と並進 3
planarPlanar Joint回転 2 と並進 1

ジョイント制限は無視されます。

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

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

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

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

URDF モデルの link Alink Blink C という名前の <link> 要素は、同様に link Alink Blink C と名付けられた Simulink Subsystem ブロックにマッピングされます。それぞれ typecontinuous に設定された、joint Ajoint B という名前の <joint> 要素は、同様に 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 に、重力下における二重振子の落下運動のアニメーションが表示されます。

URDF インポートの制限

URDF モデルでは、ツリー トポロジのみが許可されています。SDF (シミュレーション記述形式) や DrakeURDF など、URDF の別形式のいくつかでは、運動学的ループのサポートが追加されています。これら別形式のモデルはインポートできません。ただし、Simscape Multibody 環境にいったんインポートされたモデルに運動学的ループを追加することは可能です。

URDF の拡張部分に由来する URDF の一部の要素や属性はサポートされません。拡張部分には、歯車列や平行リンク機構のモデル化に使用される <transmission> 要素、Gazebo 環境で URDF モデルのシミュレーションに使用される <gazebo> 要素、および使用頻度の低い <model_state> 要素や <sensor> 要素などがあります。

URDF の中核的な要素および属性の一部もサポートされていません。サポートされていない要素には、リンクの衝突検出に使用される <collision> やジョイントの運動制限に使用される <limit> などがあります。サポートされていない属性には、メッシュ ファイルのスケーリングのための scale、ジョイントの内部力学のための frictionその他があります。サポートされていない URDF の要素と属性はインポート時に無視されます。

メッシュ ジオメトリ

外部ジオメトリ ファイルへの参照を含む URDF モデルをインポートすることはできますが、ファイルは STL (Standard Tessellation Language) 形式でなければなりません。

URDF モデルで一般的な Collada (DAE) ジオメトリ ファイルは、Simscape Multibody ソフトウェアではサポートされません。DAE ファイルへの参照を含むモデルをインポートする場合、それらのファイルに由来するジオメトリはレンダリングされません。可視化の欠如によってモデルを解析する能力が制限される可能性はありますが、モデルのダイナミクスには影響しません。

物理単位

インポートしたモデルのブロック パラメーターの単位は、自動的に URDF の既定の単位である SI に設定されます。単位はインポート後に変更できますが、ブロックごとに行わなければなりません。このほかにも、MKS (メートル-キログラム-秒)、USC (米国慣用)、および他の単位系の中心をなすものを含め、さまざまな単位がサポートされています。

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 インポートにはこの機能がないため、モデルの更新はサポートされません。

参考

関連するトピック