Conjunction Assessment (space-systems/orbit-mechanics/conjunction-assessment)
Use when you must assess the collision risk between two space objects
at close approach, for example an operational spacecraft screened
against a debris object or a secondary spacecraft. From the relative
position and velocity at the screening epoch this leaf computes the
time of closest approach and the miss distance under a linear
relative-motion model, projects the combined 1-sigma position
uncertainty onto the encounter plane, estimates the probability of
collision with a small hard-body approximation against the combined
object radius, and returns the actionable verdict against a screen
threshold. It pairs with space-systems/mission-design/radiation-debris
for the long-term environment risk counterpart and
gnc-autonomy/space/orbit-determination for the state source of the
primary; the relative states themselves can come from a propagation of
the two orbits.
Domain quick reference
- Time of closest approach: tca = -dot(r, v) / dot(v, v) when the
relative velocity is constant, with r the relative position and v the
relative velocity at the screening epoch. A closing geometry gives a
positive TCA; a receding geometry gives a negative TCA, meaning
closest approach already passed. Zero relative velocity is rejected.
- Miss distance: d_miss = |r + v * tca|, the norm of the relative
position at the TCA epoch. The miss vector is orthogonal to the
relative velocity at TCA, dot(r + v * tca, v) = 0.
- Encounter-plane sigma: sigma_enc = sigma_combined, the combined 1-sigma
position uncertainty of both objects under the circular covariance
approximation. A full 3x3 covariance projection onto the encounter
plane is out of scope for this screening model.
- Probability of collision: Pc = exp(-d_miss^2 / (2 * sigma^2)) *
(r_hb^2 / (2 * sigma^2)), the small hard-body approximation to the 2D
Gaussian encounter integral with r_hb the combined radius of the two
objects. The approximation is valid when r_hb / sigma is at most
about 0.1; above that limit the value is only a rough screen
indicator and analyze() reports valid_approximation False.
- Screen verdict: actionable when Pc >= threshold (default 1e-4);
severity "high" when Pc >= 1e-3, "watch" when Pc >= 1e-4, else
"green".
- Units are SI throughout: m, m/s, s; Pc is dimensionless.
- ECSS frames the space safety context of the screen; the relations
above are standard engineering methodology, summary-only.
Workflow
- Assemble the screening state: the relative position rel_pos_m and
the relative velocity rel_vel_ms of the secondary in the
primary-centered frame at the epoch, the combined 1-sigma position
uncertainty sigma_combined_m, and the combined object radius
hard_body_radius_m (default 5 m).
- Compute the time of closest approach with tca_s; check the sign to
confirm whether the encounter lies ahead of the epoch.
- Evaluate the miss distance with miss_distance_m at that TCA and the
encounter-plane sigma with encounter_sigma.
- Estimate the probability of collision with
probability_of_collision on the miss distance, sigma, and hard body
radius.
- Screen the result with screen_verdict against the actionable
threshold (default 1e-4) to get the high, watch or green severity.
- Run the full screen in one call with analyze, which returns the
TCA, miss distance, sigma, Pc, actionable flag, severity, and the
valid_approximation flag for the small hard-body model.
- Confirm the deterministic checks with the contract test
scripts/test_conjunction_assessment.py.
Worked example
A spacecraft is screened against a debris object. At the screening
epoch the relative position is [5000, -3000, 2000] m and the relative
velocity [-7.0, 1.0, -0.5] m/s (closing).
- dot(r, v) = -39000, dot(v, v) = 50.25, so tca = 39000 / 50.25 =
776.1 s (analyze returns 776.12 s).
- Miss: r + v * tca = [-432.8, -2223.9, 1611.9], so the miss distance
is sqrt(7731268) = 2780.5 m (analyze returns 2780.53 m).
- Combined sigma 100 m, hard body radius 5 m: the exponent
-2780.5^2 / 20000 is huge negative, so Pc is effectively zero
(analyze returns 1.6e-171, below 1e-12), actionable False, severity
"green", valid_approximation True.
- Near-miss case: relative position [10, 0, 0] m closing at 1 m/s
gives tca 10 s, miss 0 m, and Pc = 1 * 25 / 20000 = 1.25e-3,
actionable True, severity "high".
- Offset case: a 50 m miss with sigma 100 m and hard body 5 m gives
Pc = exp(-2500 / 20000) * 0.00125 = 1.103e-3, actionable True,
severity "high". The offset is realized with the relative position
[0, 50, 0] m perpendicular to the closing velocity [-1, 0, 0] m/s
(a closing velocity aligned with the relative position vector drives
the miss to zero at TCA, so the perpendicular geometry is the one
that produces a 50 m miss).
- Validity flag: hard body 15 m with sigma 100 m gives r_hb / sigma =
0.15 above the 0.1 limit, so valid_approximation is False while Pc
still evaluates as a rough screen indicator.
Pitfalls
- Running the screen on a receding pair: a negative TCA means the
closest approach already passed the screening epoch; treat it as a
stale geometry rather than a live risk before acting on the
verdict.
- Trusting Pc beyond the model's validity: the small hard-body
approximation holds only for r_hb / sigma at most about 0.1; above
that (a 15 m hard body against 100 m sigma) analyze reports
valid_approximation False and the value is only a rough screen
indicator.
- Feeding a zero relative velocity: the linear TCA model divides by
dot(v, v), so a zero relative velocity raises ValueError - the
closing-rate assumption is part of the model, not a detail.
- Building the miss with a velocity aligned to the position vector:
a closing velocity along the relative position drives the miss to
zero at TCA; only a perpendicular component produces the offset
miss the Pc formula needs (the worked 50 m case).
- Mixing the sigma convention: the model uses the combined 1-sigma
position uncertainty under the circular covariance approximation;
a full 3x3 covariance projection onto the encounter plane is out
of scope, so do not feed per-axis sigmas as if the projection were
performed.
- Letting the exponent overflow silently: a distant pass (2780 m
miss against 100 m sigma) returns Pc ~ 1.6e-171, so compare
verdicts in log or threshold terms, not by the raw float's
magnitude.
Verification
- Confirm tca_s([5000, -3000, 2000], [-7.0, 1.0, -0.5]) returns 776.1 s
within 0.5 s and miss_distance_m at that TCA returns 2780.5 m within
1.0 m.
- Confirm probability_of_collision(0, 100, 5) returns exactly 1.25e-3
and probability_of_collision(50, 100, 5) returns 1.103e-3 within
1e-6, with severity "high" for both.
- Confirm the miss vector at TCA is orthogonal to the relative
velocity: dot(r + v * tca, v) = 0.
- Confirm analyze reports valid_approximation False when the hard body
radius exceeds 0.1 sigma (for example 15 m against 100 m).
- Confirm every non-positive sigma, negative hard body radius, and
zero relative velocity raises ValueError.
- Run the contract test offline: python3
scripts/test_conjunction_assessment.py (35 tests, deterministic).
Related leaves
- space-systems/mission-design/radiation-debris: the long-term debris
environment collision probability from flux, cross-section, and
mission life, the environment-level counterpart of this screen.
- gnc-autonomy/space/orbit-determination: recovers the orbit state of
the primary and secondary from observations as the source of the
screening state vectors.
- space-systems/orbit-mechanics/clohessy-wiltshire: propagates the
linearized relative motion of a deputy about a chief, a way to move
the relative state to the screening epoch when the objects share a
circular orbit.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_conjunction_assessment.py
The test covers the worked-example TCA and miss distance, the closing,
receding, and perpendicular TCA geometries, the zero-relative-velocity
rejection, the miss orthogonality identity at TCA, the circular
encounter-plane sigma projection, the Pc formula at zero, 50 m, and
2780 m miss distances, the hard body squared and inverse sigma squared
scalings, the high, watch, and green verdict bands with default and
custom thresholds, the full analyze dict, the validity flag at and
above the small hard-body limit, and ValueError rejection of
non-positive sigma, negative hard body radius, negative probability,
and zero relative velocity.
Compliance
- Standards referenced, not reproduced: ECSS space safety standards
frame the conjunction screening context (ecss.nl/standards); the
relations above are standard engineering methodology, summary-only
per standards-map.yaml. No ECSS text is reproduced.
- compliance: STANDARDS-REF, gated: false.
1---2name: conjunction-assessment3description: Use when you must screen a close approach between two objects and assess the collision risk: compute the time of closest approach from the relative position and velocity with a linear relative-motion model, the miss distance at TCA, the encounter-plane sigma from the combined 1-sigma position uncertainty, the probability of collision with the small hard-body approximation against the combined object radius, and the screen verdict against an actionable threshold. Produces the TCA, miss distance, probability of collision, and the high, watch or green severity verdict. Trigger: conjunction assessment, time of closest approach, miss distance, probability of collision, hard body radius, combined covariance, close approach screening, actionable threshold.4license: Apache-2.05---67# Conjunction Assessment (space-systems/orbit-mechanics/conjunction-assessment)89Use when you must assess the collision risk between two space objects10at close approach, for example an operational spacecraft screened11against a debris object or a secondary spacecraft. From the relative12position and velocity at the screening epoch this leaf computes the13time of closest approach and the miss distance under a linear14relative-motion model, projects the combined 1-sigma position15uncertainty onto the encounter plane, estimates the probability of16collision with a small hard-body approximation against the combined17object radius, and returns the actionable verdict against a screen18threshold. It pairs with space-systems/mission-design/radiation-debris19for the long-term environment risk counterpart and20gnc-autonomy/space/orbit-determination for the state source of the21primary; the relative states themselves can come from a propagation of22the two orbits.2324## Domain quick reference2526- Time of closest approach: tca = -dot(r, v) / dot(v, v) when the27 relative velocity is constant, with r the relative position and v the28 relative velocity at the screening epoch. A closing geometry gives a29 positive TCA; a receding geometry gives a negative TCA, meaning30 closest approach already passed. Zero relative velocity is rejected.31- Miss distance: d_miss = |r + v * tca|, the norm of the relative32 position at the TCA epoch. The miss vector is orthogonal to the33 relative velocity at TCA, dot(r + v * tca, v) = 0.34- Encounter-plane sigma: sigma_enc = sigma_combined, the combined 1-sigma35 position uncertainty of both objects under the circular covariance36 approximation. A full 3x3 covariance projection onto the encounter37 plane is out of scope for this screening model.38- Probability of collision: Pc = exp(-d_miss^2 / (2 * sigma^2)) *39 (r_hb^2 / (2 * sigma^2)), the small hard-body approximation to the 2D40 Gaussian encounter integral with r_hb the combined radius of the two41 objects. The approximation is valid when r_hb / sigma is at most42 about 0.1; above that limit the value is only a rough screen43 indicator and analyze() reports valid_approximation False.44- Screen verdict: actionable when Pc >= threshold (default 1e-4);45 severity "high" when Pc >= 1e-3, "watch" when Pc >= 1e-4, else46 "green".47- Units are SI throughout: m, m/s, s; Pc is dimensionless.48- ECSS frames the space safety context of the screen; the relations49 above are standard engineering methodology, summary-only.5051## Workflow52531. Assemble the screening state: the relative position rel_pos_m and54 the relative velocity rel_vel_ms of the secondary in the55 primary-centered frame at the epoch, the combined 1-sigma position56 uncertainty sigma_combined_m, and the combined object radius57 hard_body_radius_m (default 5 m).582. Compute the time of closest approach with tca_s; check the sign to59 confirm whether the encounter lies ahead of the epoch.603. Evaluate the miss distance with miss_distance_m at that TCA and the61 encounter-plane sigma with encounter_sigma.624. Estimate the probability of collision with63 probability_of_collision on the miss distance, sigma, and hard body64 radius.655. Screen the result with screen_verdict against the actionable66 threshold (default 1e-4) to get the high, watch or green severity.676. Run the full screen in one call with analyze, which returns the68 TCA, miss distance, sigma, Pc, actionable flag, severity, and the69 valid_approximation flag for the small hard-body model.707. Confirm the deterministic checks with the contract test71 scripts/test_conjunction_assessment.py.7273## Worked example7475A spacecraft is screened against a debris object. At the screening76epoch the relative position is [5000, -3000, 2000] m and the relative77velocity [-7.0, 1.0, -0.5] m/s (closing).7879- dot(r, v) = -39000, dot(v, v) = 50.25, so tca = 39000 / 50.25 =80 776.1 s (analyze returns 776.12 s).81- Miss: r + v * tca = [-432.8, -2223.9, 1611.9], so the miss distance82 is sqrt(7731268) = 2780.5 m (analyze returns 2780.53 m).83- Combined sigma 100 m, hard body radius 5 m: the exponent84 -2780.5^2 / 20000 is huge negative, so Pc is effectively zero85 (analyze returns 1.6e-171, below 1e-12), actionable False, severity86 "green", valid_approximation True.87- Near-miss case: relative position [10, 0, 0] m closing at 1 m/s88 gives tca 10 s, miss 0 m, and Pc = 1 * 25 / 20000 = 1.25e-3,89 actionable True, severity "high".90- Offset case: a 50 m miss with sigma 100 m and hard body 5 m gives91 Pc = exp(-2500 / 20000) * 0.00125 = 1.103e-3, actionable True,92 severity "high". The offset is realized with the relative position93 [0, 50, 0] m perpendicular to the closing velocity [-1, 0, 0] m/s94 (a closing velocity aligned with the relative position vector drives95 the miss to zero at TCA, so the perpendicular geometry is the one96 that produces a 50 m miss).97- Validity flag: hard body 15 m with sigma 100 m gives r_hb / sigma =98 0.15 above the 0.1 limit, so valid_approximation is False while Pc99 still evaluates as a rough screen indicator.100101102## Pitfalls103104- Running the screen on a receding pair: a negative TCA means the105 closest approach already passed the screening epoch; treat it as a106 stale geometry rather than a live risk before acting on the107 verdict.108- Trusting Pc beyond the model's validity: the small hard-body109 approximation holds only for r_hb / sigma at most about 0.1; above110 that (a 15 m hard body against 100 m sigma) analyze reports111 valid_approximation False and the value is only a rough screen112 indicator.113- Feeding a zero relative velocity: the linear TCA model divides by114 dot(v, v), so a zero relative velocity raises ValueError - the115 closing-rate assumption is part of the model, not a detail.116- Building the miss with a velocity aligned to the position vector:117 a closing velocity along the relative position drives the miss to118 zero at TCA; only a perpendicular component produces the offset119 miss the Pc formula needs (the worked 50 m case).120- Mixing the sigma convention: the model uses the combined 1-sigma121 position uncertainty under the circular covariance approximation;122 a full 3x3 covariance projection onto the encounter plane is out123 of scope, so do not feed per-axis sigmas as if the projection were124 performed.125- Letting the exponent overflow silently: a distant pass (2780 m126 miss against 100 m sigma) returns Pc ~ 1.6e-171, so compare127 verdicts in log or threshold terms, not by the raw float's128 magnitude.129## Verification130131- Confirm tca_s([5000, -3000, 2000], [-7.0, 1.0, -0.5]) returns 776.1 s132 within 0.5 s and miss_distance_m at that TCA returns 2780.5 m within133 1.0 m.134- Confirm probability_of_collision(0, 100, 5) returns exactly 1.25e-3135 and probability_of_collision(50, 100, 5) returns 1.103e-3 within136 1e-6, with severity "high" for both.137- Confirm the miss vector at TCA is orthogonal to the relative138 velocity: dot(r + v * tca, v) = 0.139- Confirm analyze reports valid_approximation False when the hard body140 radius exceeds 0.1 sigma (for example 15 m against 100 m).141- Confirm every non-positive sigma, negative hard body radius, and142 zero relative velocity raises ValueError.143- Run the contract test offline: python3144 scripts/test_conjunction_assessment.py (35 tests, deterministic).145146## Related leaves147148- space-systems/mission-design/radiation-debris: the long-term debris149 environment collision probability from flux, cross-section, and150 mission life, the environment-level counterpart of this screen.151- gnc-autonomy/space/orbit-determination: recovers the orbit state of152 the primary and secondary from observations as the source of the153 screening state vectors.154- space-systems/orbit-mechanics/clohessy-wiltshire: propagates the155 linearized relative motion of a deputy about a chief, a way to move156 the relative state to the screening epoch when the objects share a157 circular orbit.158159## Behavior contract (gate 3)160161Run the deterministic contract test (stdlib unittest, offline):162163 python3 scripts/test_conjunction_assessment.py164165The test covers the worked-example TCA and miss distance, the closing,166receding, and perpendicular TCA geometries, the zero-relative-velocity167rejection, the miss orthogonality identity at TCA, the circular168encounter-plane sigma projection, the Pc formula at zero, 50 m, and1692780 m miss distances, the hard body squared and inverse sigma squared170scalings, the high, watch, and green verdict bands with default and171custom thresholds, the full analyze dict, the validity flag at and172above the small hard-body limit, and ValueError rejection of173non-positive sigma, negative hard body radius, negative probability,174and zero relative velocity.175176## Compliance177178- Standards referenced, not reproduced: ECSS space safety standards179 frame the conjunction screening context (ecss.nl/standards); the180 relations above are standard engineering methodology, summary-only181 per standards-map.yaml. No ECSS text is reproduced.182- compliance: STANDARDS-REF, gated: false.