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 header
fait 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 header
modifiez le champ std_msgs/Header header
pour 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.