Class KalmanCovarianceProvider
Defined in File kalman_covariance_provider.h
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public adi_imu::ImuCovarianceInterface(Class ImuCovarianceInterface)
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
-
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.