pub struct BatchLeastSquares<D: Dynamics, Trk: TrackerSensitivity<D::StateType, D::StateType>>where
D::StateType: Interpolatable + Add<OVector<f64, <D::StateType as State>::Size>, Output = D::StateType>,
<D::StateType as State>::Size: DimName,
<DefaultAllocator as Allocator<<D::StateType as State>::VecLength>>::Buffer<f64>: Send,
<DefaultAllocator as Allocator<<D::StateType as State>::Size>>::Buffer<f64>: Copy,
<DefaultAllocator as Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>>::Buffer<f64>: Copy,
DefaultAllocator: Allocator<<D::StateType as State>::Size> + Allocator<<D::StateType as State>::VecLength> + Allocator<U1> + Allocator<U1, <D::StateType as State>::Size> + Allocator<<D::StateType as State>::Size, U1> + Allocator<U1, U1> + Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>,{Show 14 fields
pub prop: Propagator<D>,
pub devices: BTreeMap<String, Trk>,
pub solver: BLSSolver,
pub tolerance_pos_km: f64,
pub max_iterations: usize,
pub max_step: Duration,
pub epoch_precision: Duration,
pub lm_lambda_init: f64,
pub lm_lambda_decrease: f64,
pub lm_lambda_increase: f64,
pub lm_lambda_min: f64,
pub lm_lambda_max: f64,
pub lm_use_diag_scaling: bool,
pub almanac: Arc<Almanac>,
}
Expand description
Configuration for the Batch Least Squares estimator
Fields§
§prop: Propagator<D>
Propagator used for the estimation reference trajectory
devices: BTreeMap<String, Trk>
Tracking devices
solver: BLSSolver
Solver method
tolerance_pos_km: f64
Convergence tolerance on the norm of the correction on position, in kilometers
max_iterations: usize
Maximum number of iterations
max_step: Duration
Maximum step size where the STM linearization is assumed correct (30 seconds is usually fine, but too large and info matrix could be singular)
epoch_precision: Duration
Precision of the measurement epoch when processing measurements.
lm_lambda_init: f64
Initial damping factor for Levenberg-Marquardt
lm_lambda_decrease: f64
Factor to decrease lambda by in LM
lm_lambda_increase: f64
Factor to increase lambda by in LM
lm_lambda_min: f64
Minimum value for LM lambda
lm_lambda_max: f64
Maximum value for LM lambda
lm_use_diag_scaling: bool
Use diagonal scaling (D = sqrt(diag(H^T W H))) in LM
almanac: Arc<Almanac>
Implementations§
Source§impl<D: Dynamics, Trk: TrackerSensitivity<D::StateType, D::StateType>> BatchLeastSquares<D, Trk>where
D::StateType: Interpolatable + Add<OVector<f64, <D::StateType as State>::Size>, Output = D::StateType>,
<D::StateType as State>::Size: DimName,
<DefaultAllocator as Allocator<<D::StateType as State>::VecLength>>::Buffer<f64>: Send,
<DefaultAllocator as Allocator<<D::StateType as State>::Size>>::Buffer<f64>: Copy,
<DefaultAllocator as Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>>::Buffer<f64>: Copy,
DefaultAllocator: Allocator<<D::StateType as State>::Size> + Allocator<<D::StateType as State>::VecLength> + Allocator<U1> + Allocator<U1, <D::StateType as State>::Size> + Allocator<<D::StateType as State>::Size, U1> + Allocator<U1, U1> + Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>,
impl<D: Dynamics, Trk: TrackerSensitivity<D::StateType, D::StateType>> BatchLeastSquares<D, Trk>where
D::StateType: Interpolatable + Add<OVector<f64, <D::StateType as State>::Size>, Output = D::StateType>,
<D::StateType as State>::Size: DimName,
<DefaultAllocator as Allocator<<D::StateType as State>::VecLength>>::Buffer<f64>: Send,
<DefaultAllocator as Allocator<<D::StateType as State>::Size>>::Buffer<f64>: Copy,
<DefaultAllocator as Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>>::Buffer<f64>: Copy,
DefaultAllocator: Allocator<<D::StateType as State>::Size> + Allocator<<D::StateType as State>::VecLength> + Allocator<U1> + Allocator<U1, <D::StateType as State>::Size> + Allocator<<D::StateType as State>::Size, U1> + Allocator<U1, U1> + Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>,
Sourcepub fn builder() -> BatchLeastSquaresBuilder<D, Trk, ((), (), (), (), (), (), (), (), (), (), (), (), (), ())>
pub fn builder() -> BatchLeastSquaresBuilder<D, Trk, ((), (), (), (), (), (), (), (), (), (), (), (), (), ())>
Create a builder for building BatchLeastSquares
.
On the builder, call .prop(...)
, .devices(...)
, .solver(...)
(optional), .tolerance_pos_km(...)
(optional), .max_iterations(...)
(optional), .max_step(...)
(optional), .epoch_precision(...)
(optional), .lm_lambda_init(...)
(optional), .lm_lambda_decrease(...)
(optional), .lm_lambda_increase(...)
(optional), .lm_lambda_min(...)
(optional), .lm_lambda_max(...)
(optional), .lm_use_diag_scaling(...)
(optional), .almanac(...)
to set the values of the fields.
Finally, call .build()
to create the instance of BatchLeastSquares
.
Source§impl<D, Trk> BatchLeastSquares<D, Trk>where
D: Dynamics,
Trk: TrackerSensitivity<D::StateType, D::StateType> + Clone,
D::StateType: Interpolatable + Add<OVector<f64, <D::StateType as State>::Size>, Output = D::StateType> + Debug,
<D::StateType as State>::Size: DimName,
<DefaultAllocator as Allocator<<D::StateType as State>::VecLength>>::Buffer<f64>: Send,
<DefaultAllocator as Allocator<<D::StateType as State>::Size>>::Buffer<f64>: Copy,
<DefaultAllocator as Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>>::Buffer<f64>: Copy,
DefaultAllocator: Allocator<<D::StateType as State>::Size> + Allocator<<D::StateType as State>::VecLength> + Allocator<U1> + Allocator<U1, <D::StateType as State>::Size> + Allocator<<D::StateType as State>::Size, U1> + Allocator<U1, U1> + Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>,
impl<D, Trk> BatchLeastSquares<D, Trk>where
D: Dynamics,
Trk: TrackerSensitivity<D::StateType, D::StateType> + Clone,
D::StateType: Interpolatable + Add<OVector<f64, <D::StateType as State>::Size>, Output = D::StateType> + Debug,
<D::StateType as State>::Size: DimName,
<DefaultAllocator as Allocator<<D::StateType as State>::VecLength>>::Buffer<f64>: Send,
<DefaultAllocator as Allocator<<D::StateType as State>::Size>>::Buffer<f64>: Copy,
<DefaultAllocator as Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>>::Buffer<f64>: Copy,
DefaultAllocator: Allocator<<D::StateType as State>::Size> + Allocator<<D::StateType as State>::VecLength> + Allocator<U1> + Allocator<U1, <D::StateType as State>::Size> + Allocator<<D::StateType as State>::Size, U1> + Allocator<U1, U1> + Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>,
Sourcepub fn estimate(
&self,
initial_guess: D::StateType,
arc: &TrackingDataArc,
) -> Result<BLSSolution<D::StateType>, ODError>
pub fn estimate( &self, initial_guess: D::StateType, arc: &TrackingDataArc, ) -> Result<BLSSolution<D::StateType>, ODError>
Processes a tracking data arc to estimate the state using Batch Least Squares.
Trait Implementations§
Source§impl<D: Clone + Dynamics, Trk: Clone + TrackerSensitivity<D::StateType, D::StateType>> Clone for BatchLeastSquares<D, Trk>where
D::StateType: Interpolatable + Add<OVector<f64, <D::StateType as State>::Size>, Output = D::StateType>,
<D::StateType as State>::Size: DimName,
<DefaultAllocator as Allocator<<D::StateType as State>::VecLength>>::Buffer<f64>: Send,
<DefaultAllocator as Allocator<<D::StateType as State>::Size>>::Buffer<f64>: Copy,
<DefaultAllocator as Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>>::Buffer<f64>: Copy,
DefaultAllocator: Allocator<<D::StateType as State>::Size> + Allocator<<D::StateType as State>::VecLength> + Allocator<U1> + Allocator<U1, <D::StateType as State>::Size> + Allocator<<D::StateType as State>::Size, U1> + Allocator<U1, U1> + Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>,
impl<D: Clone + Dynamics, Trk: Clone + TrackerSensitivity<D::StateType, D::StateType>> Clone for BatchLeastSquares<D, Trk>where
D::StateType: Interpolatable + Add<OVector<f64, <D::StateType as State>::Size>, Output = D::StateType>,
<D::StateType as State>::Size: DimName,
<DefaultAllocator as Allocator<<D::StateType as State>::VecLength>>::Buffer<f64>: Send,
<DefaultAllocator as Allocator<<D::StateType as State>::Size>>::Buffer<f64>: Copy,
<DefaultAllocator as Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>>::Buffer<f64>: Copy,
DefaultAllocator: Allocator<<D::StateType as State>::Size> + Allocator<<D::StateType as State>::VecLength> + Allocator<U1> + Allocator<U1, <D::StateType as State>::Size> + Allocator<<D::StateType as State>::Size, U1> + Allocator<U1, U1> + Allocator<<D::StateType as State>::Size, <D::StateType as State>::Size>,
Source§fn clone(&self) -> BatchLeastSquares<D, Trk>
fn clone(&self) -> BatchLeastSquares<D, Trk>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<D, Trk> Freeze for BatchLeastSquares<D, Trk>where
DefaultAllocator: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size, <<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<<D as Dynamics>::StateType as State>::Size: Sized,
<D as Dynamics>::StateType: Sized,
D: Freeze,
impl<D, Trk> RefUnwindSafe for BatchLeastSquares<D, Trk>where
DefaultAllocator: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size, <<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<<D as Dynamics>::StateType as State>::Size: Sized,
<D as Dynamics>::StateType: Sized,
D: RefUnwindSafe,
Trk: RefUnwindSafe,
impl<D, Trk> Send for BatchLeastSquares<D, Trk>where
DefaultAllocator: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size, <<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<<D as Dynamics>::StateType as State>::Size: Sized,
<D as Dynamics>::StateType: Sized,
Trk: Send,
impl<D, Trk> Sync for BatchLeastSquares<D, Trk>where
DefaultAllocator: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size, <<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<<D as Dynamics>::StateType as State>::Size: Sized,
<D as Dynamics>::StateType: Sized,
Trk: Sync,
impl<D, Trk> Unpin for BatchLeastSquares<D, Trk>where
DefaultAllocator: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size, <<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<<D as Dynamics>::StateType as State>::Size: Sized,
<D as Dynamics>::StateType: Sized,
D: Unpin,
impl<D, Trk> UnwindSafe for BatchLeastSquares<D, Trk>where
DefaultAllocator: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size, <<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<DefaultAllocator as Allocator<<<D as Dynamics>::StateType as State>::Size>>::Buffer<f64>: Sized,
<<D as Dynamics>::StateType as State>::Size: Sized,
<D as Dynamics>::StateType: Sized,
D: UnwindSafe,
Trk: RefUnwindSafe,
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> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§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).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.