Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Synthetic CDM Dataset Generator

This project generates synthetic Conjunction Data Messages (CDMs) for software development, testing, training, and demonstration. It produces physically self-consistent two-body encounter states, positive-definite covariance matrices, Foster collision-probability labels, and an integrity manifest for each generated dataset.

The generator is not a source of operational tracking data and must not be used for flight safety, collision avoidance, or validation of a production probability-of-collision system!

Features

  • Generates two circular-orbit states at the time of closest approach (TCA).
  • Enforces the linear relative-motion TCA condition: relative position is orthogonal to relative velocity.
  • Produces finite, symmetric, positive-definite 6x6 state covariances.
  • Converts emitted position covariance into the RTN frame used by CDM covariance fields.
  • Calculates a self-consistent Foster Pc using pc2d_foster.py.
  • Validates every scenario before it is written.
  • Writes CDM files atomically to avoid partial outputs.
  • Creates a SHA-256 manifest containing file-level integrity data and scenario-quality metrics.
  • Supports fully reproducible datasets when both a random seed and creation date are supplied.

Requirements

  • Python 3.10 or later
  • NumPy
  • pc2d_foster.py available in the same directory as the generator

Install NumPy if necessary:

python -m pip install numpy

Usage

Generate 1,000 CDMs:

python cdm_gen.py --count 1000 --seed 11 --creation-date 2026-01-01T00:00:00Z

Add a delay between files:

python cdm_gen.py --count 100 --interval-seconds 5

Command-line options

Option Description
--count N Number of CDMs to generate. Default: 1000.
--seed N Seed for deterministic scenario generation.
--creation-date TIMESTAMP UTC creation time in ISO 8601 format, for example 2026-01-01T00:00:00Z.
--interval-seconds N Optional delay between files. Default: 0.

Output

Each output directory contains CDM files and a manifest.json file.

cdms_gen/
├── SYNTH_20260101T000000_000000.cdm
├── SYNTH_20260101T000000_000001.cdm
├── ...
└── manifest.json

Each manifest record contains:

  • output filename and SHA-256 digest;
  • message identifier;
  • creation date and TCA in UTC;
  • Foster Pc and hard-body radius;
  • miss distance and relative speed;
  • TCA orthogonality residual;
  • circular-orbit speed residual.

The SHA-256 digest can be used to confirm that a generated CDM has not been changed after generation.

Modeling approach

The generator builds both object states directly at TCA. Each state is a valid circular two-body orbit state: position and velocity are orthogonal, and the velocity magnitude equals the local circular-orbit speed. The relative state is then constrained so that:

(r1 - r2) · (v1 - v2) = 0

This makes the generated epoch a TCA under the linear relative-motion model used by the Foster Pc calculation.

Covariances are synthetic RTN-frame error models with age-dependent uncertainty and correlation. They are transformed to ECI for Pc computation and transformed back to RTN for CDM output. The generator checks that every covariance matrix is finite, symmetric, and positive definite.

Collision-probability labels

COMMENT SYNTHETIC_PC_FOSTER records the result produced by calculate_pc_foster() in pc2d_foster.py. This makes each label internally consistent with the state, covariance, hard-body radius, and implementation used to generate it.

These labels are not independently validated ground truth. In particular, the generator does not validate Foster Pc against an external operational system, Monte Carlo reference, or a second independent implementation.

Important limitations

  • The data is synthetic and does not represent real satellites, debris, sensors, catalog objects, or operator processes.
  • The covariance model is illustrative. It is not calibrated to any specific orbit-determination, SGP4, TLE, or tracking-error source.
  • Circular two-body dynamics omit perturbations such as atmospheric drag, geopotential effects, solar radiation pressure, maneuvers, and third-body gravity.
  • CDM fields are intended for controlled test and training workflows. Validate against the CDM profile and parser required by your downstream system before relying on the format for interoperability.
  • Do not use this generator or its outputs for conjunction assessment, mission operations, or safety decisions.

Recommended validation workflow

Before using a dataset in a model-training or integration pipeline:

  1. Verify manifest.json hashes after transfer or archival.
  2. Parse every CDM with the same parser used in the target pipeline.
  3. Independently recompute miss distance, relative speed, and RTN covariance terms from the emitted state vectors.
  4. Validate a representative sample of Pc values using an independent Pc implementation or a sufficiently accurate Monte Carlo reference.
  5. If realism relative to a particular data provider matters, replace the covariance model with one calibrated to that provider's residuals and uncertainty conventions.

License and data classification

Apache 2.0 License. Generated outputs should remain clearly marked as synthetic, including when stored outside the original output directory.

Extra Info:

Codex was used as assistant during the production of this project. It is a small part of a bigger Physics-Informed Neural Operator I am also currently working on.

About

Synthetic CCSDS Conjunction Data Message (CDM) generator and dataset for orbital collision risk assessment, Space Situational Awareness (SSA), and 2D Foster Probability of Collision (P_c) machine learning benchmarking.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages