Class SpacecraftState
- java.lang.Object
-
- org.orekit.propagation.SpacecraftState
-
- All Implemented Interfaces:
Serializable
,TimeInterpolable<SpacecraftState>
,TimeShiftable<SpacecraftState>
,TimeStamped
public class SpacecraftState extends Object implements TimeStamped, TimeShiftable<SpacecraftState>, TimeInterpolable<SpacecraftState>, Serializable
This class is the representation of a complete state holding orbit, attitude and mass information at a given date.It contains an
orbital state
at a currentAbsoluteDate
both handled by anOrbit
, plus the current mass and attitude. Orbit and state are guaranteed to be consistent in terms of date and reference frame. The spacecraft state may also contain additional states, which are simply named double arrays which can hold any user-defined data.The state can be slightly shifted to close dates. This shift is based on a simple Keplerian model for orbit, a linear extrapolation for attitude taking the spin rate into account and no mass change. It is not intended as a replacement for proper orbit and attitude propagation but should be sufficient for either small time shifts or coarse accuracy.
The instance
SpacecraftState
is guaranteed to be immutable.- Author:
- Fabien Maussion, Véronique Pommier-Maurussane, Luc Maisonobe
- See Also:
NumericalPropagator
, Serialized Form
-
-
Constructor Summary
Constructors Constructor Description SpacecraftState(Orbit orbit)
Build a spacecraft state from orbit only.SpacecraftState(Orbit orbit, double mass)
Create a new instance from orbit and mass.SpacecraftState(Orbit orbit, double mass, Map<String,double[]> additional)
Create a new instance from orbit and mass.SpacecraftState(Orbit orbit, Map<String,double[]> additional)
Build a spacecraft state from orbit only.SpacecraftState(Orbit orbit, Attitude attitude)
Build a spacecraft state from orbit and attitude provider.SpacecraftState(Orbit orbit, Attitude attitude, double mass)
Build a spacecraft state from orbit, attitude provider and mass.SpacecraftState(Orbit orbit, Attitude attitude, double mass, Map<String,double[]> additional)
Build a spacecraft state from orbit, attitude provider and mass.SpacecraftState(Orbit orbit, Attitude attitude, Map<String,double[]> additional)
Build a spacecraft state from orbit and attitude provider.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description SpacecraftState
addAdditionalState(String name, double... value)
Add an additional state.void
ensureCompatibleAdditionalStates(SpacecraftState state)
Check if two instances have the same set of additional states available.double
getA()
Get the semi-major axis.double[]
getAdditionalState(String name)
Get an additional state.Map<String,double[]>
getAdditionalStates()
Get an unmodifiable map of additional states.Attitude
getAttitude()
Get the attitude.AbsoluteDate
getDate()
Get the date.double
getE()
Get the eccentricity.double
getEquinoctialEx()
Get the first component of the eccentricity vector (as per equinoctial parameters).double
getEquinoctialEy()
Get the second component of the eccentricity vector (as per equinoctial parameters).Frame
getFrame()
Get the inertial frame.double
getHx()
Get the first component of the inclination vector (as per equinoctial parameters).double
getHy()
Get the second component of the inclination vector (as per equinoctial parameters).double
getI()
Get the inclination.double
getKeplerianMeanMotion()
Get the Keplerian mean motion.double
getKeplerianPeriod()
Get the Keplerian period.double
getLE()
Get the eccentric longitude argument (as per equinoctial parameters).double
getLM()
Get the mean longitude argument (as per equinoctial parameters).double
getLv()
Get the true longitude argument (as per equinoctial parameters).double
getMass()
Gets the current mass.double
getMu()
Get the central attraction coefficient.Orbit
getOrbit()
Gets the current orbit.TimeStampedPVCoordinates
getPVCoordinates()
Get theTimeStampedPVCoordinates
in orbit definition frame.TimeStampedPVCoordinates
getPVCoordinates(Frame outputFrame)
Get theTimeStampedPVCoordinates
in given output frame.boolean
hasAdditionalState(String name)
Check if an additional state is available.SpacecraftState
interpolate(AbsoluteDate date, Stream<SpacecraftState> sample)
Get an interpolated instance.SpacecraftState
shiftedBy(double dt)
Get a time-shifted state.Transform
toTransform()
Compute the transform from orbite/attitude reference frame to spacecraft frame.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.orekit.time.TimeInterpolable
interpolate
-
-
-
-
Constructor Detail
-
SpacecraftState
public SpacecraftState(Orbit orbit)
Build a spacecraft state from orbit only.Attitude and mass are set to unspecified non-null arbitrary values.
- Parameters:
orbit
- the orbit
-
SpacecraftState
public SpacecraftState(Orbit orbit, Attitude attitude) throws IllegalArgumentException
Build a spacecraft state from orbit and attitude provider.Mass is set to an unspecified non-null arbitrary value.
- Parameters:
orbit
- the orbitattitude
- attitude- Throws:
IllegalArgumentException
- if orbit and attitude dates or frames are not equal
-
SpacecraftState
public SpacecraftState(Orbit orbit, double mass)
Create a new instance from orbit and mass.Attitude law is set to an unspecified default attitude.
- Parameters:
orbit
- the orbitmass
- the mass (kg)
-
SpacecraftState
public SpacecraftState(Orbit orbit, Attitude attitude, double mass) throws IllegalArgumentException
Build a spacecraft state from orbit, attitude provider and mass.- Parameters:
orbit
- the orbitattitude
- attitudemass
- the mass (kg)- Throws:
IllegalArgumentException
- if orbit and attitude dates or frames are not equal
-
SpacecraftState
public SpacecraftState(Orbit orbit, Map<String,double[]> additional)
Build a spacecraft state from orbit only.Attitude and mass are set to unspecified non-null arbitrary values.
- Parameters:
orbit
- the orbitadditional
- additional states
-
SpacecraftState
public SpacecraftState(Orbit orbit, Attitude attitude, Map<String,double[]> additional) throws IllegalArgumentException
Build a spacecraft state from orbit and attitude provider.Mass is set to an unspecified non-null arbitrary value.
- Parameters:
orbit
- the orbitattitude
- attitudeadditional
- additional states- Throws:
IllegalArgumentException
- if orbit and attitude dates or frames are not equal
-
SpacecraftState
public SpacecraftState(Orbit orbit, double mass, Map<String,double[]> additional)
Create a new instance from orbit and mass.Attitude law is set to an unspecified default attitude.
- Parameters:
orbit
- the orbitmass
- the mass (kg)additional
- additional states
-
SpacecraftState
public SpacecraftState(Orbit orbit, Attitude attitude, double mass, Map<String,double[]> additional) throws IllegalArgumentException
Build a spacecraft state from orbit, attitude provider and mass.- Parameters:
orbit
- the orbitattitude
- attitudemass
- the mass (kg)additional
- additional states (may be null if no additional states are available)- Throws:
IllegalArgumentException
- if orbit and attitude dates or frames are not equal
-
-
Method Detail
-
addAdditionalState
public SpacecraftState addAdditionalState(String name, double... value)
Add an additional state.SpacecraftState
instances are immutable, so this method does not change the instance, but rather creates a new instance, which has the same orbit, attitude, mass and additional states as the original instance, except it also has the specified state. If the original instance already had an additional state with the same name, it will be overridden. If it did not have any additional state with that name, the new instance will have one more additional state than the original instance.- Parameters:
name
- name of the additional statevalue
- value of the additional state- Returns:
- a new instance, with the additional state added
- See Also:
hasAdditionalState(String)
,getAdditionalState(String)
,getAdditionalStates()
-
shiftedBy
public SpacecraftState shiftedBy(double dt)
Get a time-shifted state.The state can be slightly shifted to close dates. This shift is based on simple models. For orbits, the model is a Keplerian one if no derivatives are available in the orbit, or Keplerian plus quadratic effect of the non-Keplerian acceleration if derivatives are available. For attitude, a polynomial model is used. Neither mass nor additional states change. Shifting is not intended as a replacement for proper orbit and attitude propagation but should be sufficient for small time shifts or coarse accuracy.
As a rough order of magnitude, the following table shows the extrapolation errors obtained between this simple shift method and an
numerical propagator
for a low Earth Sun Synchronous Orbit, with a 20x20 gravity field, Sun and Moon third bodies attractions, drag and solar radiation pressure. Beware that these results will be different for other orbits.Extrapolation Error interpolation time (s) position error without derivatives (m) position error with derivatives (m) 60 18 1.1 120 72 9.1 300 447 140 600 1601 1067 900 3141 3307 - Specified by:
shiftedBy
in interfaceTimeShiftable<SpacecraftState>
- Parameters:
dt
- time shift in seconds- Returns:
- a new state, shifted with respect to the instance (which is immutable) except for the mass and additional states which stay unchanged
-
interpolate
public SpacecraftState interpolate(AbsoluteDate date, Stream<SpacecraftState> sample)
Get an interpolated instance.Note that the state of the current instance may not be used in the interpolation process, only its type and non interpolable fields are used (for example central attraction coefficient or frame when interpolating orbits). The interpolable fields taken into account are taken only from the states of the sample points. So if the state of the instance must be used, the instance should be included in the sample points.
Note that this method is designed for small samples only (say up to about 10-20 points) so it can be implemented using polynomial interpolation (typically Hermite interpolation). Using too much points may induce Runge's phenomenon and numerical problems (including NaN appearing).
The additional states that are interpolated are the ones already present in the instance. The sample instances must therefore have at least the same additional states has the instance. They may have more additional states, but the extra ones will be ignored.
As this implementation of interpolation is polynomial, it should be used only with small samples (about 10-20 points) in order to avoid Runge's phenomenon and numerical problems (including NaN appearing).
- Specified by:
interpolate
in interfaceTimeInterpolable<SpacecraftState>
- Parameters:
date
- interpolation datesample
- sample points on which interpolation should be done- Returns:
- a new instance, interpolated at specified date
-
getOrbit
public Orbit getOrbit()
Gets the current orbit.- Returns:
- the orbit
-
getDate
public AbsoluteDate getDate()
Get the date.- Specified by:
getDate
in interfaceTimeStamped
- Returns:
- date
-
getFrame
public Frame getFrame()
Get the inertial frame.- Returns:
- the frame
-
hasAdditionalState
public boolean hasAdditionalState(String name)
Check if an additional state is available.- Parameters:
name
- name of the additional state- Returns:
- true if the additional state is available
- See Also:
addAdditionalState(String, double[])
,getAdditionalState(String)
,getAdditionalStates()
-
ensureCompatibleAdditionalStates
public void ensureCompatibleAdditionalStates(SpacecraftState state) throws org.hipparchus.exception.MathIllegalStateException
Check if two instances have the same set of additional states available.Only the names and dimensions of the additional states are compared, not their values.
- Parameters:
state
- state to compare to instance- Throws:
org.hipparchus.exception.MathIllegalStateException
- if an additional state does not have the same dimension in both states
-
getAdditionalState
public double[] getAdditionalState(String name)
Get an additional state.- Parameters:
name
- name of the additional state- Returns:
- value of the additional state
- See Also:
addAdditionalState(String, double[])
,hasAdditionalState(String)
,getAdditionalStates()
-
getAdditionalStates
public Map<String,double[]> getAdditionalStates()
Get an unmodifiable map of additional states.- Returns:
- unmodifiable map of additional states
- See Also:
addAdditionalState(String, double[])
,hasAdditionalState(String)
,getAdditionalState(String)
-
toTransform
public Transform toTransform()
Compute the transform from orbite/attitude reference frame to spacecraft frame.The spacecraft frame origin is at the point defined by the orbit, and its orientation is defined by the attitude.
- Returns:
- transform from specified frame to current spacecraft frame
-
getMu
public double getMu()
Get the central attraction coefficient.- Returns:
- mu central attraction coefficient (m^3/s^2)
-
getKeplerianPeriod
public double getKeplerianPeriod()
Get the Keplerian period.The Keplerian period is computed directly from semi major axis and central acceleration constant.
- Returns:
- Keplerian period in seconds
-
getKeplerianMeanMotion
public double getKeplerianMeanMotion()
Get the Keplerian mean motion.The Keplerian mean motion is computed directly from semi major axis and central acceleration constant.
- Returns:
- Keplerian mean motion in radians per second
-
getA
public double getA()
Get the semi-major axis.- Returns:
- semi-major axis (m)
-
getEquinoctialEx
public double getEquinoctialEx()
Get the first component of the eccentricity vector (as per equinoctial parameters).- Returns:
- e cos(ω + Ω), first component of eccentricity vector
- See Also:
getE()
-
getEquinoctialEy
public double getEquinoctialEy()
Get the second component of the eccentricity vector (as per equinoctial parameters).- Returns:
- e sin(ω + Ω), second component of the eccentricity vector
- See Also:
getE()
-
getHx
public double getHx()
Get the first component of the inclination vector (as per equinoctial parameters).- Returns:
- tan(i/2) cos(Ω), first component of the inclination vector
- See Also:
getI()
-
getHy
public double getHy()
Get the second component of the inclination vector (as per equinoctial parameters).- Returns:
- tan(i/2) sin(Ω), second component of the inclination vector
- See Also:
getI()
-
getLv
public double getLv()
Get the true longitude argument (as per equinoctial parameters).
-
getLE
public double getLE()
Get the eccentric longitude argument (as per equinoctial parameters).
-
getLM
public double getLM()
Get the mean longitude argument (as per equinoctial parameters).
-
getE
public double getE()
Get the eccentricity.- Returns:
- eccentricity
- See Also:
getEquinoctialEx()
,getEquinoctialEy()
-
getI
public double getI()
Get the inclination.
-
getPVCoordinates
public TimeStampedPVCoordinates getPVCoordinates()
Get theTimeStampedPVCoordinates
in orbit definition frame. Compute the position and velocity of the satellite. This method caches its results, and recompute them only when the method is called with a new value for mu. The result is provided as a reference to the internally cachedTimeStampedPVCoordinates
, so the caller is responsible to copy it in a separateTimeStampedPVCoordinates
if it needs to keep the value for a while.- Returns:
- pvCoordinates in orbit definition frame
-
getPVCoordinates
public TimeStampedPVCoordinates getPVCoordinates(Frame outputFrame)
Get theTimeStampedPVCoordinates
in given output frame. Compute the position and velocity of the satellite. This method caches its results, and recompute them only when the method is called with a new value for mu. The result is provided as a reference to the internally cachedTimeStampedPVCoordinates
, so the caller is responsible to copy it in a separateTimeStampedPVCoordinates
if it needs to keep the value for a while.- Parameters:
outputFrame
- frame in which coordinates should be defined- Returns:
- pvCoordinates in orbit definition frame
-
getAttitude
public Attitude getAttitude()
Get the attitude.- Returns:
- the attitude.
-
getMass
public double getMass()
Gets the current mass.- Returns:
- the mass (kg)
-
-