Skip to main content

sidereon_core/fusion/
mod.rs

1//! GNSS/INS fusion primitives.
2//!
3//! The module keeps the already-merged inertial mechanization surface available
4//! while adding the indirect error-state prediction and EKF correction core.
5
6pub mod ekf;
7pub mod error_state;
8pub mod loose;
9pub mod serial;
10pub mod state;
11pub mod tight;
12pub mod timesync;
13pub mod ukf;
14
15pub use crate::inertial::*;
16pub use ekf::{
17    apply_closed_loop_error, ekf_correct_closed_loop, joseph_covariance_update, EkfCorrection,
18    EkfCorrectionReport, EkfUpdateOptions, InnovationGate, InnovationGateReport,
19};
20pub use error_state::{
21    error_state_process_noise_discrete, error_state_system_matrix_ecef,
22    error_state_transition_matrix, linearize_error_state_ecef, predict_error_state_covariance,
23    ErrorStateImuKinematics, ErrorStateLinearization,
24};
25pub use loose::{
26    loose_coupling_correction, FusionUpdate, GnssFixMeasurement, InertialFilter,
27    InertialFilterConfig, LooseCouplingConfig,
28};
29pub use serial::{
30    F64Bits, FusionStateCodecError, SerializableErrorStateLayout, SerializableFusionSnapshot,
31    SerializableFusionState, SerializableImuSample, SerializableImuSampleKind,
32    SerializableInsFilterState, SerializableLooseMeasurement, SerializableNavState,
33    SerializableRateEndpoint, SerializableSatelliteId, SerializableStoredCheckpoint,
34    SerializableStoredGnssMeasurement, SerializableStoredImuSample,
35    SerializableTightCarrierPhaseObservation, SerializableTightFilterState,
36    SerializableTightGnssEpoch, SerializableTightGnssObservation,
37    SerializableTightRangeRateObservation, SerializableTimeSyncHistory,
38    SerializableTimeSyncHistoryConfig, FUSION_STATE_CODEC_VERSION,
39};
40pub use state::{
41    covariance_is_positive_semidefinite, reproject_covariance_psd, validate_covariance_matrix,
42    ErrorStateLayout, ErrorStateVector, FusionError, FusionFilterKind, InsFilterState,
43    ERROR_ACCEL_BIAS_INDEX, ERROR_ACCEL_SCALE_INDEX, ERROR_ATTITUDE_INDEX, ERROR_GYRO_BIAS_INDEX,
44    ERROR_GYRO_SCALE_INDEX, ERROR_MOUNTING_MISALIGNMENT_INDEX,
45    ERROR_MOUNTING_MISALIGNMENT_STATE_COUNT, ERROR_POSITION_INDEX, ERROR_STATE_DIMENSION_15,
46    ERROR_STATE_DIMENSION_21, ERROR_VELOCITY_INDEX,
47};
48pub use tight::{
49    TightCarrierPhaseObservation, TightClockState, TightCouplingConfig, TightFilterSnapshot,
50    TightGnssEpoch, TightGnssObservation, TightRangeRateObservation, TIGHT_CLOCK_BIAS_OFFSET,
51    TIGHT_CLOCK_DRIFT_OFFSET, TIGHT_CLOCK_STATE_COUNT,
52};
53pub use timesync::{
54    validate_time_sync_gnss_order, validate_time_sync_imu_order, InertialFilterSnapshot,
55    TimeSyncHistoryConfig, TimeSyncHistoryStatus, TimeSyncUpdate,
56    DEFAULT_TIME_SYNC_CHECKPOINT_CAPACITY, DEFAULT_TIME_SYNC_IMU_CAPACITY,
57};
58pub use ukf::{ukf_correct_closed_loop, UkfUpdateOptions, UnscentedTransformOptions};