URDFファイルの書き方

注意点

URDFファイルはXMLで記述するため、コメントは<!-- コメント -->で挿入できるが、日本語でコメントを書くとエラーが発生するので、十分に注意しましょう。

各タグの属性

<link>タグの属性 (リンクの名前や以下の情報の設定)

  • <collision> : リンクの衝突計算のための情報の設定
  • <visual> : リンクの可視化のための情報の設定
  • <inertial> : リンクの慣性のための情報の設定
  • <mass> : リンクの重量の設定
  • <inertia> : 慣性テンソルの設定
  • <origin> : リンク座標系の設定
  • <geometry> : モデルの形状を設定。STLDAE形式の設計ファイルも読み込むことができる。
  • <material> : リンクの色とテクスチャの設定

<joint>タグの属性 (関節の名前、種類と以下の情報の設定)

  • <parent> : 関節の親リンクの名前の設定
  • <child> : 関節の子リンクの名前の設定
  • <origin> : 親リンクの座標系から子リンクの座標系への相対座標変換
  • <axis> : 回転軸の設定
  • <limit> : 関節の速度、力、制御値を設定

<transmission>タグの属性 (関節とアクチュエータとの間に作用する変数の設定)

  • <type> : 力の伝達方式の設定
  • <joint> : 関節情報の設定
  • <hardwareInterface> : ハードウェアインターフェースの設定
  • <actuator> : アクチュエータ情報の設定
  • <machanicalReduction> : アクチュエータと関節との間のギア比の設定

サンプルコード

<!-- リンク<link>については、名前とサイズ、重量、慣性モーメントなどが記載 -->
<!-- 関節<joint>については、名前、種類、各関節に繋がっているリンクなどが記載 -->
<!-- <transmission>タグは関節とアクチュエータの関係を定義する -->

<?xml version="1.0" ?>

<!-- robotタグによってすべての定義がはじまる -->
<robot name="testbot">

<!-- materialタグは、リンクの色や質感などを定義する -->
<!-- rgbaの4つめの数字は透明度に対応し、1.0に近いほど不透明 -->
  <material name="black">
    <color rgba="0.0 0.0 0.0 1.0"/>
  </material>
  <material name="orange">
    <color rgba="1.0 0.4 0.0 1.0"/>
  </material>

<!-- ベース -->
  <link name="base"/>

<!-- 関節 -->
  <joint name="fixed" type="fixed">
    <parent link="base"/>
    <child link="link1"/>
  </joint>

<!-- <link>タグは、衝突<collision>、可視化<visual>、慣性<inertial>タグで構成される -->
<!-- <collision> : リンクの干渉範囲を示す幾何学的な情報を記述 -->
<!--                <origin> : 干渉範囲の中心座標を記入 -->
<!--                <geometry> : originを中心に干渉範囲の形状や大きさを記入 -->
<!-- <visual> : 実際の形状を記述(STL,DAEなどのCADファイルを指定することもできる) -->
<!--             <origin> : 同上 -->
<!--             <geometry> : 同上 -->
<!-- <inertial> : リンクの重量と慣性モーメントを記入 -->

<!-- 最初のリンク -->
  <link name="link1">
    <collision>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
    <visual>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="black"/>
    </visual>
    <inertial>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <mass value="1"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
  </link>

<!-- <joint>タグは、名前、種類(revolute, prismatic, continuous, fixed, floating, planar) -->
<!-- ベースに近いリンクをparent link,遠い方をchild linkとする -->
<!-- <origin>タグは、parentからchildへの相対座標変換を指定する -->
<!-- <axis>タグは、軸の情報を指定する(revolute型であれば、回転軸の方向) -->
<!-- <limit>タグは、関節動作の制限値を設定 -->
<!--        <effort> : 関節に与えられる力 -->
<!--        <lower, upper> : 最小・最大角度 -->
<!--        <velocity> : 最大速度 -->

<!-- 最初のジョイント -->
  <joint name="joint1" type="revolute">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="0 0 0.5" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit effort="30" lower="-2.617" upper="2.617" velocity="1.571"/>
  </joint>

  <link name="link2">
    <collision>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
    <visual>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="orange"/>
    </visual>
    <inertial>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <mass value="1"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
  </link>

  <joint name="joint2" type="revolute">
    <parent link="link2"/>
    <child link="link3"/>
    <origin xyz="0 0 0.5" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit effort="30" lower="-2.617" upper="2.617" velocity="1.571"/>
  </joint>

  <link name="link3">
    <collision>
      <origin xyz="0 0 0.5" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 1"/>
      </geometry>
    </collision>
    <visual>
      <origin xyz="0 0 0.5" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 1"/>
      </geometry>
      <material name="black"/>
    </visual>
    <inertial>
      <origin xyz="0 0 0.5" rpy="0 0 0"/>
      <mass value="1"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
  </link>

  <joint name="joint3" type="revolute">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz="0 0 1.0" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit effort="30" lower="-2.617" upper="2.617" velocity="1.571"/>
  </joint>

  <link name="link4">
    <collision>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
    <visual>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="orange"/>
    </visual>
    <inertial>
      <origin xyz="0 0 0.25" rpy="0 0 0"/>
      <mass value="1"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
  </link>

</robot>