Generating custom messages for ros1_bridge results in failure to find ROS1 messages... #include <my_msgs/MyCustom.h> fails
ROS: Kinetic, ROS2: Ardent, OS: Ubuntu 16.04
Hello. For a while now, I've been trying to include my custom messages in ros1_bridge's functionality. However, it seems that no matter what I do, it can never find the message's .h files and fails while trying to build ros1_bridge. To build the ros2 core, I am using the ros2.repos file from https://github.com/ros2/ros2/blob/ard... . The steps I take to build the environment are as follows:
cd <path_to_ros2_core_workspace>
src/ament/ament_tools/scripts/ament.py build --skip-packages ros1_bridge
source /opt/ros/kinetic/setup.bash
source <path_to_ros2_core_workspace>/install/local_setup.bash
source <path_to_ros1_overlay_workspace>/install/setup.bash
source <path_to_ros1_project_workspace>/install/setup.bash
src/ament/ament_tools/scripts/ament.py build --only-packages ros1_bridge --force-ament-cmake-configure
While scanning dependencies of ros1_bridge, I get the following error:
In file included from <path_to_ros2_core_workspace>/build/ros1_bridge/generated/get_factory.cpp:25:0:<path_to_ros2_core_workspace>/build/ros1_bridge/generated/my_interfaces_factories.hpp:6:33: fatal error: my_msgs/MyCustom.h: No such file or directory
It's definitely recognizing that the factory to connect the ROS1 package my_msgs
and the ROS2 package my_interfaces
should be made, it just can't find the absolute file name it seems like. Another message I'm generating has a dependency on std_msgs/Time
and it was finding that file properly, so for some reason it just cannot find my custom messages. That to me sounds like I'm not building my ros1 overlay workspace correctly, so here are the contents of that CMakeLists.txt file:
cmake_minimum_required(VERSION 2.8)
project(my_msgs)
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
message_generation
)
include_directories(${catkin_INCLUDE_DIRS})
add_message_files(DIRECTORY msg
FILES
MyCustom.msg
MyCustomStdMsgsDepends.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS message_runtime roscpp std_msgs
)
install(
DIRECTORY include
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
add_executable(pub src/pub.cpp)
target_link_libraries(pub ${catkin_LIBRARIES})
Please help me figure out what it is, I've been trying for ages and I would really like for this to work.
Just a comment on your ROS1
CMakeLists.txt
: you don't have anadd_dependencies(..)
in there that makes the build dependency ofpub
on yourMyCustom.msg
explicit. Build ordering will not take that into account, leading to unpredictable results. Please see the Catkin documentation on .... this subject here.
Ok, thanks :)
You are sourcing 3 different ROS 1 workspaces. Only the last of them will be "effective" (including the workspaces which you had sourced when you built the last one). You already suspect that you do something wrong when building the ROS 1 workspaces but you didn't share any information what you did.