How to achieve the highest acquisition frame rate and lowest latency?

General Information

  • Product: X30-5CP
  • Serial Number: 204953/204921/204920
  • Ensenso SDK Version: 3.1.996
  • Operating System: Windows 10 IOT LSTC 2021 x64

Problem / Question

Our application scenario is:

Use three 5MP cameras installed in different spatial positions.
image

They use hard triggering to capture images simultaneously, and then calculate disparity map and generate point cloud. Each X30 camera uses two independent network cables for data/signal communication.

But the refresh frame rate of their work together is too slow, especially when AOI is not set, 1s usually has only 1~2 frames, and the point cloud display has a high delay (usually about 1s).

We have studied many methods but have not been able to achieve a breakthrough in performance. Increasing Binning=2 or 4 is currently use, but it will sacrifice accuracy.

Attachement

  • Workstation specification

    • Processor: Intel Xeon processors W-2245 (8C 3.9GHz 4.7GHz Turbo HT 16.5MB, 155W DDR4-2933)
    • Internal storage: 16GB (2x8GB) DDR4 2666MHz RDIMM EC
    • Hard disk: M.2 256GB PCIe NVMe Class 40 Solid state disk
      3.5 inches 2TB 7200rpm SATA AG-Enterprise hard disk
    • GPU: Nvidia RTX A4000, 16GB, 4DP
  • File cameras


Could you give us advice?

With best regards,
Charley Choi

If the parameters in the file cameras are the ones that you use in your application I already noticed the following:

  • Bandwidth Limit is set to 1000, even though you said you have two cables for each camera. In this case it should be set to 2000 or automatic distribution of the bandwidth should be enabled in the Open command.
  • MedianFilterRadius is set to 9, which might be slow. This algorithm doesn’t scale very well for a large radius.

For further analysis we have to find out what exactly is taking so long in your case. Could you please create a log from your application using the following steps and post it here?

Steps to create a log
  • In your application use nxlibOpenTcpPort to start a server to which NxTreeEdit can connect.
  • Open NxTreeEdit.
  • Connect to your application. Make sure to connect to the correct process. If e.g. NxView is running in the background it will also show up in the list of NxLib instances.
  • Open the debug tab at the bottom of the NxTreeEdit window.
  • Select “Trace” as the debug level.
  • Start the debugging.
  • Trigger some frames in your application.
  • Stop the debugging and open or copy the resulting file.

There are also the following guides in the manual which might help you: