Clarification on ZED X IMU Parameters & Calibration for vSLAM

Hello StereoLabs team,

We are using the ZED X camera for ISAAC ROS VSLAM and need clarification on IMU parameters, calibration, and behavior.

1. IMU Noise Parameters for vSLAM

From the spec sheet, we estimated the IMU noise parameters in SI units as:

  • Gyro Noise Density: 0.001745 rad/s/√Hz
  • Gyro Random Walk: 0.000175 rad/s²/√Hz (estimated as ~10% of noise density)
  • Accel Noise Density: 0.031392 m/s²/√Hz
  • Accel Random Walk: 0.00314 m/s³/√Hz (estimated as ~10% of noise density)

Could you confirm if these values are correct or suggest better ones for vSLAM applications?

2. IMU Calibration & Bias Drift

  • Does the ZED X self-calibrate over time?
  • If bias drift occurs, is there a way to manually recalibrate?

3. IMU Fusion Causing Erratic Localization

  • When fusing IMU data with vSLAM, we noticed erratic localization during motion.
  • Could this be due to incorrect IMU parameters or filtering issues?

4. Past IMU Initialization Warnings

Previously, we had IMU initialization failures with the error:

[component_container_isolated-10] [2024-12-12 16:50:54 UTC][ZED][WARNING] IMU initialization failed, acc bias too high. Found 2.5015875129199663 -0.8909907544542499 -3.0123111173526405 vs factory calibration -0.06847544759511948 -0.06318719685077667 0.1252470314502716
[component_container_isolated-8] [2024-12-12 16:50:54 UTC][ZED][WARNING] IMU initialization failed, acc bias too high. Found -3.918494945812394 -4.260080018510842 -6.917686579404433 vs factory calibration 0.054649848490953445 -0.03010440617799759 -0.018659111112356186

However, these errors disappeared over time. Could this be due to some kind of self-calibration over time?

Would appreciate any guidance on these topics. Thanks in advance!

Hi Ba2sakal,

Thanks for your message. Here’s some answers to your questions :

1 / These values are generally correct, a bit high for the gyros in rad/s. Not sure about the (estimated as ~10% of noise density) for the random walk. If you want a better accuracy for your algorithm, we would encourage you to redetermine those parameters by computing the Allan variance for your camera on a long static sequence ( >6hours).

2 -4 / Yes there is some self-calibration over time for the IMUs present in the cameras. Take also a look at this link to check how to reduce drift.

3 / I don’t know which vSlam algorithm you’re using and sensor you’re fusing together but regarding Stereolabs cameras and IMU, data is synchronized with the images to give an approximation of the robot pose in real time (both translation and orientation). From your message, I’m noticing you’re using ROS2 ZED wrapper, you can take a look at this tutorial for Positional Tracking. The wrapper provides conventional ROS2 messages for position that can be reused at the input of other ROS2 modules for Localization, SLAM, sensor fusion filtering etc.

Thanks,

Rodolphe Perrin

Stereolabs Support

Hi @RodolphePerrin, thank you for your reply! I work in the same team as @ba2sakal

Could you provide the links to the drift issue (point 2) and the tutorial (point 3) you mentioned? Perhaps you forgot to include them :smiley:

We also have some follow-up questions for clarification:

1. IMU Parameters & Allan Variance

  • You mentioned our gyro values in rad/s are a bit high—could you provide an approximate expected range? Since the current values we used are from the spec sheet of ZEDX.
  • We will run Allan variance analysis for better accuracy. Do you have any recommended settings (e.g., sample rate, averaging method) to ensure good results?

2. IMU Self-Calibration

  • Good to know that self-calibration occurs. Is there a way to check the current bias values that the camera has adapted to over time?
  • Does the self-calibration process happen only at startup, or does it continue adjusting dynamically?

Hi Rodolphe,

Thanks for sharing the link. I want to indeed calibrate the IMU with the tutorial you share ( How can I remove the IMU drift of my camera? – Help Center | Stereolabs) however, I cannot work with the either –calib_gyro or –calib_dynamic.

I both tried with ZED SDK 4.2.3 and 4.2.5, it just does the diagnostics but pass to calibration or there is no flag in the --help flag as:

@-desktop:~/amor$ ZED_Diagnostic --help
Usage:
    -d | Auto start the diagnostic (only for GUI mode)
    -c | Start the application in command line (Useful when no GUI is available)
    -aid | Download all models for the object detection module
    -aio | Optimize (and download if needed) all models for the object detection module
    -aic | Clear all models for the object detection module
    -ais X | Download and Optimize the associated sl::DETECTION_MODEL (int)
    -nrlo | Download and Optimize the NEURAL depth mode
    -nrlo_plus | Download and Optimize the NEURAL PLUS depth mode
    -r | Recover an MCU module with not valid serial number
    -dmesg | Logs kernel/driver dmesg
    -h | Display this help

Could you please guide me how can I do the calibration please? Thanks!

Btw here is my diagnostics.json
ZED_Diagnostic_Results.json (6.4 KB)

1 Like

I just realized in the trouble shooting page it is written wrong

1. Run the calibration tool with the ***--calib_gyro*** option:
  * On Windows (*PowerShell*):
2.*& 'C:\Program Files (x86)\ZED SDK\tools\ZED Calibration.exe' --calib_gyro**
  * On Linux (*Ctrl+Alt+t*):
3.*ZED_Diagnostic --calib_gyro**

it is written correct for Windows"ZED Calibration.exe" but wrong for Linux “ZED_Diagnostic”.

In ZED_Calibration there is the flag

@-desktop:~/amor$ ZED_Calibration -h
QCommandLineParser: already having an option named "h"
Usage: ZED_Calibration [options]
ZED Calibration help

Options:
  -h, --help                Displays help on commandline options.
  --help-all                Displays help including Qt specific options.
  --cimu, --calib_gyro      Launch Static IMU Calibration
  --cimud, --calib_dynamic  Launch 6 points IMU Calibration

Thanks for reporting the typo, we fixed it !

For the Allan variance, the IMU sampling rate is fixed on our cameras, you would have to grab high frequency raw data. The tool ZED_Sensor_Viewer can help retrieve the IMu data.

The self calibration process happens dynamically over time but there is no way to directly check biases.

Best,
Rodolphe Perrin

Stereolabs Support

1 Like

Hi, I noticed that in the datasheet the noise density for the accelerometer is specified in mg while @ba2sakal in the post specified the values as m/s²/√Hz where only the conversion from g to m/s2 has been done.

Does the datasheet assume that the values are already specified in mg/√Hz or the values in the first posts are not correct?

Similar thing is valid also for gyroscope noise density