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 header
geralmente 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 header
modifique o campo std_msgs/Header header
para 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.