Ros/ros_comm Unix Domain Socket Support for Noetic

Hi All,

i’d like to have feedback and comments from community. i was wondering that if anyone is interested in ros/ros_comm Unix Domain Socket performance improvement for ros:noetic release. if there are some requests, we can support ros:noetic in fujitatomoya/ros_comm.

Unix Domain Support is introduced at ROSCon 2018 , Video and Slides are available. It’s been already maintenance phase, so we ended up having the different repository.

This is actually used for the product aibo

for now, we have the following branches to support ros:kinetic and ros:melodic.

Does anyone like to use or try that based on ros:noetic?

feedback and comments welcome :grinning_face_with_smiling_eyes:
thanks

8 Likes

Would this be potentially beneficial for improving the performance of the ROS1 side of the ros1_bridge, a single process that commonly encounters a lot of thru traffic?

i do think so. if other nodes and ros1_bridge is in the localhost, the same advantage we can have. Unix Domain Socket is perfectly concealed by user application layer, so application does not even know what is used. but as long as the connections between endpoints are in the localhost, our ros_comm will use Unix Domain Socket (if not, fallback to TCPROS/UDPROS automatically based on IP addresses).

We’d be interested in this feature. We have noticed lower resource usage with it on some of our robots in melodic with your changes.

1 Like

Thx for the post. That looks very interesting.

Does the message transport over Unix Domain Socket skip the serialization and serialization of the messages similar as nodelets do? Or does it solely alter how serialized messages are transmitted from one process to another? From what I understood, the latter is the case.

your understanding is correct. it is just about transport layer adjustment, using Unix Domain Socket does not require IP stack but it requires (de)serialization and copy-in/out to kernel space.

i’d like to clear some points,

  • Replacing TCP/IP into Unix Domain Socket is not HUGE performance improvement compared to Nodelet(copyless, accessing the same physical address in the process space). reason also described above, but…
  • After the node configuration via XMLRPC, it can use Unix Domain Socket instead of TCP/IP. that is said every single time it sends/receives the data, it can have the advantage.
  • Cost effective, Unix Domain Socket implementation is concealed by API, that means we DO NOT need to change any code for application. all we have to do is to build ros_comm package and install it on target device.

thanks

2 Likes

Great. Thanks for the additional explanation.

1 Like

We are very interested in Noetic support for Unix Domain Sockets! Thank you for developing and maintaining the branches, as it’s tremendously beneficial when running on a centralized host.

1 Like

we decided we are gonna do this. we are still working on this, hope we can release noetic branch for Unix Domain Socket soon.

7 Likes

Hi All

Unix Domain Socket Support for Noetic Branch is ready.

if you find problems or issues, let us know :exclamation:

@Barry_Xu thanks for the PR :+1:

6 Likes

Hi ROS 1 users,

I was at ROSCon 2022 @ Kyoto, Japan as a member of Organization Committee and Programming Committee, and just realized that there were many presentations and user application that uses ROS 1 (not ROS 2) for R&D and production support.

Sony is one of the ROS 1 users with following productions.

  • Sony Airpeak S1 Drone
  • Sony poiq

That brought me to come back to this thread to who those do not know Unix Domain Socket feature, which is not integrated in mainline but you can pull the following repository and build&run.

melodic and kinetic are also supported, please see the 1st post on this thread for detail.