Ajout de type de Message ou Service - Galileo-CDR2020/ROS GitHub Wiki
Etapes pour configurer le package pour correctement traiter les fichiers .msg et .srv.
Toute la configuration s'effectue dans le dossier du package.
Pour que les fichiers soient utilisés dans le source code en C++, Python, ou autre, il faut modifier plusieurs fichiers :
Tout d'abord, dans le fichier package.xml du package, il faut ajouter les deux lignes suivantes :
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>Puis, il faut aussi réaliser quelques modifications dans le fichier CMakeLists.txt :
-
Pour générer des messages :
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation # ligne à ajouter )
-
Pour que les
message runtime dependencys'exporte bien :catkin_package( ... CATKIN_DEPENDS message_runtime ... ... )
-
Enfin, il faut s'assurer que la fonction
generate_messages()est bien appelée, en décommentant les lignes :generate_messages( DEPENDENCIES std_msgs )
Dans CMakeLists.txt : décommenter les lignes suivantes, et remplacer Message*.msg par les fichiers .msg créés :
(Cela permet d'être certain que CMake sait comment configurer le projet avec les fichiers .msg)
add_message_files(
FILES
Message1.msg
Message2.msg
)Dans CMakeLists.txt : décommenter les lignes suivantes, et remplacer Service*.srv par les fichiers .srv créés :
add_service_files(
FILES
Service1.srv
Service2.srv
)Enfin, il est nécessaire de recompiler les packages, en étant à l'origine du workspace:
$ catkin_make installSi une erreur se produit, supprimer les dossiers build, devel et install, et ré-exécuter la commande :
$ rm -rf build devel install
$ catkin_make installCette étape permet de générer les C++ messages header des messages et services dans le dossier devel/include/<package>/ et les Python script dans devel/lib/python2.7/dist-packages/<package>/(msg|srv)/
Pour utiliser les messages et services dans un programme, il suffit d'ajouter :
from <package_name>.msg import <msg_name>
from <package_name>.srv import <srv_name>, <srv_name>ResponseEt aussi avant d'exécuter le programme, ne pas oublier de sourcer : $ source devel/setup.bash
-
Ne pas oublier de sourcer pour chaque terminal ouvert :
$ source devel/setup.bashSinon lesmessagesetservicesne sont pas reconnus : Message d'erreur :ERROR: Cannot load message class for [<pkg>/<msg_name>>]. Are your messages built? -
Ne pas utiliser le même nom pour les
messageset lesservicesd'un même package, sinon erreur lors decatkin_make install:CMake Error: Attempt to add a custom rule to output ".../<workspace>/devel/include/<package>/<msg_name>.h.rule" which already has a custom rule.