pub struct StaticSample {
pub imu: ImuSample,
pub mag: Option<MagField<Body>>,
pub baro: Option<Altitude>,
pub velocity: Option<Velocity<Ned>>,
}Expand description
One sample from the quasi-static initialization window.
The magnetometer is optional: without it nothing observes the rotation about gravity,
ψ₀ of equation (6) stays zero, and the first accepted heading, magnetic, GNSS or
course, is what establishes it. A window with none anywhere in it says so:
Validity::heading stays false until a heading source accepts one,
because
sigma_yaw is a prior and would otherwise read as
an estimate of a quantity nothing measured.
The barometer is optional in the same way, but less forgivingly: its reference is established by a start and only refined after one (30′), so a window carrying none leaves nothing for a later altitude to be relative to and barometric fusion is refused for the whole flight.
GNSS velocity is the one field a window taken in motion can use, and the only
reason this type is not simply an IMU sample plus what stillness needs: see
velocity.
Fields§
§imu: ImuSampleIMU measurement.
mag: Option<MagField<Body>>Magnetometer measurement, if the vehicle has one.
Averaged over the window to fix ψ₀, the initial heading (equation (6)), and
averaged rather than taken from one sample for the reason the barometer and the
gyroscope bias are: a single reading carries the sensor’s full noise.
baro: Option<Altitude>Barometric altitude, if the vehicle has a barometer.
Averaged over the window to fix α₀, the barometer’s reference at the navigation
origin (equation (30)). Averaged rather than taken from one sample for the same
reason the gyroscope bias is: a single reading carries the sensor’s full noise.
Without it the window fixes no reference, and
Eskf::fuse_baro_altitude reads one from the
estimate at the first altitude instead. α₀ is refined in flight by (30′), and the
scatter of these readings is the variance it starts with, so a window needs two of
them.
velocity: Option<Velocity<Ned>>GNSS velocity in the navigation frame, if the vehicle has a receiver.
Differenced across the window for ā_n, the vehicle’s own acceleration
(equation (5′)). At rest that term is zero and equation (5) reads tilt straight
off the accelerometer; in motion the accelerometer reads specific force, and
ā_n is what separates the two. It is the whole of what a moving window has that
a still one does not need.
Attach it to the epoch it arrived on rather than holding it across the IMU epochs
that follow, as mag and baro may be held: those are averaged, and an average
survives a repeated value, while a difference is dated by the samples carrying it
and a held reading dates from before the epoch it sits on. Holding costs up to one
GNSS interval of span, in either direction.
Stub. Measured and reported on Coarse::NotStationary; nothing
levels with it. Not built: equation (5′), #59.
Trait Implementations§
Source§impl Clone for StaticSample
impl Clone for StaticSample
impl Copy for StaticSample
Source§impl Debug for StaticSample
impl Debug for StaticSample
Source§impl Default for StaticSample
impl Default for StaticSample
Source§impl PartialEq for StaticSample
impl PartialEq for StaticSample
impl StructuralPartialEq for StaticSample
Auto Trait Implementations§
impl Freeze for StaticSample
impl RefUnwindSafe for StaticSample
impl Send for StaticSample
impl Sync for StaticSample
impl Unpin for StaticSample
impl UnsafeUnpin for StaticSample
impl UnwindSafe for StaticSample
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.