ROS官方教程(creating custom msg and srv file)的一个错误


ROS官方教程Creating custom msg and srv file讲述如何创建自定义message和service接口。在第7.1节Testing Num.msg with pub/sub中,它会要求你使用之前做过的一个项目Writing a simple publisher and subscriber(C++)进行验证。需要修改Publisher, Subscriber和CMakeList文件,CMakeList文件需要修改的地方如下:

#...

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(tutorial_interfaces REQUIRED)                      # CHANGE

add_executable(talker src/publisher_member_function.cpp)
ament_target_dependencies(talker rclcpp tutorial_interfaces)    # CHANGE

add_executable(listener src/subscriber_member_function.cpp)
ament_target_dependencies(listener rclcpp tutorial_interfaces)  # CHANGE

install(TARGETS
  talker
  listener
  DESTINATION lib/${PROJECT_NAME})

ament_package()

如果你完全按照文章中的教程操作,那么一定会卡在colcon build --packages-select cpp_pubsub指令上,也就是编译错误。错误代码如下:

CMake Error at CMakeLists.txt:17 (add_executable):
  Cannot find source file:

    src/publisher_member_function.cpp

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm
  .ccm .cxxm .c++m .h .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90
  .f95 .f03 .hip .ispc


CMake Error at CMakeLists.txt:20 (add_executable):
  Cannot find source file:

    src/subscriber_member_function.cpp

也就是找不到src/publisher_member_function.cppsrc/subscriber_member_function.cpp文件。但是我们在之前的练习中没有报错,怎么到了这里就报错了呢。那是因为我们在cpp_pubsup/src中的文件名是publisher_lambda_function.cppsubscriber_lambda_function.cpp。与教程中默认的文件名publisher_member_function.cppsubscriber_member_function.cpp不一样。你需要将CMakeList改成如下才能正常运行:

#...

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(tutorial_interfaces REQUIRED)                      # CHANGE

add_executable(talker src/publisher_lambda_function.cpp)        # CHANGE
ament_target_dependencies(talker rclcpp tutorial_interfaces)    # CHANGE

add_executable(listener src/subscriber_lambda_function.cpp)     # CHANGE
ament_target_dependencies(listener rclcpp tutorial_interfaces)  # CHANGE

install(TARGETS
  talker
  listener
  DESTINATION lib/${PROJECT_NAME})

ament_package()

这应该是官方教程中的一个Bug吧。


文章作者: Andy Guo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Andy Guo !
  目录