Finite Burns

Top  Previous  Next

The FiniteBurn object, when used with the Maneuver command or WhileManeuvering command, models the effect of a finite-thrust maneuver on a Spacecraft orbit. The maneuver is modeled using all active Thrusters on the Spacecraft. The FiniteBurn specifies the number of seconds that the active Thrusters are supplying accelerations. The effective magnitude of the force generated by the thrusters is added to the Force Model of the Spacecraft for the duration of the maneuver. Tank and Thruster objects must be created and attached before using the FiniteBurn object, as shown in the examples below.


Note: When maneuvering with a FiniteBurn, FreeFlyer propagates the Spacecraft object forward in time by an amount of time specified in the FiniteBurn.BurnDuration property. It is not necessary to also use a Step command while maneuvering the Spacecraft with a FiniteBurn.


The following Sample Mission Plans (included with your FreeFlyer installation) demonstrate the use of the Finite Burn object:




Maneuver Modeling

Mass Depletion

For a finite burn, the mass remaining in the Tanks that feed the active Thrusters is calculated by integrating the mass depletion equation. Tank pressure is adjusted as the mass is depleted using the ideal gas law. The Thrust and Specific Impulse, which are considered to be functions of the TankPressure, change as the pressure changes. See also the Scale Factors section on the Thrusters page.


Accuracy Handling

The accuracy obtained when propagating through a Finite Burn Maneuver depends on the propagation step size. If the step size of the Runge-Kutta propagator is too large, FreeFlyer will take actions in fixed-step mode to reduce the step size during the maneuver. These methods may not always work (especially when the acceleration due to thrust is not low) and the step size may have to be manually adjusted.


Attitude During a FiniteBurn

During a Finite Burn, the Spacecraft will hold its attitude in the reference frame of the burn. If the burn is specified in the LVLH frame, the Spacecraft will rotate with respect to the inertial MJ2000 frame during the burn. If you specify the burn in the MJ2000 frame, the Spacecraft's thrust vector will retain its inertial attitude during the burn. If you wish to hold the attitude in a reference frame that is different than the attitude frame of the burn, AttitudeConvert can be used to convert the inputs to the desired frame.


If you are using linear tangent steering the constants that define the burn will be applied in the reference frame of the burn. The VNB frame is the most common frame for defining the linear tangent steering constants.


Thrust Steering Methods

There are two thrust steering methods available for the FiniteBurn object. The default setting is to apply no special algorithms when steering the FiniteBurn. The other option is linear tangent steering, which uses the tangent of the thrust angle with respect to the local horizontal to steer the thrust direction of the Spacecraft over a defined maneuver burn time and yield the minimum thrusting time and fuel consumption. To change the thrust steering mode for a spacecraft, use the syntax below:


myFiniteBurn.ThrustSteeringMethod = "Linear Tangent";


Settings specific to the linear tangent steering mode can be accessed under the FiniteBurn.LinearTangentSteering object.


Note: When using linear tangent steering the FiniteBurn.BurnDirection array is overridden by the linear tangent steering constants set using the FiniteBurn.LinearTangentSteering object. The user is responsible for determining the constants for the burn they want to model.



Coordinate Systems

The direction of the maneuver can be specified in any of the following attitude reference frames.


Coordinate System

Attitude System




Mean of J2000 (MJ2000)





Velocity-Normal-Binormal (VNB)



Orbit Normal (aligned with the angular momentum vector)

Binormal (completes the right-handed system)

Local Vertical Local Horizontal (LVLH)



Negative Orbit Normal (aligned with the negative angular momentum vector)

Nadir (Points to the center of the Earth)

Spacecraft Attitude


Spacecraft rotated to BurnDirection[0] in degrees

Spacecraft rotated to BurnDirection[1] in degrees

Spacecraft rotated to BurnDirection[2] in degrees



Geodetic X

Negative Orbit Normal

Normal to Earth's surface



U (Position)

V (Along Velocity Direction)

W (Orbit Normal)



R (Position)

I (Along Velocity Direction/"In-Track")

C (Orbit Normal/"Cross-Track")


In the above descriptions, the orbit normal is aligned with the angular momentum vector, the negative orbit normal is aligned with the negative angular momentum vector, and Nadir points to the center of the Earth. The X-components of the VNB and LVLH coordinate systems, velocity and co-velocity, differ by a rotation about the flight path angle.


Note: When the attitude system is "Spacecraft Attitude", the Spacecraft's attitude is rotated to the Euler angles specified by the FiniteBurn.BurnDirection Array for the duration of the maneuver, and individual Thruster orientations are used for directing delta-V.


Selecting a CoordinateSystem

For all of the FiniteBurn coordinate systems except "Spacecraft Attitude", the applied thrust direction is set using a user-specified unit vector referenced to the FiniteBurn object's attitude system (Mean of J2000 (MJ2000), Velocity-Normal-BiNormal (VNB), Local Vertical-Local Horizontal (LVLH), Geodetic, or UVW). For example, a unit vector with the components (1, 0, 0) in the VNB frame will direct the thrust supplied by all active Thrusters along the Spacecraft’s velocity direction.


FiniteBurn FiniteBurn2;

FiniteBurn2.AttitudeSystem = 1; // VNB


FiniteBurn2.BurnDirection = {1, 0, 0};


For the "Attitude" system, the Spacecraft attitude is rotated to the Euler angles specified by the FiniteBurn, and the individual Thruster orientations are used for directing delta-V. Therefore, if it is desired to model canted thrusters, set each Thruster's pointing direction using their respective orientation properties, and model the maneuver using the "Attitude" attitude system. The FiniteBurn object uses the Euler Sequence as defined by the Spacecraft to apply the Euler angles.


FiniteBurn FiniteBurn2;

FiniteBurn2.AttitudeSystem = 3; // Attitude


Thruster Thruster1;

Thruster1.Orientation = {1, 0.5, 0};




The following examples demonstrate some core concepts of maneuvering in FreeFlyer using the FiniteBurn object.


Note: As of FreeFlyer 7.3, the default timing precision mode is nanosecond precision mode. For older Mission Plans that have not yet been converted from millisecond precision mode, the syntax for working with epochs and calendar date/time strings is different. See the timing precision mode page for more information.


Maneuver a Spacecraft Once

This example models a finite burn of 300 seconds in the forward velocity direction. The FiniteBurn attitude is input as LVLH (X-component in the orbit co-velocity direction). The thrust is specified as 5 lb (22.241 N) and the specific impulse is specified as 220 seconds, typical of hydrazine propellant. The Maneuver Command can also generate a maneuver report. This report includes the pre- and post-maneuver states of the Spacecraft as well as burn durations, vector deltas, and Tank and Thruster data. When the Maneuver command is used within a targeting loop, the report will only be generated if the targeting loop converges to a solution. Only the report for the solution will be generated. All executions of the loop for perturbation of the inputs and all nominal executions of the loop before convergence will not generate a report.


Spacecraft Spacecraft1;

Thruster Thruster1;

SphericalTank SphericalTank1;

FiniteBurn FiniteBurn1;


Attach Thruster1 to Spacecraft1;

Attach SphericalTank1 to Spacecraft1;

Attach SphericalTank1 to Thruster1;


Thruster1.ThrusterC1 = 22.241;   // Thrust (N)

Thruster1.ThrusterK1 = 220;      // Isp (sec)


FiniteBurn1.AttitudeSystem = 2;  // LVLH

FiniteBurn1.BurnDirection = {1, 0, 0};

FiniteBurn1.BurnDuration = TIMESPAN(300 seconds);


Step Spacecraft1 to (Spacecraft1.ElapsedTime == TIMESPAN(4 hours));

Maneuver Spacecraft1 using FiniteBurn1 generating "FiniteBurn.txt";

Step Spacecraft1 to (Spacecraft1.ElapsedTime == TIMESPAN(4 hours));


Output File: "FiniteBurn.txt"


Maneuver a Spacecraft Continuously

This example shows a Spacecraft being maneuvered continuously over a two-hour While loop. A Step command is not necessary because the FiniteBurn has a duration of 10 seconds, which is applied during each iteration of the loop. The burn is in the velocity direction of an initially circular orbit, and the Spacecraft has already been configured with a Tank and Thruster through the Object Editor. The Mission Plan also includes a PlotWindow that graphs the Spacecraft Height vs Time, as shown below.


FiniteBurn FiniteBurn1;


FiniteBurn1.AttitudeSystem = 1;  // VNB

FiniteBurn1.BurnDirection = {1, 0, 0};


FiniteBurn1.BurnDuration = TIMESPAN(10 seconds);

FiniteBurn1.ThrustScaleFactor = 0.8;


PlotWindow pw ({Spacecraft1.ElapsedTime.ToHours(), Spacecraft1.Height});

pw.PlotTitle.Text = "Spacecraft Height vs Time";

pw.PlotSubTitle.Text = "FreeFlyer Plot Window";

pw.Legend.Visible = 0;

pw.Series[0].LineWidth = 3;


While (Spacecraft1.ElapsedTime < TIMESPAN(2 hours));

      View Spacecraft1;

      Maneuver Spacecraft1 using FiniteBurn1 generating "FiniteBurn.txt";

      Update pw;




Maneuver a Spacecraft using Linear Tangent Steering

This example shows a Spacecraft being maneuvered using the Linear Tangent Steering guidance mode. The Spacecraft has been configured with a Tank and Thruster and the FiniteBurn will be in the tangential velocity direction of the initial orbit.


FiniteBurn FiniteBurn1;

SphericalTank SphericalTank2;

Thruster Thruster2;


Attach Thruster2 to Spacecraft1;

Attach SphericalTank2 to Spacecraft1;

Attach SphericalTank2 to Thruster2;


FiniteBurn1.ThrustSteeringMethod = "Linear Tangent";

FiniteBurn1.BurnDuration = TIMESPAN(700 seconds);


// Reference time must be an Epoch in MJD TAI



FiniteBurn1.LinearTangentSteering.LambdaRef = {1, 0, 0};

FiniteBurn1.LinearTangentSteering.LambdaDot = {0.2, 0, 0};


While (Spacecraft1.ElapsedTime < TIMESPAN(1 hours));

      Step Spacecraft1;

      If (Spacecraft1.ElapsedTime == TIMESPAN(0.5 hours));

            Maneuver Spacecraft1 using FiniteBurn1;




Calculate Fuel Used

This example demonstrates how you would calculate the mass of fuel used by a FiniteBurn object after calling the Maneuver command.


FiniteBurn FiniteBurn1;

SphericalTank SphericalTank1;

Thruster Thruster1;


Attach Thruster1 to Spacecraft1;

Attach SphericalTank1 to Spacecraft1;

Attach SphericalTank1 to Thruster1;


Variable FuelUsed;

Variable InitialMass = Spacecraft1.Mass;


While (Spacecraft1.ElapsedTime < TIMESPAN(12 hours));

      Step Spacecraft1;

      FuelUsed = InitialMass - Spacecraft1.Mass;

      Report Spacecraft1.ElapsedTime.ToHours(), FuelUsed;

      Maneuver Spacecraft1 using FiniteBurn1;



Output Report Excerpt:
































See Also

FiniteBurn Properties and Methods

Maneuver Command

WhileManeuvering Command