URDFモデルファイル

概要

URDF (Unified Robot Description Format)は、XMLを用いたロボットモデルの記法です。ROS (Robot Operating System)をはじめ、近年多くのプラットフォームで利用されています。ただし、現在の公式仕様では、ロボットの運動学的構造のみに対応しており、センサ等は未対応となっています。

モデルファイルの規約

本ページは、URDFの公式ドキュメント に基づき、ロボットシミュレーションに必要となる情報をまとめています。

URDFモデルを作成する際に注意すべき事項は以下の通りです。

  • モデルファイルひとつにつき、ロボットや環境のモデル1体を記述するようにします。

  • 1体のロボットは、リンクについて1つの木構造を持つ必要があります。すなわち、あるリンクから任意のリンクへは、ジョイントを介して辿り着くことができ、かつ辿り着く経路が一意である必要があります。したがって、パラレルリンク機構等の閉じた機構をURDF上で表現することはできません。

  • 数値は全て、接頭辞なしのSI基本単位・組み立て単位になります。例えば、位置の単位にはメートルまたはラジアンを、質量の単位にはキログラムを用いる必要があります。

ノード・属性一覧

URDFにおいてロボットモデルは、階層的なノード構造によって記述されます。同じ名前のノードは、場所に依らず同じ記法と役割を持っています。

下記は、Choreonoidでロボットモデルを読み込み、シミュレーションを行うために必要なノードの一覧です。実際のノードの階層構造に基づいています。全てのURDFノードを紹介してはおらず、jointノード以下に記述される、ロボットの実機や動作に関するノードの説明は省略しています。

  • robotノード (属性: name

    • linkノード (属性: name

      • inertialノード

        • originノード(属性: xyz , rpy

        • massノード(属性: value

        • inertiaノード(属性: ixx , iyy , izz , ixy , iyz , ixz

      • visualノード

        • originノード(属性: xyz , rpy

        • geometryノード

          • boxノード(属性: size

          • cylinderノード(属性: radius , length

          • sphereノード(属性: radius

          • meshノード(属性: filename , scale

        • materialノード(属性: name

          • colorノード(属性: rgba

          • textureノード(属性: filename

      • collisionノード

        • originノード(属性: xyz , rpy

        • geometryノード

          • boxノード(属性: size

          • cylinderノード(属性: radius , length

          • sphereノード(属性: radius

          • meshノード(属性: filename , scale

    • jointノード (属性: name, type

      • originノード(属性: xyz , rpy

      • parentノード(属性: link

      • childノード(属性: link

      • axisノード(属性: xyz

      • limitノード(属性: lower , upper , velocity , effort

それぞれのノードの役割や記法について、以下にて詳説します。

robotノード

robotノードは、1つのロボットを定義します。ロボットの定義は、全てrobotタグの内部で完結する必要があります。

robotノードの属性

属性名

内容

name(必須)

ロボットの名称。モデル内で重複しない任意の文字列を指定可能です。

なお、Choreonoidで読み込む場合は別途表示名を付けられるため、複数の同じロボットを同時に読み込む場合であっても、モデルファイルは1つあれば十分です。

jointノード

jointノードは、2つのリンクの関係を定義します。

jointノードの属性

属性名

内容

name(必須)

ジョイントの名称。モデル内で重複しない任意の文字列を指定可能です。

type(必須)

ジョイントの種類。可動域のある回転関節: revolute,車輪のように無限回転する関節: continuous,直動関節: prismatic,固定関係 fixed,一切の拘束がない floating のいずれかから一つを指定します。(他に平面上を動く planar がありますが、Choreonoidでは対応していないため、説明を省略します。)

さらにジョイントを定義するためには、リンクの親子関係や相対位置、可動域などを指定する必要があります。そこで以下の表に示す子ノードに、それらの情報を記述します。

jointノードが持てる子ノード

ノード名

内容

originノード(任意)

2リンク間の相対位置・姿勢を定めます。 xyz 属性で親リンクの原点から見た、関節変位がゼロのときの子リンクの原点の相対位置を、 rpy で親リンクの座標系から見た子リンクの座標系の相対姿勢をロール・ピッチ・ヨー表現で、それぞれ与えます。各属性は省略可能で、省略された場合はゼロに設定されます。もしノード自体が省略された場合は、 xyzrpy の両者が共にゼロ、すなわち親リンクと子リンクの原点位置・姿勢が一致するようになります。

parentノード(必須)

親リンクを、 link 属性にリンク名を指定することで定めます。

childノード(必須)

子リンクを、 link 属性にリンク名を指定することで定めます。

axisノード(任意)

関節の軸を指定します。 xyz 属性に親リンクの座標系で見た関節の軸の方向を表す3次元ベクトルを指定します。jointノードの type 属性が revolute, continuous, prismatic のときのみ有効で、回転関節については回転軸を、直動関節については動作方向を指定します。向きによって関節変位の正負が決まることに留意してください。ノードがない場合のデフォルト値は xyz="1 0 0",すなわち親リンクの座標系におけるx軸方向となります。

limitノード(条件付き必須)

関節の可動域、速度とアクチュエータ出力を定めます。jointノードの type 属性が revolute および prismatic のとき必須です。 lower 属性で負方向の可動限界を、 upper 属性で正方向の可動限界を指定します。可動域を表すこの両者の属性は、デフォルト値が0であり、両方とも指定されなかった場合関節は不動になります。さらに、 velocity 属性で関節速度の上限(単位は[m/s]もしくは[rad/s])を、 effort 属性でアクチュエータの出力上限を(単位は[N]もしくは[Nm])与えます。速度上限と出力上限は共に正の値である必要があり、これらにデフォルト値は存在しません。

例:

<joint name="sample_joint" type="revolute">
  <origin xyz="0 0 1" rpy="0 0 3.1416"/>
  <parent link="link1"/>
  <child link="link2"/>
  <axis xyz="1 0 0"/>
  <limit lower="-3.14" upper="3.14" velocity="1.0" effort="30"/>
</joint>

サンプルモデル

Choreonoidでは、ヒューマノイドロボットのサンプルモデルである SR1 のURDF版を用意しています。Bodyファイルものと見比べることで、その対応関係を知ることができます。