ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A answers.ros.org

Custom RMW layer not recognized

Hi,

I’m trying to implement a new RMW. I successfully created a packages with the following structure but ament don’t recognise it as a rmw implementation.

    rmw_tinq
    |-- rmw_tinq_cpp
      |-- CMakeLists.txt
      |-- packages.xml
      |-- src
          |-- functions.cpp

My CMakeList.txt have I think all the required dependencies:

 find_package(rmw REQUIRED)
    find_package(rosidl_generator_c REQUIRED)
    find_package(rosidl_generator_cpp REQUIRED)
    find_package(rosidl_typesupport_introspection_c REQUIRED)
    find_package(rosidl_typesupport_introspection_cpp REQUIRED)
    ...
    configure_rmw_library(rmw_tinq_cpp)
    ....
    register_rmw_implementation(
      "c:rosidl_typesupport_c:rosidl_typesupport_introspection_c"
      "cpp:rosidl_typesupport_cpp:rosidl_typesupport_introspection_cpp")

and same for my package.xml :

    <build_depend>rmw</build_depend>
    <build_depend>rosidl_generator_c</build_depend>
    <build_depend>rosidl_generator_cpp</build_depend>
    <build_depend>rosidl_generator_dds_idl</build_depend>
    <build_depend>rosidl_typesupport_introspection_c</build_depend>
    <build_depend>rosidl_typesupport_introspection_cpp</build_depend>

    <build_export_depend>rcutils</build_export_depend>
    <build_export_depend>rmw</build_export_depend>
    <build_export_depend>rosidl_generator_c</build_export_depend>
    <build_export_depend>rosidl_generator_cpp</build_export_depend>
    <build_export_depend>rosidl_typesupport_introspection_c</build_export_depend>
    <build_export_depend>rosidl_typesupport_introspection_cpp</build_export_depend>

But when I try to build with ament, my rmw package is build after rmw_implementation, and rmw_implementation failed :

CMake Error at /data/loumay01/cortex_M/ros2/install/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:62 (message):
  Could not find ROS middleware implementation 'NOTFOUND'.  Choose one of the
  following:
Call Stack (most recent call first):
CMakeLists.txt:28 (get_default_rmw_implementation)

Any ideas on what is missing here ?

You need to add your package as a dependency in the manifest of rmw_implementation in order to be processed before.

makes sense… I was to focus on the specific implementation packages itself !
Thanks a lot !

This set of pending changes (https://github.com/ament/ament_package/pull/63) might be interesting for you. With those it should be possible to build your rmw impl. before rmw_implementation without the need to touch existing packages.