Astrogator: Trajectory Design with SNOPT Optimizer

Astrogator, (Undefined variable: licenses.Pro).

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

The goal of this exercise is to raise the satellite's perigee using a single finite burn. You'd like to optimize the burn by minimizing the change in velocity required so you can minimize the amount of fuel required. You plan to focus on finding the optimal true anomaly for the finite burn to accomplish this.

You have some information on the satellite's initial state and an outline for the burns you plan to make in order to accomplish the mission requirements. Here are the initial state values you have available:

OptionValue
Radius of Perigee6778 km
Eccentricity0.4 km
Inclination45 degrees
  • You want to propagate the orbit until it reaches a certain true anomaly (the optimum value will be determined).
  • You want to complete a finite burn. The burn time is adjusted until the resulting orbit has a radius of perigee equal to 10000 km.
  • The orbit is then propagated until it reaches perigee.

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.

Model the World!

Before you can begin with any analysis, you need to create a scenario and add a satellite. Let's do that now.

  1. Create a new scenario and call it OptimalTrueAnomaly.
  2. Use the default Start and Stop times for the scenario.
  3. Click OK.

Create a Satellite

You have the information necessary to create a satellite using Astrogator and define the initial state.

  1. Add a satellite () using the Define Properties () method in the Insert STK Objects () tool.
  2. Select the Basic - Orbit page.
  3. Set the Propagator to Astrogator.

Define the Initial State

Now that you have a satellite in the scenario, you can begin to define it's Initial State.

  1. Locate the Mission Control Sequence.
  2. The Mission Control Sequence is where you can add the Initial State and propagate segments that will define the orbit and burns of the satellite.

  3. Select the Initial State segment.
  4. Change the Coordinate Type to Keplerian
  5. Set the Semi-major Axis option to Periapsis Radius.
  6. Set the following options:
  7. OptionValue
    Coordinate TypeKeplerian
    Periapsis Radius6778 km
    Eccentricity0.4
    Inclination45 degrees
  8. Leave the RAAN, Argument of Perigee, and True Anomaly to zero degrees.

Create Mission Control Sequence

Now that you have set up the initial state properties, you can create additional segments that define the orbits and burns of the satellite. Most of the MCS segments are going to be nested inside a Target Sequence. A Target Sequence allows you to set a goal or target to accomplish. The nested segments serve as a means to accomplish the goal.

  1. Delete () the default Propagate () segment. You will add your own sequences.
  2. Click the Insert Segment After ().
  3. Add a Target Sequence ().
  4. Rename the Target Sequence Target_Maneuver.

This is going to serve as the primary segment that your other segments will be inside.

Add a Propagate Segment

  1. Click the Insert Segment After () button.
  2. Add a Propagate () segment.
  3. Rename it ProptoMnvrStart.
  4. Add a Stopping Condition.
  5. Select True Anomaly as the Stopping Condition.
  6. Delete () the Default stopping condition.
  7. Click the Target () icon beside Trip. This ensures the value is available as a control variable. This allows the location of the maneuver start to vary.
  8. Set the Trip value to 170 degrees as an initial guess.

The Maneuver

Now that you have created the Target Sequence and initial Propagate segment, you can create the maneuver.

  1. Click the Insert Segment After ().
  2. Add a Maneuver () segment under Target_Maneuver.
  3. Rename the Maneuver Mnvr.
  4. Set the Maneuver Type to Finite.
  5. Set the Attitude Control to Thrust Vector.
  6. Go to the Propagator tab
  7. Set the Trip variable as the Control (). This allows the burn time to vary.
  8. Set the Trip value to 900 sec as an initial guess.
  9. Change the color of Mnvr to something different than ProptoMnvrStart.
  10. Click Results... when Mnvr is selected in the MCS.
  11. Expand () the Maneuver directory.
  12. Double-click DeltaV.
  13. Click OK.

Create a Second Propagate Segment

After the burn is complete, the resulting orbit is defined in the second propagate segment.

  1. Click the Insert Segment After () button.
  2. Add a Propagate () segment.
  3. Rename it PropPerigee.
  4. Add a Stopping Condition.
  5. Select Periapsis as the Stopping Condition.
  6. Change the color of PropPerigee to something different than the previous segments.
  7. Click Results... when PropPerigee is selected in the MCS.
  8. Expand () the Spherical Elems directory.
  9. Double-click R-Mag.
  10. Click Apply.
  11. Save () your scenario.

Astrogator Optimizer

SNOPT (Sparse Nonlinear OPTimizer) is a software package for solving large-scale optimization problems (linear and nonlinear programs). It employs a sparse SQP algorithm with limited-memory quasi-Newton approximations to the Hessian of Lagrangian. SNOPT is especially effective for nonlinear problems whose functions and gradients are expensive to evaluate. The functions should be smooth but need not be convex. An augmented Lagrangian merit function ensures convergence from an arbitrary point. Infeasible problems are treated methodically via elastic bounds on the nonlinear constraints. SNOPT allows the nonlinear constraints to be violated (if necessary) and minimizes the sum of such violations.

Let's configure the optimizer.

  1. Select the TargetManeuver segment.
  2. Delete () the default Differential Corrector profile.
  3. Add a new SNOPT Optimizer profile.
  4. Double-click to open its properties.
  5. Enable the True Anomaly variable as a control parameter.
  6. Set the Lower and Upper bounds to the following:
  7. OptionValue
    Lower Bounds160 deg
    Upper Bounds180 deg

This limits where in the orbit you want to start the maneuver.

Set a Finite Maneuver Duration as a Control

  1. Enable the Finite Maneuver Duration as a control parameter.
  2. Set the Lower and Upper bounds to the following.
  3. OptionValue
    Lower Bounds0 sec
    Upper Bounds1200 sec

Set the Objective

You would like to reach a radius of perigee of 10,000 km using the minimum amount of fuel. To accomplish this, you are going to vary the starting location (true anomaly) and duration of the burn.

  1. Enable the DeltaV option to set it as the objective.
  2. Set the goal to Minimize.
  3. Enable R_Mag as the Constraint.
  4. Set the Lower and Upper bounds to the following:
  5. OptionValue
    Lower Bounds10000 km
    Upper Bounds10000 km

Run Astrogator

Now that you have set all the parameters, you can run Astrogator to view the results.

  1. Set the Action to Run Active Profiles.
  2. Run () the MCS.

A new window pops-up with a message that the optimizer finished successfully along with the values it achieved.

Run a Maneuver Summary Report

Let's use the Report & Graph Manager to run a Maneuver Summary Report to ensure our mission was successful.

  1. Right-click on the satellite () in the Object Browser.
  2. Select the Report & Graph Manager ().
  3. Generate a Maneuver Summary report.