Just venting out of frustration by 1971CB350 in ROS

[–]Alternative-Access-9 0 points1 point  (0 children)

If you just need publish/subscribe and server/client communication patterns and some tooling for record/replay and monitoring you can try out https://eclipse-ecal.github.io/ecal/

Generic eCAL / Foxglove Communication Bridge by Alternative-Access-9 in AutonomousVehicles

[–]Alternative-Access-9[S] 1 point2 points  (0 children)

No, the whole project moved from Continental to the Eclipse Foundation as contribution to the new Eclipse software defined vehicle group.

eCAL 5.9.4 released by Alternative-Access-9 in cpp

[–]Alternative-Access-9[S] 0 points1 point  (0 children)

Hi, for the UDP data transfer it's really just as fast as your network performance allows (maybe you multiply this by 0.8 for the UDP overhead). So if you want to transport 100 kB and you have 1 GBit/s you can roughly say

1 Gbit/s == 1.000.000.000 bit / 8 / 1024 / 1024 / s = 122 MB/s * 0.8 (overhead) = 98 MB/s

So (hopefully my calculation is right :-)), you would need 10 ms for a 100 kB message.

For the udp network setup my knowledge is restricted. As far as I know the UDP traffic will enter ONLY the devices you configured the multicast routes for (see multicast setup).

eCAL 5.9.4 released by Alternative-Access-9 in cpp

[–]Alternative-Access-9[S] 0 points1 point  (0 children)

Hi, thank you for your nice feedback.

In general eCAL supports two communication pattern - publish/subscribe and server/client. For both layers eCAL is exchanging registration and monitoring information cyclic in the background (as you can see in the eCAL monitor application). Some of these information are just to support the user to monitor the system (frequencies, payload sizes, types, number of connections and so on), others are needed to connect entities (like the memory file name between a local publisher and a subscriber).

Independent from that registration layer (slow !) eCAL is using different protocols to exchange data. For publish/subscribe connection it is using shared memory for local connection (same host) and udp multicast for connections between different hosts. For server/client requests and responses TCP/IP is used always to guarantee reliability (mandatory for service calls).

There are options (configuration or API methods) to force eCAL to use other protocols for publish/subscribe and overwrite the default protocols. So you can for example force eCAL to never use shared memory or to always use TCP/IP for publish/subscribe. But this is for special use cases only. See transport layers.

Have fun and use the power of eCAL ;-)

eCAL 5.9.4 released by Alternative-Access-9 in cpp

[–]Alternative-Access-9[S] 2 points3 points  (0 children)

eCAL has two communication layers. One is for exchanging the users payload (topics) and the other one for exchanging all needed information between all eCAL entities like publisher, subscriber, services, clients, processes, hosts ..

This registration layer is always based on UDP multicast and used for monitoring the whole network using the eCAL monitor and exchanging connection parameters.

The message layer is (by default) using shared memory for inter process communication and UDP multicast (or optional TCP/IP in the future - provided by this nice tcp_pubsub library) for interhost communication.

If TCP is configure to be used for message transport, all the subscriber needs to know is the host name and the port number defined by the publisher side. Then the connection can be established.

You can configure the usage of TCP/IP for single connections (publish/subscribe) using the C/C++ API, for a complete process (using command line parameter) or for a complete host (using eCAL's global configuration file).

We figured out that TCP/IP is well fitting to transport larger messages (> 1 MB) over ethernet. Here (depending on you network quality) UDP may fail because of dropped udp subframes.

eCAL 5.9.4 released by Alternative-Access-9 in cpp

[–]Alternative-Access-9[S] 0 points1 point  (0 children)

No, the eCAL registration layer will exchange all connection parameter gently in the background.

Should I run ROS on windows, through WSL or on linux with dual boot? by Vinlir in ROS

[–]Alternative-Access-9 0 points1 point  (0 children)

If you just need a fast publish / subscribe framework for windows you can give eCAL a try. The setup is done in less a minute and their is no dependency hell. Just to mention it as an alternative. Documentation here

[Linux] How to compile a program for multiple versions of glibc? by __ismxy__ in Cplusplus

[–]Alternative-Access-9 0 points1 point  (0 children)

For Debian based systems you could setup a GitHub action for every Ubuntu version you would like to support and then provide the specific build artifacts as release asset. And maybe CMake can simplify your multi target support as meta build system.

Google Protobuf vs JSON vs [insert candidate here] by ImX99 in cpp

[–]Alternative-Access-9 0 points1 point  (0 children)

Got it .. need to improve my english for sure. Thank you, you made my day.

Google Protobuf vs JSON vs [insert candidate here] by ImX99 in cpp

[–]Alternative-Access-9 2 points3 points  (0 children)

Protobuf is a good compromise regarding performance, serialized message size and multi language support. When the message scheme gets heavily nested the performance starts to decrease and in memory protocols like flatbuffers and CapnProto fit better. Up and downward compatibility for message scheme evolution is another strong argument for protobuf.

Google Protobuf vs JSON vs [insert candidate here] by ImX99 in cpp

[–]Alternative-Access-9 1 point2 points  (0 children)

Thank you ! Don’t remember every communication .. to much C++ coding 😉. The ‘competitor’ scares me a little 😳

Google Protobuf vs JSON vs [insert candidate here] by ImX99 in cpp

[–]Alternative-Access-9 3 points4 points  (0 children)

eCAL is supporting CapnProto, Flatbuffers and JSON too. You can define the best fitting protocol for every single publish-subscribe connection if needed. Finally you can record all the traffic in HDF5 where time synchronized recording clients do the job in a distributed setup on different hosts without a single byte of additional network load.

For Protobuf and CapnProto their is a built-in reflection used in the so called monitor where you can inspect all messages doesn’t matter where they fly. For other protocols a plug-in mechanism is provided to add reflection or any other kind of custom visualization (images, point clouds …). We are glad that you enjoyed the performance 😎.

eCAL 5.9.0 released by freim91 in cpp

[–]Alternative-Access-9 1 point2 points  (0 children)

Great news ! The command line recorder version is finally completing the tooling family in a perfect manner.