Integrate CycloneDDS
esteve opened this issue · 7 comments
CycloneDDS has become the default DDS implementation for many projects and organizations and ADLINK is actively supporting it for ROS 2.
CycloneDDS is small, fast and has few dependencies, so it'd be ideal for integrating it into UWP.
One major reason for investigating the use of CycloneDDS in ros2-dotnet is that Fast-RTPS breaks the UWP builds in every release, despite claiming to have support for it, the eProsima folks don't seem interested in addressing these issues and add UWP to their CI.
I agree with @esteve. Besides, results (delay, stability, and data loss) with Cyclone are better than Fast-RTPS in our application and sounds reasonable to move to Cyclone.
Fully agree. I took a run at a UWP compatible Cyclone build a couple weeks ago -- there's a large dependency on legacy Win32 APIs which are not allowed in UWP. It needs quite a bit of work unfortunately.
For non-UWP applications, should be no problem to move to Cyclone right now as there's no direct dependency between ros2_dotnet and the DDS implementation.
Also, as of Eloquent I no longer see a straightforward path for ARM64 (HoloLens2) support on Fast-RTPS. This fact increases the need to get Cyclone working -- its general lack of third party dependencies is attractive for being able to maintain UWP and cross-arch support.
Hey @esteve I see you assigned yourself to this task -- are you actively working on it and/or interested in doing so?
@theseankelly yeah, I want to give it a try. Do you have any feedback when you attempted to compile CycloneDDS for UWP?
@esteve I didn't try for very long at all so not much to report. Couple things come to mind:
- Cyclone's build scripts use CMAKE_SYSTEM_NAME to choose between windows/mac/linux. Since this value is set to WindowsStore for UWP (which does not match Windows) it falls through and tries to build the linux targets. You'll need to handle that - maybe here:
- After that, its standard practice of finding and replacing all the restricted APIs that MSVC flags when building for UWP. I saw a lot of network interface related stuff, and didn't actually take it further at the time, so no advice there.