Class ImpulseManeuver<T extends EventDetector>
- java.lang.Object
-
- org.orekit.propagation.events.AbstractDetector<ImpulseManeuver<T>>
-
- org.orekit.forces.maneuvers.ImpulseManeuver<T>
-
- Type Parameters:
T
- class type for the generic version
- All Implemented Interfaces:
Serializable
,EventDetector
public class ImpulseManeuver<T extends EventDetector> extends AbstractDetector<ImpulseManeuver<T>>
Impulse maneuver model.This class implements an impulse maneuver as a discrete event that can be provided to any
Propagator
.The maneuver is triggered when an underlying event generates a
STOP
event, in which case this class will generate aRESET_STATE
event (the stop event from the underlying object is therefore filtered out). In the simple cases, the underlying event detector may be a basicdate event
, but it can also be a more elaborateapside event
for apogee maneuvers for example.The maneuver is defined by a single velocity increment in satellite frame. The current attitude of the spacecraft, defined by the current spacecraft state, will be used to compute the velocity direction in inertial frame. A typical case for tangential maneuvers is to use a
LOF aligned
attitude provider for state propagation and a velocity increment along the +X satellite axis.Beware that the triggering event detector must behave properly both before and after maneuver. If for example a node detector is used to trigger an inclination maneuver and the maneuver change the orbit to an equatorial one, the node detector will fail just after the maneuver, being unable to find a node on an equatorial orbit! This is a real case that has been encountered during validation ...
- Author:
- Luc Maisonobe
- See Also:
Propagator.addEventDetector(EventDetector)
, Serialized Form
-
-
Field Summary
-
Fields inherited from class org.orekit.propagation.events.AbstractDetector
DEFAULT_MAX_ITER, DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
-
-
Constructor Summary
Constructors Constructor Description ImpulseManeuver(T trigger, org.hipparchus.geometry.euclidean.threed.Vector3D deltaVSat, double isp)
Build a new instance.ImpulseManeuver(T trigger, AttitudeProvider attitudeOverride, org.hipparchus.geometry.euclidean.threed.Vector3D deltaVSat, double isp)
Build a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ImpulseManeuver<T>
create(double newMaxCheck, double newThreshold, int newMaxIter, EventHandler<? super ImpulseManeuver<T>> newHandler)
Build a new instance.double
g(SpacecraftState s)
Compute the value of the switching function.AttitudeProvider
getAttitudeOverride()
Get the Attitude Provider to use during maneuver.org.hipparchus.geometry.euclidean.threed.Vector3D
getDeltaVSat()
Get the velocity increment in satellite frame.double
getIsp()
Get the specific impulse.T
getTrigger()
Get the triggering event.void
init(SpacecraftState s0, AbsoluteDate t)
Initialize event handler at the start of a propagation.-
Methods inherited from class org.orekit.propagation.events.AbstractDetector
eventOccurred, getHandler, getMaxCheckInterval, getMaxIterationCount, getThreshold, isForward, resetState, withHandler, withMaxCheck, withMaxIter, withThreshold
-
-
-
-
Constructor Detail
-
ImpulseManeuver
public ImpulseManeuver(T trigger, org.hipparchus.geometry.euclidean.threed.Vector3D deltaVSat, double isp)
Build a new instance.- Parameters:
trigger
- triggering eventdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)
-
ImpulseManeuver
public ImpulseManeuver(T trigger, AttitudeProvider attitudeOverride, org.hipparchus.geometry.euclidean.threed.Vector3D deltaVSat, double isp)
Build a new instance.- Parameters:
trigger
- triggering eventattitudeOverride
- the attitude provider to use for the maneuverdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)
-
-
Method Detail
-
create
protected ImpulseManeuver<T> create(double newMaxCheck, double newThreshold, int newMaxIter, EventHandler<? super ImpulseManeuver<T>> newHandler)
Build a new instance.- Specified by:
create
in classAbstractDetector<ImpulseManeuver<T extends EventDetector>>
- Parameters:
newMaxCheck
- maximum checking interval (s)newThreshold
- convergence threshold (s)newMaxIter
- maximum number of iterations in the event time searchnewHandler
- event handler to call at event occurrences- Returns:
- a new instance of the appropriate sub-type
-
init
public void init(SpacecraftState s0, AbsoluteDate t)
Initialize event handler at the start of a propagation.This method is called once at the start of the propagation. It may be used by the event handler to initialize some internal data if needed.
The default implementation does nothing
This implementation sets the direction of propagation and initializes the event handler. If a subclass overrides this method it should call
super.init(s0, t)
.- Specified by:
init
in interfaceEventDetector
- Overrides:
init
in classAbstractDetector<ImpulseManeuver<T extends EventDetector>>
- Parameters:
s0
- initial statet
- target time for the integration
-
g
public double g(SpacecraftState s)
Compute the value of the switching function. This function must be continuous (at least in its roots neighborhood), as the integrator will need to find its roots to locate the events.- Specified by:
g
in interfaceEventDetector
- Specified by:
g
in classAbstractDetector<ImpulseManeuver<T extends EventDetector>>
- Parameters:
s
- the current state information: date, kinematics, attitude- Returns:
- value of the switching function
-
getAttitudeOverride
public AttitudeProvider getAttitudeOverride()
Get the Attitude Provider to use during maneuver.- Returns:
- the attitude provider
-
getTrigger
public T getTrigger()
Get the triggering event.- Returns:
- triggering event
-
getDeltaVSat
public org.hipparchus.geometry.euclidean.threed.Vector3D getDeltaVSat()
Get the velocity increment in satellite frame.- Returns:
- velocity increment in satellite frame
-
getIsp
public double getIsp()
Get the specific impulse.- Returns:
- specific impulse
-
-