Solver

Struct Solver 

Source
pub struct Solver<EPH: EphemerisSource, ORB: OrbitSource, EB: EnvironmentalBias, SB: SpacebornBias, TIM: AbsoluteTime> {
    pub cfg: Config,
    /* private fields */
}
Expand description

Solver to resolve PVTSolutions.

§Generics:

Fields§

§cfg: Config

Solver Configuration

Implementations§

Source§

impl<EPH: EphemerisSource, ORB: OrbitSource, EB: EnvironmentalBias, SB: SpacebornBias, TIM: AbsoluteTime> Solver<EPH, ORB, EB, SB, TIM>

Source

pub fn new( almanac: Almanac, earth_cef: Frame, cfg: Config, eph_source: Rc<EPH>, orbit_source: Rc<ORB>, spaceborn_biases: Rc<SB>, environmental_biases: Rc<EB>, absolute_time: TIM, state_ecef_m: Option<(f64, f64, f64)>, ) -> Self

Creates a new Solver for either direct or differential navigation, with possible apriori knowledge.

§Input
  • almanac: provided valid Almanac
  • earth_cef: Frame that must be an ECEF
  • cfg: solver Configuration
  • eph_source: custom EphemerisSource, unavailable right now, tie to null.
  • orbit_source: custom OrbitSource implementation, wrapped in a Rc<RefCell<>> which allows the solver and the orbital provider to live in the same thread.
  • absolute_time: external AbsoluteTime implementation.
  • bias: [Bias] model implementation
  • state_ecef_m: provide initial state as ECEF 3D coordinates, otherwise we will have to figure them.
Source

pub fn new_survey( almanac: Almanac, earth_cef: Frame, cfg: Config, eph_source: Rc<EPH>, orbit_source: Rc<ORB>, spaceborn_biases: Rc<SB>, environmental_biases: Rc<EB>, absolute_time: TIM, ) -> Self

Creates a new Solver to operate without a priori knowledge and perform a complete survey from scratch. Refer to Self::new for more information.

Source

pub fn ppp( &mut self, epoch: Epoch, params: UserParameters, candidates: &[Candidate], ) -> Result<PVTSolution, Error>

PVTSolution solving attempt using PPP technique (no reference). Unlike RTK resolution attempt, PPP solving will resolve both the position and the local clock state, but it is a less accurate and much more complex process.

§Input
§Output
Source

pub fn rtk<RTK: RTKBase>( &mut self, epoch: Epoch, params: UserParameters, candidates: &[Candidate], rtk_base: &RTK, ) -> Result<PVTSolution, Error>

PVTSolution solving attempt using RTK technique and a single remote reference site that implements RTKBase. You may catch RTK solving issues (for example, network loss) and retry using Self::ppp, because this object is compatible with both. For this function to converge, the remote site and rover proposals must agree in their content (enough matches) and signals must fulfill the navigation [Method] being used.

NB: unlike PPP solving, RTK solving will only resolve the spatial state, the clock state can only remain undetermined. If you are interested by both, you will either have to restrict to [Self::ppp_run], or do a PPP (time only) run after the RTK run.

§Input
  • epoch: Epoch of measurement from the rover reported by the rover. The remote site must match the sampling instant closely, reducing the time-difference (RTK aging).
  • profile: rover [UserProfile]
  • candidates: rover measurements, wrapped as Candidates.
  • rtk_base: remote reference site that implements RTKBasereference.
§Output
Source

pub fn reset(&mut self)

Reset this Solver.

Auto Trait Implementations§

§

impl<EPH, ORB, EB, SB, TIM> !Freeze for Solver<EPH, ORB, EB, SB, TIM>

§

impl<EPH, ORB, EB, SB, TIM> RefUnwindSafe for Solver<EPH, ORB, EB, SB, TIM>

§

impl<EPH, ORB, EB, SB, TIM> !Send for Solver<EPH, ORB, EB, SB, TIM>

§

impl<EPH, ORB, EB, SB, TIM> !Sync for Solver<EPH, ORB, EB, SB, TIM>

§

impl<EPH, ORB, EB, SB, TIM> Unpin for Solver<EPH, ORB, EB, SB, TIM>
where TIM: Unpin,

§

impl<EPH, ORB, EB, SB, TIM> UnwindSafe for Solver<EPH, ORB, EB, SB, TIM>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> ErasedDestructor for T
where T: 'static,