rti_connext_dds gentoo

5 posts / 0 new
Last post
Offline
Last seen: 3 weeks 6 days ago
Joined: 11/06/2022
Posts: 2
rti_connext_dds gentoo

Hi, I am currently trying to compile a ros distribution on gentoo in order to create a minimal OS for our robot.
However, this package is a major dependancy for ROS2 and is not distributed on gentoo.
I was wondering if it was possible to release the package for gentoo.

Organization:
Howard's picture
Offline
Last seen: 6 hours 6 min ago
Joined: 11/29/2012
Posts: 447

I think that submitting your request as an issue to the appropriate github repository would be better.

asorbini's picture
Offline
Last seen: 3 weeks 6 days ago
Joined: 02/06/2013
Posts: 11

The official instructions for building ROS 2 from source actually skip package rti_connext_dds-6.0.1 when running rosdep. If Connext is not available (i.e. installed through the Debian package, or manually loaded in the build shell), then Connext's RMW (rmw_connextdds) will not produce any library and effectively be automatically skipped when building the ROS 2 source tree.

I'm not sure how you are implementing your Gentoo port of ROS (i.e. if you are also porting rosdep or if you are following a Gentoo-specific strategy to handle external dependencies), but I suggest implementing a similar solution which ignores the dependency to rti_connext_dds-6.0.1 (or rti_connext_dds-5.3.1 if you are building ROS Foxy or older).

Offline
Last seen: 3 weeks 6 days ago
Joined: 11/06/2022
Posts: 2

Could you link me to the appropriate repo please ? I got quite confuse on which does what.

I suggest implementing a similar solution which ignores the dependency to rti_connext_dds-6.0.1

That is what I have done so far and I am not yet able to test my portage but I was wondering if it would break anything ? Would everything work as it should even without this dependancy ?

 

asorbini's picture
Offline
Last seen: 3 weeks 6 days ago
Joined: 02/06/2013
Posts: 11

Could you link me to the appropriate repo please ? I got quite confuse on which does what.

Support for running ROS 2 on top of RTI Connext DDS is implemented by rmw_connextdds, an implementation of ROS 2's RMW layer for Connext, which you can find in repository ros2/rmw_connextdds.

rmw_connextdds is one of the three "Tier 1" RMW implementations which are part of the ROS 2 source tree (i.e. it is part of ros2.repos).

The ros2/rmw_connextdds repository contains 4 ROS packages:

  • rti_connext_dds_cmake_module
    • A "vendor" package which is responsible for detecting an installation of Connext DDS and making it available to other ROS packages which depend on it.
    • The package detects Connext by looking at environment variables CONNEXTDDS_DIR, and NDDSHOME as a fallback option.
    • Connext must have been loaded in the environment before running colcon. This can be done either by manually setting one of these variables (i.e. "export CONNEXTDDS_DIR=/path/to/rti_connext_dds") or by using one of the environment scripts included with Connext (e.g. <CONNEXTDDS_DIR>/resource/script/rtisetenv_<ARCHITECTURE>.bash).
    • The package exports a "shell hook" which will make sure that other packages that are built after it use the same Connext installation it detected.
    • It also provides some CMake utilities which simplify loading Connext in a ROS package's CMakeLists.txt.
  • rmw_connextdds_common
    • This package contains the bulk of the source code implementing RMW support for Connext.
    • Shared by rmw_connextdds and rmw_connextddsmicro.
    • The compilation of this package is conditional on whetherf rti_connext_dds_cmake_module found Connext or not.
    • The package will not generate any libraries and no source code will be compiled If Connext wasn't found.
    • This allows the ros2/rmw_connextdds repository to be cloned and included in a colcon build even if Connext is not available.
  • rmw_connextdds
    • A package which uses the common code from rmw_connextdds_common to export the actual RMW implementation for RTI Connext DDS.
    • This RMW implementation is supported as Tier 1 by ROS 2.
  • rmw_connextddsmicro
    • A package which uses the common code from rmw_connextdds_common to exports the actual RMW implementation for RTI Connext DDS Micro.
    • This RMW implementation is experimental, and it not supported by ROS 2.

There is no public git repository for Connext: users typically install Connext using one of the official installers distributed through RTI's website. The official installers present users with the widest range of options to provision Connext on one of the many hardware and software platforms it supports. You can also request a free trial of the latest release to evaluate Connext on the three major desktop platforms (Windows, Linux, macOS).

RTI has also released some versions of Connext in Debian binary package format (.deb) to support the ROS 2 community. These packages contain a basic version of Connext that can be used to build rmw_connextdds on x86_64 Linux targets, bundled with a license for noncommerical and preproduction use only.

The packages are distributed through the ROS 2 apt repository. Their purpose is to allow the ROS build farm to generate binary packages for rmw_connextdds, and to allow users to evaluate ROS 2 with Connext without having to build rmw_connextdds from source.

The latest version of Connext released in this form is Connext 6.0.1, contained in package rti_connext_dds-6.0.1. The package will be automatically installed as a dependency if users install rmw_connextdds using apt.

Users who want to use a more recent version of Connext, or need features not included in the Debian distribution (e.g. security), should install Connext using the official installers provided by RTI, then build rmw_connextdds from source.

That is what I have done so far and I am not yet able to test my portage but I was wondering if it would break anything ? Would everything work as it should even without this dependancy ?

Yes, it should. As I hope I explained, the packages in ros2/rmw_connextdds are designed to not produce any error if Connext is not loaded in the environment. In fact, even if you had installed the dependency, but forgot to load Connext in the environment by setting the appropriate variables, the packages would behave the same way and not produce any library. At most, you might receive a warning message during the colcon build which you can ignore/suppress.

I hope this helps, let me know if you have more questions!