Why not ign-transport use DDS?

In ROS on DDS, I see the advantage of DDS over Protobuf with ZeroMQ, so I wonder to known why ign-transport choose not to use DDS? Can anybody have a explain?

1 Like

Not a direct answer to your question, but a relevant discussion was held here: Why are ROS and Ignition/Gazebo diverging (or not converging)? - General - ROS Discourse .

1 Like

DDS did not fit our use-case based on the following:

  1. DDS was not, and maybe still is not, a debian package released in normal Ubuntu distributions.
  2. There was no open-source community around DDS when ign-transport started.
  3. DDS has a lot of configuration options that are not needed by Ignition.
  4. We’d rather have a faster transport via TCP/IP than rely on UDP. The protobuf + zeromq setup is faster than DDS.
  5. Protobuf is a widely adopted message format that let’s us leverage a large community of developers and libraries. For example, we can do things like transmit messages directly from a sever to a browser without message translation.
2 Likes

Hope it is not too much off topic, but I did not get answer on mu question and I believe is is connected. Could IPC be used in Ignition transport? If so, how? If not, is there a good reason? Thanks

@nate thanks for the information. it helps a lot :+1:

  1. We’d rather have a faster transport via TCP/IP than rely on UDP. The protobuf + zeromq setup is faster than DDS.

AFAIK, DDS is sets of API. so transport layer can be also TCP/IP.
btw, do you happen to have any benchmark information about How faster it could be against DDS?, we are really interested in that.

  1. Protobuf is a widely adopted message format that let’s us leverage a large community of developers and libraries. For example, we can do things like transmit messages directly from a sever to a browser without message translation.

totally agree.

Hope it is not too much off topic, but I did not get answer on mu question and I believe is is connected. Could IPC be used in Ignition transport? If so, how? If not, is there a good reason? Thanks

Ignition Transport doesn’t use ZeroMQ with nodes within the same process. It doesn’t even serialize the messages. For communication between processes within the same machine we still rely on TCP/IP. The kernel does some optimizations in this case. We still do serialization, so something to improve in the future.

1 Like

The DDS specification does not allow for TCP/IP, everything is UDP.

We did some benchmark tests a couple years back here.

1 Like

@nate

thanks, we will look into it.

The DDS specification does not allow for TCP/IP, everything is UDP.

is that true? as far as i see the specification, it does not mention about specification of network transport…

https://www.omg.org/spec/DDS/1.4/PDF

and most of dds implementation for ROS 2 support TCP/IP transport as well.

1 Like

since i am new user, i am not allowed to post more than 2 links…

Right, the things you are mentioning are not part of the official DDS specification. Those are extra’s provided by different vendors.

Thanks for your answer. Do you plan in the future to also switch from TCP/IP to IPC for communication on one machine? Or you do did not expect any significant improvement to benchmarks mentioned by @nate here?

Adding in IPC as an option is not currently on our roadmap. If you’re so inclined, I encourage you to take a stab at an implementation. We can offer guidance and support.

Alternatively, you could consider using Iceoryx.

Thank you for clearing this. I will do some benchmarking and if the native Ignition transport won’t be fast enough, I may try to implement it.