T
- class type for the generic versionpublic class ImpulseManeuver<T extends EventDetector> extends AbstractDetector<ImpulseManeuver<T>>
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 a RESET_STATE
event (the stop event from the underlying object is therefore filtered out).
In the simple cases, the underlying event detector may be a basic
date event
, but it
can also be a more elaborate apside event
for apogee
maneuvers for example.
The maneuver is defined by a single velocity increment.
If no AttitudeProvider is given, the current attitude of the spacecraft,
defined by the current spacecraft state, will be used as the
AttitudeProvider
so the velocity increment should be given in
the same pseudoinertial frame as the SpacecraftState
used to
construct the propagator that will handle the maneuver.
If an AttitudeProvider is given, the velocity increment given should be
defined appropriately in consideration of that provider. So, a typical
case for tangential maneuvers is to provide a LOF aligned
attitude provider along with a velocity increment defined in accordance with
that LOF aligned attitude provider; e.g. if the LOF aligned attitude provider
was constructed using LOFType.VNC the velocity increment should be
provided in VNC coordinates.
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 ...
Propagator.addEventDetector(EventDetector)
DEFAULT_MAX_ITER, DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
Constructor and Description |
---|
ImpulseManeuver(T trigger,
AttitudeProvider attitudeOverride,
Vector3D deltaVSat,
double isp)
Build a new instance.
|
ImpulseManeuver(T trigger,
Vector3D deltaVSat,
double isp)
Build a new instance.
|
Modifier and Type | Method and 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.
|
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.
|
eventOccurred, getHandler, getMaxCheckInterval, getMaxIterationCount, getThreshold, isForward, resetState, withHandler, withMaxCheck, withMaxIter, withThreshold
public ImpulseManeuver(T trigger, Vector3D deltaVSat, double isp)
trigger
- triggering eventdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)public ImpulseManeuver(T trigger, AttitudeProvider attitudeOverride, Vector3D deltaVSat, double isp)
trigger
- triggering eventattitudeOverride
- the attitude provider to use for the maneuverdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)protected ImpulseManeuver<T> create(double newMaxCheck, double newThreshold, int newMaxIter, EventHandler<? super ImpulseManeuver<T>> newHandler)
create
in class AbstractDetector<ImpulseManeuver<T extends EventDetector>>
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 occurrencespublic void init(SpacecraftState s0, AbsoluteDate t)
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)
.
init
in interface EventDetector
init
in class AbstractDetector<ImpulseManeuver<T extends EventDetector>>
s0
- initial statet
- target time for the integrationpublic double g(SpacecraftState s)
g
in interface EventDetector
g
in class AbstractDetector<ImpulseManeuver<T extends EventDetector>>
s
- the current state information: date, kinematics, attitudepublic AttitudeProvider getAttitudeOverride()
public T getTrigger()
public Vector3D getDeltaVSat()
public double getIsp()
Copyright © 2002-2022 CS GROUP. All rights reserved.