ROS2 compile un message d'erreur lors de la compilation d'un projet avec un message personnalisé : msg/detail/header__struct.h : aucun fichier ou répertoire de ce type

Scénario du projet :

Lors de la migration d'un projet ROS 1 vers ROS 2, vous rencontrerez parfois des modifications et des mises à jour des types de messages, et les types de messages devront peut-être être ajustés pour répondre aux nouvelles exigences de ROS 2. Cet article explique comment gérer le champ d'en-tête dans le message personnalisé pour garantir que le projet peut s'adapter en douceur à la définition du type de message ROS 2.


Description du problème

Lors de la compilation du package ros2, il a été constaté qu'une erreur de compilation s'est produite lorsque le package du projet a introduit un message personnalisé de ros1 :

Starting >>> myrobot 
--- stderr: myrobot                               
/home/nvidia/ros2_ws/src/myrobot/src/ts_robot.cpp:5:10: fatal error: myrobot/msg/supersonic.hpp: 没有那个文件或目录
    5 | #include "myrobot/msg/supersonic.hpp" // CHANGE
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/ts_robot_node.dir/build.make:63:CMakeFiles/ts_robot_node.dir/src/ts_robot.cpp.o] 错误 1
make[2]: *** 正在等待未完成的任务....

D'après le message d'erreur, à peu prèsfatal error: msg/detail/header__struct.h: 没有那个文件或目录


Analyse des causes :

Dans ROS 1, le champ du message personnalisé Header headerfait généralement référence à l'horodatage du message, à l'ID de trame et à d'autres informations. Cependant, dans ROS 2, le type d'en-tête doit être std_msgs/Header. Par conséquent, lors de la migration d'un projet ROS 1 vers ROS 2, le champ En-tête du message personnalisé doit être ajusté de manière appropriée.


solution:

Modifier la définition du message : ouvrez le fichier .msg du message personnalisé et Header headermodifiez le champ std_msgs/Header headerpour vous conformer à la définition du type de message de ROS 2. Par exemple:

std_msgs/Header header
# Add other fields here

Après modification, reconstruisez-le.

Résumer

L'adaptation aux changements de types de messages est une étape importante lors de la migration d'un projet ROS 1 vers ROS 2. Gérer le champ d'en-tête Header dans les messages personnalisés, le modifier en en-tête std_msgs/Header et s'assurer de modifier CMakeLists.txt et d'autres références de manière appropriée peut aider les projets à s'adapter en douceur aux définitions de type de message de ROS 2. Ce simple ajustement peut vous aider à migrer plus facilement vos projets ROS 1 existants vers ROS 2 et à continuer de profiter de ses avantages et fonctionnalités.

J'espère que cet article de blog pourra vous aider à résoudre en douceur le problème de la migration des types de messages.

Je suppose que tu aimes

Origine blog.csdn.net/marin1993/article/details/132145014
conseillé
Classement