Class KalmanCovarianceProvider

Nested Relationships

Nested Types

Inheritance Relationships

Base Type

Class Documentation

class KalmanCovarianceProvider : public adi_imu::ImuCovarianceInterface

Kalman filter-based covariance estimator for IMU data.

This provider uses a scalar Kalman filter for each axis to estimate the measurement variance. The approach treats variance as a slowly-varying state and uses squared residuals from the running mean as noisy measurements of the true variance.

State model: variance_k = variance_{k-1} + w_k, where w_k ~ N(0, Q) Measurement model: z_k = variance_k + v_k, where v_k ~ N(0, R) True variance measurement: y_k = (sample - mean)^2

The filter provides adaptive, smoothed variance estimates that respond to changes in sensor noise characteristics while filtering out spurious variations.

Parameters:

  • process_noise_q: How fast the variance can change (larger = more adaptive)

  • measurement_noise_r: How noisy our variance observations are

  • initial_variance: Starting estimate for variance

  • warmup_samples: Samples needed before estimates are considered valid

  • min_variance: Minimum variance floor to prevent numerical issues

Public Functions

KalmanCovarianceProvider(double process_noise_q = DEFAULT_PROCESS_NOISE_Q, double measurement_noise_r = DEFAULT_MEASUREMENT_NOISE_R, double initial_variance = DEFAULT_INITIAL_VARIANCE, size_t warmup_samples = DEFAULT_WARMUP_SAMPLES, double min_variance = DEFAULT_MIN_VARIANCE, MotionDetector motion_detector = MotionDetector())

Construct a Kalman filter covariance provider.

Parameters:
  • process_noise_q – Process noise covariance (variance change rate)

  • measurement_noise_r – Measurement noise covariance

  • initial_variance – Initial variance estimate for all axes

  • warmup_samples – Number of samples before estimates are valid

  • min_variance – Minimum variance floor

  • motion_detector – Optional motion detector for stationary filtering

~KalmanCovarianceProvider() override = default
virtual void addSample(const Vec3 &accel, const Vec3 &gyro) override

Process a new IMU sample for covariance estimation.

Parameters:
  • accel – Linear acceleration sample (m/s^2)

  • gyro – Angular velocity sample (rad/s)

virtual bool isReady() const override

Check if covariance estimation is ready (calibration complete).

Returns:

true if covariance values are valid and ready to use.

virtual CovarianceMatrix getAccelCovariance() const override

Get the linear acceleration covariance matrix.

Returns:

3x3 covariance matrix row-major order.

virtual CovarianceMatrix getGyroCovariance() const override

Get the angular velocity covariance matrix.

Returns:

3x3 covariance matrix row-major order.

virtual void reset() override

Reset the covariance extimator to initial state.

virtual double getCalibrationProgress() const override

Get the current calibration progress (0.0 to 1.0).

Returns:

Progress ratio, 1.0 when calibration is complete.

Public Static Attributes

static constexpr double DEFAULT_PROCESS_NOISE_Q = 1e-6
static constexpr double DEFAULT_MEASUREMENT_NOISE_R = 1e-4
static constexpr double DEFAULT_INITIAL_VARIANCE = 1e-4
static constexpr size_t DEFAULT_WARMUP_SAMPLES = 100
static constexpr double DEFAULT_MIN_VARIANCE = 1e-9