Skip to main content

The Responsive Space Observation Analysis and Autonomous Tasking Engine (RESONAATE)

Project description

REsponsive Space ObservatioN Analysis & Autonomous Tasking Engine (RESONAATE)

RESONAATE source code was developed under contract with AFRL/RIED, and is approved for public release under Public Affairs release approval #AFRL-2025-2332.

resonaate logo

With the expected resident space object (RSO) population growth and improvements of satellite propulsion capabilities, it has become increasingly apparent that maintaining space domain awareness in future decades will require using human-on-the-loop autonomy as opposed to the current human-in-the-loop methods. RESONAATE is a decision making algorithm that creates a tasking strategy for a customizable Space Surveillance Network (SSN). The program presents responsive and autonomous sensor network management for tracking multiple maneuvering and non-maneuvering satellites with a diversely populated space object surveillance and identification (SOSI) network. The method utilizes a sub-optimal partially observed Markov decision process (POMDP) to task various ground and space-based sensors. The POMDP implements the largest Lyapunov exponent, the Fisher information gain, and a sensor transportability metric to assess the overall reward for tasking a specific sensor to track a particular satellite. The successful measurements from the tasked sensors are combined using an unscented Kalman filter to maintain viable orbit estimates for all targets.

resonaate loop


Table of Contents


Setup

Dependencies

Additional optional dependancies are documented in pyproject.toml.

Installation

See Installation for details on installing the resonaate Python package and its dependencies.

RESONAATE Configuration

By default, RESONAATE will use the default settings defined in src/resonaate/common/default_behavior.config. These values correspond to how RESONAATE behaves with respect to logging, database, debugging, and parallelization. To overwrite these settings, please copy the contents of src/resonaate/common/default_behavior.config to a new .config file to save the default settings. Edit by uncommenting and changing the required values.

Usage

RESONAATE's modeling and simulation capabilities are accessible via its command line interface (CLI) entrypoint.

CLI Tool

  • Run an example simulation, replacing <init_file> and <number_of_hours> with appropriate values

    resonaate <init_file> -t <number_of_hours>
    
  • Command line arguments for resonaate entry point:

    usage: resonaate [-h] [-t HOURS] [--debug] [-d DB_PATH] [-i IMPORTER_DB_PATH] INIT_FILE
    
    RESONAATE Command Line Interface
    
    positional arguments:
      INIT_FILE             Path to RESONAATE initialization message file
    
    optional arguments:
      -h, --help            show this help message and exit
      -t HOURS, --time HOURS
                            Time in hours to simulate. DEFAULT: 1/2 hour
      --debug               Turns on parallel debug mode
    
    Database Files:
      -d DB_PATH, --db-path DB_PATH
                            Path to RESONAATE database
      -i IMPORTER_DB_PATH, --importer-db-path IMPORTER_DB_PATH
                            Path to Importer database
    

Initialization

RESONAATE allows the user to run custom scenarios which are specified in an "init message" JSON file. This repository includes several example "init messages" under configs/json/.

For example, main_init.json:

{
  "time": {
    "start_timestamp": "2021-03-30T16:00:00.000Z",
    "physics_step_sec": 300,
    "output_step_sec": 300,
    "stop_timestamp": "2021-03-30T17:00:00.000Z"
  },
  "noise": {
    "init_position_std_km": 1e-3,
    "init_velocity_std_km_p_sec": 1e-6,
    "filter_noise_type": "continuous_white_noise",
    "filter_noise_magnitude": 3.0e-14,
    "random_seed": "os"
  },
  "propagation": {
    "propagation_model": "special_perturbations",
    "integration_method": "RK45",
    "station_keeping": true,
    "target_realtime_propagation": true,
    "sensor_realtime_propagation": true
  },
  "observation": {
    "background": true
  },
  "geopotential": {
    "model": "egm96.txt",
    "degree": 2,
    "order": 0
  },
  "perturbations": {
    "third_bodies": ["moon"],
    "solar_radiation_pressure": false,
    "general_relativity": false
  },
  "estimation": {
    "sequential_filter": {
      "name": "unscented_kalman_filter",
      "parameters": {
        "alpha": 0.05,
        "beta": 2.0
      },
      "dynamics_model": "special_perturbations",
      "maneuver_detection": null
    },
    "adaptive_filter": null
  },
  "engines_files": ["engines/summation_ssn.json"],
  "events": []
}

The "init message" is divided into several sections, each responsible for different aspects of the specified simulation run. At the top level, things like the propagation and estimation models are described. A user also must define engine configuration file(s) which specify how to task the nested target and sensor configurations.

The initialization/configuration file structure required to run RESONAATE is described in detail by the Config Specification documentation.

Database Architecture

When interacting with the resonaate CLI, users may specify two separate types of databases: ResonaateDatabase (aka internal) and ImporterDatabase (aka external).

The internal ResonaateDatabase defines where data produced by RESONAATE is stored. Users may save the database to a specific database file with the -d or --db-path CLI options to resonaate (recommended). The --db-path option requires explicit selection of the file location.

The external ImporterDatabase defines read-only data that RESONAATE will ingest during a simulation and mix with produced data, but is protected from being written to by RESONAATE. This provides utility for loading large sets of pre-computed data (truth, observations, tasks); testing fusion of external estimates or observations with internally generated estimates and observations; and stacking data from simulation runs together. Users can specify the ImporterDatabase file path with the -i or --importer-db-path CLI options to resonaate.

Python Example

If users wish to incorporate RESONAATE into a separate tool, they can start with this minimal example that will properly run a simulation.

# Standard Library Imports
from datetime import timedelta

# RESONAATE Imports
from resonaate.common.logger import Logger
from resonaate.data.resonaate_database import ResonaateDatabase
from .physics.time.conversions import getTargetJulianDate
from .scenario import buildScenarioFromConfigFile

# Points to a valid main configuration file
init_file = "scenarios/main/test1.json"

# Define custom logger object which logs to the console
logger = Logger("resonaate", path="stdout")

# Define internal database instance explicitly
db_path = "db/resonaate.sqlite3"

# Build the Scenario application from the JSON init
scenario = buildScenarioFromConfigFile(
    init_file,  # Initialization file/scenario config
    db_path,  # Path to `ResonaateDatabase` file
    internal_db_path=None,  # No imported data
)

# Determine final time as a Julian date
target_date = getTargetJulianDate(
    scenario.clock.julian_date_start, timedelta(hours=sim_time_hours)
)

try:
    # Step through simulation
    scenario.propagateTo(target_date)
except KeyboardInterrupt:
    # Notification simulation stopped via KeyboardInterrupt
    scenario.logger.warning("Simulation terminated")
else:
    # Notification simulation stopped gracefully
    scenario.logger.info("Simulation complete")
finally:
    # Gracefully shutdown the simulation
    scenario.shutdown()

NOTE: If you are not using buildScenarioFromConfigFile(), you must call setDBPath() before any database queries are required.

Contributing

Please see CONTRIBUTING for more thorough details.

Using these development tools requires a standalone version of RESONAATE to be installed. To install compatible, up-to-date versions please install RESONAATE with the following commands:

make install

Linting

  • Running linter target:

    make lint
    

Testing

  • Run unit tests only (~30 s)

    make test
    
  • Run entire test suite (~4 m)

    make test_all
    
  • Include coverage results

    make coverage
    

Generating Documentation

Publications

For additional information on the development of the RESONAATE Tool, see the following publications:

  • Dynamically Tracking Maneuvering Spacecraft with a Globally-Distributed, Heterogeneous Wireless Sensor Network
    • AIAA Space, 2017
    • Digital Object Identifier (DOI) : 10.2514/6.2017-5172
  • An Autonomous Sensor Management Strategy for Monitoring a Dynamic Space Domain with Diverse Sensors
    • AIAA SciTech, 2018
    • Digital Object Identifier (DOI) : 10.2514/6.2018-0890
  • Autonomous Multi-Phenomenology Space Domain Sensor Tasking and Adaptive Estimation
    • IEEE Fusion, 2018
    • Digital Object Identifier (DOI) : 10.23919/ICIF.2018.8455863
  • Adaptively Tracking Maneuvering Spacecraft with a Globally Distributed, Diversely Populated Surveillance Network
    • Journal of Guidance, Control, and Dynamics, 2018
    • Digital Object Identifier (DOI) : 10.2514/1.G003743
  • Autonomous and Responsive Surveillance Network Management for Adaptive Space Situational Awareness
    • Virginia Tech Dissertation, 2018
    • Digital Object Identifier (DOI) : 10919/84931
  • Parametric Analysis of an Autonomous Sensor Tasking Engine for Spacecraft Tracking
    • AIAA SciTech, 2021
    • Digital Object Identifier (DOI) : 10.2514/6.2021-1397

Authors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

resonaate-4.1.0.tar.gz (13.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

resonaate-4.1.0-py3-none-any.whl (11.2 MB view details)

Uploaded Python 3

File details

Details for the file resonaate-4.1.0.tar.gz.

File metadata

  • Download URL: resonaate-4.1.0.tar.gz
  • Upload date:
  • Size: 13.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.6

File hashes

Hashes for resonaate-4.1.0.tar.gz
Algorithm Hash digest
SHA256 d63a56c5f73ccf501c94ce5a4e6d4ab210ae0f558dac3fb57005f39b9c2031e3
MD5 11c9d0166b8289ccbf7b2e8cd5e60834
BLAKE2b-256 c64daf98efbf881dcff1502a7cafdc1ab372666e0a94c2b049d427e14e6caaf6

See more details on using hashes here.

File details

Details for the file resonaate-4.1.0-py3-none-any.whl.

File metadata

  • Download URL: resonaate-4.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.6

File hashes

Hashes for resonaate-4.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6b8ee1688ba443d45d8c779d43ffa536f6203ea1d9c0be537a5501dec79cbc99
MD5 515bf9d1a61df8bb01926f77ed35da6e
BLAKE2b-256 7a034275f35d0a4467d039d4433271d33851b21ad3514b13c7205dd1b764b076

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page