[Documentation] [TitleIndex] [WordIndex

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 filestart using the kdl parseruse the robot state publisher on your own robot ができます.

Create the tree structure

このチュートリアルでは次のような“ロボット”を記述する URDF を作成していきます.

link.png

図のロボットは木構造をなしています.簡単に木構造の記述から始めて行きましょう.寸法のことなどは気にしなくて良いです.お気に入りのエディタを立ちあげて, 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

graphiz.png

これにて次のチュートリアルに進む準備が整いました. using the URDF parser in your C++ code に進んで下さい.

  1. Electric Turtle では check-urdf スクリプトが urdf から urdf_parser に移動されています.それ以降のバージョンでは urdfdom_model に移動されています. (1 2 3)

  2. Electric Turtle では urdf_to_graphiz と check_urdf スクリプトが urdf から urdf_parser に移動されています.それ以降のバージョンでは urdfdom_model に移動されています. (4)


2020-01-18 12:46