Overview
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
|
This library is experimental. Its estimators and optimizers implement research-grade techniques — in particular the static/dynamic interval detection and threshold-factor search used to validate and tune a calibration — that have not been hardened through large-scale production use. APIs may still change between minor releases, and results should be validated against a trusted reference before being relied upon in a production navigation pipeline. |
irurueta-navigation-inertial-extra is a Java library that provides additional calibration estimators for
GNSS/INS navigation, built on top of irurueta-navigation-inertial.
Where the base library provides the core navigators, estimators and calibrators, this library adds the
higher-level tools needed to validate a calibration and to automatically tune it: drift estimation, sensor
random-walk (Allan-variance-style) estimation, and threshold-factor optimizers for the static/dynamic interval
detectors used during calibration data collection.
The library is organized around two packages:
| Package | Responsibility |
|---|---|
|
|
|
A family of |
Core concept: drift estimation
Once accelerometer and gyroscope measurements have been fixed using a calibration model, DriftEstimator (and its
Kalman-filter-based subclass KalmanDriftEstimator) lets you quantify how much residual error still accumulates
while the body carrying the IMU remains static:
KalmanDriftEstimator uses an internal INSLooselyCoupledKalmanFilteredEstimator to propagate the same static
interval and reports drift from the resulting Kalman state, which is typically more representative of a real
INS/GNSS deployment than plain kinematics integration.
Core concept: random walk and Kalman configuration
RandomWalkEstimator repeats the drift-estimation process over many consecutive "drift periods" while the IMU
remains static, and reports the mean and variance of the observed drift as accelerometer/gyroscope bias random
walk and position/velocity/attitude uncertainty. Those outputs implement source interfaces
(AccelerometerBiasRandomWalkSource, GyroscopeBiasRandomWalkSource, PositionUncertaintySource,
VelocityUncertaintySource, AttitudeUncertaintySource) that INSLooselyCoupledKalmanConfigCreator and
INSLooselyCoupledKalmanInitializerConfigCreator consume directly to assemble ready-to-use Kalman filter
configuration objects, closing the loop between "estimate sensor noise" and "configure the filter that uses it."
Core concept: threshold factor optimization
Static/dynamic interval detection (used to segment raw calibration recordings into static and moving periods)
depends on a threshold factor that trades off false positives against missed transitions. The
IntervalDetectorThresholdFactorOptimizer hierarchy searches for the threshold factor that minimizes calibration
mean squared error, for accelerometer-only, gyroscope-only, magnetometer-only, and combined
(accelerometer+gyroscope, accelerometer+gyroscope+magnetometer) calibration scenarios. Each scenario is offered in
two search strategies: an exhaustive grid search (Exhaustive*Optimizer) and a bracketed golden-section search
(Bracketed*Optimizer) that converges faster once a rough bracket is known.
Background and references
The static/dynamic interval detection that the threshold-factor optimizers tune, and the drift/random-walk concepts used to validate a calibration, follow the multi-position calibration approach described in:
-
David Tedaldi, Alberto Pretto, Emanuele Menegatti, A Robust and Easy to Implement Method for IMU Calibration without External Equipments, IEEE International Conference on Robotics and Automation (ICRA), 2014. That paper proposes calibrating an IMU using only a sequence of static positions reached by hand — no mechanical rig or external reference — by using a variance-based static detector to segment the recording into static and dynamic intervals, fitting the accelerometer triad against the local gravity magnitude over the static intervals, and then calibrating the gyroscope triad by integrating angular velocity between consecutive static intervals and comparing it against the calibrated accelerometer’s gravity reference.
-
The paper’s reference implementation, imu_tk (C++, BSD licensed).
irurueta-navigation-inertial-extra does not port that implementation; it builds complementary tooling —
threshold-factor search and drift/random-walk estimation — on top of the static/dynamic interval detectors and
calibrators already present in
irurueta-navigation-inertial.
Where to go next
-
Installation — add this library as a dependency to your project.
-
Reference — links to generated reports (Javadoc, coverage, quality) and external dashboards.