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 smoother;
11pub mod state;
12pub mod tight;
13pub mod timesync;
14pub mod ukf;
15
16pub use crate::inertial::*;
17pub use ekf::{
18    apply_closed_loop_error, ekf_correct_closed_loop, joseph_covariance_update, EkfCorrection,
19    EkfCorrectionReport, EkfUpdateOptions, InnovationGate, InnovationGateReport,
20};
21pub use error_state::{
22    error_state_process_noise_discrete, error_state_system_matrix_ecef,
23    error_state_system_matrix_ecef_with_imu_to_body, error_state_transition_matrix,
24    linearize_error_state_ecef, linearize_error_state_ecef_with_imu_to_body,
25    predict_error_state_covariance, ErrorStateImuKinematics, ErrorStateLinearization,
26};
27pub use loose::{
28    loose_coupling_correction, velocity_match_outage, velocity_match_outage_to_state, FusionUpdate,
29    GnssFixMeasurement, GnssFixStatus, GnssFixStatusWeighting, IggIiiMeasurementReweighting,
30    InertialFilter, InertialFilterConfig, LooseCouplingConfig, NonHolonomicConstraintConfig,
31    StationaryDetectorConfig, StationaryUpdateConfig, VelocityMatchState,
32    VelocityMatchedTrajectory, VelocityMatchingConfig, YangPredictionAdaptiveFactor,
33};
34pub use serial::{
35    F64Bits, FusionStateCodecError, SerializableErrorStateLayout, SerializableFusionSnapshot,
36    SerializableFusionState, SerializableGnssFixStatus, SerializableImuSample,
37    SerializableImuSampleKind, SerializableInsFilterState, SerializableLooseMeasurement,
38    SerializableNavState, SerializableRateEndpoint, SerializableSatelliteId,
39    SerializableStationarityDetectorSample, SerializableStoredCheckpoint,
40    SerializableStoredGnssMeasurement, SerializableStoredImuSample,
41    SerializableTightCarrierPhaseObservation, SerializableTightFilterState,
42    SerializableTightGnssEpoch, SerializableTightGnssObservation,
43    SerializableTightRangeRateObservation, SerializableTimeSyncHistory,
44    SerializableTimeSyncHistoryConfig, FUSION_STATE_CODEC_VERSION,
45};
46pub use smoother::{
47    smooth_fusion_rts, FusionRtsEpoch, FusionRtsHistory, FusionRtsHistoryBuilder,
48    SmoothedFusionEpoch, SmoothedFusionTrajectory,
49};
50pub use state::{
51    covariance_is_positive_semidefinite, reproject_covariance_psd, validate_covariance_matrix,
52    ErrorStateLayout, ErrorStateVector, FusionError, FusionFilterKind, InsFilterState,
53    ERROR_ACCEL_BIAS_INDEX, ERROR_ACCEL_SCALE_INDEX, ERROR_ATTITUDE_INDEX, ERROR_GYRO_BIAS_INDEX,
54    ERROR_GYRO_SCALE_INDEX, ERROR_MOUNTING_MISALIGNMENT_INDEX,
55    ERROR_MOUNTING_MISALIGNMENT_STATE_COUNT, ERROR_POSITION_INDEX, ERROR_STATE_DIMENSION_15,
56    ERROR_STATE_DIMENSION_21, ERROR_VELOCITY_INDEX,
57};
58pub use tight::{
59    TightCarrierPhaseObservation, TightClockState, TightCouplingConfig, TightFilterSnapshot,
60    TightGnssEpoch, TightGnssObservation, TightRangeRateObservation, TIGHT_CLOCK_BIAS_OFFSET,
61    TIGHT_CLOCK_DRIFT_OFFSET, TIGHT_CLOCK_STATE_COUNT,
62};
63pub use timesync::{
64    validate_time_sync_gnss_order, validate_time_sync_imu_order, InertialFilterSnapshot,
65    StationarityDetectorSnapshotSample, TimeSyncHistoryConfig, TimeSyncHistoryStatus,
66    TimeSyncUpdate, DEFAULT_TIME_SYNC_CHECKPOINT_CAPACITY, DEFAULT_TIME_SYNC_IMU_CAPACITY,
67};
68pub use ukf::{ukf_correct_closed_loop, UkfUpdateOptions, UnscentedTransformOptions};