ZED SDK 5.2

Release notes of the ZED SDK 5.2.x series
Open in ClaudeOpen in ChatGPT

Release notes of the ZED SDK 5.2 series. Patch releases are listed newest first. Download links and the full changelog, including ZED Tools and integrations, are available on the ZED SDK 5.2 release page.

What’s New

ZED SDK 5.2 delivers major performance gains on Jetson with up to 85% lower CPU load, improved GMSL driver reliability at 200 Hz IMU rate, and sharper images in low-resolution modes. It adds support for an advanced zero-copy NV12 interface on Jetson.

This release also introduces the new beta Sensors API (sl::Sensors), a unified interface for managing ZED cameras and Ouster LiDAR devices in a single pipeline, replacing the need for separate APIs and custom fusion code.

This release adds support for JetPack 7.1 / L4T 38.4, unlocking hardware video encoding and decoding on Jetson Thor. Alongside these platform updates, version 5.2 brings important improvements to positional tracking robustness and the Python API, as well as numerous other bug fixes and feature enhancements across the SDK.

5.2.3

Released: Mar 26, 2026

SDK

  • Fixed compatibility with newer NVIDIA GPU driver versions (v590+) on Desktop that prevented hardware encoding and decoding, which made recording and streaming modules unusable.
  • Fixed a regression in uncalibrated mode causing invalid behavior. This feature was introduced in ZED SDK 5.1 and can be enabled with export ZED_SDK_ALLOW_UNCALIBRATED_MODE=1, mainly for virtual stereo camera recording.

5.2.2

Released: Mar 13, 2026

SDK

  • Fixed getTimestamp(sl::TIME_REFERENCE::IMAGE) occasionally returning duplicate timestamps when multiple GMSL cameras (Camera and CameraOne) grab concurrently on separate threads. This was a regression introduced in 5.2.
  • Fixed a deadlock when retrieving views that are unavailable (e.g. sl::VIEW::NORMALS_RIGHT with InitParameters::enable_right_side_measure set to false).
  • Fixed a rare deadlock that could occur when calling Camera::grab() and Camera::disablePositionalTracking() simultaneously.

Platform

  • Added support for Jetson L4T 36.5 / JetPack 6.2.2.

5.2.1

Released: Mar 2, 2026

SDK

General

  • Fixed Camera::retrieveImage and CameraOne::retrieveImage with NV12 views and when using default resolution: it now correctly uses the camera resolution instead of requesting the user to manually set it.
  • Fixed an issue where ZED2/ZED2i could report locked positional tracking information.
  • Fixed Sensors::enableObjectDetection to work without explicitly setting fused_objects_group_name in sl::ObjectDetectionSensorsParameters. A default group name is now used automatically when the field is left empty, simplifying setup for single fused group configurations. Setting a custom name is still required when using multiple fused groups.
  • Fixed RawBuffer::getWidth() and RawBuffer::getHeight() always returning 0 when using Camera::retrieveImage(RawBuffer&). The buffer metadata now correctly reports the camera capture resolution.
  • Set GEN_3 as the global default positional tracking mode. Applied consistency fixes to C++/C#/Python parameters and remaining samples where this was previously omitted.
  • Negative ERROR_CODE results during module enabling are now correctly logged as warnings, consistent with grab() error handling.
  • Fixed a rare lock that could appear using Camera::grab() when corrupted frame detector was enabled.
  • Fixed an issue leading to the left and right buffer being swapped in RawBuffer retrieval for ZED X camera.
  • Reduced SDK memory usage per camera instance (up to 40MB savings).
  • Fixed CameraOne::retrieveImage behavior for VIEW::LEFT_UNRECTIFIED, which previously returned the rectified image in 5.2.0.
  • Fixed an issue where GMSL2 cameras could stay in state sl::CAMERA_STATE::REBOOTING indefinitely.
  • Fixed an opening issue with ZED X One UHD cameras in QHDPLUS mode.
  • Disabled gamma compensation for ZED X One UHD camera as it conflicts with ISP.

Streaming

  • Fixed streaming corruption and flickering caused by control packets being mixed into the video data stream during frame reassembly.
  • Fixed incorrect auto-exposure/auto-gain ROI for the right sensor on dual-sensor cameras (ZED X, ZED X Mini).
  • Fixed the sender reporting wrong exposure/gain range values for the secondary sensor (right) on stereo cameras.
  • Fixed an issue leading to the left and right images being swapped for ZED X camera, leading to corrupted depth map and warning about potential calibration issue.
  • Fixed a memory leak when streaming reception times out.
  • Fixed potential hang when closing a streaming receiver.

Object Detection

  • Fixed CustomObjectDetectionRuntimeParameters per-class properties not working with custom object detection models (ingestCustomBoxObjects and ingestCustomMaskObjects). Per-class properties (confidence threshold, is_grounded, tracking parameters, class filtering, etc.) are now correctly applied when using CUSTOM_BOX_OBJECTS with retrieveCustomObjects.
  • Fixed Sensors::enableObjectDetection to return SENSORS_ERROR_CODE::INVALID_FUNCTION_PARAMETERS when using Sensors::enableObjectDetection without adding at least one valid camera beforehand. If at least one camera was added, the behavior remains the same: leaving ObjectDetectionSensorsParameters::sensors_ids empty still enables object detection with all available cameras.
  • Updated documentation and samples to reflect YOLO26 support. YOLO26’s default end-to-end output (1×300×6) and one-to-many output (1×(nc+4)×8400) are handled by the existing custom ONNX detector pipeline.
  • Fixed random erroneous position estimation with Positional Tracking GEN_3 when Object Detection is enabled.

SLAM

  • Reduced the memory footprint of sl::POSITIONAL_TRACKING_MODE::GEN_3 by up to 80%, specifically when enable_area_memory is disabled.
  • Fixed random deadlock occurring in low-texture environments when enable_2d_ground_mode was enabled.
  • Fixed a rare crash in Camera::saveAreaMap() that could occur when closing the camera while a save operation was still in progress. Thread synchronization and pointer safety have been strengthened to prevent any concurrent access issues.
  • Fixed a rare crash that could occur when enable_imu_fusion was set to false.

5.2.0

Released: Feb 10, 2026

SDK

General

  • Reduced CPU load by 51–85% and grab latency by 5–45% on Jetson AGX (benchmarked with 1× to 8× GMSL cameras, SVGA to HD1200, with and without Neural depth and streaming/recording). Memory usage reduced by up to 28% in multi-camera configurations.
  • Added getCudaStream() to sl::CameraOne to match the sl::Camera API, enabling unified CUDA stream management.
  • Added sdk_gpu_id to InitParametersOne.
  • Fixed a lock that could happen when disabling depth with runtime parameters.
  • grab() now returns CORRUPTED_FRAME only for actual image corruption (green/purple images). Other quality issues (lens obstruction, stereo mismatch, blur, low light) now return SUCCESS.
  • Fixed sl::CameraConfiguration::fps not correctly returning the user-requested frame rate on Windows.
  • Deprecated the InitParameters::async_image_retrieval parameter; it no longer has any effect.
  • Added methods sl::Camera::retrieveTensor and sl::CameraOne::retrieveTensor to retrieve an sl::Tensor, containing the input image pre-processed for inference with SVO or live camera. This method works with sl::TensorParameters to define input options for deep learning inference. Refer to Tutorial 12 for usage examples.
  • Updated convertCoordinateSystem and convertUnit to accept cudaStream_t as an argument, facilitating operations on GPU memory sl::Mat objects.
  • Added applyTransform to apply a rotation and translation to a point cloud matrix.
  • Standardized default compression mode to H.265 for both streaming and recording.

Capture

  • Improved image processing for low-resolution modes, resulting in significantly sharper images and reduced blur.
  • Improved capture stability under high load and high FPS scenarios.
  • Introduced InputType::setFromGMSLPort(int gmsl_port) to open GMSL cameras based on their physical connection, useful for static production rigs where wiring remains constant even if serial numbers change.
  • Added NV12 to MAT_TYPE and LEFT_NV12_UNRECTIFIED / RIGHT_NV12_UNRECTIFIED to VIEW. These new views enable requesting an NV12 sl::Mat via Camera::retrieveImage or CameraOne::retrieveImage.
  • Fixed opening GMSL cameras in parallel with different processes.

Zero-Copy Capture (Jetson Only)

For Advanced Users Only: Introduced the RawBuffer API, enabling zero-copy access to native camera capture buffers (NvBufSurface / Argus) in NV12 format.

  • Eliminates memory copies when passing camera data to custom TensorRT, Argus, or NVMM pipelines.
  • Uses RAII; the buffer is automatically released when RawBuffer goes out of scope.
  • Improper use (such as manual destruction of the NvBufSurface) can crash the Argus stack or destabilize the system.
  • Requires defining SL_ENABLE_ADVANCED_CAPTURE_API at compilation.

Driver

  • Integration of Driver v1.4.0 is now required for improved GMSL stability.
  • Standardized IMU rate to 200 Hz for guaranteed reliability (requires driver 1.4.0+), significantly reducing inter-sample jitter. In 8-camera setups, IMU rate spread improved from ~11 Hz (185–197 Hz) to < 1 Hz (199.5–200 Hz).
  • Fixed data drop issues in complex setups involving 8+ IMUs.
  • Unplugging a GMSL camera now correctly triggers a CAMERA_DISCONNECTED error (requires driver 1.4.0+).
  • GMSL cameras experiencing micro-disconnections now correctly report CAMERA_DISCONNECTED error (requires driver 1.4.0+).

Streaming

  • Added getStreamingDeviceList() static method to CameraOne.
  • Fixed an issue where Camera::getStreamingDeviceList() would incorrectly report CameraOne devices.
  • Added camera_model property to StreamingProperties.
  • Fixed a use-after-free that could occur on some devices when a ZED streaming connection timed out during initialization.

Recording

  • Added a return error code in sl::Camera::setSVOPosition and sl::CameraOne::setSVOPosition methods.
  • Fixed an IMU read issue that could prevent positional tracking from fusing IMU data in rare cases.
  • Fixed an issue in setSVOPosition that could prevent seeking to the final frame of an SVO file.

SLAM

  • GEN_3 is now the default positional tracking mode.
  • Enhanced tracking stability in dark or poorly lit environments.
  • Fixed a bug where covariance values would erroneously increase while the camera was stationary.
  • Added sl::KeyFrame class to expose internal frames used for graph and map creation.

Object Detection

  • Added new fine-tuning controls per class in ObjectTrackingParameters:
    • velocity_smoothing_factor: Tunes the “jitter” of bounding box velocity.
    • min_velocity_threshold: Clamps low-speed movement to zero.
    • prediction_timeout_s: Duration to predict a path after losing sight of an object.
    • min_confirmation_time_s: Required “alive” time before a track is validated.
  • Improved numerical stability to prevent random ID swaps during tracking.

New Beta Sensors API: Ouster LiDAR and ZED Cameras in a Unified API

The Sensors API (sl::Sensors) is a major new addition that provides a single, unified interface for managing heterogeneous sensor systems (ZED stereo cameras, ZED One monocular cameras, and Ouster Lidar devices), eliminating the need for separate APIs and manual coordination. This is an addition to the existing API, the original Camera and CameraOne classes are still supported and improved.

  • Natively combine ZED cameras and Lidar devices in a single coordinated pipeline via sensors.add(). Previously, Lidar integration required external libraries and custom fusion code.
  • A single sensors.add() call works for any ZED model (ZED 2, ZED 2i, ZED X, ZED X One). The SDK auto-detects the camera type, so there is no need to choose between sl::Camera and sl::CameraOne.
  • Set sensor poses with sensors.setSensorPose() and retrieve data in any reference frame (SENSOR, BASELINK, or WORLD). Point clouds and images are automatically transformed.
  • The familiar read() + grab() separation now works across all sensors simultaneously, enabling custom inference between acquisition and SDK processing.
  • Retrieve data from all sensors in a single call using BatchedData<T> (e.g., sensors.retrieveImage(), sensors.retrieveMeasure()), returning a map of sensor identifiers to results.
  • sensors.syncSVO() automatically aligns SVO and OSF files to a common start timestamp for synchronized playback.
  • Configure which sensors participate in each Object Detection or Body Tracking instance via sensors_ids and instance_module_id, with separate fusion groups per sensor set.
  • A single sensors.enableRecording() call records all cameras (SVO) and Lidars (OSF) with synchronized timestamps.
  • sensors.getProcessErrorCodes() returns per-sensor error diagnostics using BatchedData<sl::ERROR_CODE>.
  • sensors.getHealthStatus() provides per-sensor health, temperature, and connection status.
  • Internally managed thread pool parallelizes grab, AI inference, and memory allocation across all sensors.
Migration
Use CaseRecommendation
Single ZED cameraContinue using sl::Camera
Single ZED OneContinue using sl::CameraOne
Multi-camera (cameras only)sl::Fusion still supported, sl::Sensors recommended
Any setup with LidarUse sl::Sensors (required) or the new sl::Lidar class
New multi-sensor projectsUse sl::Sensors

Platform

  • Added official support for JetPack 7.1 / L4T 38.4, unlocking hardware video encoding and decoding on Jetson Thor.
  • Added H.264 software (CPU) encoding for SVOs on Orin Nano, which has no hardware video encoder.
  • The H.265 software encoding is also supported but reserved for offline processing such as SVO frame extraction or conversion as it requires extensive compute and is unsuited for real time applications.
  • The SDK now automatically falls back to H.264 if H.265 is requested but unavailable. This is customizable via the environment variable ZED_SDK_H265_FALLBACK_MODE:
    • 0 (Default): Fallback to H.264
    • 1: Force x265 CPU encoding (High latency, intended for offline use).
    • 2: Return an error (No fallback).

Installer

  • Linux installer now supports custom paths via --install_path and ZED_DIR environment variables.