[ros-users] [Discourse.ros.org] [Next Generation ROS] ROS2: How to use custom message in project where it's declared?

mch ros.discourse at gmail.com
Tue Jun 27 23:12:42 UTC 2017



I've created C++ ROS2 project with a custom message as explained here: https://github.com/ros2/ros2/wiki/Defining-custom-interfaces-(msg-srv)

I can see the message is generated properly and .h\.hpp files are installed.

Now I want to use this custom message in the same project where it's generated. But I can't reference the header file of my generated message from the same project.

Here is my CMakeList.txt:

    cmake_minimum_required(VERSION 3.5)

    project(bridge_test_msgs)

    if(NOT WIN32)
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wextra -Wpedantic")
    endif()

    find_package(ament_cmake REQUIRED)
    find_package(rosidl_default_generators REQUIRED)
    find_package(std_msgs REQUIRED)
    find_package(rclcpp REQUIRED)
    find_package(rclcpp_lifecycle REQUIRED)
    find_package(rosidl_default_generators REQUIRED)

    set(msg_files
      "msg/BridgeTestMessage.msg"
    )
    rosidl_generate_interfaces(${PROJECT_NAME}
      ${msg_files}
      ADD_LINTER_TESTS
    )


    include_directories(
      ${rclcpp_INCLUDE_DIRS}
      ${rclcpp_lifecycle_INCLUDE_DIRS}
      ${std_msgs_INCLUDE_DIRS}
    #    ${${PROJECT_NAME}_INCLUDE_DIRS}
    )

    add_executable(my_publisher
        src/my_publisher.cpp
    )

    target_link_libraries(my_publisher
      ${rclcpp_LIBRARIES}
      ${rclcpp_lifecycle_LIBRARIES}
      ${std_msgs_LIBRARIES}

    #        ${PROJECT_NAME}
    #        ${PROJECT_NAME}_LIBRARIES
    #        ${${PROJECT_NAME}_LIBRARIES}
    )
    add_dependencies(my_publisher ${PROJECT_NAME})

    ament_target_dependencies(my_publisher
            "rclcpp"
            "rclcpp_lifecycle"
            "std_msgs"

            "${PROJECT_NAME}"
    )

    install(TARGETS
            my_publisher
            DESTINATION bin
    )

    ament_export_dependencies(rosidl_default_runtime)
    ament_package()


Inside src/my_publisher.cpp I have a line:
 #include "bridge_test_msgs/msg/bridge_test_message.hpp"

Command 'ament build' fails with message:

    my_publisher.cpp:7:56: fatal error: bridge_test_msgs/msg/bridge_test_message.hpp: No such file or directory
    compilation terminated.
    CMakeFiles/my_publisher.dir/build.make:62: recipe for target 'CMakeFiles/my_publisher.dir/src/my_publisher.cpp.o' failed
    make[2]: *** [CMakeFiles/my_publisher.dir/src/my_publisher.cpp.o] Error 1
    CMakeFiles/Makefile2:288: recipe for target 'CMakeFiles/my_publisher.dir/all' failed
    make[1]: *** [CMakeFiles/my_publisher.dir/all] Error 2
    Makefile:127: recipe for target 'all' failed
    make: *** [all] Error 2

I can see header file exists:

    $ ls install/include/bridge_test_msgs/msg/bridge_test_message.hpp 
    -rw-r--r-- 1 mc mc 415 Jun 27 15:00 install/include/bridge_test_msgs/msg/bridge_test_message.hpp


Could you hint me how to reference custom message from the project itself?





---
[Visit Topic](https://discourse.ros.org/t/ros2-how-to-use-custom-message-in-project-where-its-declared/2071/1) or reply to this email to respond.




More information about the ros-users mailing list