Note: Dans ce tutoriel on considère que vous avez créé votre propre fichier URDF..
(!) 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.

Utiliser le "robot state publisher" pour votre propre robot

Description: Ce tutoriel explique comment vous pouvez publier l'état de votre robot à tf, en utilisant le "robot state publisher".

Tutorial Level: BEGINNER

Next Tutorial: Pour plus de détail concernant l'utilisation de robot_state_publisher avec un urdf, regardez utiliser un urdf avec le robot state publisher

Lorsque vous travaillez avec un robot il y a beaucoup de repères d'origine, et il commence à être fastidieux de tous les publier à tf. Le "robot state publisher" est un outil qui fait le travaille pour vous.

http://wiki.ros.org/robot_state_publisher/Tutorials/Using the robot state publisher on your own robot?action=AttachFile&do=get&target=frames2.png

Le "robot state publisher" vous aide à diffuser l'état de votre robot à la tf transform library. Le "robot state publisher" a en interne un modèle de la cinématique du robot; ainsi en donnant l'angle de chaque articulation (joint) du robot, le robot state publisher peut calculer et diffuser la position en 3D de chaque liaison (link) du robot.

Vous pouvez utiliser le robot state publisher comme un node ROS ou comme une library:

Exécution comme un node ROS

robot_state_publisher

IL est plus simple d'exécuter le robot state publisher comme un node. Pour un utilisateur normal, c'est la méthode recommandée. Vous avez besoin de deux choses pour exécuter le robot state publisher:

Regardez dans les paragraphes suivants pour savoir comment configurer les paramètres et topics pour robot_state_publisher.

Subscribed topics

joint_states (sensor_msgs/JointState)

  • joint position information

Parameters

robot_description (urdf map)

tf_prefix (string)

  • Set the tf prefix for namespace-aware publishing of transforms. See tf_prefix for more details.

publish_frequency (double)

  • Publish frequency of state publisher, default: 50Hz.

ignore_timestamp (bool)

  • If true, ignore the publish_frequency and the timestamp of joint_states and publish a tf for each of the received joint_states. Default is "false".

use_tf_static (bool)

  • Set whether to use the /tf_static latched static transform broadcaster. Default: false.

use_tf_static (bool)

  • Set whether to use the /tf_static latched static transform broadcaster. Default: true.

Exemple fichier launch

Une fois que vous avez configuré le fichier de description xml de votre robot et que vous avez une source d'information sur la position de chaque articulation, créez simplement un fichier launch comme celui-ci:

  <launch>
    <node pkg="robot_state_publisher" type="robot_state_publisher" name="rob_st_pub" >
      <remap from="robot_description" to="different_robot_description" />
      <remap from="joint_states" to="different_joint_states" />
    </node>
  </launch>

Exécution comme une bibliothèque (library)

Les utilisateurs avancés peuvent utiliser le robot state publisher comme une bibliothèque, à l'intérieur de leur propre code C++. Après avoir ajouté cet en-tête:

  #include <robot_state_publisher/robot_state_publisher.h>

tout ce dont vous avez besoin c'est le constructeur qui se prend dans un arbre KDL

  RobotStatePublisher(const KDL::Tree& tree);

Et maintenant, chaque fois que vous voulez publier l'état de votre robot, vous appelez la fonction publishTransforms:

  // publish moving joints
  void publishTransforms(const std::map<std::string, double>& joint_positions,
                         const ros::Time& time);

  // publish fixed joints
  void publishFixedTransforms();

Le premier argument est une carte avec les noms et les positions des articulations, et le second argument est le temps, à quelle moment les positions ont été enregistrées. Ce n'est pas grave si la carte ne contient pas tous les noms des articulations. Ce n'est pas grave non plus si la carte contient des noms d'articulations qui ne sont pas dans le modèle cinématique. En revanche si le publieur d'état des articulations (joint state publisher) ne dit rien à propos de certaines articulations de votre modèle cinématique, alors votre arbre tf sera imcomplet.

Wiki: fr/robot_state_publisher/Tutorials/Using the robot state publisher on your own robot (last edited 2014-03-07 09:41:51 by PascalRey)