The Advanced Research Collaboration and Application Development Environment (ARCADE) is a collaboration project between the ASTRIA Research Group at the University of Texas at Austin, the IBM Space Tech team, and other partners. The goal of this repository is to provide a unified and coherent API for accessing, analyzing, and extending a diverse set of derived data points concerning an anthropogenic space object (ASO). Note: this repository currently represents a small proof of concept and is in a very alpha state of development, so APIs (internal and external) may change greatly.
The ARCADE platform ingests data from multiple raw and preprocessed sources including telescopes, radar arrays, and TLE data from different providers and fuses it into a coherent view of each ASO. This data fusion is done in ASTRIAGraph with the data being stored in the graph database or IBM’s cloud object storage (COS) depending on the data type. A RESTful API is then used to provide access to this rich data to developers and client applications.
Interactive documentation for the API where you can try it out in a web browser is available here. The currently provided endpoints that you can programmatically test via the base URI https://arcade.spacetech-ibm.com are:
| Endpoint | Description |
|---|---|
| /asos | Returns basic information on all the ASOs that ARCADE knows about like its name and various identifiers |
| /aso | Returns the basic information for a single ASO |
| /ephemeris | Provides the most up-to-date ephemeris data for an ASO |
| /interpolate | Uses UT’s =orbdetpy= library to interpolate the ephemeris data for the ASO to the specified temporal frequency |
| /compliance | Returns whether or not the ASO is compliant in registering with UNOSSA |
The conjunction search demo of the space situational awareness project
now uses the /ephemeris ARCADE API endpoint to gather the up-to-date
orbit state vector data and then determine the nearest conjunctions of each
satellite.

Daniel Kucharski of the University of Texas at Austin has developed a
C++ library for determining how much light pollution a terrestrial
based astronomical observatory will experience over a given time
period due to ASOs passing overhead. This demo utilizes ARCADE’s
/interpolate endpoint and the satellite light pollution library to
show the brightness of ASOs currently above the New Mexico skys.
Redder objects are brighter while bluer objects are more dim.

In this demo we combine ASTRIAGraph and the \compliance ARCADE
endpoint to show what ASOs are in compliance with UNOSSA’s
registration requirements.

The ARCADE PoC is developed using Python 3.8 with the FastAPI framework. We utilize docker and docker-compose to develop, test, and deploy the API. The PoC API and all of the demos mentioned above are deployed on Red Hat’s OpenShift platform on IBM Cloud. A makefile is provided to run most of the common development tasks like:
| Command | Description |
|---|---|
make build | Builds a docker image |
make clean | Removes all built docker images |
make type_check | Uses mypy to type check the code base |
make test | Runs the test suite |
make run | Runs the API locally at http://localhost:8080 |
The ARCADE project is meant to be extended by allowing community members to add new data sources, algorithms, and API endpoints.
The ARCADE PoC utilizes the neo4j graph database as the operational data store. The current schema has the following entity-relationship diagram.
The SpaceObject node type is used to store data about an ASO that
does not frequently change like various catalog IDs and the object’s
name. When adding new data nodes, they should be linked from the
specific SpaceObject node. The DataSource, COSBucket, and
COSObject node types are used to track the provenance of imported
data into the graph. The User node type is used to store information
used in the authentication and authorization process. The
has_access relationship is used to determine if a User has the
permission to access the data provided by the DataSource. If a
DataSource node has the public property set to True then every
User node in the database will have access to all data provided by
the DataSource. The accessed relationship is used to keep track
of when and through what API endpoint the User accessed a data node.
We use the neomodel object graph mapper (OGM) in the =graph= module to
define the properties and relationships between the various nodes in
the graph. Node type models that provide data for a SpaceObject
from a DataSource should inherit from the BaseAccess class, which
adds the necessary relationships for managing User access to the
data. The FindMixin class provides useful functions for querying
the various node types in the graph.
The =importers= package is where scripts are kept that import data
into the graph. An importer class should implement a run method
that takes no arguments. The run function should be idempotent with
regards to the state of the graph and should keep track of what data
needs to be imported. See the UT OEM, Starlink OEM, and UN Compliance
importers as examples.
The API models module implements pydantic models that are served by
the API. The API models are used to validate that the data is valid
and the model’s Config is used to make turning a graph model into an
api model seamless. The API model is the place to implement new
algorithms atop of existing data models. See the interpolate method
of the OrbitEphemerisMessage class as an example.
The FastAPI endpoints can be found in the API module. When exposing
data from a DataSource, the endpoint should check that the User
has the appropriate permissions using the can_access method on the
User instance, and then add an accessed relationship in the graph
containing the endpoint used. See the /ephemeris, /interpolate,
and /compliance endpoints as examples.
We very much encourage anyone and everyone to join and contribute to this project. Please see the contributing file for more details.
ARCADE is licensed under the Apache 2.0 license. Full license text is available at LICENSE.

