pub struct GroundAsset {
pub latitude_deg: f64,
pub longitude_deg: f64,
pub height_km: f64,
pub latitude_rate_deg_s: f64,
pub longitude_rate_deg_s: f64,
pub height_rate_km_s: f64,
pub epoch: Epoch,
pub frame: Frame,
pub stm: Option<OMatrix<f64, Const<6>, Const<6>>>,
}Expand description
Represents a ground position/nav/timing receiver, e.g. a customer Note that we rebuild the Location structure from ANISE but without a terrain mask because the mask is not copyable and this PNTRx must be copyable to implement State.
Fields§
§latitude_deg: f64§longitude_deg: f64§height_km: f64§latitude_rate_deg_s: f64§longitude_rate_deg_s: f64§height_rate_km_s: f64§epoch: Epoch§frame: FrameFrame on which this location rests
stm: Option<OMatrix<f64, Const<6>, Const<6>>>Implementations§
Source§impl GroundAsset
impl GroundAsset
pub fn from_fixed( latitude_deg: f64, longitude_deg: f64, height_km: f64, epoch: Epoch, frame: Frame, ) -> Self
pub fn with_velocity_sez_m_s( self, vel_s_m_s: f64, vel_e_m_s: f64, vel_z_m_s: f64, ) -> Result<Self, Box<dyn Error>>
pub fn to_location(&self) -> Location
Sourcepub fn velocity_sez_m_s(&self) -> Result<OVector<f64, Const<3>>, PhysicsError>
pub fn velocity_sez_m_s(&self) -> Result<OVector<f64, Const<3>>, PhysicsError>
Compute the velocity in m/s in the SEZ frame from the state data stored in latitude deg/s, longitude deg/s, and height in km/s for integration of EOMs
pub fn geodetic_to_cartesian_jacobian( &self, ) -> Result<Matrix6<f64>, PhysicsError>
Sourcepub fn great_circle_distance_km(
&self,
other: &Self,
) -> Result<f64, PhysicsError>
pub fn great_circle_distance_km( &self, other: &Self, ) -> Result<f64, PhysicsError>
Computes the great circle (Haversine) distance between this asset and another in kilometers.
Note: This assumes a perfectly spherical body using the frame’s mean equatorial radius.
It does not account for the ellipsoidal oblateness or the height_km of either asset.
Trait Implementations§
Source§impl Add<Matrix<f64, Const<6>, Const<1>, <DefaultAllocator as Allocator<Const<6>>>::Buffer<f64>>> for GroundAsset
impl Add<Matrix<f64, Const<6>, Const<1>, <DefaultAllocator as Allocator<Const<6>>>::Buffer<f64>>> for GroundAsset
Source§impl Clone for GroundAsset
impl Clone for GroundAsset
Source§fn clone(&self) -> GroundAsset
fn clone(&self) -> GroundAsset
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GroundAsset
impl Debug for GroundAsset
Source§impl Default for GroundAsset
impl Default for GroundAsset
Source§impl Display for GroundAsset
impl Display for GroundAsset
Source§impl Interpolatable for GroundAsset
impl Interpolatable for GroundAsset
Source§fn interpolate(
self,
epoch: Epoch,
states: &[Self],
) -> Result<Self, InterpolationError>
fn interpolate( self, epoch: Epoch, states: &[Self], ) -> Result<Self, InterpolationError>
Source§fn export_params() -> Vec<StateParameter>
fn export_params() -> Vec<StateParameter>
Source§impl LowerExp for GroundAsset
impl LowerExp for GroundAsset
Source§impl PartialEq for GroundAsset
impl PartialEq for GroundAsset
Source§impl ScalarSensitivityT<GroundAsset, GroundAsset, InterlinkTxSpacecraft> for ScalarSensitivity<GroundAsset, GroundAsset, InterlinkTxSpacecraft>
impl ScalarSensitivityT<GroundAsset, GroundAsset, InterlinkTxSpacecraft> for ScalarSensitivity<GroundAsset, GroundAsset, InterlinkTxSpacecraft>
Source§fn new(
msr_type: MeasurementType,
msr: &Measurement,
rx: &GroundAsset,
tx: &InterlinkTxSpacecraft,
almanac: Arc<Almanac>,
) -> Result<Self, ODError>
fn new( msr_type: MeasurementType, msr: &Measurement, rx: &GroundAsset, tx: &InterlinkTxSpacecraft, almanac: Arc<Almanac>, ) -> Result<Self, ODError>
First, we ensure that the transmitter vehicle is expressed in the same frame as the ground asset. Then we compute the AER as seen from the ground asset.
Source§impl State for GroundAsset
impl State for GroundAsset
Source§fn set(&mut self, epoch: Epoch, vector: &OVector<f64, Const<42>>)
fn set(&mut self, epoch: Epoch, vector: &OVector<f64, Const<42>>)
Vector is expected to be organized as such: [Latitude, Longitude, Height, ]
type VecLength = Const<{ 6 + 36 }>
Source§fn to_vector(&self) -> OVector<f64, Self::VecLength>
fn to_vector(&self) -> OVector<f64, Self::VecLength>
Source§fn stm(&self) -> Result<OMatrix<f64, Self::Size, Self::Size>, DynamicsError>
fn stm(&self) -> Result<OMatrix<f64, Self::Size, Self::Size>, DynamicsError>
Source§fn add(self, other: OVector<f64, Self::Size>) -> Self
fn add(self, other: OVector<f64, Self::Size>) -> Self
Source§fn value(&self, param: StateParameter) -> Result<f64, StateError>
fn value(&self, param: StateParameter) -> Result<f64, StateError>
Source§fn zeros() -> Self
fn zeros() -> Self
Source§fn to_state_vector(&self) -> OVector<f64, Self::Size>
fn to_state_vector(&self) -> OVector<f64, Self::Size>
Source§fn set_with_delta_seconds(
self,
delta_t_s: f64,
vector: &OVector<f64, Self::VecLength>,
) -> Self
fn set_with_delta_seconds( self, delta_t_s: f64, vector: &OVector<f64, Self::VecLength>, ) -> Self
Source§fn set_value(
&mut self,
param: StateParameter,
_val: f64,
) -> Result<(), StateError>
fn set_value( &mut self, param: StateParameter, _val: f64, ) -> Result<(), StateError>
value is available CANNOT be also set for that parameter (it’s a much harder problem!)Source§impl TrackerSensitivity<GroundAsset, GroundAsset> for InterlinkTxSpacecraftwhere
DefaultAllocator: Allocator<<Spacecraft as State>::Size> + Allocator<<Spacecraft as State>::VecLength> + Allocator<<Spacecraft as State>::Size, <Spacecraft as State>::Size>,
impl TrackerSensitivity<GroundAsset, GroundAsset> for InterlinkTxSpacecraftwhere
DefaultAllocator: Allocator<<Spacecraft as State>::Size> + Allocator<<Spacecraft as State>::VecLength> + Allocator<<Spacecraft as State>::Size, <Spacecraft as State>::Size>,
Source§fn h_tilde<M: DimName>(
&self,
msr: &Measurement,
msr_types: &IndexSet<MeasurementType>,
rx: &GroundAsset,
almanac: Arc<Almanac>,
) -> Result<OMatrix<f64, M, <GroundAsset as State>::Size>, ODError>
fn h_tilde<M: DimName>( &self, msr: &Measurement, msr_types: &IndexSet<MeasurementType>, rx: &GroundAsset, almanac: Arc<Almanac>, ) -> Result<OMatrix<f64, M, <GroundAsset as State>::Size>, ODError>
Source§impl TrackingDevice<GroundAsset> for InterlinkTxSpacecraft
impl TrackingDevice<GroundAsset> for InterlinkTxSpacecraft
Source§fn measure_instantaneous(
&mut self,
rx: GroundAsset,
rng: Option<&mut Pcg64Mcg>,
almanac: Arc<Almanac>,
) -> Result<Option<Measurement>, ODError>
fn measure_instantaneous( &mut self, rx: GroundAsset, rng: Option<&mut Pcg64Mcg>, almanac: Arc<Almanac>, ) -> Result<Option<Measurement>, ODError>
Returns the Range and Doppler from pnt vehicle to ground asset (i.e. the opposed AER range and doppler data.)
Source§fn measurement_covar(
&self,
msr_type: MeasurementType,
epoch: Epoch,
) -> Result<f64, ODError>
fn measurement_covar( &self, msr_type: MeasurementType, epoch: Epoch, ) -> Result<f64, ODError>
Returns the measurement noise of this ground station.
§Methodology
Noises are modeled using a [StochasticNoise] process, defined by the sigma on the turn-on bias and on the steady state noise. The measurement noise is computed assuming that all measurements are independent variables, i.e. the measurement matrix is a diagonal matrix. The first item in the diagonal is the range noise (in km), set to the square of the steady state sigma. The second item is the Doppler noise (in km/s), set to the square of the steady state sigma of that Gauss Markov process.
Source§fn measurement_types(&self) -> &IndexSet<MeasurementType>
fn measurement_types(&self) -> &IndexSet<MeasurementType>
Source§fn location(
&self,
epoch: Epoch,
frame: Frame,
almanac: Arc<Almanac>,
) -> AlmanacResult<Orbit>
fn location( &self, epoch: Epoch, frame: Frame, almanac: Arc<Almanac>, ) -> AlmanacResult<Orbit>
Source§fn measure(
&mut self,
epoch: Epoch,
traj: &Traj<GroundAsset>,
rng: Option<&mut Pcg64Mcg>,
almanac: Arc<Almanac>,
) -> Result<Option<Measurement>, ODError>
fn measure( &mut self, epoch: Epoch, traj: &Traj<GroundAsset>, rng: Option<&mut Pcg64Mcg>, almanac: Arc<Almanac>, ) -> Result<Option<Measurement>, ODError>
fn measurement_bias( &self, msr_type: MeasurementType, _epoch: Epoch, ) -> Result<f64, ODError>
fn measurement_covar_matrix<M: DimName>(
&self,
msr_types: &IndexSet<MeasurementType>,
epoch: Epoch,
) -> Result<OMatrix<f64, M, M>, ODError>where
DefaultAllocator: Allocator<M, M>,
fn measurement_bias_vector<M: DimName>(
&self,
msr_types: &IndexSet<MeasurementType>,
epoch: Epoch,
) -> Result<OVector<f64, M>, ODError>where
DefaultAllocator: Allocator<M>,
impl Copy for GroundAsset
impl StructuralPartialEq for GroundAsset
Auto Trait Implementations§
impl Freeze for GroundAsset
impl RefUnwindSafe for GroundAsset
impl Send for GroundAsset
impl Sync for GroundAsset
impl Unpin for GroundAsset
impl UnsafeUnpin for GroundAsset
impl UnwindSafe for GroundAsset
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.