Image streaming or broadcasting to multiple nodes or functions

Hi all,

I am looking for advice on the following topic: Lets say I have 1 GMSL-Camera connected to the DRIVE AGX. I want to capture images and broadcast them to several “Nodes” i.e. functions like lane-detection, object detection etc. I want to run each of these functions separately but processing the same images from the single camera. Which is the best and most efficient way with DRIVEWORKS to do this? Are the image-streamer samples the way to go?

At best, I would want the same functionality like ROS. One node caputures the images from the camera, broadcasts a topic and multiple other nodes subscribe to that topic and apply their functions to it. I tried implementing it with ROS, but it gets very inefficient since you have to use OpenCV etc. and cross-compiling things gets quite messy rather quickly.

I hope someone can give me some advice.

Thanks!

Dear cshro,
For your requirement, image streamers can be used. Create a copy of the image and each producer has a copy of it to avoid multi threading issues. Please check image streamer sample and let us know if you have any issues.

Thanks for the response!

Do I understand correctly, that I would have to manually create a copy of the image for each consumer? Imagestreamer uses EGLStreams if I am not mistaken, do EGLStreams not support multi-consumer applications?

I found the camera-server/slave sample, first test seemed to work very good. Is there anything negative with using socket communication in this case? Should I prefer EGLStreams over IPC-tools?

Could you tell me how the transport of images to multiple consumers is done in the Roadrunner application? It seems to do exactly what I am looking to implement. Just looking for the most efficient way of doing it.

Thanks!

Dear cshro,

Do I understand correctly, that I would have to manually create a copy of the image for each consumer?

Yes. Each producer owns a copy of image to avoid multi threading issues.

EGLStreams not support multi-consumer applications?

Only single producer and single consumer is supported.

Using dwImagestreamer gives the flexibility to transport images across multiple APIs like NvMedia, CUDA, openGL. If you use any other way, you need to take care of it on your own.