ZED X on AGX Orin capped at 30 FPS even when requesting 60FPS

I have been working on a script to store and share images directly to and from a GPU ring buffer in C++ and noticed that the output was always being limited to 30fps.

My setup:

  • Single ZED X on AGX Orin 64 GB (maxn power mode)
  • ZED Link Quad with driver v1.2.2
  • ZED SDK v4.2

To be sure its not my code post grab causing the issue, I commented out all the processing after zed.grab() (That processing only took ~0.05ms) and only timed the grab call and it was always waiting for 33ms even when I explicitly request 60 fps.

I tried RESOLUTION::SVGA, DEPTH_MODE::PERFORMANCE, DEPTH_MODE::NONE and saw no difference. This makes no sense as I’m sure I saw 60 fps output was using ZED SDK in python before this. I was using setFromStream() instead of setFromSerialNumber(). Would that cause this issue?

I am not sure what mistake I am making. I would really appreciate any help.
FYI : I also used jetson_clocks but it made no difference.

[2025-05-07 09:12:55 UTC][ZED][INFO] Logging level INFO
[2025-05-07 09:12:56 UTC][ZED][INFO] Logging level INFO
[2025-05-07 09:12:56 UTC][ZED][INFO] [Init]  Depth mode: NEURAL
[2025-05-07 09:12:59 UTC][ZED][INFO] [Init]  Camera FW version: 2001
[2025-05-07 09:12:59 UTC][ZED][INFO] [Init]  Video mode: HD1080@60
[2025-05-07 09:12:59 UTC][ZED][INFO] [Init]  Serial Number: S/N 47900332
[2025-05-07 09:13:00 UTC][ZED][WARNING] [Init]  Self-calibration failed. Point the camera towards a more textured and brighter area. Avoid objects closer than 1 meter (Error code: 0x01) 
[Producer] Camera opened
[04:13:00.459] LOOP TOOK 37.05 ms (frame 0)
[04:13:00.464] LOOP TOOK 5.291 ms (frame 1)
[04:13:00.489] LOOP TOOK 24.513 ms (frame 2)
[04:13:00.522] LOOP TOOK 32.467 ms (frame 3)
[04:13:00.555] LOOP TOOK 33.552 ms (frame 4)
[04:13:00.588] LOOP TOOK 32.431 ms (frame 5)
[04:13:00.621] LOOP TOOK 33.321 ms (frame 6)
[04:13:00.655] LOOP TOOK 33.603 ms (frame 7)
[04:13:00.687] LOOP TOOK 32.1 ms (frame 8)
[04:13:00.721] LOOP TOOK 33.201 ms (frame 9)
[04:13:00.755] LOOP TOOK 33.89 ms (frame 10)

This is the code I used :

void FrameProducer::run() {
    cudaSetDevice(0);

    // Init ZED
    sl::InitParameters params;
    params.camera_resolution          = sl::RESOLUTION::HD1080;
    params.camera_fps                 = 60.0;
    params.depth_mode                 = sl::DEPTH_MODE::NEURAL;
    params.depth_stabilization        = 0;
    params.depth_minimum_distance     = 1.2f;
    params.depth_maximum_distance     = 40.0f;
    params.coordinate_units           = sl::UNIT::METER;
    params.coordinate_system          = sl::COORDINATE_SYSTEM::RIGHT_HANDED_Z_UP_X_FWD;
    params.sdk_verbose                = 1;
    params.input.setFromSerialNumber(zed_serial_);
    params.open_timeout_sec           = -1.0f;
    params.async_grab_camera_recovery = true;

    if (zed_.open(params) != sl::ERROR_CODE::SUCCESS) {
        std::cerr << "[" << timestamp() << "][Producer] Failed to open ZED camera\n";
        return;
    }
    std::cout << "[Producer] Camera opened\n";

    // Capture loop
    while (running_.load()) {

        auto loop_start = std::chrono::high_resolution_clock::now();

        if (zed_.grab() != sl::ERROR_CODE::SUCCESS) {
            continue;
        }

        /*
        Contained code to save retrieved image and depth data to GPU buffer that took <<1ms to run. 
        Was also commented out during testing the FPS issue.
        */

        auto loop_end = std::chrono::high_resolution_clock::now();
        auto loop_time = std::chrono::duration_cast<std::chrono::microseconds>(loop_end - loop_start).count();
        std::cerr << "[" << timestamp() << "] LOOP TOOK " << loop_time / 1000.0 << " ms (frame " << fn << ")\n";

    }

    zed_.close();
}
auto cam_info = zed_.getCameraInformation();
std::cerr << "[" << timestamp() << "] [Producer] SDK reported FPS: " << cam_info.camera_configuration.fps << "\n";

This always returns reported fps as 60.

@Myzhar / @BenjaminV can you please point to something obvious I could be missing? am I just supposed to expect this performance on the best possible hardware?

Edit: My driver version was v1.3.0 and I’m using Jetpack 6.2 (L4T r36.4.0)
Edit 2: Even rolling back to v1.2.2 doesn’t seem to help.

Please look at these logs and help me understand whats going on.

  • SVGA@120 is giving me a frame every 16ms
[2025-05-08 21:41:13 UTC][ZED][INFO] Logging level INFO
[2025-05-08 21:41:13 UTC][ZED][INFO] [Init] Depth mode: PERFORMANCE
[2025-05-08 21:41:16 UTC][ZED][INFO] [Init] Camera FW version: 2001
[2025-05-08 21:41:16 UTC][ZED][INFO] [Init] Video mode: SVGA@120
[2025-05-08 21:41:16 UTC][ZED][INFO] [Init] Serial Number: S/N 47900332
[INFO] ZED Camera successfully opened!
[info] zed.grab()_time: 0.018179 seconds
[info] zed.grab()_time: 0.001023 seconds
[info] zed.grab()_time: 0.004116 seconds
[info] zed.grab()_time: 0.015801 seconds
[info] zed.grab()_time: 0.016676 seconds
[info] zed.grab()_time: 0.016438 seconds
[info] zed.grab()_time: 0.017181 seconds
  • SVGA@60 is giving me a frame every 33ms
[2025-05-08 21:41:37 UTC][ZED][INFO] Logging level INFO
[2025-05-08 21:41:37 UTC][ZED][INFO] [Init] Depth mode: PERFORMANCE
[2025-05-08 21:41:40 UTC][ZED][INFO] [Init] Camera FW version: 2001
[2025-05-08 21:41:40 UTC][ZED][INFO] [Init] Video mode: SVGA@60
[2025-05-08 21:41:40 UTC][ZED][INFO] [Init] Serial Number: S/N 47900332
[INFO] ZED Camera successfully opened!
[info] zed.grab()_time: 0.018834 seconds
[info] zed.grab()_time: 0.004894 seconds
[info] zed.grab()_time: 0.032851 seconds
[info] zed.grab()_time: 0.033595 seconds
[info] zed.grab()_time: 0.033157 seconds
[info] zed.grab()_time: 0.033423 seconds
  • SVGA@30 also gives me a frame every 33ms
[2025-05-08 21:41:56 UTC][ZED][INFO] [Init] Depth mode: PERFORMANCE
[2025-05-08 21:41:59 UTC][ZED][INFO] [Init] Camera FW version: 2001
[2025-05-08 21:41:59 UTC][ZED][INFO] [Init] Video mode: SVGA@30
[2025-05-08 21:41:59 UTC][ZED][INFO] [Init] Serial Number: S/N 47900332
[INFO] ZED Camera successfully opened!
[info] zed.grab()_time: 0.015839 seconds
[info] zed.grab()_time: 0.000988 seconds
[info] zed.grab()_time: 0.022451 seconds
[info] zed.grab()_time: 0.033154 seconds
[info] zed.grab()_time: 0.032956 seconds
[info] zed.grab()_time: 0.032929 seconds
[info] zed.grab()_time: 0.033076 seconds

When using NEURAL depth mode, ~30 FPS is the expected throughput.

Please check your loop frequency code calculation because you are measuring the duration of each loop, not the grab frequency.

You can easily get the real grab frequency by using the getCurrentFPS API function.

Hi @Myzhar thanks for the reply.

As you can see, I did try depth mode NONE and PERFORMANCE.
I was also just timing the zed.grab() function not the loop. I did however use get_current_fps and I see no difference.

HD1080@60 with PERFORMANCE:

[2025-05-09 19:30:29 UTC][ZED][INFO] [Init]  Depth mode: PERFORMANCE
[2025-05-09 19:30:33 UTC][ZED][INFO] [Init]  Camera FW version: 2001
[2025-05-09 19:30:33 UTC][ZED][INFO] [Init]  Video mode: HD1080@60
[2025-05-09 19:30:33 UTC][ZED][INFO] [Init]  Serial Number: S/N 47900332
[INFO] ZED Camera successfully opened!
Current framerate: 0.00        Frame_time: 0.018 seconds
Current framerate: 55.56        Frame_time: 0.004 seconds
Current framerate: 90.91        Frame_time: 0.022 seconds
Current framerate: 68.18        Frame_time: 0.017 seconds
Current framerate: 65.57        Frame_time: 0.033 seconds
Current framerate: 53.19        Frame_time: 0.033 seconds
Current framerate: 47.24        Frame_time: 0.033 seconds
Current framerate: 43.75        Frame_time: 0.033 seconds
Current framerate: 41.24        Frame_time: 0.033 seconds
Current framerate: 39.65        Frame_time: 0.033 seconds
Current framerate: 38.46        Frame_time: 0.033 seconds
Current framerate: 36.36        Frame_time: 0.033 seconds
Current framerate: 32.79        Frame_time: 0.033 seconds
Current framerate: 31.65        Frame_time: 0.033 seconds
Current framerate: 30.03        Frame_time: 0.033 seconds

HD1080@60 with NONE:

[2025-05-09 19:30:45 UTC][ZED][INFO] [Init]  Depth mode: NONE
[2025-05-09 19:30:50 UTC][ZED][INFO] [Init]  Camera FW version: 2001
[2025-05-09 19:30:50 UTC][ZED][INFO] [Init]  Video mode: HD1080@60
[2025-05-09 19:30:50 UTC][ZED][INFO] [Init]  Serial Number: S/N 47900332
[INFO] ZED Camera successfully opened!
Current framerate: 0.00        Frame_time: 0.005 seconds
Current framerate: 200.00        Frame_time: 0.011 seconds
Current framerate: 125.00        Frame_time: 0.032 seconds
Current framerate: 62.50        Frame_time: 0.033 seconds
Current framerate: 48.78        Frame_time: 0.033 seconds
Current framerate: 43.48        Frame_time: 0.034 seconds
Current framerate: 40.54        Frame_time: 0.033 seconds
Current framerate: 38.67        Frame_time: 0.017 seconds
Current framerate: 40.40        Frame_time: 0.033 seconds
Current framerate: 38.96        Frame_time: 0.033 seconds
Current framerate: 37.74        Frame_time: 0.034 seconds
Current framerate: 34.13        Frame_time: 0.033 seconds
Current framerate: 31.65        Frame_time: 0.033 seconds

SVGA@120 with PERFORMANCE:

[2025-05-09 19:30:04 UTC][ZED][INFO] [Init]  Depth mode: PERFORMANCE
[2025-05-09 19:30:07 UTC][ZED][INFO] [Init]  Camera FW version: 2001
[2025-05-09 19:30:07 UTC][ZED][INFO] [Init]  Video mode: SVGA@60
[2025-05-09 19:30:07 UTC][ZED][INFO] [Init]  Serial Number: S/N 47900332
[INFO] ZED Camera successfully opened!
Current framerate: 0.00        Frame_time: 0.019 seconds
Current framerate: 52.63        Frame_time: 0.002 seconds
Current framerate: 90.91        Frame_time: 0.015 seconds
Current framerate: 81.08        Frame_time: 0.016 seconds
Current framerate: 74.07        Frame_time: 0.017 seconds
Current framerate: 71.43        Frame_time: 0.017 seconds
Current framerate: 68.97        Frame_time: 0.016 seconds
Current framerate: 65.79        Frame_time: 0.017 seconds
Current framerate: 60.24        Frame_time: 0.016 seconds
Current framerate: 59.88        Frame_time: 0.016 seconds
Current framerate: 60.24        Frame_time: 0.017 seconds
Current framerate: 59.88        Frame_time: 0.017 seconds

Code I used:

import sys
import argparse
import cv2
import numpy as np
import pyzed.sl as sl
import time

def setup_zed_camera(max_retries=100, retry_delay=3):
    init = sl.InitParameters(camera_resolution=sl.RESOLUTION.SVGA,
                             depth_mode=sl.DEPTH_MODE.PERFORMANCE,
                             coordinate_units=sl.UNIT.METER,
                             camera_fps= 120,
                             depth_minimum_distance=1.0,
                             depth_maximum_distance=40,
                             depth_stabilization=0,
                             coordinate_system=sl.COORDINATE_SYSTEM.RIGHT_HANDED_Z_UP_X_FWD)
    
    zed = sl.Camera()
    retry_count = 0

    while retry_count < max_retries:
        if zed.open(init) == sl.ERROR_CODE.SUCCESS:
            zed.set_camera_settings(sl.VIDEO_SETTINGS.LED_STATUS, 1)
            print("[INFO] ZED Camera successfully opened!")
            return zed
        else:
            print(f"[WARNING] Failed to open ZED Camera. Retrying in {retry_delay} seconds...")
            time.sleep(retry_delay)
            retry_count += 1

    print("[ERROR] Unable to establish connection with ZED Camera after multiple attempts.")
    zed.close()
    sys.exit(1)

# Initialize ZED
zed = setup_zed_camera()
runtime_parameters = sl.RuntimeParameters()

image = sl.Mat()

try:
    while True:
        start_time = time.time()
        if zed.grab(runtime_parameters) == sl.ERROR_CODE.SUCCESS:
            zed.retrieve_image(image, sl.VIEW.LEFT)
            current_fps = zed.get_current_fps()
            end_time = time.time()
            print(f"Current framerate: { current_fps:.2f}","      ",f'Frame_time: {(end_time - start_time):.3f} seconds')

except KeyboardInterrupt:
    print("Interrupted. Cleaning up...")

zed.close()

@Myzhar can you please help me. This is actually concerning!

Same script as above, after using the cameras for some time today and giving 30 fps now dropped to 15 fps. Restarting nvargus and zed x daemon also dont help. complete restarts dont help. I am not sure whats failing so consistently to keep slashing my FPS by a factor of 2.

[2025-05-13 06:29:10 UTC][ZED][INFO] Logging level INFO
[2025-05-13 06:29:10 UTC][ZED][INFO] Logging level INFO
[2025-05-13 06:29:10 UTC][ZED][INFO] Logging level INFO
[2025-05-13 06:29:11 UTC][ZED][INFO] [Init]  Depth mode: PERFORMANCE
[2025-05-13 06:29:15 UTC][ZED][INFO] [Init]  Camera FW version: 2001
[2025-05-13 06:29:15 UTC][ZED][INFO] [Init]  Video mode: HD1080@30
[2025-05-13 06:29:15 UTC][ZED][INFO] [Init]  Serial Number: S/N 47900332
[INFO] ZED Camera successfully opened!
Current framerate: 0.00        Frame_time: 0.046 seconds
Current framerate: 21.74        Frame_time: 0.022 seconds
Current framerate: 29.41        Frame_time: 0.065 seconds
Current framerate: 22.56        Frame_time: 0.070 seconds
Current framerate: 19.70        Frame_time: 0.065 seconds
Current framerate: 18.66        Frame_time: 0.068 seconds
Current framerate: 17.80        Frame_time: 0.064 seconds
Current framerate: 17.46        Frame_time: 0.065 seconds
Current framerate: 17.13        Frame_time: 0.069 seconds
Current framerate: 16.82        Frame_time: 0.063 seconds
Current framerate: 16.69        Frame_time: 0.069 seconds
Current framerate: 16.08        Frame_time: 0.067 seconds
Current framerate: 15.02        Frame_time: 0.066 seconds
Current framerate: 14.97        Frame_time: 0.034 seconds

Hi @auc7us
can you please verify if the problem persists if you install the ZED SDK v5.0 EA?

Hi @Myzhar ,

After upgrading to the latest SDK, my original issue seems to be resolved — I’m now getting 50–60 FPS with NEURAL@1080, which is great! I’ve capped it at 1080@30, NEURAL in my code as per your earlier recommendation.

To prevent further SDK-related issues, I’ve containerized my setup. I’m using ZED_Diagnostic --cli inside the container to verify ZED X access.

However, I’ve started running into a new problem:
I’m frequently seeing “Camera Not Detected” errors.

What I’ve Tried (unsuccessfully):

  • Restarting nvargus-daemon
  • Restarting zed_x_daemon
  • Rebooting Jetson via CLI (sudo reboot)

Different ZED_Diagnostic results :

ZED_Diagnostic_Results.json (24.4 KB)

This is another result I frequently encounter :

- Running ZED SDK Diagnostic : OK  
    ZED SDK version: 5.0.0
    CUDA version: V12.6.68
- Running Processor Diagnostic : OK  
    Processor:   ARMv8 Processor rev 1 (v8l)
    Motherboard:  Jetson, NVIDIA
Error: unable to open display stic : 50%
- Running Graphics Card Diagnostic : OK  
    Graphics card:  Orin
- Running AI Models Diagnostic : OK  
    MULTI CLASS DETECTION is not optimized
    MULTI CLASS MEDIUM DETECTION is not optimized
    MULTI CLASS ACCURATE DETECTION is not optimized
    HUMAN BODY FAST DETECTION is not optimized
    HUMAN BODY MEDIUM DETECTION is not optimized
    HUMAN BODY ACCURATE DETECTION is not optimized
    HUMAN BODY 38 FAST DETECTION is not optimized
    HUMAN BODY 38 MEDIUM DETECTION is not optimized
    HUMAN BODY 38 ACCURATE DETECTION is not optimized
    PERSON HEAD DETECTION is not optimized
    PERSON HEAD ACCURATE DETECTION is not optimized
    REID ASSOCIATION is not optimized
    NEURAL LIGHT DEPTH is optimized
    NEURAL DEPTH is optimized
    NEURAL PLUS DEPTH is optimized
nvbuf_utils: dmabuf_fd -1 mapped entry NOT found
nvbuf_utils: dmabuf_fd -1 mapped entry NOT found
(Argus) Error Timeout:  (propagating from src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 137)
(Argus) Error Timeout:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 92)
(Argus) Error FileOperationFailed: Failed socket read: Connection reset by peer (in src/rpc/socket/common/SocketUtils.cpp, function readSocket(), line 79)
(Argus) Error FileOperationFailed: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 277)
(Argus) Error FileOperationFailed: Receive worker failure, notifying 2 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 350)
(Argus) Error InvalidState: Argus client is exiting with 2 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 366)
(Argus) Error FileOperationFailed: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 379)
(Argus) Error FileOperationFailed: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 145)
(Argus) Error FileOperationFailed:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 92)
(Argus) Error BadParameter:  (propagating from src/eglstream/FrameConsumerImpl.cpp, function acquireFrame(), line 265)
(Argus) Error BadParameter:  (propagating from src/eglstream/FrameConsumerImpl.cpp, function acquireFrame(), line 249)
(Argus) Error BadParameter:  (propagating from src/eglstream/FrameConsumerImpl.cpp, function acquireFrame(), line 249)
(Argus) Error BadParameter:  (propagating from src/eglstream/FrameConsumerImpl.cpp, function acquireFrame(), line 249) 

Hi @auc7us
This is a stability issue with the ZED SDK v5.0 that is in the Early Access stage.
The fix will be released soon with v5.0.1.