-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Poor performance of ROS1 Node compared to OrbeccViewer #53
Comments
hi @marcomasa In the OrbeccViewer, the software directly accesses and renders the data with minimal overhead, which allows it to handle high-resolution streams like 4K and depth images efficiently, maintaining stable frame rates. On the other hand, the ROS1 node introduces additional overhead related to data transmission, such as publishing and subscribing to topics. This includes serialization, deserialization, and the time it takes to transmit data between processes, which can contribute to performance issues, especially at higher resolutions. The frame freezes and instability you're observing could be due to these transmission overheads and potentially how ROS handles the processing pipeline in your specific setup. If performance is critical, optimizing the ROS pipeline, reducing message sizes, and offloading heavy computations outside ROS nodes could help mitigate some of these issues. |
Thank you for the details! I noticed that the output format of recordings with the Windows Orbecc Viewer are still ROS1 bags, This would (for the while) be a valid alternative for my use case, but unfortunately there is Is it planned to add this option to the standalone viewer? |
Just some hints, not all may apply to to your case. If you look at example sensor workflow, say Femto Bolt Data from sensorNative data at higher resolutions is MJPEG: ROS driverThis data is decompressed by ROS driver
If you are lucky (Nvidia or Rockchip) you may try using hardware decoder:
ROS driver workflowIf you try to record in ROS compressed data through image_transport (like
Unless care has been taken by ROS driver writer:
On the other hand If you try to record in uncompressed format
What might be doneYou might shortcut ROS driver to publish MJPEG data directly (this is like
You might also try to decouple compression from driver by image_transport republish. Finally using nodelets instead of nodes may eliminate some unnecessary data transmission At higher resolutions those are really huge amounts of data
Higher resolutions in video processing are generally not suitable for uncompressed transmission/storage. Unless you are careful, it is very easy to have bottleneck in the workflow. |
Hi @bmegli ! First of all, thank you so much for your detailed input!
Regarding the HW decoding flags, I unfortunately do not run the camera with a Jetson or Rockchip HW board,
I am actually recording non-compressed data at the moment.
Do you have the lines / the timing somewhere available ? :)
I will try setting up launchfiles for that. I think orbecc already provides the nodelets in general, but I have not seen any launching configurations in the repo. |
I am unsure how to describe this perfectly, but I am noticing incredibly large performance differences between the ROS1 node and the standalone OrbeccViewer.
In the OrbeccViewer, I am able to effortlessly stream 4K color and max res. depth images, merge them to a PCL and have somewhat stable 30fps throughout the session.
When I launch the minimal configuration (1280x720), I get very unstable recordings (on various machines) and even complete frame freezes for certain scenes. Is this a known issue?
The text was updated successfully, but these errors were encountered: