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)