| Note: このチュートリアルは xml markup 言語に慣れ親しんでいることを想定しています. | 
|  Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. | 
Create your own urdf file
Description: このチュートリアルでは urdf robot description ファイルを自分で作成する方法を学びます.Tutorial Level: BEGINNER
Next Tutorial: urdf ファイルを作成したので, parse your urdf file , start using the kdl parser や use the robot state publisher on your own robot ができます.
Create the tree structure
このチュートリアルでは次のような“ロボット”を記述する URDF を作成していきます.
 
 
図のロボットは木構造をなしています.簡単に木構造の記述から始めて行きましょう.寸法のことなどは気にしなくて良いです.お気に入りのエディタを立ちあげて, my_urdf.xml というファイルを作成して下さい.:
   1 <robot name="test_robot">
   2   <link name="link1" />
   3   <link name="link2" />
   4   <link name="link3" />
   5   <link name="link4" />
   6 
   7   <joint name="joint1" type="continuous">
   8     <parent link="link1"/>
   9     <child link="link2"/>
  10   </joint>
  11 
  12   <joint name="joint2" type="continuous">
  13     <parent link="link1"/>
  14     <child link="link3"/>
  15   </joint>
  16 
  17   <joint name="joint3" type="continuous">
  18     <parent link="link3"/>
  19     <child link="link4"/>
  20   </joint>
  21 </robot>
このように木構造を記述することはとても簡単です!さて,この urdf ファイルを構文解析していきましょう. urdf ファイルを構文解析する簡単なコマンドラインツールがあり,文法が正しいかどうかを教えてくれます:1
$ rosmake urdfdom_model # only needed if installed from source $ rosrun urdfdom_model check_urdf my_urdf.xml
もしすべて正常に動いたならば,次のように出力されるはずです:
robot name is: test_robot
---------- Successfully Parsed XML ---------------
root Link: link1 has 2 child(ren)
    child(1):  link2
    child(2):  link3
        child(1):  link4
Add the dimensions
基本的な木構造を得ているので,次に適切な寸法を追加しましょう.上の図から分かるように,各 Link (緑色)の基準座標系は Link の下部に置かれており, Joint の基準座標系と同じものです.そのため,この木構造に寸法を追加するならば,ある Link からその子 Link の Joint までのオフセットを定義するだけで良いです.
2番目の Joint を見てみましょう. Joint2 は Link1 から Y 方向に移動し,負の X 方向に少しだけ移動し,さらに Z 軸周りに90度回転しています.そのため,次のように <origin> 要素を加える必要があります:
   1   <origin xyz="-2 5 0" rpy="0 0 1.57" />
この操作をすべての Joint に行うと,URDF は次のようになります:
   1 <robot name="test_robot">
   2   <link name="link1" />
   3   <link name="link2" />
   4   <link name="link3" />
   5   <link name="link4" />
   6 
   7 
   8   <joint name="joint1" type="continuous">
   9     <parent link="link1"/>
  10     <child link="link2"/>
  11     <origin xyz="5 3 0" rpy="0 0 0" />
  12   </joint>
  13 
  14   <joint name="joint2" type="continuous">
  15     <parent link="link1"/>
  16     <child link="link3"/>
  17     <origin xyz="-2 5 0" rpy="0 0 1.57" />
  18   </joint>
  19 
  20   <joint name="joint3" type="continuous">
  21     <parent link="link3"/>
  22     <child link="link4"/>
  23     <origin xyz="5 0 0" rpy="0 0 -1.57" />
  24   </joint>
  25 </robot>
my_urdf.xml を更新して,構文解析にかけて下さい:1
$ rosrun urdfdom_model check_urdf my_urdf.xml
すべて上手く行っているようであれば,次のステップに進んで下さい.
Completing the Kinematics
まだ定義していないのは Joint がどの軸周りに回転するかということです.これを追加すれば,このロボットの完全な運動学モデルを作成したことになります! やることは <axis> 要素を各 Joint に付け加えるだけです.ローカル座標で表された回転軸を定義します.
例えば Joint2 に関しては, Y 軸正方向周りに回転していることが分かります.そのため, Joint 要素に次の xml を付け加えて下さい.
   1   <axis xyz="0 1 0" />
同様に, Joint1 は次の軸周りに回転しています:
   1   <axis xyz="-0.707 0.707 0" />
回転軸は正規化するのが良いでしょう.
このロボットのすべての Joint に関して回転軸を付け加えたら, URDF は次のようになります:
   1 <robot name="test_robot">
   2   <link name="link1" />
   3   <link name="link2" />
   4   <link name="link3" />
   5   <link name="link4" />
   6 
   7   <joint name="joint1" type="continuous">
   8     <parent link="link1"/>
   9     <child link="link2"/>
  10     <origin xyz="5 3 0" rpy="0 0 0" />
  11     <axis xyz="-0.9 0.15 0" />
  12   </joint>
  13 
  14   <joint name="joint2" type="continuous">
  15     <parent link="link1"/>
  16     <child link="link3"/>
  17     <origin xyz="-2 5 0" rpy="0 0 1.57" />
  18     <axis xyz="-0.707 0.707 0" />
  19   </joint>
  20 
  21   <joint name="joint3" type="continuous">
  22     <parent link="link3"/>
  23     <child link="link4"/>
  24     <origin xyz="5 0 0" rpy="0 0 -1.57" />
  25     <axis xyz="0.707 -0.707 0" />
  26   </joint>
  27 </robot>
my_urdf.xml を更新し,構文解析にかけて下さい:1
$ rosrun urdfdom_model check_urdf my_urdf.xml
これで完成です.ロボットを記述した初めての URDF を完成できました! graphiz を使ってその URDF を可視化することもできます:2
$ rosrun urdfdom_model urdf_to_graphiz my_urdf.xml
生成されたファイルをお気に入りの pdf viewer で開いて下さい:
$ evince test_robot.pdf
 
 
これにて次のチュートリアルに進む準備が整いました. using the URDF parser in your C++ code に進んで下さい.
- Electric Turtle では check-urdf スクリプトが urdf から urdf_parser に移動されています.それ以降のバージョンでは urdfdom_model に移動されています. (1 2 3) 
- Electric Turtle では urdf_to_graphiz と check_urdf スクリプトが urdf から urdf_parser に移動されています.それ以降のバージョンでは urdfdom_model に移動されています. (4) 








