Spiral to GEO Using an Optimal Finite Maneuver

SNOPT and STK Premium (Space) or STK Enterprise
You can obtain STK Premium (Space) or STK Enterprise for this tutorial by visiting http://licensing.agi.com/stk/evaluation. Commercial users can contact AGI support at support@agi.com or 1-800-924-7244 to request a SNOPT license.

The results of the tutorial may vary depending on the user settings and data enabled (online operations, terrain server, dynamic Earth data, etc.). It is acceptable to have different results.

Capabilities Covered

This lesson covers the following STK Capabilities:

  • STK Pro
  • Astrogator
  • Analysis Workbench

Problem Statement

Engineers and operators want to transfer a spacecraft from a low-Earth orbit (LEO) to a geosynchronous orbit (GEO) along a spiral path using a low thrust maneuver.

Solution

Use the Optimal Finite Maneuver segment, available with STK's Astrogator capability, and STK's Analysis Workbench capability to transfer a satellite from LEO to GEO along a spiral path.

What You Will Learn

Upon completion of this tutorial, you will be able to:

  • Define the Initial State of the spacecraft.
  • Create custom components.
  • Build the steps for the Optimal Finite Maneuver.
  • Model the low thrust orbit.

What is a Low Thrust Maneuver?

Low may be a relative term, but in space travel there is a boundary for what is considered "low thrust": an acceleration of 10-³m/s² or lower. Maneuvers at this acceleration are designed for long missions that can be on the scale of months. They may not be fast, but they are efficient. Most systems that use this type of propulsion are electric propulsion systems. In this tutorial, you will optimize the mission and then take a look at approximately how much fuel was used.

Video Guidance

Watch the following video. Then follow the steps below, which incorporate the systems and missions you work on (sample inputs provided).

Model the World!

Before you can begin with any analysis, you need to create a scenario that spans two (2) days.

  1. Create a new scenario and call it Spiral_to_GEO_Optimal_Finite.
  2. Set the analysis time to the following:
  3. Option Value
    Analysis Start Time 13 Dec 2018 17:00:00.00 UTCG
    Analysis End Time +2 Day
  4. Click OK .
  5. Save () your scenario.

Create Custom Components using the Component Browser

Before you dive into building the spacecraft, let’s build the engine model you will use for the spacecraft.

  1. Extend the Utilities menu.
  2. Open the Component Browser.
  3. Select the Engine Models directory.
  4. Select the Constant Acceleration and Isp model.
  5. Click duplicate ().
  6. Rename the new model MyEngine.
  7. Click OK to close the window.

Customize the New Component

Now that you have created a custom component, you can customize the acceleration, isp, etc.

  1. Double-click to open the MyEngine component.
  2. Set the Acceleration to 9.8 cm/sec2.
  3. Set the Isp to 3000 s.
  4. Click OK .
  5. Click Close .
  6. Save () your scenario.

Create a new Satellite

Let's add a satellite to the scenario and set the propagator to Astrogator.

  1. Insert a new satellite () using the Define Properties () method.
  2. Rename the satellite Finite_Maneuver.
  3. Select the Basic - Orbit page.
  4. Set the Propagator to Astrogator.
  5. Click Apply .

Build the Initial State

The default segments in the MCS are an initial state and a propagate segment. Starting with the initial state, you can define the segments to build the satellite.

  1. Set the satellite's initial state in the MCS to Keplerian.
  2. Set the following options:
  3. Option Value
    Semi-major axis 7000 km
    Inclination 28.5 deg
    True Anomaly 140 deg
  4. Set all other values to zero (0).
  5. Click Apply .

Insert a Maneuver Segment

Next you can define the maneuver. Thanks to the initial state, you have a starting model for the orbit. You can add a maneuver to model the effects of applying a thrust to the satellite and provide data to "seed" for the optimized maneuver later in the lesson.

  1. Insert a new Maneuver () segment.
  2. Ensure the maneuver segment is between the Initial State () and Propagate () segments.
  3. Set the Maneuver type to Finite.
  4. Click the ... button to set the Finite Propagator and Force Model for Optimization to Earth Point Mass.
  5. Set the Attitude Control to Thrust Vector.
  6. Set the Attitude Update to Update during burn.

Define the Thrust Axes

When you create a maneuver, you need to define the direction in which to apply thrust. In this situation, you don't want to incorrectly choose an axes that takes you back to Earth. Your goal is to reach a higher orbit. The axes you will use are the In-Track, Cross-Track, Radial axes with:

  • Z-axis along position vector
  • X-axis toward inertial velocity vector

This is also known as an ICR frame. Using this frame, you can align and constrain the position and velocity vectors along the trajectory of the satellite.

  1. Click the ... button next to the Thrust Axes option.
  2. Ensure that the Filter By option is set to Templates.
  3. Select Satellite () from the list.
  4. Under the Axes list, select the ICR Axes.
  5. Click OK .

Define the Spherical Components

You have the option to define the direction of the thrust axis in either Cartesian or spherical components. Either way, you will be able to compute your final solution. Some people, however, find spherical components easier to understand.

  1. Enable the Spherical components option.
  2. Set the Azimuth to 42 deg.
  3. Set the Elevation to 27 deg.
  4. Click Apply .

Define the Engine

Using the previously created engine model, you can define the magnitude and nature of the propulsion.

  1. Select the Engine tab.
  2. Enable the Engine Model option.
  3. Click the ... button next to the Engine Model option.
  4. Set the Engine Model to MyEngine.
  5. Click OK .
  6. Click Apply .

Define the Propagator

Your satellite models the maneuver up until a specified stopping condition. In the propagator tab, you can set that condition to an 18 hr duration.

  1. Select the Propagator tab.
  2. Set the Trip value to 18 hr.
  3. Click Apply .

Define the Propagate segment

After the maneuver, you want to model the rest of the orbit. You can do that by modeling a propagate segment after the maneuver segment.

  1. Select the Propagate segment.
  2. Click the ... button to set the Propagator to Earth Point Mass.
  3. Set the Trip to 24 hr.
  4. Open the Propagate segment's properties ().
  5. Change the Color field to another color.
  6. Click OK .
  7. Click Apply .

Run the MCS

You have now designed your mission. Let's run it and see how well you did.

  1. Run () the MCS.
  2. Save () the scenario.

Take a look at the orbit and the model that was created by Astrogator. You should see a spiral of the low thrust maneuver.

LEO to GEO Orbit

You want the spacecraft to travel from low Earth orbit to a GEO orbit. There are two approaches you can take. The first is to compute the Finite Maneuver and use the solver (time intensive). The other is to use an Initial Guess file. Since you already computed the Finite Maneuver, you can first review those steps. After that, you can use an initial guess file.

This approach is different from using a Target Sequence in Astrogator. In a Target Sequence, the ephemeris of a satellite is created (think back to the trajectory of a spacecraft). For an optimal Finite Maneuver, you use a previously computed path (ephemeris) as the initial guess and refine, or optimize it.

Run the Finite Maneuver

You can use the Finite Maneuver trajectory as the initial guess in the computation. The Finite Maneuver provides Astrogator with some data to start. While the initial solution was not ideal, it got you close to a GEO orbit. Now you can begin solving for the solution.

  1. Copy () and paste () the Finite_Maneuver satellite and rename the copy Optimal_Finite.
  2. Disable Finite_Maneuver in the Object Browser to disable the visualization.
  3. Open Optimal_Finite's () properties ().
  4. Select the Basic - Orbit page.
  5. Open the Maneuver () segment.
  6. Run () the MCS to recreate the same finite maneuver.
  7. Set the Maneuver Type to Optimal Finite.
  8. The tabs you saw before were Attitude, Engine, and Propagator. You should now see Solver and Engine tabs.

  9. Open the Maneuver segment's properties ().
  10. Change the Color field to another color.

Define the Optimal Finite Maneuver

To compute the optimal finite maneuver, you will break up the trajectory of the satellite so that it can be computed in sections. For this calculation, you will use 120 nodes. This value was settled upon after running the analysis at:

  • 30 nodes
  • 60 nodes (which provided sufficient results)
  • 120 nodes (which provides sufficient results and a smooth trajectory)
  • higher node values that provided sufficient results, but without much improvement in the analysis.

If you were working on your own mission, you would go through the same iterative process to find the appropriate value.

  1. Select the Maneuver.
  2. On the Solver tab, set the Number of Nodes to 120.
  3. Nodes are states along the trajectory arc that serve as control points for the direct transcription algorithm. The nodes are adjusted by the optimizer to best satisfy the thrust augmented dynamics.

  4. Click Algorithm Options... button.
  5. Set the Scaling Options to Scale based on initial state.
  6. Click OK .

Define the Seed Options

Seeding is the process of loading a previous solution or initial guess from a finite maneuver or file. These results provide the optimal finite maneuver with starting values.

  1. Set the Seed from: option to Finite Maneuver.
  2. Click the Seed button. This loads in the values from the finite maneuver.
  3. Next you want to limit what values our optimal finite calculation can use. This will keep your values between reasonable conditions. In the case of the Initial Boundary, you will just check the values.

  4. Click Initial Boundary... button.
  5. You won't change any values, only review the numbers. Take a look at the variables.

    • a - corresponds to the semi-major axis
    • h & k - describe the shape of the satellite's orbit and the position of perigee
    • p & q - describes the orientation of the satellite's orbit plane
    • L - corresponds to the Mean Longitude

    For more information on these parameters, review our Equinoctial Coordinate Type help page.

Define the Final Boundary option

You can use the Final Boundary to define the upper and lower bounds for the orbital parameters you want for the final state.

  1. Click the Final Boundary... button.
  2. Clear the Set from Initial Guess check box.
  3. Set the following values:
  4. Lower Bound Variable Upper Bound
    42000 km a 42000 km
    0 h 0
    0 k 0
    0 p 0
    0 q 0
    0 L 1800 deg
    tf - 7200 sec Final Time tf + 7200 sec
  5. Click OK .

Define the Boundary Path

The Path Boundary enables you to define:

  • the upper and lower bounds of the orbit states
  • the thrust spherical angles (when not using unit vectors as controls in the Algorithm Options) on the trajectory at all but the initial and terminal points.
  1. Click the Path Boundaries... button.
  2. Clear the Compute from Initial Guess check box.
  3. You can explicitly set some values. In the following steps, you can set the goal for the satellite to go from the LEO regime to a final GEO position with an inclination and eccentricity of zero (0).

  4. Set the following values:
  5. Lower Bound Variable Upper Bound
    6000 km a 65000 km
    -0.9 h 0.9
    -0.9 k 0.9
    -0.9 p 0.9
    -0.9 q 0.9
    140 deg L 1800 deg
  6. Click OK .

Set the Run Mode

  • In the Problem Execution section, use the Run Mode drop down to select Optimize via direct transcription.

Define the Engine

Before you run this model, let's confirm that you are using your custom engine model, "MyEngine."

  1. Click the Engine tab.
  2. Confirm the Engine Model is set to MyEngine.
  3. Confirm the Pressure mode is set to Pressure-Regulated.
  4. Confirm that the Thrust Efficiency to one (1).
  5. Confirm that the Thrust is set to Affects Accel Only.
  6. Click Apply .

If you click the Log tab, you will see data only when the analysis has been run. If you click the Steering/Nodes tab, you will see each node of the tab. The Azimuth and Elevation columns have values taken from the Finite Maneuver.

Run the MCS

  1. Change the color of the Propagate segment in the MCS.
  2. Save () the scenario.
  3. Run () the MCS.
  4. The Optimal Finite Maneuver: optimizer output window appears and steps through the analysis. Depending on the setup of the analysis or the capabilities of the computer, this analysis may take a few minutes.

  5. Bring the 3D Graphics window to the front and view the results.

Notice the coarse trajectory drawn by the maneuver. The trajectory is currently showing node points and lines connecting them. You can update this.

Set the Mode to Run Current Nodes

  1. Select the Maneuver () segment in the MCS.
  2. Set the Run Mode to Run current nodes in the Problem Execution field.
  3. Re-run () the MCS.
  4. Bring the 3D Graphics window to the front and view the results.

Export the Nodes

Once you have the final analysis, you can export the data from the Maneuver segment's Steering/Nodes tab.

  1. Select the Steering/Nodes tab in the Maneuver () segment.
  2. Examine the Azimuth and Elevation columns, the values should now reflect the changing direction of thrust.
  3. Click Export... button to save the analysis.
  4. Name the file Optimal_Finite_Nodes.nod.
  5. A node file contains the initial guess of the nodes of the optimal trajectory. Each node contains the time, position, velocity, mass, and thrust direction.

  6. Click Save .
  7. Save () the scenario.

Alternative Approach: Use an Initial Guess File

In the previous analysis, you used the Finite Maneuver as the initial guess. This time you can use a node file as the initial guess. The node file is the same type of information you would have if you ran a finite maneuver first.

  1. Copy () the Finite_Maneuver satellite object and rename it OptFinite_File.
  2. Open OptFinite_File's () properties ().
  3. Select the Basic - Orbit page.
  4. Re-run () the MCS. This recreates the same finite maneuver.
  5. Set the Maneuver Type to Optimal Finite.
  6. Open the Maneuver segment's properties ().
  7. Change the Color field to another color.

Define the Solver Settings

  1. Click the Solver tab.
  2. Set the number of Nodes to 120.
  3. Click the Algorithm Options... button.
  4. Set the Scaling Options to Scale based on initial state.
  5. Click OK .

Load the Node File

A Node file contains the ephemeris data for a satellite maneuver. Using a node file enables you to save different forms of converged solutions that can vary:

  • the force model
  • the number of nodes
  • the control strategy [angles vs. unit vectors]

Let's use a specific file from the STK Data Federate (SDF).

  1. Click ... beside the Initial Guess option.
  2. Select the STK Data Federate option.
  3. In the Search field, look for Low_Thrust_Optimization_GEO_Spiral_120.nod.
  4. The SDF can be accessed though the web, https://sdf.agi.com. You can login using your agi.com credentials. The file is located in the /Sites/AGI/documentLibrary/STK 12/What's New Scenarios/ directory.

  5. Open the Low_Thrust_Optimization_GEO_Spiral_120.nod file.
When you create a node file, you:
  1. Begin with a seeded guess or converged solution to an optimal finite maneuver.
  2. Export a node file from the current OFM state, regardless of its optimality or lack thereof.

The advantage to seeding from a finite maneuver without a node file is that you can "start from scratch" within Astrogator. Either you don’t have a means for producing a node file or you’re less familiar with the problem. This builds on Astrogator’s inherent interactive design environment paradigm.

Using a node file allows you to take data from another tool, format it appropriately, and load it into Astrogator. It also provides a mechanism to solve the problem in stages using a previous solution as an initial guess for a more complex force model.

Set the Initial Guess File

In this step, you will seed the data from the file into your calculation. This provides the optimal finite maneuver with starting values to compute the optimal low thrust maneuver.

  1. Set the Seed option to Initial Guess File.
  2. Click Seed button.
  3. Click Initial Boundary... option and review the values.

Define the Final Boundary Option

Next you will define the Final Boundary. The Final Boundary defines the upper and lower bounds for the final orbital state. To be consistent, you will use the same boundaries as the optimal finite calculation seeded from a finite maneuver.

  1. Clear the Set from Initial Guess check box.
  2. Set the following options:
  3. Lower Bound Variable Upper Bound
    42000 km a 42000 km
    0 h 0
    0 k 0
    0 p 0
    0 q 0
    0 L 1800 deg
    tf - 7200 sec Final Time tf + 7200 sec
  4. Click OK .

Set the Path Boundary

  1. Clear the Compute from Initial Guess check box.
  2. Set the following values:
  3. Lower Bound Variable Upper Bound
    6000 km a 65000 km
    -0.9 h 0.9
    -0.9 k 0.9
    -0.9 p 0.9
    -0.9 q 0.9
    140 deg L 1800 deg
  4. Set the Problem Execution-Run Mode: to Optimize via direct transcription.

Define the Engine

  1. Click the Engine tab.
  2. Confirm the Engine Model is set to MyEngine.
  3. Confirm the Pressure mode is set to Pressure-Regulated.
  4. Confirm that the Thrust Efficiency to one (1).
  5. Confirm that the Thrust is set to Affects Accel Only.
  6. Click Apply .

Data appears in the Log tab only after the analysis is run. If you click the Steering/Nodes tab, you will notice that each step in the trajectory contains information from the initial guess file.

Run the MCS

  1. Change the color of the Propagate segment in the MCS.
  2. Save () the scenario.
  3. Run () the MCS.
  4. The Optimal Finite Maneuver: optimizer output window appears and steps through the analysis. Depending on the setup of the analysis or the capabilities of the computer, this analysis may take a few minutes.

  5. Bring the 3D Graphics window to the front and view the results.

Notice the coarse trajectory drawn by the maneuver. The trajectory is currently showing node points and lines connecting them. You can update this.

Set the Mode to Run Current Nodes

  1. Select the Maneuver () segment in the MCS.
  2. Set the Run Mode to Run current nodes in the Problem Execution field.
  3. Re-run () the MCS.
  4. Bring the 3D Graphics window to the front and view the results.

Analyze the Trajectory

Now that you have the final trajectories for the spacecraft, you can generate data about the mission.

  1. Open the Report & Graph Manager ().
  2. Set the Object Type to Satellite.
  3. Select Optimal_Finite satellite in the Objects List.
  4. Select the MyStyles directory.
  5. Click the Create New Graph () button.
  6. Rename the graph Angle History.
  7. Expand () the Vector Choose Axes Data Provider.
  8. Expand () TotalThrust directory.
  9. Move () the following parameters:
    • RightAscension
    • Declination
  10. Click OK .
  11. This graph is based on the Axes of the Finite Maneuver or the Initial Guess File. In this study, the axes used in the Finite Maneuver was Optimal_Finite - ICR. In the Initial State File, you can pull the Axes data from the header of the initial state file, or in the Steering/Nodes tab, to create the OptFinite_File_ICR.

  12. Generate the graph.

You can see how the direction of thrust changes over the course of the mission until the last segment of the mission. In the last segment, the final orbit is propagated.

Maneuver Summary and Fuel Used Reports

Let's examine more information about the mission using the Maneuver Summary report.

  1. Bring the Report & Graph Manager () to the front.
  2. Select the Optimal_Finite satellite in the Objects List.
  3. Expand () Installed Styles directory.
  4. Generate the Maneuver Summary report.
  5. Examine the duration of the mission.
  6. Change the units to hours.
  7. Scroll to the Fuel Used column.
  8. Examine the report and determine how much fuel was consumed for the mission.

For more information about Astrogator or the Optimal Finite Maneuver, you can check out the Astrogator Maneuver page.