ROS2 compila uma mensagem de erro ao compilar um projeto com uma mensagem personalizada: msg/detail/header__struct.h: Nenhum arquivo ou diretório

Cenário do projeto:

Ao migrar projetos ROS 1 para ROS 2, às vezes você encontrará alterações e atualizações nos tipos de mensagens, e os tipos de mensagens podem precisar ser ajustados para acomodar os novos requisitos do ROS 2. Este artigo apresentará como lidar com o campo Cabeçalho na mensagem personalizada para garantir que o projeto possa se adaptar facilmente à definição do tipo de mensagem ROS 2.


Descrição do Problema

Ao compilar o pacote ros2, descobriu-se que ocorreu um erro de compilação quando o pacote do projeto introduziu uma mensagem personalizada do 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]: *** 正在等待未完成的任务....

De acordo com a mensagem de erro, aproximadamentefatal error: msg/detail/header__struct.h: 没有那个文件或目录


Análise de causa:

No ROS 1, o campo na mensagem personalizada Header headergeralmente se refere ao carimbo de data/hora da mensagem, ID do quadro e outras informações. Porém, no ROS 2, o tipo Header deve ser std_msgs/Header. Portanto, ao migrar um projeto ROS 1 para ROS 2, o campo Cabeçalho na mensagem customizada precisa ser ajustado adequadamente.


solução:

Modifique a definição da mensagem: Abra o arquivo .msg da mensagem personalizada e Header headermodifique o campo std_msgs/Header headerpara estar em conformidade com a definição do tipo de mensagem do ROS 2. Por exemplo:

std_msgs/Header header
# Add other fields here

Após a modificação, reconstrua-o.

Resumir

Acomodar mudanças nos tipos de mensagens é uma etapa importante ao migrar um projeto ROS 1 para ROS 2. Manipular o campo de cabeçalho Header em mensagens personalizadas, modificá-lo para o cabeçalho std_msgs/Header e certificar-se de modificar CMakeLists.txt e outras referências adequadamente pode ajudar os projetos a se adaptarem facilmente às definições de tipo de mensagem do ROS 2. Este ajuste simples pode ajudá-lo a migrar mais facilmente seus projetos ROS 1 existentes para ROS 2 e continuar a aproveitar seus benefícios e recursos.

Espero que esta postagem do blog possa ajudá-lo a lidar com o problema da migração do tipo de mensagem sem problemas.

Acho que você gosta

Origin blog.csdn.net/marin1993/article/details/132145014
Recomendado
Clasificación