Class ImpulseManeuver

  • All Implemented Interfaces:
    EventDetector

    public class ImpulseManeuver
    extends AbstractDetector<ImpulseManeuver>
    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 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.

    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 ...

    Author:
    Luc Maisonobe
    See Also:
    Propagator.addEventDetector(EventDetector)
    • Constructor Detail

      • ImpulseManeuver

        public ImpulseManeuver​(EventDetector trigger,
                               Vector3D deltaVSat,
                               double isp)
        Build a new instance.
        Parameters:
        trigger - triggering event
        deltaVSat - velocity increment in satellite frame
        isp - engine specific impulse (s)
      • ImpulseManeuver

        public ImpulseManeuver​(EventDetector trigger,
                               AttitudeProvider attitudeOverride,
                               Vector3D deltaVSat,
                               double isp)
        Build a new instance.
        Parameters:
        trigger - triggering event
        attitudeOverride - the attitude provider to use for the maneuver
        deltaVSat - velocity increment in satellite frame
        isp - engine specific impulse (s)
      • ImpulseManeuver

        public ImpulseManeuver​(EventDetector trigger,
                               AttitudeProvider attitudeOverride,
                               Vector3D deltaVSat,
                               double isp,
                               Control3DVectorCostType control3DVectorCostType)
        Build a new instance.
        Parameters:
        trigger - triggering event
        attitudeOverride - the attitude provider to use for the maneuver
        deltaVSat - velocity increment in satellite frame
        isp - engine specific impulse (s)
        control3DVectorCostType - increment's norm for mass consumption
      • ImpulseManeuver

        protected ImpulseManeuver​(AdaptableInterval maxCheck,
                                  double threshold,
                                  int maxIter,
                                  EventHandler handler,
                                  EventDetector trigger,
                                  AttitudeProvider attitudeOverride,
                                  Vector3D deltaVSat,
                                  double isp,
                                  Control3DVectorCostType control3DVectorCostType)
        Protected constructor with full parameters.

        This constructor is not public as users are expected to use the builder API with the various withXxx() methods to set up the instance in a readable manner without using a huge amount of parameters.

        Parameters:
        maxCheck - maximum checking interval
        threshold - convergence threshold (s)
        maxIter - maximum number of iterations in the event time search
        handler - event handler to call at event occurrences
        trigger - triggering event
        attitudeOverride - the attitude provider to use for the maneuver
        deltaVSat - velocity increment in satellite frame
        isp - engine specific impulse (s)
        control3DVectorCostType - increment's norm for mass consumption
        Since:
        6.1
    • Method Detail

      • create

        protected ImpulseManeuver create​(AdaptableInterval newMaxCheck,
                                         double newThreshold,
                                         int newMaxIter,
                                         EventHandler newHandler)
        Build a new instance.
        Specified by:
        create in class AbstractDetector<ImpulseManeuver>
        Parameters:
        newMaxCheck - maximum checking interval (s)
        newThreshold - convergence threshold (s)
        newMaxIter - maximum number of iterations in the event time search
        newHandler - 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 interface EventDetector
        Overrides:
        init in class AbstractDetector<ImpulseManeuver>
        Parameters:
        s0 - initial state
        t - 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 interface EventDetector
        Specified by:
        g in class AbstractDetector<ImpulseManeuver>
        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 EventDetector getTrigger()
        Get the triggering event.
        Returns:
        triggering event
      • getDeltaVSat

        public 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
      • getControl3DVectorCostType

        public Control3DVectorCostType getControl3DVectorCostType()
        Get the control vector's cost type.
        Returns:
        control cost type
        Since:
        12.0