Using Astrogator and ODTK Together

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.

Version 13.0 of the Ansys Systems Tool Kit® (STK®) digital mission engineering software and Ansys Orbit Determination Tool Kit (ODTK®) orbital measurement processing software are required to complete this tutorial.

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 Systems Tool Kit® (STK®) digital mission engineering software:

  • STK Pro
  • Astrogator

Problem statement

Engineers and operators need to analyze the results of a launch into low earth Orbit (LEO) that did not go exactly as planned. You have the nominal trajectory, which you planned using the STK/Astrogator® capability, but you need to understand the current state of the satellite from available tracking data so you can recompute the maneuvers needed for a successful Hohmann transfer into your targeted geostationary orbit (GEO).

Solution

Use the Ansys Orbit Determination Tool Kit (ODTK®) orbital measurement processing software to process the tracking measurements and create a post-launch flight dynamics record, which you can pass to the STK software for further analysis. Use the flight dynamics record to recompute the maneuvers for the satellite's actual trajectory. Create acceleration history (*.accelhist) files to feed back into the ODTK application to analyze the results of the planned maneuvers. The purpose of this exercise is to teach you how to make the STK software's Astrogator capability and the ODTK software work together, not how to build Astrogator or ODTK scenarios. The tutorial will follow the general workflow below:

STK-ODTK workflow diagram

What you will learn

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

  • Use the ODTK application's component browser
  • Create flight dynamics records in the ODTK application
  • Share propagators and flight dynamics records between the STK and ODTK applications
  • Create and use acceleration history files

Opening the starter STK scenario

A partially created scenario containing the nominal launch trajectory designed using the Astrogator capability has been built for you and is included with the STK software installation.

  1. Launch the STK application ().
  2. Click Open a Scenario () in the Welcome to STK dialog box.
  3. Browse to <Install Dir>\Data\Resources\stktraining\VDFs.
  4. Select STK_ODTK.vdf.
  5. Click Open.

Saving the VDF as an STK scenario

Save and extract the VDF data in the form of a scenario folder. When you save a VDF in the STK application, it will save in its originating format. That is, if you open a VDF, the default save format will be a VDF (*.vdf). If you want to save and extract a VDF as a scenario folder, you must change the file format by using the Save As feature. This will create a permanent scenario file complete with child objects and any additional files packaged with the VDF.

  1. Select the File menu.
  2. Select Save As....
  3. Select the STK User folder in the navigation panel when the Save As dialog box opens.
  4. Select the STK_ODTK folder.
  5. A scenario folder with the same name as the VDF was created for you when you opened the VDF in the STK application. This folder contains the temporarily unpacked files from the VDF.

  6. Click Open.
  7. Select Scenario Files (*.sc) as the Save as type.
  8. Select the STK_ODTK Scenario file in the file browser.
  9. Click Save.
  10. Click Yes when the Confirm Save As dialog box opens to overwrite the existing scenario file in the folder and to save your scenario.

When saving a VDF as a scenario folder, you should extract its contents to the scenario folder the STK application automatically creates for you in the STK User folder. See the Permanently Extracting a VDF as a Scenario Folder and VDF Setup Considerations pages for more information.

Save () your scenario often!

Nominal trajectory

Reviewing the starter STK scenario

Review the starter scenario to get a better understanding of the nominal launch trajectory.

  1. Right-click on NominalMission () in the Object Browser.
  2. Select Properties () in the shortcut menu.
  3. Ensure the Basic - Orbit page is selected.
  4. Review the Mission Control Sequence (MCS).
  5. The Astrogator satellite consists of several segments nested in a Target Sequence:

    • A Launch () segment, Launch, into LEO
    • A Propagate () segment, PropToApoRaise, to the apogee-raising maneuver
    • A Maneuver () segment, RaiseApo, to raise the apogee
    • A Course-correction Maneuver () segment, CourseCorrection, which is set to 0 for now, but may become necessary later
    • Another Propagate () segment, Prop2Apo, which propagates the orbit to circularization
    • A final Maneuver () segment, Circularize, which will bring the satellite into a circular, non-inclined orbit 10 km below GEO altitude so the satellite can drift to the desired longitude

    The other two satellites in the scenario are similar and will be used later on in the tutorial. Instead of starting from launch, they start with initial states from later in the mission, the properties of which you will calculate using the ODTK software.

    NominalMission MCS

  6. Click Cancel to close the Properties Browser without saving any changes.
  7. Keep the STK application open.

Opening the starter ODTK scenario

Open and review the starter ODTK scenario.

  1. Launch the ODTK application ().
  2. Select the File menu.
  3. Select Open... ().
  4. Browse to <Install Dir>\Data\Resources\odtktraining\scenarios.
  5. Select ODTK_STK.sco.
  6. Click Open.
  7. Review the scenario.

You are using the Baseline Tracking System () object, which provides a convenient way of grouping one or more facilities. Four Facility () objects in the Tracking System model remote tracking stations in the Satellite Control Network, which provide range, Doppler, azimuth and elevation measurements. A post-launch Satellite object, Launch2GEO (), has already been created for you.

ODTK Scenario Setup

Saving the ODTK scenario

Save a copy of the ODTK starter scenario to a subfolder in your STK Scenario folder.

  1. Select Save As... in the File menu.
  2. Navigate to your User folder (e.g., C:\Users\<username>\Documents\STK_ODTK 13.
  3. Open the STK_ODTK Scenario folder.
  4. Right-click in the file and folder listing.
  5. Select New in the shortcut menu.
  6. Select Folder in the New submenu.
  7. Rename the new folder ODTK_STK.
  8. Select the Enter key.
  9. Click Open.
  10. Click Save.

Saving the ODTK scenario to a separate subfolder prevents any files like propagators and flight dynamics record from being accidentally overwritten as you build your scenarios.

Updating the ODTK satellite's propagator component

The Component Browser is a powerful tool in the STK application that contains analysis components and enables you to define your own components. Starting with version 13 of the ODTK software, parts of the Component Browser are now available in the ODTK application as well. Use the ODTK application's Component Browser to create a new propagator component.

Creating a new propagator component

A propagator component comprises a numerical integrator and a set of propagator functions. New Propagators can be created in either the STK or ODTK Component Browser, exported, and imported again in one application's Component Browser and even into different scenarios. This way, astrodynamics consistency is ensured between the two tools since the same propagator is used. Duplicate an existing propagator component in the ODTK Component Browser and modify it for your needs.

  1. Select the Utilities menu.
  2. Select Component Browser....
  3. Select the Propagators () folder.
  4. The only folders available in the ODTK Component Browser are Propagators, Propagator Functions, and Flight Dynamics Records.

  5. Select Earth Default High Fidelity v13 () in the Propagators list.
  6. Note that Earth Default High Fidelity v13 propagator is marked read only (), so you must create a new copy in order to make any modifications.

  7. Click Duplicate ().
  8. Enter STK ODTK Tutorial in the Name field when the Field Editor dialog box opens.
  9. Click OK.

Editing the propagator functions

Propagator functions are components that you can use to define propagation models. You can apply five types of propagator functions to your propagator: atmospheric models, gravity models, plugins, solar radiation pressure (SRP) models, and third bodies. A propagator can have as many third-body components as you want, but it can only have one component of each of the other types. When you add a function to a propagator model, the Astrogator capability embeds a copy of the component in that model.

Updating the gravity model

The gravity models comprise properties that you can edit in a custom component.

  1. Select STK ODTK Tutorial () in the Propagators list.
  2. Click View properties ().
  3. Ensure the Gravitational Force component is selected in the component list.
  4. Enter 40 in the Degree field in the State Propagation panel.
  5. Enter 40 in the Order field in the State Propagation panel.
  6. Note the Stochastic Parameters panel on the right.

Propagator stochastic parameters panel

Instead of defining these properties in the Object Properties window, as in versions 7.10 of the ODTK software and earlier, they can now be defined directly in the propagator.

Satellite Force Model parameters

Updating the atmospheric model

Change the atmospheric model and update its parameters.

  1. Select Jacchia-Roberts in the component list.
  2. Click Delete ().
  3. Click New... ().
  4. Expand () Atmospheric Models when the New Function dialog box opens.
  5. Select NRLMSISE 2000 ().
  6. This is an empirical density model developed by the US Naval Research Laboratory and based on satellite data. It finds the total density by accounting for the contribution of N, N2, O, O2, He, Ar, and H number densities. It includes anomalous oxygen. This 2000 version has a valid range of 0 to 1,000 km.

  7. Click OK to confirm your selection and to close the New Function dialog box.
  8. Note that the Use Stochastic Ballistic Coeff and Use Stochastic Density Correction check boxes are selected by default.
  9. This implements stochastic modeling for the ballistic coefficient and for the air drag model.

  10. Keep all the other values set to their defaults.
  11. Note that, as in the gravity model, the stochastic parameters of the atmospheric density model are now part of the propagator.

Updating the propagator numerical integrator

The numerical integrator defines the algorithm used to integrate the accelerations of the spacecraft and the constants that control the step size and accuracy of the propagation. While using the STK ODTK Tutorial propagator, both the STK and ODTK applications will apply identical forces when a satellite is at the same location at the same time. However, the integration steps each tool uses with the variable step integrator are slightly different, which will cause the two orbits to slowly diverge over time. To prevent this, set the numerical integrator to use fixed integration steps, which forces both the STK and ODTK applications to have identical integration steps.

  1. Select the Numerical Integrator tab.
  2. Select the Use Fixed Step check box.
  3. The numerical integrator will now use the default 30-second integration steps.

  4. Click OK to confirm your changes and to close the Propagator dialog box.
  5. Click Close to close the Component Browser.

Setting the ODTK satellite to use the new propagator

Now that you have configured your propagator, set the satellite to utilize it.

  1. Double-click on Launch2GEO () in the Object Browser to open the Object Properties window.
  2. Under Satellite - ForceModel - Propagator, select your new STK_ODTK_Tutorial propagator.
  3. Set the Satellite - ForceModel - UseComponentPropagator attribute to true.
  4. When UseComponpentPropagator is set to true, you can select nominal, predict, and maneuver integrators from the Propagators folder of the Component Browser.

    Note that most ForceModel properties are now grayed out in the Object Properties window, since the parameters from the STK ODTK Tutorial propagator will be used.

  5. Confirm that the Satellite - ForceModel - Gravity - DegreeAndOrder attribute is set to 40.
  6. Confirm that the Satellite - ForceModel - Drag - AtmDensityModel attribute is set to NRLMSISE 2000.
  7. Confirm that the Satellite - PropagatorControls - StepSize - StepControlMethod is set to Fixed.
  8. Confirm that the Satellite - PropagatorControls - StepSize - StepControlMethod is set to 0.5 min.
  9. Click Apply in the Object Properties window to apply the property changes.

Processing the post-launch measurements

You launch did not happen exactly as planned:

  • The launch occurred five minutes later than panned.
  • The burnout occurred at a slightly higher altitude than expected.
  • At burnout, the spacecraft traveled a little faster than originally planned.

So, while the NominalMission Satellite () object in the STK application still provides the general mission plan, it is no longer accurate enough to set the initial state in the ODTK application. You will begin the orbit determination process with an Initial Orbit Determination object and refining with a Least Squares object instead. You will then use the filter to compute the actual trajectory your satellite took.

Loading the post-launch tracking data

Add a tracking data file to be used in the orbit determination process. The observations were taken from your group of tracking stations and will be used in the orbit determination process to produce an estimate of the trajectory.

  1. Double-click on ODTK_STK () in the Object Browser to open its Properties.
  2. Select the Scenario - Measurements - Files property.
  3. Click where indicated (click to edit) in the Value field.
  4. Click Add when the Scenario.Measurements.Files dialog box opens.
  5. Click where indicated in the Filename field.
  6. Navigate to <Install Dir>\Data\Resources\odtktraining\trackingdata.
  7. Select PostLaunch.geosc.
  8. Click Open.
  9. Click OK to confirm your selection and to close the Scenario.Measurements.Files dialog box.
  10. Click Apply.

Previewing the measurements

Preview the measurements in the file to ensure they are correctly associated with the objects in this scenario.

  1. Right-click in the toolbar area.
  2. Select Default to show the Default toolbar if it is not already visible.
  3. Click Preview Measurements () in the Default toolbar.
  4. Review the information in the Message Viewer.

You should see your four trackers and the Launch2GEO in the tracking data.

Tracking data preview

Generating a Measurement Times by Tracker report

Generate a report to show which tracker sees the satellite first.

  1. Select Static Product Builder () in the View menu.
  2. Select the Outputs tab when the Static Product Builder window opens.
  3. Select the Measurement Times by Tracker graph style () from the Products Styles (Graphs and Reports) list.
  4. Rename Data Product () Meas Times by Tracker by clicking its default name and entering the new one.
  5. Click Run Selected () to launch the Graph Viewer window.
  6. Review the graph.
  7. Measurement Times by Tracker graph

    HULA-A has the first set of available tracking measurements, so you will use that facility for further analysis.

Inserting an Initial Orbit Determination object

Add an Initial Orbit Determination (IOD) object as a child object of Launch2GEO to solve for the initial state of the satellite using measurements from early passes. IOD methods provide the capability to compute a position and velocity for the satellite directly from observations. Other orbit determination methods, such as least squares and sequential filtering, require an initial state to start with and then refine the estimate of the orbit.

  1. Select Launch2GEO () in the Object Browser.
  2. Expand () the menu next to the Satellite object toolbar icon ().
  3. Select InitialOrbitDetermination ().
  4. Click Insert.

Updating the Initial Orbit Determination object's properties

Confirm your method and select the tracking station facility to use for your IOD.

  1. Open InitialOrbitDetermination1's () Properties.
  2. Ensure that the InitialOrbitDetermination - Method property is set to HerrickGibbs.
  3. IOD methods are constructed to work with a specific mix of observation types. The Herrick-Gibbs IOD method uses three sets of range plus directions measurements to generate an initial orbit solution for a geocentric spacecraft. Since your tracking data contain azimuth, elevation, range and Doppler measurements.

  4. Set the InitialOrbitDetermination - SelectedFacility property to Facility/HULA-A.
  5. Recall that HULA-A is the first facility to collect tracking data.

  6. Click Apply.

Selecting the observations from the tracking data

The Herrick-Gibbs IOD method enables you to select three observations from the tracking data. The ODTK application offers you a list of measurements to select from, which may span several orbit revolutions or several passes of tracking data. The Herrick Gibbs algorithm is valid for a selection that spans substantially less than one orbit period, and is typically applied to three measurements from the same tracking pass.

  1. Click where indicated in the Value field for the InitialOrbitDetermination - Method - SelectedMeasurements property.
  2. Click Add... when the InitialOrbitDetermination.Method.SelectedMeasurements dialog box opens.
  3. Review the data in the Add Items(s) dialog box when it opens.
  4. Each row in the Add Item(s) dialog box shows the time of available measurements (absolute and relative), the range in kilometers, and the elevation angle in degrees.

  5. Multi-select data points 0000, 0120, and 0240.
  6. For Herrick-Gibbs, you want to select three measurements from the same pass, not a low elevation angle, and spaced a couple minutes apart.

  7. Click OK to confirm your selections and to close the Add Item(s) dialog box.
  8. Click OK to close the InitialOrbitDetermination.Method.SelectedMeasurements dialog box.
  9. Click Apply.

Performing the initial orbit determination

Run the Initial Orbit Determination tool and, if it converges and the Keplerian elements seem reasonable for a LEO orbit, copy them to the Launch2GEO Satellite.

  1. Ensure InitialOrbitDetermination1 () is selected in the Object Browser.
  2. Click Run () in the default toolbar.
  3. Click Transfer to Satellite () to push the new initial state to the satellite.
  4. Note the confirmation in the Message Viewer window.

Refining the initial state using Least Squares

At this point, you have generated an initial orbit solution directly from tracking measurements using the Herrick-Gibbs IOD method. Your goal is to progress to performing orbit determination using a sequential filter, but since IOD results often have large errors in them, you will further refine the initial state using the Least Squares process.

Inserting a Least Squares object

Add a Least Squares object as a child of the satellite so you can refine the initial state.

  1. Select Launch2GEO () in the Object Browser.
  2. Expand () the menu next to the IOD object toolbar icon ().
  3. Select LeastSquares ().
  4. Click Insert.

Performing a least squares run

Run the Least Squares object and review its output. You can keep the default Stage duration of 4 hours, since you have tracking data for about 3.5 hours and want to process all of it.

  1. Select LeastSquares1 () in the Object Browser.
  2. Click Run ().
  3. Click Transfer to Satellite () to push the solution state to the initial state to the satellite.
  4. Transferring the least squares result to the parent satellite enables you to use the least squares result as the starting point for the filter.

  5. Note the details of the confirmation message in the Message Viewer window.

Configuring an Optimal Sequential Filter

Add a Filter object to the scenario. Filter methods are forward-time recursive sequential machines consisting of a repeating pattern of a filter time update of the state estimate, which propagates the state estimate forward, and a filter measurement update of the state estimate, which incorporates the next measurement. The filter will generate an estimated trajectory running forward in time, where each point along the trajectory contains the information from all measurements prior to that time. Thus, the state estimate at the last time in the filter run will contain the information for all of the measurements, while states at prior times contain less information.

  1. Select ODTK_STK () in the Object Browser.
  2. Insert a Filter object ().
  3. Select the Filter object () in the Object Browser.
  4. Click Run ().

This will generate a .filrun file, which is the output of the filter.

Processing the measurements

Create a Residual Ratios plot to make sure most measurements were accepted. A Residual Ratios plot displays normalized results, where the normalized residual is the residual divided by the measurement error root variance. Normalizing is useful to display residual behavior of two or more measurement types on one graph.

  1. Return to the Static Product Builder.
  2. Click Add Product ().
  3. Rename Data Product () Residual Ratios.
  4. Select Residual Ratios () graph style in the Product Styles (Graphs and Reports) list.
  5. Select the Inputs tab.
  6. Click Add.
  7. Click where indicated in the Objects field.
  8. Select Filter1 in the drop-down list.
  9. This will add the ODTK_STK.filrun file as the data source.

  10. Click Open.

Creating the graph

With your data limited, run the graph.

  1. Click Run Selected ().
  2. Review the graph to make sure most measurements were accepted.
  3. Not all measurements provided in tracking data files are used to update the estimation state during an estimation run. As an estimator (Filter or Least Squares) runs, it decides whether or not to accept a measurement and assign an appropriate two-character editing flag value to inform you of the reason. Some measurements are culled based on estimator settings before entering the estimation process. Other measurements may be rejected during the estimation process for a variety of reasons.

  4. Note the time of the last collected data points.
  5. The last data were collected from COOK-A at 1 Jan 2026 19:53:00.000.

    Your graph will look different than the one below, owing to when your EOP data were last updated.

HULA-A Measurement Residual Ratio

Residual reports and graphs provide an indication of measurement quality and how well the solution matches the measurements. Another important result of orbit determination is the expected accuracy of the solution. The formal accuracy of an orbit determination solution is given by the state error covariance which is an output of the estimator along with the estimated state. The state error covariance is an n × n matrix, given a state size of n. While the covariance matrix as a whole is a lot of information to digest, the parts of it that indicate the positional accuracy of the solution are almost always of interest. When the filter is properly configured, the formal uncertainty, represented by the state error covariance matrix, is a reliable measure of orbit accuracy. The graph shows you measurements remain within the ±3-sigma bounds.

Creating and using flight dynamics records

While the propagator definition contains the various forces acting on the satellite, it does not include data at a specific epoch such as the state or its mass. This is where Flight Dynamics Records come in. A flight dynamics record (FDR) component contains the full state of a satellite as well as the propagator that was used to obtain the state. Just as with propagators, flight dynamics records are stored in the Component Browser and can be transferred between the STK and ODTK applications.

Since the launch did not execute exactly as planned, you will use Astrogator to refine the maneuvers that get the satellite to the desired final orbit. To do that, Astrogator will need the best available state from the ODTK application. Use a Flight Dynamics Record to copy the orbit determined by the ODTK application to the STK application.

Creating a flight dynamics record in the ODTK application

You can create a new Flight Dynamics Record component to capture an ODTK satellite's state at a specific time.

  1. Select the Utilities menu.
  2. Select All Utilities....
  3. Double-click on Flight Dynamics Record Creator when the ODTK Utility Manager opens.
  4. Select Last Point in the Point Selection Mode drop-down list.
  5. Enter 1 Jan 2026 19:53:00.000 in the Pick Date field.
  6. This is the time of the last point of the tracking data.

  7. Enter PostLaunch in the FD Record Name field.
  8. Click Add Record to Browser.
  9. Review the Status message.
  10. The new FDR has been added to the Component Browser.

  11. Save () your scenario.

When you saved the scenario, the record was saved to the Flight_Dynamics subfolder of your scenario (for example., C:\Users\<username>\STK_ODTK 13\STK_ODTK\ODTK_STK\Flight_Dynamics\Flight_Dynamics_Records. You now need to get this over to STK application.

Exporting the flight dynamics record from the ODTK application

To avoid having to restart the STK application, export the FDR from the ODTK application.

  1. Select the Utilities menu.
  2. Select Component Browser....
  3. FDR in ODTK Component Browser

  4. Select Postlaunch () in the Flight Dynamics Records List.
  5. Click Export File ().
  6. Navigate to your STK scenario folder (for example, C:\Users\<username>\STK_ODTK 13\STK_ODTK).
  7. Click Save.

You can also add the PostLaunch FDR to your user collection by clicking Add to Collection () to make it available in other scenarios. This will copy it into a folder from which both the STK and ODTK applications load files at start up. However, this will require you to restart the STK application to access the component.

Importing the flight dynamics record into the STK application

With you FDR created, import it for use in the STK application.

  1. Return to the STK application ().
  2. Select the Utilities menu.
  3. Select Component Browser... ().
  4. Select the Flight Dynamics Records () folder in the Select Component Type list.
  5. Click Import File ().
  6. Select PostLaunch.FlightDynamicsRecord.
  7. Click Open to confirm your selection and to import the FDR.
  8. Select the Propagators () folder.
  9. Note that the STK ODTK Tutorial propagator was also transferred as part of the Flight Dynamics Record.

    STK ODTK Tutorial propagator in STK Component Browser

  10. Click Close to close the Component Browser.

Setting the initial state of PostLaunch satellite with the flight dynamics record

You can use the Initial State Tool to set the PostLaunch satellite's initial state to use the FDR component you just imported.

  1. Right-click on Postlaunch () in the Object Browser.
  2. Select Properties ().
  3. Note that the MCS of the PostLaunch satellite is almost identical to that of the NominalMission satellite, with the exception that it starts from an Initial State segment instead of a Launch.

    PostLaunch MCS

  4. Ensure the Initial State () segment is selected in the MCS.
  5. Click Initial State Tool... on the Basic - Orbit page when the Properties Browser opens.
  6. Select Flight Dynamics Record in the Source Type drop-down list in the New Vector Source panel when the Initial State Import Tool dialog box opens.
  7. Click the ellipsis () next to the Flight dynamics record field.
  8. Select PostLaunch () when the Select Component dialog box opens.
  9. Click OK to confirm your selection and to close the Select Component dialog box.
  10. Click Generate New Vector in the Results panel.
  11. This will generate a new initial state vector. The results will appear in the Results panel.

  12. Click Accept State to apply the new initial state vector to the Initial State sequence.

This will set the initial state of the satellite and load the propagator but will not apply the propagator to all Propagate and Finite maneuver segments. Note that the Initial State's orbit epoch has been set to 1 Jan 2026 19:53:00.000 UTCG. Recall that this is the time of the last point of the tracking data that you set when you created the FDR.

Applying the new propagator to all MCS segments

While you loaded the STK ODTK Tutorial propagator into the STK application, it is not being used by the MCS components of the PostLaunch satellite. Configure the MCS segment propagators to use the imported FDR propagator.

  1. Click Configure MCS Segment Propagators () in the MCS toolbar.
  2. Ensure the Replace All Propagators option is selected when the Configure MCS propagator dialog box opens.
  3. Click the ellipsis () next to the Replace with this propagator field.
  4. Select STK ODTK Tutorial () when the Select Component dialog box opens.
  5. Click OK.
  6. Click Select All to select all the MCS segments.
  7. Click Apply Propagator and Integrator to Selected Segments.
  8. Click OK to confirm your changes and to close the Configure MCS propagator dialog box.

Viewing the stochastic parameters

Review the Initial State segment’s stochastic parameters.

  1. Select the Stochastic Parameters tab.
  2. Note the values.
  3. Your values will be different than the ones shown below.

PostLaunch stochastic parameters

Since you set the initial state from a Flight Dynamics Record, the values are grayed out and Astrogator will use the corrections to the drag and SRP estimates from the ODTK application. The corrections will decay from their initial values at a rate specified by the respective half life value from the propagator. Unlocking the initial state would allow us to overwrite these values.

Propagating the PostLaunch satellite

Propagate the PostLaunch satellite.

  1. Select the check box for PostLaunch () in the Object Browser.
  2. You want to visualize the orbit of the satellite as it was launched compared to that of the NominalMission satellite.

  3. Click Run Entire Mission Control Sequence ().
  4. If it does not converge in the allowed number of iterations, click Run Entire Mission Control Sequence again until all solutions converge.

  5. Click Clear Graphics () to remove the iterations.
  6. Bring the 3D Graphics window to the front.
  7. Increase the animation Time Step () to 60.00 sec.
  8. Click Start () to view the propagated orbits.
  9. Click Reset () when finished.

PostLaunch and NominalMission orbits

Updating the ODTK application with an acceleration history file

The Astrogator capability computed the required maneuvers to complete the mission starting with the launch errors. These are the updated maneuvers you will command the satellite to perform. Once they executed by the satellite, and you receive new post-maneuver tracking data, you have to transfer the updated maneuvers into the ODTK application as well. You can transfer the newly updated maneuver details from the STK application to the ODTK application by creating acceleration history files.

Creating a custom acceleration history report

You can use an acceleration history file (*.accelhist) to specify a finite maneuver in the Astrogator capability and in the ODTK application. Each data point provides the time (relative to a start time), an acceleration vector, and the rate of loss of mass.

  1. Right-click on PostLaunch () in the Object Browser.
  2. Select Report & Graph Manager... () in the shortcut menu.
  3. Select the My Styles () folder.
  4. Click Create a new report style () in the Styles toolbar.
  5. Name the new report Accel Hist.
  6. Select the Enter Key.
  7. Expand () the Astrogator Accel Hist () data provider when the Report Style window opens.
  8. Select the Accel Hist () data provider element.
  9. The STK application comes with two preinstalled report styles: Accel File and Accel File Python. The former uses Perl script to generate *.accelhist files at the location specified on the first line of the report and requires Perl to be installed on your computer; the latter requires a working Python environment and the STK Python API to be installed on your computer and will generate a collection a collection of *.accelhist files using a Python script, output to the directory C:\AccelFiles, one file per maneuver.

  10. Insert () Accel Hist into the Report Contents list.
  11. Click OK to confirm your selection and to close the Report Style window.

Creating a custom acceleration history report

With your data provider element selected, generate the report and review the contents of the acceleration history file.

  1. Select the Accel Hist () report.
  2. Click Generate. . ..
  3. This Generates an acceleration history file for each finite maneuver segment of the Astrogator satellite. The name of each file reflects the maneuver segment name and the name of any associated target sequence. The STK application places the files in a folder called AccelHist within the scenario directory. It also creates an additional file, AllAccelHist.accelhist, that gather all the acceleration data of the separate files.

    Acceleration history files contain the acceleration due to the maneuver over time. Since you have only refined the RaiseApo maneuver so far, skip the Circularize acceleration history file for now.

  4. Note that the report itself contains a summary of files that STK generated.
  5. Close the Accel Hist report.
  6. Navigate to the location of your generated acceleration history files in Windows Explorer.
  7. Select PostLaunch.Target_Sequence.RaiseApo.accelhist.
  8. Open PostLaunch.Target_Sequence.RaiseApo.accelhist with a text editor of your choice.
  9. Inspect its contents.
  10. The file data consists of five columns: Time, ACCELx, ACCELy, ACCELz, and MassChangeRate. The format of the file is compatible for ingestion by the ODTK application. Note that the acceleration history file table contains some common elements called keywords. Keywords and their associated values (except END) must precede the specification of the data and the actual data points.

Creating a finite maneuver in the ODTK application with the acceleration history file

Back in the ODTK application, add a finite maneuver to your satellite. ODTK processing applies all impulsive maneuvers at a single time and computes the time of application and the resultant change in velocity based on algorithms given in the ODTK Orbit Determination: Theorems & Equations document.

  1. Return to the ODTK application ().
  2. Open Launch2GEO's () Properties.
  3. Scroll to the Satellite - Forcemodel - FiniteManeuvers property.
  4. Click where indicated.
  5. Click Add... when the Satellite.Forcemodel.FiniteManeuvers dialog box opens.
  6. Select FiniteManAccelFile when the Add Item(s) dialog box opens.
  7. Click OK to confirm your selection and to close the Add Item(s) dialog box.
  8. Set the following values:
  9. Name Value1
    Name RaiseApo
    AccelHistoryFilename C:\Users\<username>\Documents\STK_ODTK 13\STK_ODTK\AccelHist\PostLaunch.Target_Sequence_RaiseApo.accelhist
    Estimate MagnitudeOnly
    Mass - Isp 300 sec (to match the engine model in Astrogator)
    Uncertainty - PercentMagnitudeSigma 5%
  10. Click OK to confirm your changes and to close the Satellite.Forcemodel.FiniteManeuvers dialog box.
  11. Click Apply.

Calibrating the engine component

While you now know the corrected desired maneuver, there will be errors due to the actual engine not being calibrated yet. By processing the PostDV1 measurement file, the ODTK software can estimate corrections to the planned maneuvers, which will allow you to calibrate the spacecraft's engine just in time for the 2nd maneuver.

Loading the new measurements

Load the PostDV1.geosc file while keeping PostLaunch.geosc enabled.

  1. Open ODTK_STK's () Properties.
  2. Click to edit the Scenario - Measurements - Files property.
  3. Click Add.
  4. Click where indicated in the new entry.
  5. Navigate to <Install Dir>\Data\Resources\odtktraining\trackingdata.
  6. Select PostDV1.geosc.
  7. Click Open.
  8. Click OK to confirm your selection and to close the Scenario.Measurements.Files dialog box.
  9. Click Apply.

Processing the PostDV1 measurements

Re-run your filter and review the data.

  1. Select Filter1 () in the Object Browser.
  2. Run () the filter.
  3. The ODTK application processes maneuvers in the filter after processing all measurements (if any) during the maneuver time.

  4. Return to your Residual Ratios plot.
  5. Refresh () the graph.
  6. Review the graph to see if most of the measurements were accepted (that is, fall within the ±3-sigma bounds).
  7. Your graph will look different than the one shown below.

Residual Ratios plot with postDV1 tracking data

Creating a Finite Maneuver Thrust Magnitude Percent graph

Create a new data product to show the magnitude of the thrust correction of the RaiseApo maneuver by copying your existing Residual Ratios data product.

  1. Return to the Static Product Builder.
  2. Select Residual Ratios () in the Product List.
  3. Click Copy Product ().
  4. Rename Copy_of_Residual Ratios () Thrust Magnitude Pct.
  5. Select the Outputs tab.
  6. Select Finite Mnvr Thrust Magnitude Pct () in the Product Styles (Graphs and Reports) list.
  7. The Finite Mnvr Thrust Magnitude Pct data product displays estimated thrust magnitude correction as a percentage of a the nominal thrust during a finite maneuver.

  8. Run () the selected data product.
  9. Review the graph.
  10. Your graph may look slightly different than the one below.

Finite Thrust Maneuver Magnitude Correction graph

Since the engine was not yet calibrated, there were some inaccuracies. In this case, the engine provided slightly more thrust than expected. The average correction over the entire maneuver is about 2%.

Creating a calibrated engine component in the STK application

Create an engine model component in the STK application that includes this calibration value and recompute the maneuvers necessary to get to the desired orbit.

  1. Return to the STK application ().
  2. Return to the Component Browser ().
  3. Select the Engine Models () folder in the Select Component Type list.
  4. Select the Constant Thrust and Isp () component in the Engine Model list.
  5. Click Duplicate component ().
  6. Enter 102% in the Name field when the Field Editor dialog box opens.
  7. Click OK.
  8. View 102%'s () Properties ().
  9. Set the Thrust to 510 N when the 102% dialog box opens.
  10. Click OK to confirm your changes and to close the 102% dialog box.

Performing the final maneuver estimation

Now that you have a better idea of how your engine performs, go through the above process one more time to get a corrected circularization maneuver. Unfortunately, due to the launch and engine calibration error, you now need to perform a small course correction maneuver as well. Use the PostDV1 satellite to get your final maneuver estimates in the STK application.

Transferring the latest state from the ODTK application into the STK application

Create a new flight dynamics record in the ODTK application from the latest tracking data and transfer it to the STK application.

  1. Return to the ODTK application ().
  2. Open the Flight Dynamics Record Creator from the Utility.
  3. Create a new FDR for the Launch2GEO satellite named PostDV1 at the last point processed by the filter, which should be on 1 Jan 2026 23:44:58.194.
  4. Add the FDR to the ODTK Component Browser.
  5. Export the PostDV1 flight dynamics record from the Component Browser to the STK_ODTK STK scenario folder.
  6. Return to the STK application ().
  7. Open the PostDV1 () satellite's Properties ().
  8. Open the Component Browser () from the MCS toolbar.
  9. Import () PostDV1.FlightDynamicsRecord into the Flight Dynamics Records () folder.
  10. Close the Component Browser.

Updating PostDV1's initial state

Update PostDV1's initial state segment with the PostDV1 FDR.

  1. Select the Initial State () segment in the MCS.
  2. Click Initial State Tool....
  3. Select Flight Dynamics Record in the Source Type drop-down list in the New Vector Source panel when the Initial State Import Tool dialog box opens.
  4. Click the ellipsis () next to the Flight dynamics record field.
  5. Select PostDV1 () when the Select Component dialog box opens.
  6. Click OK to confirm your selection and to close the Select Component dialog box.
  7. Click Generate New Vector in the Results panel.
  8. Click Accept State to apply the new initial state vector to the Initial State sequence.
  9. Click Apply.
  10. Note that the orbit epoch of the initial state has been set to 1 Jan 2026 23:44:58.194, the point last processed by the filter that you chose for the FDR.

Configuring PostDV1's propagators

Configure the propagator for PostDV1's Maneuver and Propagate segments.

  1. Click Configure MCS Segment Propagators () in the MCS toolbar.
  2. Select all the segments in the Segment Properties list.
  3. Replace all propagators with the STK ODTK Tutorial () propagator.
  4. Apply the propagator and integrator to the selected segments.
  5. Click OK.
  6. Click Apply.

Updating PostDV1's CourseCorrection Manuever segment

Update the CourseCorrection Maneuver segment to use the calibrated 102% engine model you created earlier for both the Finite and Impulsive maneuver types.

  1. Select the CourseCorrection () Maneuver segment in the MCS.
  2. Select the Engine tab.
  3. Ensure the Maneuver Type is set to Finite.
  4. Click the ellipsis () next to the Engine Model option in the Propulsion Type panel.
  5. Select 102% () when the Select Component dialog box opens.
  6. Click OK to confirm your selection and to close the Select Component dialog box.
  7. Select Impulsive in the Maneuver Type drop-drop list.
  8. Select the 102% () engine model component for the Impulsive maneuver type.

Updating PostDV1's Circularize Maneuver segment

Update the Circularize Maneuver segment to use the calibrated 102% engine model you created earlier.

  1. Select the Circularize () Maneuver segment in the MCS.
  2. Set the segment to use the 102% () engine model for the Finite Maneuver type.
  3. Change the Maneuver Type to Impulsive.
  4. Select the 102% () engine model component for the Impulsive maneuver.
  5. Click Apply to confirm your changes and to keep the Property Browser open.

The Astrogator capability computes the impulsive maneuver first, since it converges easier. Using the results from that analysis, it will compute the initial guesses for a finite maneuver and then use those to develop a solution. By setting the engine model for both maneuver types to use your custom 102% engine model, you ensure that both solutions will have accurate results.

Propagating the satellite and generating new acceleration history files

Propagate the PostDV1 satellite and generate new acceleration history files for the CourseCorrection and the Circularize maneuvers.

  1. Select the check box for PostDV1 () in the Object Browser.
  2. Run () the entire MCS.
  3. Clear the graphics () of the iterations.
  4. Review the propagated orbit in the 3D Graphics window.
  5. Course Correction and circularization maneuvers

  6. Right-click on PostDV1 () in the Object Browser.
  7. Select Report & Graph Manager... () in the shortcut menu.
  8. Generate an Accel Hist () report.
  9. Generating an Accel Hist report will also generate acceleration history files for both the Course Correction (PostDV1.Target_Sequence.CourseCorrection.accelhist) and Circularize (PostDV1.Target_Sequence.Circularize.accelhist) maneuvers.

Performing a final ODTK run

Now that you know what maneuvers were executed by the satellite, you can add them to the ODTK scenario. Add the two finite maneuvers to the Satellite in the ODTK application.

  1. Return to the ODTK application ().
  2. Open Launch2GEO's () Properties.
  3. Add a new Finite maneuver of the FiniteManAccelFile type representing the Course Correction maneuver to the satellite, being sure to keep the RaiseApo maneuver you created earlier.
  4. Set the following values:
  5. Name Value1
    Name CourseCorrection
    AccelHistoryFilename C:\Users\<username>\Documents\STK_ODTK 13\STK_ODTK\AccelHist\PostDV1.Target_Sequence.CourseCorrection.accelhist
    Estimate MagnitudeOnly
    Mass - Isp 300 sec
    Uncertainty - PercentMagnitudeSigma 5%
  6. Add another new Finite maneuver of the FiniteManAccelFile type representing the circularization maneuver, being sure to keep the two maneuvers you created earlier.
  7. Set the following values:
  8. Name Value1
    Name Circularize
    AccelHistoryFilename C:\Users\<username>\Documents\STK_ODTK 13\STK_ODTK\AccelHist\PostDV1.Target_Sequence.Circularize.accelhist
    Estimate MagnitudeOnly
    Mass - Isp 300 sec
    Uncertainty - PercentMagnitudeSigma 5%
  9. Click OK.
  10. Click Apply.

Loading the final tracking file

Load the final tracking file into the scenario while keeping both PostLaunch.geosc and PostDV1.geosc enabled.

  1. Open ODTK_STK's () Properties.
  2. Click to edit the Scenario - Measurements - Files property.
  3. Click Add.
  4. Click where indicated in the new entry.
  5. Navigate to <Install Dir>\Data\Resources\odtktraining\trackingdata.
  6. Select PostDV2.geosc.
  7. Click Open.
  8. Click OK to confirm your selection and to close the Scenario.Measurements.Files dialog box.
  9. Click Apply.

Processing the PostDV2 measurements

Now that your satellite has performed the recalculated maneuvers needed to bring it into your desired orbit, confirm that it has reached your goal by processing the post-DV2 tracking measurements.

Refreshing your Residual Ratios plot

Re-run your filter and review the data.

  1. Select Filter1 () in the Object Browser.
  2. Run () the filter.
  3. Return to your Residual Ratios plot.
  4. Refresh () the graph.
  5. Review the graph to see if most measurements were accepted.

Residual Ratios plot with PostDV2 tracking data

You can now see all three maneuvers on your residuals graph. The graph shows that the updated measurements still remain within the ±3-sigma bounds. Note that your graph will look different than the one above, owing to differences in EOP data.

Adding a Smoother

The ODTK software has two smoothing algorithms. One is a forward-running variable time lag sequential smoother that runs with the filter and is a child of the filter object. This algorithm is called the variable lag smoother (VLS). The VLS is essentially a series of fixed-epoch smoothers (FES) at selected filter epochs. Each FES serves to map measurement information, as measurements are processed backward in time, to update the trajectory at its specific epoch. While a VLS provides the most complete smoothed trajectory possible at each step of the filter run, because it runs simultaneously with the filter, it will extend the filter run times. For example, a VLS may be preferable to improve orbit knowledge at the end of a maneuver or other critical point in time for a space mission. But due to increased run time, you may not want to run at every time and measurement update.

The second smoother type is a backward-running fixed-interval smoother (FIS), which runs after the filter is completed. It requires the filter to provide data to the smoother via a set of "rough" file(s). The ODTK software's smoothing algorithm runs backward in time, starting at the end of the filter run and maps information backward. The trajectory produced by the smoother has all measurement information represented at all times. It is common for an OD analyst to work with both estimation tools in a complimentary manner.

Because a FIS smoother runs much faster, you will add the FIS smoother to the scenario instead of the VLS.

Generating "rough" data from the filter

To employ the FIS, you need to turn on the generation of a "rough" file from the filter. The "rough" file is output during the filter run and contains all inputs needed by the smoother.

  1. Select Filter1 () in the Object Browser.
  2. Double-click it to open its Properties.
  3. Set the Filter - Output - SmootherData - Generate attribute to true.
  4. This last action exposes the Filter - Output - SmootherData – Filename attribute. This option is the name of the .rough file that is used to pass data from the filter to the FIS smoother.

  5. Click Apply.
  6. Select Filter1 () in the Object Browser.
  7. Run () the filter.
  8. This will now generate a .rough file in addition to the .filrun file it generated early.

Creating a Smoother object

The FIS smoother is enabled by inserting a Smoother object into the scenario.

  1. Select ODTK_STK () in the Object Browser.
  2. Insert a Smoother () object.

Loading the filter output into the smoother

The inputs for the fixed-interval smoother are in the "rough" file generated by the filter, so you need to associate the "rough" file with your new smoother object.

  1. Double-click on Smoother1 () in the Object Browser to open its Properties.
  2. Click on the Smoother - Input - Files value field.
  3. Click Add… when the Smoother.Input.Files dialog box opens.
  4. Load the ODTK_STK_Filter1.rough file that was generated when you last ran the filter.
  5. Click OK to close the Smoother.Input.Files dialog box.
  6. Set the Smoother - Output - FilterDifferencingControls – Generate attribute to true. This will enable you to check your filter and smoother for consistency later.
  7. Click Apply.
  8. Select the Smoother object () in the Object Browser.
  9. Run () the smoother.

This will generate a .smtrun file and a .difrun file for use by the Static Product Builder Reporting and Graphing interface.

Generating a Position Uncertainty plot

Generate a Position Uncertainty plot. This graph displays the 2-sigma position uncertainty in radial, in-track, and cross-track components, taken from the covariance.

  1. Return to the Static Product Builder.
  2. Click Add Product ().
  3. Rename Data Product () Pos Uncertainty.
  4. In the Outputs tab, select Position Uncertainty () in the Product Styles (Graphs and Reports) list.
  5. Select the Inputs tab.
  6. Click Add in the Data Source panel.
  7. Click to edit the Objects.
  8. Select Smoother1-smtrun in the drop-down list.
  9. Run () the selected data product to review the results.
  10. Your graph will look different than the one shown below.

Position Uncertainty Plot

The smoother starts at the right side of the graph with the final uncertainty from the filter then moves backwards in time. Note the reduction in the uncertainty early in the estimation time span that the smoother provides. This is due to the mapping of information from later observations back to earlier times. The output from the filter is discontinuous where measurements have been processed, but these jumps are removed by the smoother. The smoother output is therefore what is labeled as the definitive orbit solution for use in subsequent analyses.

Generating a Position Consistency plot

Now that you’ve run both the filter and smoother, you can perform quality checks on your solution. A simple quality check to perform is the Position Consistency check. This check will test to see if the difference between the filter and smoother solutions is consistent with the covariance on that difference. The test is typically applied to individual elements of the state, in which case the test statistic should remain with ±3 sigma on 99% of the points sampled.

  1. Return to the Static Product Builder.
  2. Select Pos Uncertainty () in the Products list.
  3. Click Copy Product ().
  4. Rename Copy_of_Pos Uncertainty () Pos Consistency.
  5. Change the Input to use the ODTK_STK.difrun file.
  6. Select the Outputs tab.
  7. Select Pos Consistency () in the Product Styles (Graphs and Reports) list.
  8. Run () the selected data product.
  9. Review the results.

Position Consistency Plot

Your graph will look different than the one above, again owing to when your EOP data were last updated. The Position Consistency Statistics graph shows that, at all times in your analysis span, the position consistency, as measured in radial, in-track, and cross-track coordinates, remains within the ±3-sigma bounds. The consistency check is a calculation of the difference between the filter and smoother calculated position state at each point in time, divided by the square root of the difference of the filter and smoother variances. Staying within the ±3-sigma bounds indicates that the position states from the filter and smoother are statistically consistent.

Creating a Measurement Summary by Altitude plot

Finally, generate a Measurement Summary by Altitude graph to confirm that your satellite has settled into its targeted GEO orbit following the Hohmann transfer.

  1. Return to the Static Product Builder.
  2. Select Pos Uncertainty () in the Products list.
  3. Click Copy Product ().
  4. Rename Copy_of_Pos Uncertainty () Meas Sum by Alt.
  5. Select Measurement Summary by Altitude () in the Product Styles (Graphs and Reports) list.
  6. Run () the selected data product.
  7. Review the results.

Measurement Summary by Altitude plot

The smoothed measurements show the satellite's altitude rapidly increasing after the maneuver to raise the apoapsis was performed. Subsequent tracking data confirm that your satellite settled into an orbit at approximately 35,776 km, 10 km below GEO altitude, as you had originally planned, following the course correction maneuver and the maneuver to circularize the orbit.

By using the ODTK and STK applications in conjunction with one another, you not only planned your mission, you analyzed and modified it as it unfolded using the latest available data. By further processing the tracking data, you confirmed that the mission's goals were met.

Saving your work

Clean up your workspaces and save your work.

  1. Close any open reports, properties and tools.
  2. Save () your work.
  3. Close the STK application.
  4. Return to the ODTK application ().
  5. Return to the Static Product Builder.
  6. Click Save As () below the Products list.
  7. Enter STK_ODTK in the name field when the Save As dialog box opens.
  8. Click Save to save your ODTK data product list and to close the Save As dialog box.
  9. Save () your work.
  10. Close the ODTK application.

Summary

You used the ODTK application to process the orbital measurements of a satellite whose launch did not go according to the mission plan you developed using the STK application's Astrogator capability. After processing the measurements to get an accurate model of its state, you created a flight dynamics record of full state of the satellite to feed back into the STK application. You used the flight dynamics record to compute the updated maneuvers needed to achieve your desired orbit. You exported an acceleration history file from the results and imported it into the ODTK application to estimate corrections to the planned maneuvers with another flight dynamics record. You calibrated your engine model in the STK application based on these measurements. You modeled the corrected maneuvers using the Astrogator capability and exported another acceleration history file to the ODTK application to account for the maneuvers, and analyzed the resulting state of the satellite using post-maneuever tracking measurements to confirm your mission was now proceeding as intended.