Spiral to GEO Using an Optimal Finite Maneuver

STK Premium (Space) or STK Enterprise
You can obtain the necessary licenses for this tutorial by contacting AGI Support at support@agi.com or 1-800-924-7244.

The Sparse Nonlinear Optimizer (SNOPT) profile requires an additional license. Please contact AGI support for licensing.

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 capabilities of the Ansys System Tool Kit® (STK®) digital mission engineering software:

  • 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 STK/Astrogator® capability, a Sparse Nonlinear Optimizer (SNOPT) search profile, and the Analysis Workbench capability's Vector Geometry Tool to transfer a satellite from LEO to GEO along a spiral path with an Optimal Finite Maneuver.

What you will learn

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

  • Define an initial state of a spacecraft
  • Create custom components
  • Build the steps for an Optimal Finite Maneuver using a SNOPT search profile
  • Model a low-thrust orbit

Video guidance

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

Please note, the video refers to files accessed from the STK Data Federate (SDF). Any files previously located on the SDF are now available from agi.com. Please follow the written steps in this tutorial to download the files.

Creating a new scenario

Before you begin with any analysis, you need to create a two-day scenario.

  1. Launch STK ().
  2. Click Create a Scenario.
  3. Enter the following in the STK: New Scenario Wizard:
  4. Option Value
    Name Spiral_to_GEO_Optimal_Finite
    Analysis Start Time 13 Dec 2018 17:00:00.00 UTCG
    Analysis End Time + 2 days
  5. Click OK when you finish.
  6. Click Save () when the scenario loads. A folder with the same name as your scenario is created for you.
  7. Verify the scenario name and location shown in the Save As dialog box.
  8. Click Save.
  9. Save () often!

Downloading required files

This lesson uses a Node file (.nod) that you will need to download following the steps below.

  1. Download the zipped folder here: https://support.agi.com/download/?type=training&dir=sdf/help&file=NodeFile.zip

    If you are not already logged in, you will be prompted to log in to agi.com to download the file. If you do not have an agi.com account, you will need to create one. The user approval process can take up to three (3) business days. Please contact support@agi.com if you need access sooner.

  2. Navigate to the downloaded folder.
  3. Right-click on NodeFile.zip.
  4. Select Extract All....
  5. Set the Files will be extracted to this folder path to be within your scenario folder (e.g. C:\Users\username\Documents\STK  12\Spiral_to_GEO_Optimal_Finite\NodeFile).
  6. Click Extract.
  7. Go to your scenario folder.
  8. Low_Thrust_Optimization_GEO_Spiral_120.nod will be in the NodeFile folder.

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-3m/s² or lower. Maneuvers at this acceleration are designed for long missions and can be effected on a 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 maneuver and then take a look at approximately how much fuel was used.

Creating custom components using the Component Browser

Before you dive into building the spacecraft, you must first define the custom engine model you will use with the satellite. You can do so using the Component Browser. The Component Browser is a powerful tool that contains analysis components and enables you to define your own components.

Creating a custom component

Create a custom engine component for use on your satellite.

  1. Select the Utilities menu.
  2. Select Component Browser... ().
  3. Select the Engine Models directory () in the component tree when the Component Browser opens.
  4. Select the Constant Acceleration and Isp () model.
  5. Click Duplicate component ().
  6. Rename the new model MyEngine when the Field Editor dialog box opens.
  7. Click OK to create the new component and to close the Field Editor dialog box.

Customizing the engine component

Now that you have created a custom component, you can customize the acceleration, specific impulse (Isp), etc.

  1. Select the MyEngine () component.
  2. Click View properties ().
  3. Set the Acceleration to 9.8 cm/sec^2 when the MyEngine dialog box opens.
  4. Set the Isp to 3000 s.
  5. Click OK to save your changes and to close the MyEngine dialog box.
  6. Click Close to confirm your selection and to close the Component Browser.
  7. Save () your scenario.

Creating a new satellite

Add a satellite to the scenario and use Astrogator as the propagator.

  1. Bring the Insert STK Objects tool () to the front.
  2. Select Satellite () in the Select an Object To Be Inserted list.
  3. Select the Define Properties () method.
  4. Click Insert. . ..
  5. Select the Basic - Orbit page.
  6. Set the Propagator to Astrogator.
  7. Click Apply.
  8. Rename the satellite () Finite_Maneuver.

Building 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 Coordinate Type to Keplerian for the initial state.
  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.

Modeling a Finite Maneuver

Next, define a Finite Maneuver segment. A Finite Maneuver is effectively a Propagate segment with thrust. It uses the defined propagator to propagate the state, accounting for the acceleration due to thrust. The selected engine model specifies the magnitude of the thrust vector and the selected attitude control specifies the direction of the thrust vector. Like Propagate segments, each calculated point is added to the ephemeris, and propagation continues until Astrogator reaches a stopping condition.

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

Inserting a Finite Maneuver segment

Insert a Maneuver segment and set the type to Finite.

  1. Insert a new Maneuver () segment between the Initial State () and Propagate () segments.
  2. Set the Maneuver type to Finite.
  3. Click the ellipsis () next to the Finite Propagator and Force Model for Optimization field.
  4. Select Earth Point Mass () when the Select Propagator dialog box opens.
  5. Click OK to select Earth Point Mass as the propagator and to close the Select Propagator dialog box.
  6. Select Thrust Vector in the Attitude Control drop-down list.
  7. Ensure the Attitude Update is set to Update during burn.

Defining 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 axes that take you back to Earth. Your goal is to reach a higher orbit. The axes you will use are the In-Track, Cross-Track, Radial (ICR) 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 ellipsis () next to the Thrust Axes field.
  2. Ensure that the Filter By option is set to Templates when the Select Reference dialog box opens.
  3. Select Satellite () from objects list.
  4. Select the ICR () in the Templates for Satellite list.
  5. Click OK to confirm your selection and to close the Select Reference dialog box.

Defining 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. Select the Spherical components option.
  2. Set the Azimuth to 42 deg.
  3. Set the Elevation to 27 deg.
  4. Click Apply.

Defining the engine model

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

  1. Select the Engine tab.
  2. Select the Engine Model option in the Propulsion Type panel.
  3. Click the ellipsis () next to the Engine Model option.
  4. Select MyEngine () when the Select EngineModel dialog box opens.
  5. Click OK to confirm your selection and to close the Select EngineModel dialog box.
  6. Click Apply.

Defining the stopping condition

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

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

Defining 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 in the MCS.
  2. Click the ellipsis () next to the Propagator Field.
  3. Select Earth Point Mass () when the Select Propagator dialog box opens.
  4. Click OK to confirm your selection and to close the Select Propagator dialog box.
  5. Set Trip to 24 hr.
  6. Open the Propagate segment's Segment Properties ().
  7. Select another color from the color picker.
  8. Click OK.
  9. Click Apply.

Running the MCS

Now that you have designed your mission, run the MCS and see how well you did.

  1. Run () the MCS.
  2. Save () your 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.

propagated Finite Maneuver

LEO to GEO orbit using SNOPT and an Optimal Finite Maneuver

You want the spacecraft to travel from low Earth orbit to a geosynchronous orbit. With an Optimal Finite Maneuver, Astrogator computes the thrust attitude and, optionally, the maneuver duration in order to optimize a certain objective function and meet a set of constraints—in this case, to achieve an optimal geosynchronous orbit.

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, using a SNOPT search profile.

There are two approaches you can take. The first is to compute the Finite Maneuver and use the solver, which is time intensive. The other is to use an Initial Guess file. Since you already computed the Finite Maneuver, you can first reuse those steps.

Using a Finite Maneuver trajectory as an initial guess

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.

Creating a new satellite

Copy the existing Finite Maneuver satellite and propagate the initial Finite Maneuver.

  1. Copy () and paste () Finite_Maneuver () and rename the copy Optimal_Finite.
  2. Clear the check box for Finite_Maneuver () in the Object Browser.
  3. Open Optimal_Finite's () Properties ().
  4. Select the Basic - Orbit page.
  5. Select the Maneuver () segment.
  6. Run () the MCS to recreate the same Finite Maneuver.

Setting an Optimal Finite Maneuver segment

Change the selected Maneuver Type to Optimal Finite and update the color of the segment.

  1. Set the Maneuver Type to Optimal Finite.
  2. The tabs you saw before were Attitude, Engine, and Propagator. You should now see Solver and Engine tabs.

  3. Open the Maneuver segment's Segment Properties ().
  4. Select another color from the color picker.

Setting the number of nodes

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. Set the number of nodes to 120.

  1. Select the Maneuver () segment.
  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....
  5. Set the Scaling Options to Scale based on initial state.
  6. Click OK.

Defining the Seed options

The solution of an Optimal Finite Maneuver problem requires an initial guess. This initial guess is often a rough approximation of the vehicle's orbital states, thrust attitude, and maneuver duration for the maneuver objective in question. The initial guess is then iteratively refined by a numerical optimization library. 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. Select the Seed from: Finite Maneuver option.
  2. Click Seed. 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....
  5. You won't change any values, only review the numbers. Take a look at the variables when the Initial Boundary Conditions dialog box opens.

    • 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
  6. Click OK to close the Initial Boundary Conditions dialog box.

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

Defining the Final Boundary options

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 Final Boundary....
  2. Clear the Set from Initial Guess check box when the Final Boundary conditions dialog box opens.
  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 deg L 1800 deg
    Tf - 7200 sec Final Time Tf + 7200 sec
  5. Click OK.

Defining the Path Boundaries

The Path Boundaries enable you to define the upper and lower bounds of the orbital states and 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 Path Boundaries....
  2. Clear the Compute from Initial Guess check box when the Path Boundaries for Variables dialog box opens.
  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 to confirm you changes and to close the Path Boundaries for Variables dialog box.

Setting the Run Mode to Optimize via direct transcription

Set the Run Mode to Optimize via direct transcription.

  1. Locate the Run Mode drop-down list in the Problem Execution panel.
  2. Set the Run Mode to Optimize via direct transcription.

Defining the engine

Before you run this model, confirm that you are using the correct engine model.

  1. Select 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 is 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.

Running the MCS for the Optimal Finite Maneuver

  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 your computer, this analysis may take a few minutes.

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

Optimal_Finite satellite propagated into GEO

Smoothing the trajectory by Running current nodes

Note the coarse trajectory drawn by the maneuver. The trajectory is currently showing the node points and lines connecting them. You can update and re-run the MCS to produce a smoother result by selecting the Run Mode to Run current nodes. When you select the Run Mode to Run current nodes, running the MCS propagates the vehicle states with a thrust vector of a magnitude equal to that provided by the chosen Engine type. It also propagates with an attitude from the optimizer output.

  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 to view the results.

Initial coarse trajectory showing node points

Re-run smoothed trajectory

Exporting the nodes

Once you have the final analysis, you can export the data from the Maneuver segment's Steering/Nodes tab as a node file (*.nod).

  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... to save your 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 () your scenario.

Using 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 initial guess file is the same type of information you would have if you ran Finite Maneuver first.

Creating a new satellite

Copy the existing Finite Maneuver satellite and propagate the initial Finite Maneuver.

  1. Copy () the Finite_Maneuver satellite () object.
  2. Paste () the Finite_Maneuver satellite () object
  3. Rename it OptFinite_File.
  4. Open OptFinite_File's () Properties ().
  5. Select the Basic - Orbit page.
  6. Re-run () the MCS. This recreates the same Finite Maneuver.
  7. Set the Maneuver Type to Optimal Finite.
  8. Open the Maneuver segment's Segment Properties ().
  9. Change the segment's Color.

Defining the Solver settings

Define the Solver settings.

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

Loading 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)

Use the Node file (Low_Thrust_Optimization_GEO_Spiral_12.nod) you downloaded earlier in this lesson.

  1. Click the ellipsis () next to the Initial Guess File field.
  2. Navigate to the location of downloaded Node file.
  3. 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.

Setting 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.
  3. Click Initial Boundary... and review the values.
  4. Click OK.

Defining the Final Boundary options

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. Click Final Boundary....
  2. Clear the Set from Initial Guess check box.
  3. Set the following options:
  4. Lower Bound Variable Upper Bound
    42000 km a 42000 km
    0 h 0
    0 k 0
    0 p 0
    0 q 0
    0 deg L 1800 deg
    Tf - 7200 sec Final Time Tf + 7200 sec
  5. Click OK.

Setting the Path Boundaries

Define the upper and lower bounds of the orbit states for the solver.

  1. Click Path Boundaries....
  2. Clear the Compute from Initial Guess check box.
  3. Set the following values:
  4. 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
  5. Set the Problem Execution - Run Mode to Optimize via direct transcription.

Defining the engine

Confirm the engine model and parameters for your run.

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

Running 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 to view the results.

OptFinite_File satellite propagated into GEO

Smoothing the trajectory by Running current nodes

Update the coarse trajectory drawn by the maneuver by setting 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 to view the results.

trajectory RE-run from current nodes

Analyzing the mission data

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

Creating a custom Graph style

Create a custom graph style to plot the angle history of the Optimal_Finite satellite.

  1. Open the Report & Graph Manager ().
  2. Set the Object Type to Satellite.
  3. Select Optimal_Finite () in the Objects List.
  4. Select the MyStyles directory.
  5. Click the Create new graph style () button.
  6. Rename the graph Angle History.
  7. Expand () the Vector Choose Axes () Data Provider.
  8. Expand () TotalThrust () directory.
  9. Move () the following data providers () to the Y Axis list:
    • RightAscension
    • Declination
  10. Click OK.

Generating the Angle History graph

Generate the graph based on the ICR axes.

  1. Click Generate. . ..
  2. Ensure Optimal_Finite () is selected in the Filter by: All STK Objects list.
  3. Select ICR () in the Axes for: Optimal_Finite list.
  4. Click OK.
  5. 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.

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

Generating a Maneuver Summary report

Review more information about the mission using the Maneuver Summary report.

  1. Bring the Report & Graph Manager () to the front.
  2. Select the Optimal_Finite () in the Filter by: All STK Objects list.
  3. Expand () Installed Styles () directory.
  4. Select Maneuver Summary ().
  5. Click Generate. . ..
  6. Examine the Duration of the mission.
  7. Change the Duration unit from seconds to hours.
  8. Scroll to the Fuel Used column.
  9. Examine the report to determine how much fuel was consumed for the mission.

Saving your work

Clean up and close out your scenario.

  1. Close any open reports, properties, and the Report & Graph Manager.
  2. Save () your work.