Constraint Monitor

The Constraint Monitor is a real-time spacecraft health dashboard that tracks orbital element and relative-geometry limits across your entire fleet. Each spacecraft can be set up with an absolute or relative stationkeeping constraint and the monitor will continually check for violations. One can set up a look-ahead window to see whether the constraint will be violated in the future.

Constraint Monitor


Use cases

  • Station-keeping monitoring — flag when orbital elements (SMA, eccentricity, inclination, RAAN, LTAN) drift outside their stationkeeping box before a maneuver is required.
  • Constellation maintenance — track in-track and cross-track separation between formation members; trigger when spacing falls outside a specified range.
  • Proximity operations — monitor range-to-target in real time for conjunction avoidance or rendezvous analysis.
  • Constraint-driven maneuver planning — use the Request correction button to feed the violated constraint directly into the Maneuver Calculator as a boundary condition.
  • Fleet-wide health checks — group satellites by constellation and assess compliance across the group in one view.

Opening the Constraint Monitor

Open the Spacecraft Constraints window from the MDS main menu. The window contains:

Control Description
Group dropdown Filter the table to a named satellite group or show all spacecraft.
Master Alarm Red/yellow indicator when at least one constraint is violated across the fleet.
Select All Select all rows in the table.
Copy to Selected Spacecraft Copy the constraints of a specified spacecraft to all currently highlighted spacecraft.
Add/Edit Constraints Open the constraint editor for the selected spacecraft.
Save Template / Load Template Export or import a full constraint set as a JSON template.

These functionalities are explained in more detail in later sections.

The table columns map to constraint types:

Column Constraint type
alert Overall alarm state for the spacecraft
sma Semi-major axis
e Eccentricity
i Inclination
ltan Local time of ascending node
raan Right ascension of ascending node
rtt Range to target
cts Cross-track separation
its In-track separation

Cell colours: red = constraint violated, yellow = constraint violated within look-ahead window, green = within limits, grey = no constraint set.


Adding and editing constraints in the UI

Edit Constraints dialog

Select a spacecraft in the table, then click Add/Edit Constraints to open the Edit Constraints window. This window lists all constraints currently assigned to that spacecraft.

Button Action
Add Opens the Constraint dialog to define a new constraint.
Edit Re-opens the Constraint dialog for the selected constraint.
Remove Deletes the selected constraint from the spacecraft.
Close Closes the editor.

In the Constraint dialog, fill in:

  • Constraint type — select from the dropdown (SMA, Eccentricity, Inclination, LTAN, RAAN, Range to Target, Cross-track separation, In-track separation).
  • Min. Value / Max. Value — the lower and upper bounds. Units follow the constraint type (metres for SMA and range, degrees for inclination/RAAN/LTAN).
  • Target — only required for relative constraints (Range to Target, Cross-track/In-track separation). Select the reference spacecraft from the dropdown.

Click OK to save. The constraint appears in the Edit Constraints list and the monitor table updates immediately.

Saving and loading templates

Templates let you reuse a constraint set across multiple spacecraft without re-entering values manually.

  1. Select the spacecraft whose constraints you want to save and click Save Template. A JSON file is saved to disk.
  2. Select one or more target spacecraft (use Select All or click individual rows), then click Load Template and choose the saved file. The constraints are applied to every selected spacecraft at once.

Alternatively, highlight a spacecraft with the desired constraints and use Copy to Selected Spacecraft to push those constraints to every currently selected row in one click.


Setting constraints via the API

from mds_api import mds_api

# Constraint type integers:
#   1 – SMA [m]        2 – Eccentricity     3 – Inclination [deg]
#   4 – LTAN [hr]      5 – RAAN [deg]       6 – Range to target [m]
#   7 – Cross-track separation [m]           8 – In-track separation [m]

mds_api.set_constraint("Satellite 1", 2, [0.0, 0.001])       # eccentricity 0 – 0.001
mds_api.set_constraint("Satellite 1", 3, [64.5, 65.5])       # inclination 64.5°–65.5°
mds_api.set_constraint("Satellite 1", 6, [0, 500000], "Satellite 2")  # range-to-target

Remove a constraint:

mds_api.remove_constraint("Satellite 1", 2)   # remove eccentricity constraint

Future violation prediction

Enable predictive monitoring to forecast when a constraint will next be violated:

mds_api.configure_constraint_prediction(
    prediction_enabled=True,
    look_ahead_JD=5/24,        # look 5 hours ahead
    timestep=60,               # prediction step [s]
    monitorCheckInterval=20    # how often the monitor re-evaluates [s]
)

When active, the detail panel shows an Estimated Violation UTC timestamp for each constraint. A value of N/A means no violation is predicted within the look-ahead window.


Reading constraint state programmatically

jd, constraints = mds_api.get_spacecraft_constraints("Satellite 1", "Satellite 2")

for sat, entries in constraints.items():
    for c in entries:
        print(sat, c['type'], 'violated:', c['violated'],
              'value:', c['value'], 'estimated violation JD:', c['EstimatedViolationJD'])

Templates

Constraint sets can be saved from one spacecraft and bulk-applied to others — useful when all members of a constellation share the same station-keeping box.

# Save constraints from a reference satellite
template = mds_api.save_constraint_template("Satellite 1")

# Apply to a list of satellites
mds_api.load_constraint_template(["Satellite 2", "Satellite 3"], template)

The same workflow is available in the UI via Save Template / Load Template and Copy to Selected Spacecraft.


Requesting a correction maneuver

When a constraint is violated or about to be violated, select the spacecraft in the table and click Request correction in the detail panel. This opens the Maneuver Calculator pre-loaded with the spacecraft state and the constraint boundary as the target condition. See Maneuver Calculator for next steps.


Example

A full worked example covering two satellite groups with different propulsion systems, immediate and future violations, and a guided correction workflow is provided in:

examples/example_constraint_monitor_correction.py