The ZED cameras have no built-in GPS receiver. However, the ZED SDK natively supports the fusion of camera data with an external GNSS receiver through the Global Localization module, available since ZED SDK v4.0. This is the recommended solution; manual synchronization and custom Kalman filtering are no longer required.
Global Localization module
The ZED SDK's Global Localization module enables real-time camera tracking and localization in a global coordinate system by combining visual odometry with GNSS positioning. Localization is achieved by fusing data from three sources: stereo vision, IMU, and GNSS. The module also operates in GNSS-denied environments; when satellite data is unavailable or unreliable, visual-inertial odometry takes over, and GNSS corrects the drift that visual odometry accumulates over time.
The workflow is straightforward:
- Enable Positional Tracking on the ZED camera and start publishing the data to the Fusion module with
startPublishing(). - Initialize a
sl::Fusionobject, subscribe to the camera, and enable Fusion positional tracking withenable_GNSS_fusion = true. - Feed your GNSS receiver data (latitude, longitude, altitude, covariance, timestamp) to the Fusion module using
fusion.ingestGNSSData(). - Retrieve the fused global position with
fusion.getGeoPose(), or the local fused pose withfusion.getPosition().
Since every ZED frame is tagged with its epoch timestamp, the SDK performs a precise timestamp-based synchronization between the camera and the GNSS data, so you can tag each video frame with its corresponding geo-position.
Full documentation, including C++ and Python code walkthroughs:
- Global Localization Overview: https://www.stereolabs.com/docs/global-localization
- Setting up GNSS / RTK: https://www.stereolabs.com/docs/global-localization/using-gnss-linux/
- Data Synchronization: https://www.stereolabs.com/docs/global-localization/data-synchronization
- VIO / GNSS Calibration: https://www.stereolabs.com/docs/global-localization/vio-gnss-calibration
- Coordinate Systems: https://www.stereolabs.com/docs/global-localization/global-localization-coordinate-frames
- Troubleshooting: https://www.stereolabs.com/docs/global-localization/troubleshooting
Code samples
Complete Global Localization samples are available on GitHub: a Live sample fusing the ZED camera with an external GNSS sensor and displaying the geo-position on a real-world map, a Recording sample saving synchronized data to an SVO file and a JSON file, and a Playback sample replaying the recorded data offline:
https://github.com/stereolabs/zed-sdk/tree/master/global%20localization GitHub
ROS and ROS 2
If you are using ROS 2, the zed-ros2-wrapper natively supports GNSS fusion; you only need to provide a NavSatFix topic from your GNSS receiver:
https://www.stereolabs.com/docs/ros2/geo-tracking/