refactor(firmware): simplify configuration and diagnostics

This commit is contained in:
Onur Özkan committed 2026-08-23 00:40:36 +03:00
1 parent ba9c97ed3b
commit fdf82a5114
96 files changed
+1612 -2772

No files matched your search

+1 -1
View File
@@ -14,7 +14,7 @@ default = []
# executable. It is not part of a board build.
sitl = ["dep:kaptan-sensor"]
[dependencies]
kaptan-log = { path = "../kaptan-log" }
kaptan-err-propagate = { path = "../kaptan-err-propagate" }
kaptan-math = { path = "../kaptan-math" }
kaptan-sensor = { path = "../kaptan-sensor", optional = true }
kaptan-time = { path = "../kaptan-time" }
+24 -1
View File
@@ -1,6 +1,6 @@
//! Fixed-size multiplicative error-state Kalman filter.
use kaptan_log::KaptanError;
use kaptan_err_propagate::KaptanError;
use kaptan_math::{Frd, MathError, Ned, Sensor, UnitQuaternion, Vector3, sqrt};
use kaptan_time::Timestamp;
@@ -209,22 +209,31 @@ pub struct EstimatorHealth {
#[derive(Clone, Copy, Debug, Eq, PartialEq, KaptanError)]
pub enum PropagationError {
/// An IMU observation was invalid or was not calibrated into FRD.
#[kaptan_error(id = 8001)]
InvalidImu,
/// IMU source differs from the stream bound during stationary initialization.
#[kaptan_error(id = 8002)]
ImuSourceMismatch,
/// IMU calibration differs from the stream bound during stationary initialization.
#[kaptan_error(id = 8003)]
ImuCalibrationMismatch,
/// IMU sequence repeated or moved backwards within the bound stream.
#[kaptan_error(id = 8004)]
ReplayedImu,
/// IMU measurement time did not advance strictly.
#[kaptan_error(id = 8005)]
NonMonotonicTimestamp,
/// The interval exceeded the bounded propagation contract.
#[kaptan_error(id = 8006)]
ImuGapTooLarge,
/// The IMU rate and interval exceed the bounded quaternion increment.
#[kaptan_error(id = 8007)]
RotationIncrementTooLarge,
/// Input or resulting state was non-finite.
#[kaptan_error(id = 8008)]
NonFinite,
/// The candidate state or covariance failed validation; reinitialize before reuse.
#[kaptan_error(id = 8009)]
FilterInvalid,
}
@@ -232,33 +241,47 @@ pub enum PropagationError {
#[derive(Clone, Copy, Debug, Eq, PartialEq, KaptanError)]
pub enum FusionError {
/// Observation is not at this filter's current history time.
#[kaptan_error(id = 8101)]
TimestampMismatch,
/// Observation was device-invalid.
#[kaptan_error(id = 8102)]
InvalidObservation,
/// Observation source does not identify the configured physical device.
#[kaptan_error(id = 8103)]
SourceMismatch,
/// Observation frame does not match the configured extrinsics.
#[kaptan_error(id = 8104)]
FrameMismatch,
/// Observation calibration revision does not match the configured transform.
#[kaptan_error(id = 8105)]
CalibrationMismatch,
/// The fixed source-integrity table has no entry for this source.
#[kaptan_error(id = 8106)]
SourceCapacityExhausted,
/// A source repeated or moved backwards from its accepted sequence stream.
#[kaptan_error(id = 8107)]
ReplayedObservation,
/// This estimator profile has no terrain state.
#[kaptan_error(id = 8108)]
TerrainProfileRequired,
/// Optical flow from an offset sensor needs a correlated IMU-noise update
/// that this profile does not implement.
#[kaptan_error(id = 8109)]
UnsupportedOpticalFlowLeverArm,
/// Measurement fails physical range or velocity plausibility bounds.
#[kaptan_error(id = 8110)]
Implausible,
/// Range ray is too tilted or does not intersect terrain below the sensor.
#[kaptan_error(id = 8111)]
InvalidRangeGeometry,
/// Innovation covariance was singular/non-finite.
#[kaptan_error(id = 8112)]
SingularInnovation,
/// Innovation exceeds the configured chi-square gate.
#[kaptan_error(id = 8113)]
InnovationRejected,
/// The candidate state or covariance failed validation; reinitialize before reuse.
#[kaptan_error(id = 8114)]
FilterInvalid,
}