Skip to content

Ajout de type de Message ou Service

Galiléo CPE edited this page Dec 2, 2019 · 4 revisions

Ajout de type 'msg' et 'srv'

Etapes pour configurer le package pour correctement traiter les fichiers .msg et .srv.

Toute la configuration s'effectue dans le dossier du package.

Configuration pour msg ou srv

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 dependency s'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
    )

A ajouter pour msg

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
)

A ajouter pour srv

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
)

Finalisation

Enfin, il est nécessaire de recompiler les packages, en étant à l'origine du workspace:

$ catkin_make install

Si une erreur se produit, supprimer les dossiers build, devel et install, et ré-exécuter la commande :

$ rm -rf build devel install 
$ catkin_make install

Cette é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)/

Utilisation

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>Response

Et aussi avant d'exécuter le programme, ne pas oublier de sourcer : $ source devel/setup.bash

Informations utiles :

  • Ne pas oublier de sourcer pour chaque terminal ouvert : $ source devel/setup.bash Sinon les messages et services ne 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 messages et les services d'un même package, sinon erreur lors de catkin_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.

Clone this wiki locally