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
Contents
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.
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:
Un fichier urdf de description xml du robot chargé sur le serveur de paramètres Parameter Server.
Une source qui publie la position de l'articulation comme un sensor_msgs/JointState.
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)
The urdf xml robot description. This is accessed via `urdf_model::initParam`
tf_prefix (string)
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.