My question concerns on the recommended and most efficient way to share data between processes.
Given the popularity of ROS in robotics and autonomous driving community, I have seen in various posts that a generic publish/subscribe mechanism (as in ROS) is not supported officially by Nvidia (yet). Please correct me if I am wrong in that. For less demanding and critical applications, such a publish/subscribe mechanism may provide a suitable solution for a real time response in the vehicle.
However, for more demanding applications, (such as sharing image frames from 8 cameras to feed them in 4 or more applications or sharing LiDAR point cloud data to other applications) a generic publish/subscribe mechanism will inevitably introduce a computation cost.
I have looked into the solution of shared memory among application, (i.e. using functions such as shmat etc). However in the provided samples, a client/server socket IPC code is provided as a baseline, and to be honest I find the documentation on communicating among processes a bit abstract concerning to the other tutorials and modules. Reading throughout the various parts of IPC documentation, I think that such an IPC process is suggested only between two applications and not for more, i.e. a server is sending data to multiple clients. Please correct me if I misunderstood. Furthermore, in the IPC sample here: DriveWorks SDK Reference: Inter-process Communication (IPC) Sample
it is advised that the server should start first.
I would therefore like to ask you:
Given that the applications (perception applications, sensor fusion applications etc) will act both as servers for some cases and as clients for other, wouldn’t that cause issues when all applications are simultaneously initialized?
What is the recommended way for sharing “light” data, i.e. up to 10000 floats, among applications? I.e. these data could be lists of detected 3D objects for perception applications etc
What is the recommended way for sharing “heavy” data, i.e. around to 1000000+ floats, among applications? I.e. these data could be images, point clouds etc.
Is shared memory tested internally by Nvidia, and if so what are the recommended libraries to work with?
Thanks in Advance
Please provide the following info (check/uncheck the boxes after creating this topic):
DRIVE OS Linux 5.2.6
DRIVE OS Linux 5.2.6 and DriveWorks 4.0
DRIVE OS Linux 5.2.0
DRIVE OS Linux 5.2.0 and DriveWorks 3.5
NVIDIA DRIVE™ Software 10.0 (Linux)
NVIDIA DRIVE™ Software 9.0 (Linux)
other DRIVE OS version
Target Operating System
NVIDIA DRIVE™ AGX Xavier DevKit (E3550)
NVIDIA DRIVE™ AGX Pegasus DevKit (E3550)
SDK Manager Version
Host Machine Version
native Ubuntu 18.04