Interoperability issue with ROS2

4 posts / 0 new
Last post
Offline
Last seen: 4 years 1 month ago
Joined: 06/03/2020
Posts: 4
Interoperability issue with ROS2

Hi all,

I'm running the following 2 setups without changing the default ROS2 QOS file:

1. ROS2 eloquent with the default fast RTPS rmw implmentation on armv8 sending messages to an RTI connext 6.0.1 subsribers on the armv8 machine over udp.

2. ROS2 eloquent with the RTI connext 5.3.1 running on amd64 machine sending messages to an RTI connext 6.0.1 subsribers on the armv8 machine over udp.

The ROS datatypes are generated using the unbounded support flag and without pp disable options with the RTI connext 6.0.1 generator.

With both setups most of the topics are running smoothly including some complex datatypes but for other certain datatypes ( sensor_msgs::Imu ) i am getting the callback invoked but when I print the data it shows the default values, contrary to what I am sending and to what I am seeing in the RTI admin console.

Has anyone encountered this behaviour? any help would be greatly appreciated.

Offline
Last seen: 4 weeks 1 day ago
Joined: 11/14/2017
Posts: 29

Hi -- I've done similar tests here and would like to help resolve the issue.
What is the source of the IMU messages (as in: is it from an available ROS2 module that I can run locally to reproduce the issue)?

On the DDS side -- what does the IDL for IMU look like?   Is it similar to the definition in: https://github.com/neil-rti/ros-data-types/blob/master/all_msgs/ros2interop/ros2-eloquent-all.idl 

Final question: if an application is built with Connext 5.3.1 to subscribe and print the values, do the IMU elements show up correctly?

Offline
Last seen: 4 years 1 month ago
Joined: 06/03/2020
Posts: 4

Hi Neil, thank you for the fast reply. I'm asahmed to say it turns out I forgot to register_typ the messages that didn't work.

The messages were empty,  and because the callbacks were invoked and I didn't see any compilation errors I thought it would be a serialization / QOS problem.

 

On a diffrent note, I'd like to use your DDS over the default rmw implmentation on the armv8 system.  Did you get a similiar setup to work? From my understanding the binaries in the ros repo are just a placeholder and I have to compile the thing myself.

Do you have any tips for the compilation as I think I'm failing because I don't have an rti generator for armv8. I thought about copying the generated messages from an x86 computer and editing the cmakelists accordingly but it would be hard to maintain.

Offline
Last seen: 4 weeks 1 day ago
Joined: 11/14/2017
Posts: 29

You actually have a few options, depending on what you'd like to accomplish.

1. Cross-compile on a PC host, then copy the resulting binary to the armv8 platform.
   The type-support code that is created by the code generator is portable across different platforms.

2. Use a codegen that can run directly on armv8, and perform the ROS 2 build natively on the armv8 platform.
   RTI codegen is available for ARM Linux native (and probably a few other ARM OS targets).

3. Run your armv8 application natively in DDS, using ROS2-compatible topics (but without needing to build or run ROS2 on armv8).
   It will interoperate just fine with the ROS2 ecosystem, can make full use of the DDS ecosystem -- and will be smaller and run faster.
   Take a look at this article if interested.
   This type of application can be built natively or cross-compiled.

Do any of these options look like a good fit?