Note: Dans ce tutoriel on considère que vous avez créé votre propre fichier URDF ou que vous utilisez un des fichiers urdf existant pour PR2.
(!) 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.

Démarrer l'utilisation de l'analyseur KDL

Description: Ce tutoriel vous apprends comment créer un arbre KDL à partir d'un fichier URDF

Keywords: KDL

Tutorial Level: BEGINNER

Construire l'analyseur KDL

 $ rosdep install kdl_parser

Cela va installer toutes les dépendances externes pour l'analyseur KDL kdl_parser. Pour construire le package, lancez:

 $ rosmake kdl_parser

L'utiliser dans son code

D'abord, ajoutez l'analyseur KDL (KDL parser) comme dépendances à votre fichire manifest.xml :

  <package>
    ...
    <depend package="kdl_parser" />
    ...
  </package>

Pour mettre en oeuvre l'analyseur KDL dans votre code C++, ajoutez ces lignes:

   1   #include <kdl_parser/kdl_parser.hpp>
   2 

Maintenant il y a plusieurs manières de procéder. Vous pouvez construire un arbre KDL à partir d'un urdf sous des formes diverses:

A partir d'un fichier

  •    1    KDL::Tree my_tree;
       2    if (!kdl_parser::treeFromFile("filename", my_tree)){
       3       ROS_ERROR("Failed to construct kdl tree");
       4       return false;
       5    }
    

Pour créer le fichier URDF de PR2, lancez la commande suivante:

  •  $ rosrun xacro xacro.py `rospack find pr2_description`/robots/pr2.urdf.xacro > pr2.urdf

A partir du serveur de paramètres

  •    1    KDL::Tree my_tree;
       2    ros::NodeHandle node;
       3    std::string robot_desc_string;
       4    node.param("robot_description", robot_desc_string, string());
       5    if (!kdl_parser::treeFromString(robot_desc_string, my_tree)){
       6       ROS_ERROR("Failed to construct kdl tree");
       7       return false;
       8    }
    

A partir d'un élément xml

  •    1    KDL::Tree my_tree;
       2    TiXmlDocument xml_doc;
       3    xml_doc.Parse(xml_string.c_str());
       4    xml_root = xml_doc.FirstChildElement("robot");
       5    if (!xml_root){
       6       ROS_ERROR("Failed to get robot from xml document");
       7       return false;
       8    }
       9    if (!kdl_parser::treeFromXml(xml_root, my_tree)){
      10       ROS_ERROR("Failed to construct kdl tree");
      11       return false;
      12    }
    

A partir d'un modèle URDF

  •    1    KDL::Tree my_tree;
       2    urdf::Model my_model;
       3    if (!my_model.initXml(....)){
       4       ROS_ERROR("Failed to parse urdf robot model");
       5       return false;
       6    }
       7    if (!kdl_parser::treeFromUrdfModel(my_model, my_tree)){
       8       ROS_ERROR("Failed to construct kdl tree");
       9       return false;
      10    }
    

Pour plus de détails, regardez l'API documentation.

Wiki: fr/kdl_parser/Tutorials/Start using the KDL parser (last edited 2014-01-16 16:10:53 by PascalRey)