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!
- 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.
- Python 3.10 or later
- NumPy
pc2d_foster.pyavailable in the same directory as the generator
Install NumPy if necessary:
python -m pip install numpyGenerate 1,000 CDMs:
python cdm_gen.py --count 1000 --seed 11 --creation-date 2026-01-01T00:00:00ZAdd a delay between files:
python cdm_gen.py --count 100 --interval-seconds 5| 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. |
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.
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.
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.
- 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.
Before using a dataset in a model-training or integration pipeline:
- Verify
manifest.jsonhashes after transfer or archival. - Parse every CDM with the same parser used in the target pipeline.
- Independently recompute miss distance, relative speed, and RTN covariance terms from the emitted state vectors.
- Validate a representative sample of Pc values using an independent Pc implementation or a sufficiently accurate Monte Carlo reference.
- If realism relative to a particular data provider matters, replace the covariance model with one calibrated to that provider's residuals and uncertainty conventions.
Apache 2.0 License. Generated outputs should remain clearly marked as synthetic, including when stored outside the original output directory.
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.