D
- type of the detectorT
- type of the field elementspublic class FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends org.hipparchus.CalculusFieldElement<T>> extends FieldAbstractDetector<FieldImpulseManeuver<D,T>,T>
This class implements an impulse maneuver as a discrete event
that can be provided to any Propagator
and mirrors the standard version
ImpulseManeuver
.
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 FieldSpacecraftState
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.
The norm through which the delta-V maps to the mass consumption is chosen via the
enum Control3DVectorCostType
. Default is Euclidean.
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 ...
FieldPropagator.addEventDetector(FieldEventDetector)
,
ImpulseManeuver
DEFAULT_MAX_ITER, DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
Constructor and Description |
---|
FieldImpulseManeuver(D trigger,
AttitudeProvider attitudeOverride,
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> deltaVSat,
T isp)
Build a new instance.
|
FieldImpulseManeuver(D trigger,
AttitudeProvider attitudeOverride,
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> deltaVSat,
T isp,
Control3DVectorCostType control3DVectorCostType)
Build a new instance.
|
FieldImpulseManeuver(D trigger,
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> deltaVSat,
T isp)
Build a new instance.
|
Modifier and Type | Method and Description |
---|---|
protected FieldImpulseManeuver<D,T> |
create(FieldAdaptableInterval<T> newMaxCheck,
T newThreshold,
int newMaxIter,
FieldEventHandler<T> fieldEventHandler)
Build a new instance.
|
T |
g(FieldSpacecraftState<T> fieldSpacecraftState)
Compute the value of the switching function.
|
AttitudeProvider |
getAttitudeOverride()
Get the Attitude Provider to use during maneuver.
|
Control3DVectorCostType |
getControl3DVectorCostType()
Get the control vector's cost type.
|
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> |
getDeltaVSat()
Get the velocity increment in satellite frame.
|
T |
getIsp()
Get the specific impulse.
|
FieldEventDetector<T> |
getTrigger()
Get the triggering event.
|
void |
init(FieldSpacecraftState<T> s0,
FieldAbsoluteDate<T> t)
Initialize event handler at the start of a propagation.
|
getHandler, getMaxCheckInterval, getMaxIterationCount, getThreshold, isForward, withHandler, withMaxCheck, withMaxCheck, withMaxIter, withThreshold
public FieldImpulseManeuver(D trigger, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> deltaVSat, T isp)
trigger
- triggering eventdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)public FieldImpulseManeuver(D trigger, AttitudeProvider attitudeOverride, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> deltaVSat, T isp)
trigger
- triggering eventattitudeOverride
- the attitude provider to use for the maneuverdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)public FieldImpulseManeuver(D trigger, AttitudeProvider attitudeOverride, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> deltaVSat, T isp, Control3DVectorCostType control3DVectorCostType)
trigger
- triggering eventattitudeOverride
- the attitude provider to use for the maneuverdeltaVSat
- velocity increment in satellite frameisp
- engine specific impulse (s)control3DVectorCostType
- increment's norm for mass consumptionprotected FieldImpulseManeuver<D,T> create(FieldAdaptableInterval<T> newMaxCheck, T newThreshold, int newMaxIter, FieldEventHandler<T> fieldEventHandler)
create
in class FieldAbstractDetector<FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends org.hipparchus.CalculusFieldElement<T>>,T extends org.hipparchus.CalculusFieldElement<T>>
newMaxCheck
- maximum checking intervalnewThreshold
- convergence threshold (s)newMaxIter
- maximum number of iterations in the event time searchfieldEventHandler
- event handler to call at event occurrencespublic void init(FieldSpacecraftState<T> s0, FieldAbsoluteDate<T> 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
init
in interface FieldEventDetector<T extends org.hipparchus.CalculusFieldElement<T>>
init
in class FieldAbstractDetector<FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends org.hipparchus.CalculusFieldElement<T>>,T extends org.hipparchus.CalculusFieldElement<T>>
s0
- initial statet
- target time for the integrationpublic T g(FieldSpacecraftState<T> fieldSpacecraftState)
g
in interface FieldEventDetector<T extends org.hipparchus.CalculusFieldElement<T>>
g
in class FieldAbstractDetector<FieldImpulseManeuver<D extends FieldEventDetector<T>,T extends org.hipparchus.CalculusFieldElement<T>>,T extends org.hipparchus.CalculusFieldElement<T>>
fieldSpacecraftState
- the current state information: date, kinematics, attitudepublic AttitudeProvider getAttitudeOverride()
public FieldEventDetector<T> getTrigger()
public org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> getDeltaVSat()
public T getIsp()
public Control3DVectorCostType getControl3DVectorCostType()
Copyright © 2002-2023 CS GROUP. All rights reserved.