Class ImpulseManeuver

java.lang.Object
org.orekit.forces.maneuvers.AbstractImpulseManeuver
org.orekit.forces.maneuvers.ImpulseManeuver
All Implemented Interfaces:
DetectorModifier, EventDetector

public class ImpulseManeuver extends AbstractImpulseManeuver implements DetectorModifier
Impulse maneuver model.

This class implements an impulse maneuver as a discrete event that can be provided to any Propagator.

The maneuver is executed when an underlying event is triggered and the handler returns anything but CONTINUE, in which case this class will generate a RESET_STATE event. By default, the detection settings are those of the trigger. 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 velocity increment is defined via ImpulseProvider. 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:
  • Constructor Details

    • 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, ImpulseProvider impulseProvider, double isp, Control3DVectorCostType control3DVectorCostType)
      Build a new instance.
      Parameters:
      trigger - triggering event
      attitudeOverride - the attitude provider to use for the maneuver
      impulseProvider - impulse provider
      isp - engine specific impulse (s)
      control3DVectorCostType - increment's norm for mass consumption
      Since:
      13.0
  • Method Details

    • withDetectionSettings

      public ImpulseManeuver withDetectionSettings(EventDetectionSettings eventDetectionSettings)
      Creates a copy with different event detection settings.
      Parameters:
      eventDetectionSettings - new detection settings
      Returns:
      a new detector with same properties except for the detection settings
    • init

      public void init(SpacecraftState s0, AbsoluteDate t)
      Initialize event detector 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 initializes the handler.

      Specified by:
      init in interface DetectorModifier
      Specified by:
      init in interface EventDetector
      Parameters:
      s0 - initial state
      t - target time for the integration
    • finish

      public void finish(SpacecraftState state)
      This method finalizes the event detector's job.
      Specified by:
      finish in interface DetectorModifier
      Specified by:
      finish in interface EventDetector
      Parameters:
      state - state at propagation end
    • getDetector

      public EventDetector getDetector()
      Get the wrapped detector.
      Specified by:
      getDetector in interface DetectorModifier
      Returns:
      wrapped detector
    • getHandler

      public EventHandler getHandler()
      Get the handler.
      Specified by:
      getHandler in interface DetectorModifier
      Specified by:
      getHandler in interface EventDetector
      Returns:
      event handler to call at event occurrences
    • getDetectionSettings

      public EventDetectionSettings getDetectionSettings()
      Getter for the settings.
      Specified by:
      getDetectionSettings in interface DetectorModifier
      Specified by:
      getDetectionSettings in interface EventDetector
      Returns:
      detection settings
    • getTrigger

      public EventDetector getTrigger()
      Get the triggering event.
      Returns:
      triggering event
    • getImpulseProvider

      public ImpulseProvider getImpulseProvider()
      Getter for the impulse provider.
      Returns:
      impulse provider
      Since:
      13.0
    • getIsp

      public double getIsp()
      Get the specific impulse.
      Returns:
      specific impulse