Note: This tutorial assumes you are familiar with the xml markup language.
(!) 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.

Créer son propre fichier URDF (Unified Robot Description Format)

Description: Dans ce tutoriel vous allez créer votre propre fichier urdf de description de robot.

Tutorial Level: BEGINNER

Next Tutorial: Maintenant que vous avez un fichier urdf, vous pouvez analyser votre fichier urdf, start using the kdl parser, or utiliser le robot state publisher sur votre propre robot

Créer la structure en arborescence

Dans ce tutoriel nous allons créer la description URDF du "robot" visible sur l'image ci-dessous.

Le robot sur l'image a une structure en arborescence. Commençons c'est très simple, et créons la description de cette structure en arborescence, sans se soucier des dimensions etc. Prenez votre éditeur de texte favori, et créer un fichier appellé my_robot.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   </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>

Donc, créer une structure est très simple! Maintenant regardons si nous pouvons faire analyser ce fichier. C'est un simple outil en ligne de commande qui analysera un fichier urdf pour vous, et vous dit si la syntax est correct :1

  $ rosmake urdfdom_model              # only needed if installed from source
  $ rosrun urdf check_urdf my_robot.urdf  # older versions
  $ rosrun urdf_parser check_urdf my_robot.urdf # electric and fuerte
  $ rosrun urdfdom check_urdf my_robot.urdf # groovy
  $ check_urdf my_robot.urdf # hydro
  $
  $ ## see footnote at bottom of page for why above commands are different

2Si tout fonctionne correctement, la sortie devrait ressembler à ceci :

robot name is: test_robot
---------- Successfully Parsed XML ---------------
root Link: link1 has 2 child(ren)
    child(1):  link2
    child(2):  link3
        child(1):  link4

Ajouter les dimensions

Bien, maintenant que nous avons la structure en arborescence de base, ajoutons les dimensions appropriées. Comme vous pouvez le voir sur le schéma du robot, le repère d'origine de chaque liaison (link) (en vert) est située aux pieds de la liaison (link), et est identique au repère d'origine de l'articulation (joint). Donc pour ajouter des dimensions à notre arbre, tout ce que nous avons à spécifier c'est le décalage de l'articulation (joint) par rapport à la liaison (link) parent. Pour cela, il nous suffit d'ajouter le champs <origin> pour chaque articulation. Regardons la seconde articulation. Joint2 à un décalage en Y et en X négatif par rapport à link1 et il a une rotation de 90 degrés autour de l'axe Z. Donc nous devons ajouter l'élément <origin> suivant :

   1   <origin xyz="-2 5 0" rpy="0 0 1.57" />

Si vous répétez ça pour tous les éléments notre fichier URDF ressemblera à ça :

   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>

Enregistrez votre fichier my_robot.urdf et faites le passer à travers l'analyseur : 1

  $ check_urdf my_robot.urdf

Si tout à l'air bon, vous pouvez passer à l'étape suivante.

Completer la Cinématique

Ce que nous n'avons pas encore spécifié c'est autour de quel axe tourne le joint. Une fois que l'on a cela, nous avons un modèle cinématique complet du robot! tout ce que nous avons à faire c'est d'ajouter l'élément <axis> pour chaque articulation. Axis spécifie l'axe de rotation dans le repère d'origine local.

Donc, si vous regardez joint2, vous voyez qu'il tourne autour de l'axe Y positif. Donc, ajoutons simplement cette expression xml aux éléments de l'articulation :

   1   <axis xyz="0 1 0" />

De même, joint1 tourne autour de l'axe suivant :

   1   <axis xyz="-0.707 0.707 0" />

Notez que c'est une bonne idée pour normaliser les axes.

Si nous ajoutons ça pour toutes les articulations du robot, notre URDF ressemblera à ceci :

   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>

Enregistrer votre fichier my_robot.urdf et faites le passer à travers l'analyseur : 1

  $ check_urdf my_robot.urdf

Ca y est, vous avez créé votre premier fichier URDF de description de robot! Maintenant vous pouvez essayer de visualiser l'URDF en utilisant graphiz : 3

  $ urdf_to_graphiz my_robot.urdf

et ouvrez le fichier généré avec une visionneuse de PDF :

  $ evince test_robot.pdf

Vous êtes maintenant prêt pour aller au prochain tutoriel, et commencer utiliser un analyseur URDF dans votre code C++.

  1. Commencé avec Electric Turtle, le script check_urdf a été déplacé depuis urdf dans urdf_parser. Dans les dernières version il a été déplacé dans urdfdom_model. (1 2 3)

  2. Les binaires depuis urdfdom maintenant apparaisse directement dans le chemin et rosrun ne fonctionne plus : http://answers.ros.org/question/112081/urdfdom-check_urdf/ (4)

  3. Commencé avec Electric Turtle, le script urdf_to_graphiz et check_urdf ont été déplacé depuis urdf dans urdf_parser. Dans les dernières versions il ont été déplacé dans urdfdom_model. (5)

Wiki: cn/urdf/Tutorials/Create your own urdf file (last edited 2016-09-14 07:48:56 by qdzhaozx)