如何将外部 GPS 连接到 ZED 相机,以便为视频提供 GPS 标签?
Last updated: August 13, 2026
ZED 相机没有内置 GPS 接收器。不过,ZED SDK 原生支持通过全局定位模块将相机数据与外部 GNSS 接收器进行融合,该模块自 ZED SDK v4.0 起提供。这是推荐的解决方案;不再需要手动同步和自定义卡尔曼滤波。
全局定位模块
ZED SDK 的全局定位模块通过结合视觉里程计和 GNSS 定位,实现相机在全局坐标系中的实时追踪和定位。定位通过融合三种数据源实现:双目视觉、IMU 和 GNSS。该模块也可在 GNSS 不可用的环境中运行;当卫星数据不可用或不可靠时,视觉惯性里程计会接管工作,而 GNSS 则会校正视觉里程计随时间累积的漂移。
工作流程非常简单:
- 在 ZED 相机上启用位置追踪,并使用
startPublishing()开始向 Fusion 模块发布数据。 - 初始化一个
sl::Fusion对象,订阅相机,并通过enable_GNSS_fusion = true启用 Fusion 位置追踪。 - 使用
fusion.ingestGNSSData()将 GNSS 接收器数据(纬度、经度、高度、协方差、时间戳)传入 Fusion 模块。 - 使用
fusion.getGeoPose()获取融合后的全局位置,或使用fusion.getPosition()获取融合后的局部位姿。
由于每个 ZED 帧都带有其纪元时间戳,SDK 会在相机数据和 GNSS 数据之间执行基于时间戳的精确同步,因此您可以为每个视频帧标记其对应的地理位置。
完整文档,包括 C++ 和 Python 代码演示:
- 全球定位概述: https://www.stereolabs.com/docs/global-localization
- 设置 GNSS / RTK: https://www.stereolabs.com/docs/global-localization/using-gnss-linux/
- 数据同步: https://www.stereolabs.com/docs/global-localization/data-synchronization
- VIO / GNSS 标定: https://www.stereolabs.com/docs/global-localization/vio-gnss-calibration
- 坐标系: https://www.stereolabs.com/docs/global-localization/global-localization-coordinate-frames
- 故障排除: https://www.stereolabs.com/docs/global-localization/troubleshooting
代码示例
GitHub 上提供了完整的全球定位示例:一个将 ZED 相机与外部 GNSS 传感器融合并在真实世界地图上显示地理位置的实时示例,一个将同步数据保存到 SVO 文件和 JSON 文件的录制示例,以及一个离线重放录制数据的回放示例:
https://github.com/stereolabs/zed-sdk/tree/master/global%20localization GitHub
ROS 和 ROS 2
如果您使用 ROS 2,zed-ros2-wrapper 原生支持 GNSS 融合;您只需从 GNSS 接收器提供一个 NavSatFix 话题:
https://www.stereolabs.com/docs/ros2/geo-tracking/