I am working on a visual odometry (VO) and visual-inertial odometry (VIO) evaluation project using a simulated ZED X camera in NVIDIA Isaac Sim, integrated with the ZED ROS 2 Wrapper.
My goal is to record one SVO2 dataset containing both stereo images and simulated IMU measurements, and then replay the same dataset twice:
- VO:
pos_tracking_mode: GEN_1,imu_fusion: false - VIO:
pos_tracking_mode: GEN_1,imu_fusion: true
I would like to compare both estimated trajectories against Isaac Sim ground truth under identical sensor inputs.
Environment:
- Camera: Simulated ZED X
- ZED SDK: 5.5.0
- ROS 2: Jazzy
- Simulator: NVIDIA Isaac Sim
- Integration: ZED Isaac Sim extension + ZED ROS 2 Wrapper
- SVO format: SVO2
- Camera resolution: 960 × 600
- Camera frame rate: 30 FPS
What works:
I can successfully run positional tracking in Isaac Sim with:
pos_tracking:
pos_tracking_enabled: true
pos_tracking_mode: 'GEN_1'
imu_fusion: true
sensors:
sensors_image_sync: false
sensors_pub_rate: 100.0
publish_imu: true
The ZED Wrapper publishes both odometry and IMU measurements.
For example, a ROS 2 bag recorded during one simulation run contains:
Duration: 6.83 seconds
/clock 206 messages
/zed/ground_truth/pose 204 messages
/zed/zed_node/odom 183 messages
/zed/zed_node/imu/data 145 messages
Therefore, simulated IMU measurements are available through the ROS 2 interface, and live positional tracking works with IMU fusion enabled using GEN_1.
The problem:
When I record an SVO2 file from the simulated camera using the ZED ROS 2 Wrapper’s /zed/zed_node/start_svo_rec service, the resulting file contains stereo frames but no IMU measurements.
Running:
ZED_SVO_Editor -inf recordings/T_GEN1_IMU_test.svo2
produces:
[ZED][WARNING] [Init]
No inertial data was found in this SVO.
Certain modules may operate with reduced accuracy as a result.
SVO Infos: SVO v 2
Image Size: [960 x 600]
Framerate: 30
Number of Frames: 207
Camera model: ZED X
ZED SDK version: 5.5.0
I also tested recording directly through the ROS 2 service, without using my Python recording script:
ros2 service call /zed/zed_node/start_svo_rec \
zed_msgs/srv/StartSvoRec \
"{svo_filename: '/path/to/test.svo2', compression_mode: 5}"
The resulting SVO2 file again contained stereo images but no inertial data.
During SVO playback with IMU fusion enabled, the SDK reports that no IMU data is available in the source.
My questions:
- Does the ZED Isaac Sim integration currently support recording simulated IMU measurements into SVO2 files?
- If supported, is there any additional SDK configuration, Isaac Sim extension setting, or recording option required to include IMU data?
- Why can the ZED ROS 2 Wrapper publish simulated IMU measurements during live operation, while the same measurements are missing from the SVO2 recording?
- Is this a known limitation or issue with the simulated camera stream or ZED SDK 5.5.0?
- Is there a recommended workflow for recording a simulated stereo + IMU dataset once and then evaluating the native ZED SDK VO and VIO algorithms on that exact same dataset?
I have read the Stereolabs documentation explaining that SVO2 files can store IMU measurements and that positional tracking can be enabled during playback even when it was disabled during recording.
I would like to know whether this functionality is also supported when the source is a simulated ZED X camera in Isaac Sim rather than a physical ZED camera.
Thank you very much for your help!