Impulse Maneuvers¶
Impulse maneuvers model instantaneous delta-V burns triggered by g-function zero-crossings during propagation. Each maneuver defines its own event function and firing condition.
ImpulseManeuver (Abstract)¶
| Member | Description |
|---|---|
ComputeEventValue(StateVector) |
Scalar g-function evaluated at the current state |
EventCrossingDirection |
CrossingDirection that triggers the burn |
CheckPreconditions(StateVector) |
Optional additional constraints (returns true to allow firing) |
DeltaV |
Burn delta-V vector in the maneuver frame |
Concrete Maneuvers¶
ApogeeHeightManeuver¶
Raises apogee height. Fires at perigee (r . v crosses zero from negative to positive).
PerigeeHeightManeuver¶
Raises perigee height. Fires at apogee (r . v crosses zero from positive to negative).
PhasingManeuver¶
Adjusts orbital period for phasing. Fires at perigee (r . v, negative to positive).
CombinedManeuver¶
Combined plane and apsis change. Fires at apogee (r . v, positive to negative) with an additional precondition that the apogee is aligned with the ascending node.
PlaneAlignmentManeuver¶
Changes orbital plane to match a target. Uses an adaptive crossing direction on the g-function r . h_target to fire at the nearest orbital node (ascending or descending).
ApsidalAlignmentManeuver¶
Rotates the line of apsides. Fires at the nearest orbit intersection point using the g-function r . (h x p) with negative-to-positive crossing.
Maneuver Chain¶
Maneuvers are linked in a chain on the spacecraft:
- Leading attitudes execute immediately at the initial state.
- The first
ImpulseManeuveris wrapped in aManeuverEventDetector. - When the event fires, the burn is applied and the chain advances to the next impulse maneuver.
- The process repeats until all maneuvers in the chain have executed.
Example¶
var maneuver = new ApogeeHeightManeuver(
Time.J2000TDB,
TimeSpan.FromSeconds(0),
targetApogee: 42164000.0,
engine, fuelTank);
spacecraft.SetStandbyManeuver(maneuver);
var solution = spacecraft.Propagate(window, perturbingBodies, false, false, deltaT);