ootk 5.1.0 → 6.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/PROMPT.md +13 -0
- package/.claude/hooks/post-tool-use.ts +33 -0
- package/.claude/hooks/user-prompt-submit.ts +138 -0
- package/.claude/settings.local.json +13 -0
- package/.claude/skill-rules.json +11 -0
- package/.claude/skills/ootk-dev/SKILL.md +16 -0
- package/ADVANCED_FEATURES_GUIDE.md +1025 -0
- package/CHANGELOG.md +42 -3
- package/README.md +77 -45
- package/dist/body/Celestial.d.ts +2 -2
- package/dist/body/Celestial.js +2 -2
- package/dist/body/Celestial.js.map +1 -1
- package/dist/body/Earth.d.ts +4 -4
- package/dist/body/Earth.js +2 -2
- package/dist/body/Earth.js.map +1 -1
- package/dist/body/Moon.d.ts +3 -3
- package/dist/body/Moon.js +7 -7
- package/dist/body/Moon.js.map +1 -1
- package/dist/body/NutationAngles.d.ts +2 -2
- package/dist/body/NutationAngles.js +1 -1
- package/dist/body/PrecessionAngles.d.ts +2 -2
- package/dist/body/PrecessionAngles.js +1 -1
- package/dist/body/Sun.d.ts +2 -2
- package/dist/body/Sun.js +3 -3
- package/dist/body/Sun.js.map +1 -1
- package/dist/body/index.d.ts +5 -5
- package/dist/body/index.js +5 -5
- package/dist/body/index.js.map +1 -1
- package/dist/conjunction/ConjunctionAssessment.d.ts +156 -0
- package/dist/conjunction/ConjunctionAssessment.js +281 -0
- package/dist/conjunction/ConjunctionAssessment.js.map +1 -0
- package/dist/conjunction/ConjunctionEvent.d.ts +104 -0
- package/dist/conjunction/ConjunctionEvent.js +156 -0
- package/dist/conjunction/ConjunctionEvent.js.map +1 -0
- package/dist/conjunction/ProbabilityOfCollision.d.ts +102 -0
- package/dist/conjunction/ProbabilityOfCollision.js +240 -0
- package/dist/conjunction/ProbabilityOfCollision.js.map +1 -0
- package/dist/conjunction/index.d.ts +19 -0
- package/dist/conjunction/index.js +20 -0
- package/dist/conjunction/index.js.map +1 -0
- package/dist/coordinate/ClassicalElements.d.ts +7 -7
- package/dist/coordinate/ClassicalElements.js +7 -7
- package/dist/coordinate/ClassicalElements.js.map +1 -1
- package/dist/coordinate/EquinoctialElements.d.ts +5 -5
- package/dist/coordinate/EquinoctialElements.js +4 -4
- package/dist/coordinate/EquinoctialElements.js.map +1 -1
- package/dist/coordinate/FormatTle.d.ts +2 -2
- package/dist/coordinate/FormatTle.js +2 -2
- package/dist/coordinate/FormatTle.js.map +1 -1
- package/dist/coordinate/Geodetic.d.ts +4 -4
- package/dist/coordinate/Geodetic.js +7 -7
- package/dist/coordinate/Geodetic.js.map +1 -1
- package/dist/coordinate/Hill.d.ts +4 -4
- package/dist/coordinate/Hill.js +3 -3
- package/dist/coordinate/Hill.js.map +1 -1
- package/dist/coordinate/ITRF.d.ts +5 -5
- package/dist/coordinate/ITRF.js +6 -5
- package/dist/coordinate/ITRF.js.map +1 -1
- package/dist/coordinate/J2000.d.ts +5 -5
- package/dist/coordinate/J2000.js +5 -5
- package/dist/coordinate/J2000.js.map +1 -1
- package/dist/coordinate/RIC.d.ts +4 -4
- package/dist/coordinate/RIC.js +3 -3
- package/dist/coordinate/RIC.js.map +1 -1
- package/dist/coordinate/RelativeState.d.ts +5 -5
- package/dist/coordinate/RelativeState.js +2 -2
- package/dist/coordinate/RelativeState.js.map +1 -1
- package/dist/coordinate/StateVector.d.ts +2 -2
- package/dist/coordinate/StateVector.js +2 -2
- package/dist/coordinate/StateVector.js.map +1 -1
- package/dist/coordinate/TEME.d.ts +4 -4
- package/dist/coordinate/TEME.js +4 -4
- package/dist/coordinate/TEME.js.map +1 -1
- package/dist/coordinate/Tle.d.ts +5 -5
- package/dist/coordinate/Tle.js +9 -9
- package/dist/coordinate/Tle.js.map +1 -1
- package/dist/coordinate/index.d.ts +12 -12
- package/dist/coordinate/index.js +12 -12
- package/dist/coordinate/index.js.map +1 -1
- package/dist/coordinate/tle-format-data.d.ts +1 -1
- package/dist/coordinate/tle-format-data.js +1 -1
- package/dist/covariance/CovarianceSample.d.ts +5 -5
- package/dist/covariance/CovarianceSample.js +5 -5
- package/dist/covariance/CovarianceSample.js.map +1 -1
- package/dist/covariance/StateCovariance.d.ts +2 -2
- package/dist/covariance/StateCovariance.js +2 -2
- package/dist/covariance/StateCovariance.js.map +1 -1
- package/dist/covariance/index.d.ts +2 -2
- package/dist/covariance/index.js +2 -2
- package/dist/covariance/index.js.map +1 -1
- package/dist/data/DataHandler.d.ts +4 -4
- package/dist/data/DataHandler.js +5 -5
- package/dist/data/DataHandler.js.map +1 -1
- package/dist/data/values/Egm96Data.d.ts +1 -1
- package/dist/data/values/Egm96Data.js +3 -3
- package/dist/data/values/Egm96Data.js.map +1 -1
- package/dist/data/values/HpAtmosphereData.d.ts +2 -2
- package/dist/data/values/HpAtmosphereData.js +3 -3
- package/dist/data/values/HpAtmosphereData.js.map +1 -1
- package/dist/data/values/HpAtmosphereResult.d.ts +2 -2
- package/dist/data/values/HpAtmosphereResult.js +1 -1
- package/dist/data/values/Iau1980Data.d.ts +1 -1
- package/dist/data/values/Iau1980Data.js +2 -2
- package/dist/data/values/Iau1980Data.js.map +1 -1
- package/dist/data/values/LeapSecond.d.ts +1 -1
- package/dist/data/values/LeapSecond.js +1 -1
- package/dist/data/values/LeapSecondData.d.ts +2 -2
- package/dist/data/values/LeapSecondData.js +2 -2
- package/dist/data/values/LeapSecondData.js.map +1 -1
- package/dist/data/values/egm96.d.ts +2 -2
- package/dist/data/values/egm96.js +1 -1
- package/dist/data/values/hpAtmosphere.d.ts +2 -2
- package/dist/data/values/hpAtmosphere.js +1 -1
- package/dist/data/values/iau1980.d.ts +2 -2
- package/dist/data/values/iau1980.js +1 -1
- package/dist/enums/AngularDiameterMethod.d.ts +1 -1
- package/dist/enums/AngularDiameterMethod.js +1 -1
- package/dist/enums/AngularDistanceMethod.d.ts +1 -1
- package/dist/enums/AngularDistanceMethod.js +1 -1
- package/dist/enums/OrbitRegime.d.ts +1 -1
- package/dist/enums/OrbitRegime.js +1 -1
- package/dist/enums/PassType.d.ts +1 -1
- package/dist/enums/PassType.js +1 -1
- package/dist/enums/Sgp4OpsMode.d.ts +1 -1
- package/dist/enums/Sgp4OpsMode.js +1 -1
- package/dist/enums/index.d.ts +7 -7
- package/dist/enums/index.js +7 -7
- package/dist/enums/index.js.map +1 -1
- package/dist/fetch/horizons-constants.d.ts +43 -0
- package/dist/fetch/horizons-constants.js +50 -0
- package/dist/fetch/horizons-constants.js.map +1 -0
- package/dist/fetch/horizons-interfaces.d.ts +37 -0
- package/dist/fetch/horizons-interfaces.js +2 -0
- package/dist/fetch/horizons-interfaces.js.map +1 -0
- package/dist/fetch/horizons.d.ts +86 -0
- package/dist/fetch/horizons.js +237 -0
- package/dist/fetch/horizons.js.map +1 -0
- package/dist/force/AtmosphericDrag.d.ts +3 -3
- package/dist/force/AtmosphericDrag.js +2 -2
- package/dist/force/AtmosphericDrag.js.map +1 -1
- package/dist/force/EarthGravity.d.ts +3 -3
- package/dist/force/EarthGravity.js +2 -2
- package/dist/force/EarthGravity.js.map +1 -1
- package/dist/force/Force.d.ts +3 -3
- package/dist/force/Force.js +1 -10
- package/dist/force/Force.js.map +1 -1
- package/dist/force/ForceModel.d.ts +3 -3
- package/dist/force/ForceModel.js +7 -7
- package/dist/force/ForceModel.js.map +1 -1
- package/dist/force/Gravity.d.ts +3 -3
- package/dist/force/Gravity.js +2 -2
- package/dist/force/Gravity.js.map +1 -1
- package/dist/force/SolarRadiationPressure.d.ts +3 -3
- package/dist/force/SolarRadiationPressure.js +4 -4
- package/dist/force/SolarRadiationPressure.js.map +1 -1
- package/dist/force/ThirdBodyGravity.d.ts +3 -3
- package/dist/force/ThirdBodyGravity.js +2 -2
- package/dist/force/ThirdBodyGravity.js.map +1 -1
- package/dist/force/Thrust.d.ts +3 -3
- package/dist/force/Thrust.js +2 -2
- package/dist/force/Thrust.js.map +1 -1
- package/dist/force/index.d.ts +1 -1
- package/dist/force/index.js +1 -1
- package/dist/force/index.js.map +1 -1
- package/dist/interfaces/BaseObjectParams.d.ts +2 -2
- package/dist/interfaces/BaseObjectParams.js +1 -1
- package/dist/interfaces/ClassicalElementsParams.d.ts +2 -2
- package/dist/interfaces/ClassicalElementsParams.js +1 -1
- package/dist/interfaces/EquinoctialElementsParams.d.ts +2 -2
- package/dist/interfaces/EquinoctialElementsParams.js +1 -1
- package/dist/interfaces/GroundPositionParams.d.ts +2 -2
- package/dist/interfaces/GroundPositionParams.js +1 -1
- package/dist/interfaces/RfSensorParams.d.ts +2 -2
- package/dist/interfaces/SatelliteParams.d.ts +2 -2
- package/dist/interfaces/SensorParams.d.ts +2 -2
- package/dist/interfaces/StarObjectParams.d.ts +1 -1
- package/dist/interfaces/TimeVariables.d.ts +1 -1
- package/dist/interfaces/index.d.ts +9 -9
- package/dist/interpolator/ChebyshevCoefficients.d.ts +2 -2
- package/dist/interpolator/ChebyshevCoefficients.js +2 -2
- package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
- package/dist/interpolator/ChebyshevInterpolator.d.ts +4 -4
- package/dist/interpolator/ChebyshevInterpolator.js +3 -3
- package/dist/interpolator/ChebyshevInterpolator.js.map +1 -1
- package/dist/interpolator/CubicSpline.d.ts +2 -2
- package/dist/interpolator/CubicSpline.js +1 -1
- package/dist/interpolator/CubicSplineInterpolator.d.ts +4 -4
- package/dist/interpolator/CubicSplineInterpolator.js +4 -4
- package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
- package/dist/interpolator/FieldInterpolator.d.ts +3 -3
- package/dist/interpolator/FieldInterpolator.js +2 -12
- package/dist/interpolator/FieldInterpolator.js.map +1 -1
- package/dist/interpolator/Interpolator.d.ts +2 -2
- package/dist/interpolator/Interpolator.js +2 -2
- package/dist/interpolator/Interpolator.js.map +1 -1
- package/dist/interpolator/LagrangeInterpolator.d.ts +3 -3
- package/dist/interpolator/LagrangeInterpolator.js +3 -3
- package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
- package/dist/interpolator/StateInterpolator.d.ts +4 -4
- package/dist/interpolator/StateInterpolator.js +2 -10
- package/dist/interpolator/StateInterpolator.js.map +1 -1
- package/dist/interpolator/VerletBlendInterpolator.d.ts +5 -5
- package/dist/interpolator/VerletBlendInterpolator.js +5 -5
- package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
- package/dist/main.d.ts +20 -20
- package/dist/main.js +21 -20
- package/dist/main.js.map +1 -1
- package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +3 -3
- package/dist/maneuver/TwoBurnOrbitTransfer.js +3 -3
- package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
- package/dist/maneuver/Waypoint.d.ts +5 -5
- package/dist/maneuver/Waypoint.js +7 -7
- package/dist/maneuver/Waypoint.js.map +1 -1
- package/dist/objects/BaseObject.d.ts +3 -3
- package/dist/objects/BaseObject.js +2 -2
- package/dist/objects/BaseObject.js.map +1 -1
- package/dist/objects/DetailedSatellite.d.ts +4 -4
- package/dist/objects/DetailedSatellite.js +4 -4
- package/dist/objects/DetailedSatellite.js.map +1 -1
- package/dist/objects/DetailedSensor.d.ts +5 -5
- package/dist/objects/DetailedSensor.js +2 -2
- package/dist/objects/DetailedSensor.js.map +1 -1
- package/dist/objects/GroundObject.d.ts +4 -4
- package/dist/objects/GroundObject.js +3 -3
- package/dist/objects/GroundObject.js.map +1 -1
- package/dist/objects/LandObject.d.ts +3 -3
- package/dist/objects/LandObject.js +2 -2
- package/dist/objects/LandObject.js.map +1 -1
- package/dist/objects/Marker.d.ts +2 -2
- package/dist/objects/Marker.js +2 -2
- package/dist/objects/Marker.js.map +1 -1
- package/dist/objects/RfSensor.d.ts +2 -2
- package/dist/objects/RfSensor.js +2 -2
- package/dist/objects/RfSensor.js.map +1 -1
- package/dist/objects/Satellite.d.ts +12 -12
- package/dist/objects/Satellite.js +14 -14
- package/dist/objects/Satellite.js.map +1 -1
- package/dist/objects/Sensor.d.ts +6 -6
- package/dist/objects/Sensor.js +5 -5
- package/dist/objects/Sensor.js.map +1 -1
- package/dist/objects/Star.d.ts +3 -3
- package/dist/objects/Star.js +3 -3
- package/dist/objects/Star.js.map +1 -1
- package/dist/objects/index.d.ts +10 -10
- package/dist/objects/index.js +10 -10
- package/dist/objects/index.js.map +1 -1
- package/dist/observation/Observation.d.ts +11 -11
- package/dist/observation/Observation.js +1 -52
- package/dist/observation/Observation.js.map +1 -1
- package/dist/observation/ObservationOptical.d.ts +6 -6
- package/dist/observation/ObservationOptical.js +4 -4
- package/dist/observation/ObservationOptical.js.map +1 -1
- package/dist/observation/ObservationRadar.d.ts +6 -6
- package/dist/observation/ObservationRadar.js +4 -4
- package/dist/observation/ObservationRadar.js.map +1 -1
- package/dist/observation/ObservationUtils.d.ts +2 -2
- package/dist/observation/ObservationUtils.js +2 -2
- package/dist/observation/ObservationUtils.js.map +1 -1
- package/dist/observation/PropagatorPairs.d.ts +2 -2
- package/dist/observation/PropagatorPairs.js +1 -1
- package/dist/observation/RAE.d.ts +6 -6
- package/dist/observation/RAE.js +6 -6
- package/dist/observation/RAE.js.map +1 -1
- package/dist/observation/RadecGeocentric.d.ts +6 -6
- package/dist/observation/RadecGeocentric.js +5 -5
- package/dist/observation/RadecGeocentric.js.map +1 -1
- package/dist/observation/RadecTopocentric.d.ts +6 -6
- package/dist/observation/RadecTopocentric.js +9 -7
- package/dist/observation/RadecTopocentric.js.map +1 -1
- package/dist/observation/index.d.ts +5 -5
- package/dist/observation/index.js +5 -5
- package/dist/observation/index.js.map +1 -1
- package/dist/operations/BoxMuller.d.ts +2 -2
- package/dist/operations/BoxMuller.js +2 -2
- package/dist/operations/BoxMuller.js.map +1 -1
- package/dist/operations/EulerAngles.d.ts +2 -2
- package/dist/operations/EulerAngles.js +2 -2
- package/dist/operations/EulerAngles.js.map +1 -1
- package/dist/operations/Matrix.d.ts +2 -2
- package/dist/operations/Matrix.js +2 -2
- package/dist/operations/Matrix.js.map +1 -1
- package/dist/operations/Quaternion.d.ts +2 -2
- package/dist/operations/Quaternion.js +2 -2
- package/dist/operations/Quaternion.js.map +1 -1
- package/dist/operations/Random.d.ts +1 -1
- package/dist/operations/Random.js +1 -1
- package/dist/operations/RandomGaussianSource.d.ts +2 -2
- package/dist/operations/RandomGaussianSource.js +3 -3
- package/dist/operations/RandomGaussianSource.js.map +1 -1
- package/dist/operations/Vector.d.ts +2 -2
- package/dist/operations/Vector.js +2 -2
- package/dist/operations/Vector.js.map +1 -1
- package/dist/operations/Vector3D.d.ts +5 -4
- package/dist/operations/Vector3D.js +5 -4
- package/dist/operations/Vector3D.js.map +1 -1
- package/dist/operations/index.d.ts +4 -4
- package/dist/operations/index.js +4 -4
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/operations.d.ts +5 -5
- package/dist/operations/operations.js +5 -5
- package/dist/operations/operations.js.map +1 -1
- package/dist/optimize/ChebyshevCompressor.d.ts +3 -3
- package/dist/optimize/ChebyshevCompressor.js +4 -4
- package/dist/optimize/ChebyshevCompressor.js.map +1 -1
- package/dist/optimize/DownhillSimplex.d.ts +2 -2
- package/dist/optimize/DownhillSimplex.js +2 -2
- package/dist/optimize/DownhillSimplex.js.map +1 -1
- package/dist/optimize/GoldenSection.d.ts +2 -2
- package/dist/optimize/GoldenSection.js +1 -1
- package/dist/optimize/PolynomialRegression.d.ts +2 -2
- package/dist/optimize/PolynomialRegression.js +4 -4
- package/dist/optimize/PolynomialRegression.js.map +1 -1
- package/dist/optimize/PolynomicalRegressionResult.d.ts +1 -1
- package/dist/optimize/PolynomicalRegressionResult.js +1 -1
- package/dist/optimize/SimpleLinearRegression.d.ts +1 -1
- package/dist/optimize/SimpleLinearRegression.js +1 -1
- package/dist/optimize/SimplexEntry.d.ts +1 -1
- package/dist/optimize/SimplexEntry.js +2 -2
- package/dist/optimize/SimplexEntry.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +5 -5
- package/dist/orbit_determination/BatchLeastSquaresOD.js +8 -8
- package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +3 -3
- package/dist/orbit_determination/BatchLeastSquaresResult.js +1 -1
- package/dist/orbit_determination/GaussIOD.d.ts +98 -0
- package/dist/orbit_determination/GaussIOD.js +291 -0
- package/dist/orbit_determination/GaussIOD.js.map +1 -0
- package/dist/orbit_determination/GibbsIOD.d.ts +2 -2
- package/dist/orbit_determination/GibbsIOD.js +4 -4
- package/dist/orbit_determination/GibbsIOD.js.map +1 -1
- package/dist/orbit_determination/GoodingIOD.d.ts +58 -8
- package/dist/orbit_determination/GoodingIOD.js +225 -35
- package/dist/orbit_determination/GoodingIOD.js.map +1 -1
- package/dist/orbit_determination/HerrickGibbsIOD.d.ts +2 -2
- package/dist/orbit_determination/HerrickGibbsIOD.js +2 -2
- package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -1
- package/dist/orbit_determination/LambertIOD.d.ts +2 -2
- package/dist/orbit_determination/LambertIOD.js +2 -2
- package/dist/orbit_determination/LambertIOD.js.map +1 -1
- package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +3 -3
- package/dist/orbit_determination/ModifiedGoodingIOD.js +8 -8
- package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -1
- package/dist/orbit_determination/index.d.ts +7 -7
- package/dist/orbit_determination/index.js +7 -7
- package/dist/orbit_determination/index.js.map +1 -1
- package/dist/propagator/DormandPrince54Propagator.d.ts +2 -2
- package/dist/propagator/DormandPrince54Propagator.js +2 -2
- package/dist/propagator/DormandPrince54Propagator.js.map +1 -1
- package/dist/propagator/KeplerPropagator.d.ts +6 -6
- package/dist/propagator/KeplerPropagator.js +6 -7
- package/dist/propagator/KeplerPropagator.js.map +1 -1
- package/dist/propagator/Propagator.d.ts +5 -5
- package/dist/propagator/Propagator.js +5 -5
- package/dist/propagator/Propagator.js.map +1 -1
- package/dist/propagator/RkCheckpoint.d.ts +2 -2
- package/dist/propagator/RkCheckpoint.js +1 -1
- package/dist/propagator/RkResult.d.ts +2 -2
- package/dist/propagator/RkResult.js +1 -1
- package/dist/propagator/RungeKutta4Propagator.d.ts +6 -6
- package/dist/propagator/RungeKutta4Propagator.js +5 -5
- package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
- package/dist/propagator/RungeKutta89Propagator.d.ts +2 -2
- package/dist/propagator/RungeKutta89Propagator.js +2 -2
- package/dist/propagator/RungeKutta89Propagator.js.map +1 -1
- package/dist/propagator/RungeKuttaAdaptive.d.ts +6 -6
- package/dist/propagator/RungeKuttaAdaptive.js +52 -9
- package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
- package/dist/propagator/Sgp4Propagator.d.ts +7 -7
- package/dist/propagator/Sgp4Propagator.js +4 -4
- package/dist/propagator/Sgp4Propagator.js.map +1 -1
- package/dist/propagator/index.d.ts +3 -3
- package/dist/propagator/index.js +3 -3
- package/dist/propagator/index.js.map +1 -1
- package/dist/sgp4/index.d.ts +2 -2
- package/dist/sgp4/index.js +2 -2
- package/dist/sgp4/index.js.map +1 -1
- package/dist/sgp4/sgp4.d.ts +3 -3
- package/dist/sgp4/sgp4.js +11 -5
- package/dist/sgp4/sgp4.js.map +1 -1
- package/dist/smoothing/ExponentialSmoothing.d.ts +2 -2
- package/dist/smoothing/ExponentialSmoothing.js +1 -1
- package/dist/time/Epoch.d.ts +2 -2
- package/dist/time/Epoch.js +2 -2
- package/dist/time/Epoch.js.map +1 -1
- package/dist/time/EpochGPS.d.ts +3 -3
- package/dist/time/EpochGPS.js +3 -3
- package/dist/time/EpochGPS.js.map +1 -1
- package/dist/time/EpochTAI.d.ts +2 -2
- package/dist/time/EpochTAI.js +2 -2
- package/dist/time/EpochTAI.js.map +1 -1
- package/dist/time/EpochTDB.d.ts +2 -2
- package/dist/time/EpochTDB.js +2 -2
- package/dist/time/EpochTDB.js.map +1 -1
- package/dist/time/EpochTT.d.ts +2 -2
- package/dist/time/EpochTT.js +2 -2
- package/dist/time/EpochTT.js.map +1 -1
- package/dist/time/EpochUTC.d.ts +7 -7
- package/dist/time/EpochUTC.js +9 -9
- package/dist/time/EpochUTC.js.map +1 -1
- package/dist/time/EpochWindow.d.ts +2 -2
- package/dist/time/EpochWindow.js +1 -1
- package/dist/time/TimeStamped.d.ts +2 -2
- package/dist/time/TimeStamped.js +1 -1
- package/dist/time/index.d.ts +8 -8
- package/dist/time/index.js +8 -8
- package/dist/time/index.js.map +1 -1
- package/dist/transforms/TransformCache.d.ts +1 -1
- package/dist/transforms/TransformCache.js +1 -1
- package/dist/transforms/conversions.d.ts +2 -2
- package/dist/transforms/conversions.js +2 -2
- package/dist/transforms/conversions.js.map +1 -1
- package/dist/transforms/index.d.ts +2 -2
- package/dist/transforms/index.js +2 -2
- package/dist/transforms/index.js.map +1 -1
- package/dist/transforms/transforms.d.ts +1 -1
- package/dist/transforms/transforms.js +1 -1
- package/dist/transforms/transforms.js.map +1 -1
- package/dist/types/types.d.ts +8 -3
- package/dist/types/types.js +6 -1
- package/dist/types/types.js.map +1 -1
- package/dist/utils/constants.d.ts +2 -2
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/create-covariance-from-tle.d.ts +1 -1
- package/dist/utils/create-covariance-from-tle.js +1 -1
- package/dist/utils/create-covariance-from-tle.js.map +1 -1
- package/dist/utils/functions.d.ts +4 -4
- package/dist/utils/functions.js +9 -4
- package/dist/utils/functions.js.map +1 -1
- package/dist/utils/index.d.ts +5 -5
- package/dist/utils/index.js +5 -5
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jacobian.d.ts +2 -2
- package/dist/utils/jacobian.js +1 -1
- package/dist/utils/jacobian.js.map +1 -1
- package/dist/utils/linearDistance.d.ts +1 -1
- package/docs/README.md +132 -0
- package/docs/getting-started.md +792 -0
- package/docs/lambert-satellite-integration-guide.md +766 -0
- package/docs/user-guide.md +1935 -0
- package/jest.config.mjs +28 -0
- package/package.json +3 -4
- package/src/body/Celestial.ts +2 -2
- package/src/body/Earth.ts +4 -4
- package/src/body/Moon.ts +7 -7
- package/src/body/NutationAngles.ts +2 -2
- package/src/body/PrecessionAngles.ts +2 -2
- package/src/body/Sun.ts +4 -4
- package/src/body/index.ts +6 -5
- package/src/conjunction/ConjunctionAssessment.ts +417 -0
- package/src/conjunction/ConjunctionEvent.ts +149 -0
- package/src/conjunction/ProbabilityOfCollision.ts +300 -0
- package/src/conjunction/index.ts +24 -0
- package/src/coordinate/ClassicalElements.ts +16 -11
- package/src/coordinate/EquinoctialElements.ts +7 -7
- package/src/coordinate/FormatTle.ts +2 -2
- package/src/coordinate/Geodetic.ts +8 -8
- package/src/coordinate/Hill.ts +4 -4
- package/src/coordinate/ITRF.ts +6 -6
- package/src/coordinate/J2000.ts +7 -7
- package/src/coordinate/RIC.ts +4 -4
- package/src/coordinate/RelativeState.ts +5 -5
- package/src/coordinate/StateVector.ts +8 -3
- package/src/coordinate/TEME.ts +6 -6
- package/src/coordinate/Tle.ts +9 -9
- package/src/coordinate/index.ts +13 -12
- package/src/coordinate/tle-format-data.ts +1 -1
- package/src/covariance/CovarianceSample.ts +13 -13
- package/src/covariance/StateCovariance.ts +2 -2
- package/src/covariance/index.ts +3 -2
- package/src/data/DataHandler.ts +6 -6
- package/src/data/values/Egm96Data.ts +3 -3
- package/src/data/values/HpAtmosphereData.ts +3 -3
- package/src/data/values/HpAtmosphereResult.ts +2 -2
- package/src/data/values/Iau1980Data.ts +2 -2
- package/src/data/values/LeapSecond.ts +1 -1
- package/src/data/values/LeapSecondData.ts +2 -2
- package/src/data/values/egm96.ts +2 -2
- package/src/data/values/hpAtmosphere.ts +2 -2
- package/src/data/values/iau1980.ts +2 -2
- package/src/enums/AngularDiameterMethod.ts +1 -1
- package/src/enums/AngularDistanceMethod.ts +1 -1
- package/src/enums/OrbitRegime.ts +1 -1
- package/src/enums/PassType.ts +1 -1
- package/src/enums/Sgp4OpsMode.ts +1 -1
- package/src/enums/index.ts +8 -7
- package/src/fetch/horizons-constants.ts +53 -0
- package/src/fetch/horizons-interfaces.ts +38 -0
- package/src/fetch/horizons.ts +300 -0
- package/src/force/AtmosphericDrag.ts +3 -3
- package/src/force/EarthGravity.ts +3 -3
- package/src/force/Force.ts +3 -5
- package/src/force/ForceModel.ts +9 -9
- package/src/force/Gravity.ts +3 -3
- package/src/force/SolarRadiationPressure.ts +4 -4
- package/src/force/ThirdBodyGravity.ts +3 -3
- package/src/force/Thrust.ts +3 -3
- package/src/force/index.ts +2 -1
- package/src/interfaces/BaseObjectParams.ts +2 -2
- package/src/interfaces/ClassicalElementsParams.ts +2 -2
- package/src/interfaces/EquinoctialElementsParams.ts +2 -2
- package/src/interfaces/GroundPositionParams.ts +2 -2
- package/src/interfaces/RfSensorParams.ts +2 -2
- package/src/interfaces/SatelliteParams.ts +2 -2
- package/src/interfaces/SensorParams.ts +3 -3
- package/src/interfaces/StarObjectParams.ts +1 -1
- package/src/interfaces/TimeVariables.ts +1 -1
- package/src/interfaces/index.ts +10 -9
- package/src/interpolator/ChebyshevCoefficients.ts +2 -2
- package/src/interpolator/ChebyshevInterpolator.ts +4 -4
- package/src/interpolator/CubicSpline.ts +2 -2
- package/src/interpolator/CubicSplineInterpolator.ts +4 -4
- package/src/interpolator/FieldInterpolator.ts +3 -5
- package/src/interpolator/Interpolator.ts +2 -2
- package/src/interpolator/LagrangeInterpolator.ts +3 -3
- package/src/interpolator/StateInterpolator.ts +4 -6
- package/src/interpolator/VerletBlendInterpolator.ts +5 -5
- package/src/main.ts +41 -20
- package/src/maneuver/TwoBurnOrbitTransfer.ts +3 -3
- package/src/maneuver/Waypoint.ts +8 -8
- package/src/objects/BaseObject.ts +3 -3
- package/src/objects/DetailedSatellite.ts +9 -9
- package/src/objects/DetailedSensor.ts +5 -5
- package/src/objects/GroundObject.ts +9 -9
- package/src/objects/LandObject.ts +3 -3
- package/src/objects/Marker.ts +2 -2
- package/src/objects/RfSensor.ts +2 -2
- package/src/objects/Satellite.ts +21 -21
- package/src/objects/Sensor.ts +7 -7
- package/src/objects/Star.ts +3 -3
- package/src/objects/index.ts +11 -10
- package/src/observation/Observation.ts +11 -23
- package/src/observation/ObservationOptical.ts +7 -7
- package/src/observation/ObservationRadar.ts +7 -7
- package/src/observation/ObservationUtils.ts +2 -2
- package/src/observation/PropagatorPairs.ts +2 -2
- package/src/observation/RAE.ts +9 -9
- package/src/observation/RadecGeocentric.ts +9 -9
- package/src/observation/RadecTopocentric.ts +13 -10
- package/src/observation/index.ts +6 -5
- package/src/operations/BoxMuller.ts +2 -2
- package/src/operations/EulerAngles.ts +2 -2
- package/src/operations/Matrix.ts +2 -2
- package/src/operations/Quaternion.ts +2 -2
- package/src/operations/Random.ts +1 -1
- package/src/operations/RandomGaussianSource.ts +3 -3
- package/src/operations/Vector.ts +2 -2
- package/src/operations/Vector3D.ts +6 -4
- package/src/operations/index.ts +5 -4
- package/src/operations/operations.ts +6 -5
- package/src/optimize/ChebyshevCompressor.ts +5 -5
- package/src/optimize/DownhillSimplex.ts +2 -2
- package/src/optimize/GoldenSection.ts +2 -2
- package/src/optimize/PolynomialRegression.ts +4 -4
- package/src/optimize/PolynomicalRegressionResult.ts +1 -1
- package/src/optimize/SimpleLinearRegression.ts +1 -1
- package/src/optimize/SimplexEntry.ts +2 -2
- package/src/orbit_determination/BatchLeastSquaresOD.ts +10 -10
- package/src/orbit_determination/BatchLeastSquaresResult.ts +3 -3
- package/src/orbit_determination/GaussIOD.ts +393 -0
- package/src/orbit_determination/GibbsIOD.ts +4 -4
- package/src/orbit_determination/GoodingIOD.ts +458 -160
- package/src/orbit_determination/HerrickGibbsIOD.ts +2 -2
- package/src/orbit_determination/LambertIOD.ts +2 -2
- package/src/orbit_determination/ModifiedGoodingIOD.ts +33 -22
- package/src/orbit_determination/index.ts +8 -7
- package/src/propagator/DormandPrince54Propagator.ts +2 -2
- package/src/propagator/KeplerPropagator.ts +7 -8
- package/src/propagator/Propagator.ts +6 -6
- package/src/propagator/RkCheckpoint.ts +2 -2
- package/src/propagator/RkResult.ts +2 -2
- package/src/propagator/RungeKutta4Propagator.ts +6 -6
- package/src/propagator/RungeKutta89Propagator.ts +2 -2
- package/src/propagator/RungeKuttaAdaptive.ts +62 -12
- package/src/propagator/Sgp4Propagator.ts +7 -7
- package/src/propagator/index.ts +4 -3
- package/src/sgp4/index.ts +3 -2
- package/src/sgp4/sgp4.ts +6 -6
- package/src/smoothing/ExponentialSmoothing.ts +2 -2
- package/src/time/Epoch.ts +3 -3
- package/src/time/EpochGPS.ts +5 -5
- package/src/time/EpochTAI.ts +2 -2
- package/src/time/EpochTDB.ts +2 -2
- package/src/time/EpochTT.ts +2 -2
- package/src/time/EpochUTC.ts +10 -10
- package/src/time/EpochWindow.ts +2 -2
- package/src/time/TimeStamped.ts +2 -2
- package/src/time/index.ts +9 -8
- package/src/transforms/TransformCache.ts +1 -1
- package/src/transforms/conversions.ts +2 -2
- package/src/transforms/index.ts +3 -2
- package/src/transforms/transforms.ts +4 -4
- package/src/types/types.ts +8 -3
- package/src/utils/constants.ts +2 -2
- package/src/utils/create-covariance-from-tle.ts +1 -1
- package/src/utils/functions.ts +10 -5
- package/src/utils/index.ts +6 -5
- package/src/utils/jacobian.ts +2 -2
- package/src/utils/linearDistance.ts +1 -1
package/dist/body/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
3
|
* @description Orbital Object ToolKit (ootk) is a collection of tools for working
|
|
4
4
|
* with satellites and other orbital objects.
|
|
5
5
|
* @license AGPL-3.0-or-later
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
* You should have received a copy of the GNU Affero General Public License along with
|
|
21
21
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
*/
|
|
23
|
-
export { Celestial } from './Celestial
|
|
24
|
-
export { Earth } from './Earth
|
|
25
|
-
export { Moon } from './Moon
|
|
26
|
-
export { Sun } from './Sun
|
|
23
|
+
export { Celestial } from './Celestial';
|
|
24
|
+
export { Earth } from './Earth';
|
|
25
|
+
export { Moon } from './Moon';
|
|
26
|
+
export { Sun } from './Sun';
|
|
27
27
|
//# sourceMappingURL=index.js.map
|
package/dist/body/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/body/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/body/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
|
+
* @license AGPL-3.0-or-later
|
|
4
|
+
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
|
+
*
|
|
6
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
7
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
8
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
11
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
* See the GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
15
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
import { EpochUTC } from '../time/EpochUTC.js';
|
|
18
|
+
import { J2000 } from '../coordinate/J2000.js';
|
|
19
|
+
import { Tle } from '../coordinate/Tle.js';
|
|
20
|
+
import { StateCovariance } from '../covariance/StateCovariance.js';
|
|
21
|
+
import { Propagator } from '../propagator/Propagator.js';
|
|
22
|
+
import { ForceModel } from '../force/ForceModel.js';
|
|
23
|
+
import type { Kilometers, Seconds } from '../main.js';
|
|
24
|
+
import { ConjunctionEvent } from './ConjunctionEvent.js';
|
|
25
|
+
/**
|
|
26
|
+
* Input for a space object in conjunction assessment.
|
|
27
|
+
* Can be specified as either a TLE or a state vector with optional covariance.
|
|
28
|
+
*/
|
|
29
|
+
export interface SpaceObject {
|
|
30
|
+
/** Object identifier/name */
|
|
31
|
+
name?: string;
|
|
32
|
+
/** TLE for the object (alternative to state) */
|
|
33
|
+
tle?: Tle;
|
|
34
|
+
/** State vector in J2000 frame (alternative to TLE) */
|
|
35
|
+
state?: J2000;
|
|
36
|
+
/** Covariance matrix (optional, for probability calculation) */
|
|
37
|
+
covariance?: StateCovariance;
|
|
38
|
+
/** Hard body radius in km (optional, for probability calculation) */
|
|
39
|
+
radius?: Kilometers;
|
|
40
|
+
/** Custom propagator (optional, overrides default) */
|
|
41
|
+
propagator?: Propagator;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Configuration options for conjunction assessment.
|
|
45
|
+
*/
|
|
46
|
+
export interface ConjunctionAssessmentOptions {
|
|
47
|
+
/** Search window start time */
|
|
48
|
+
startTime: EpochUTC;
|
|
49
|
+
/** Search window end time */
|
|
50
|
+
endTime: EpochUTC;
|
|
51
|
+
/** Use high-fidelity propagation (RungeKutta89 instead of SGP4) */
|
|
52
|
+
useHighFidelity?: boolean;
|
|
53
|
+
/** Force model for high-fidelity propagation (optional) */
|
|
54
|
+
forceModel?: ForceModel;
|
|
55
|
+
/** Propagate covariances using sigma-point method */
|
|
56
|
+
propagateCovariance?: boolean;
|
|
57
|
+
/** TCA search tolerance in seconds */
|
|
58
|
+
tcaTolerance?: Seconds;
|
|
59
|
+
/** Step size for initial TCA search in seconds */
|
|
60
|
+
searchStepSize?: Seconds;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* High accuracy conjunction assessment workflow.
|
|
64
|
+
*
|
|
65
|
+
* This class provides a comprehensive workflow for assessing conjunctions between
|
|
66
|
+
* space objects using:
|
|
67
|
+
* - High accuracy propagators (SGP4 or numerical integrators)
|
|
68
|
+
* - Covariance matrices based on historical TLE accuracy
|
|
69
|
+
* - Time of Closest Approach (TCA) finding using optimization
|
|
70
|
+
* - Probability of collision calculation using Chan's 2D method
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const primaryTle = new Tle(line1, line2);
|
|
75
|
+
* const secondaryTle = new Tle(line1, line2);
|
|
76
|
+
*
|
|
77
|
+
* const assessment = new ConjunctionAssessment(
|
|
78
|
+
* { tle: primaryTle, radius: 0.01 as Kilometers },
|
|
79
|
+
* { tle: secondaryTle, radius: 0.01 as Kilometers },
|
|
80
|
+
* );
|
|
81
|
+
*
|
|
82
|
+
* const event = assessment.assess({
|
|
83
|
+
* startTime: EpochUTC.fromDateTime(new Date('2025-01-01T00:00:00Z')),
|
|
84
|
+
* endTime: EpochUTC.fromDateTime(new Date('2025-01-02T00:00:00Z')),
|
|
85
|
+
* useHighFidelity: true,
|
|
86
|
+
* propagateCovariance: true,
|
|
87
|
+
* });
|
|
88
|
+
*
|
|
89
|
+
* console.log(event.toString());
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare class ConjunctionAssessment {
|
|
93
|
+
private primary;
|
|
94
|
+
private secondary;
|
|
95
|
+
private primaryProp;
|
|
96
|
+
private secondaryProp;
|
|
97
|
+
private primaryCovSample?;
|
|
98
|
+
private secondaryCovSample?;
|
|
99
|
+
constructor(primary: SpaceObject, secondary: SpaceObject);
|
|
100
|
+
/**
|
|
101
|
+
* Performs conjunction assessment over the specified time window.
|
|
102
|
+
*
|
|
103
|
+
* @param options Assessment configuration options
|
|
104
|
+
* @returns ConjunctionEvent with TCA, miss distance, and probability of collision
|
|
105
|
+
*/
|
|
106
|
+
assess(options: ConjunctionAssessmentOptions): ConjunctionEvent;
|
|
107
|
+
/**
|
|
108
|
+
* Finds the Time of Closest Approach (TCA) using golden section search.
|
|
109
|
+
*
|
|
110
|
+
* @param startTime Search window start
|
|
111
|
+
* @param endTime Search window end
|
|
112
|
+
* @param stepSize Initial search step size in seconds
|
|
113
|
+
* @param tolerance TCA search tolerance in seconds
|
|
114
|
+
* @returns TCA epoch
|
|
115
|
+
*/
|
|
116
|
+
private findTCA;
|
|
117
|
+
/**
|
|
118
|
+
* Creates a propagator for a space object.
|
|
119
|
+
*
|
|
120
|
+
* @param obj Space object
|
|
121
|
+
* @param useHighFidelity Whether to use high-fidelity propagation
|
|
122
|
+
* @param forceModel Optional force model for numerical propagation
|
|
123
|
+
* @returns Propagator instance
|
|
124
|
+
*/
|
|
125
|
+
private createPropagator;
|
|
126
|
+
/**
|
|
127
|
+
* Initializes covariance samples for both objects.
|
|
128
|
+
*
|
|
129
|
+
* @param useHighFidelity Whether to use high-fidelity propagation
|
|
130
|
+
* @param forceModel Optional force model
|
|
131
|
+
*/
|
|
132
|
+
private initializeCovarianceSamples;
|
|
133
|
+
/**
|
|
134
|
+
* Transforms ECI covariance to RIC frame.
|
|
135
|
+
*
|
|
136
|
+
* @param covariance ECI covariance
|
|
137
|
+
* @param state State vector for RIC frame definition
|
|
138
|
+
* @returns RIC covariance
|
|
139
|
+
*/
|
|
140
|
+
private transformCovarianceToRIC;
|
|
141
|
+
/**
|
|
142
|
+
* Creates the 3x3 RIC transformation matrix.
|
|
143
|
+
*
|
|
144
|
+
* @param position Position vector
|
|
145
|
+
* @param velocity Velocity vector
|
|
146
|
+
* @returns 3x3 RIC transformation matrix
|
|
147
|
+
*/
|
|
148
|
+
private createRICTransformMatrix;
|
|
149
|
+
/**
|
|
150
|
+
* Builds a 6x6 transformation matrix from a 3x3 rotation matrix.
|
|
151
|
+
*
|
|
152
|
+
* @param rot 3x3 rotation matrix
|
|
153
|
+
* @returns 6x6 transformation matrix
|
|
154
|
+
*/
|
|
155
|
+
private build6x6Transform;
|
|
156
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
|
+
* @license AGPL-3.0-or-later
|
|
4
|
+
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
|
+
*
|
|
6
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
7
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
8
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
11
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
* See the GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
15
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
import { EpochUTC } from '../time/EpochUTC.js';
|
|
18
|
+
import { RIC } from '../coordinate/RIC.js';
|
|
19
|
+
import { StateCovariance, CovarianceFrame } from '../covariance/StateCovariance.js';
|
|
20
|
+
import { CovarianceSample } from '../covariance/CovarianceSample.js';
|
|
21
|
+
import { Sgp4Propagator } from '../propagator/Sgp4Propagator.js';
|
|
22
|
+
import { RungeKutta89Propagator } from '../propagator/RungeKutta89Propagator.js';
|
|
23
|
+
import { ForceModel } from '../force/ForceModel.js';
|
|
24
|
+
import { GoldenSection } from '../optimize/GoldenSection.js';
|
|
25
|
+
import { Matrix } from '../operations/Matrix.js';
|
|
26
|
+
import { ConjunctionEvent } from './ConjunctionEvent.js';
|
|
27
|
+
import { ProbabilityOfCollision } from './ProbabilityOfCollision.js';
|
|
28
|
+
/**
|
|
29
|
+
* High accuracy conjunction assessment workflow.
|
|
30
|
+
*
|
|
31
|
+
* This class provides a comprehensive workflow for assessing conjunctions between
|
|
32
|
+
* space objects using:
|
|
33
|
+
* - High accuracy propagators (SGP4 or numerical integrators)
|
|
34
|
+
* - Covariance matrices based on historical TLE accuracy
|
|
35
|
+
* - Time of Closest Approach (TCA) finding using optimization
|
|
36
|
+
* - Probability of collision calculation using Chan's 2D method
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const primaryTle = new Tle(line1, line2);
|
|
41
|
+
* const secondaryTle = new Tle(line1, line2);
|
|
42
|
+
*
|
|
43
|
+
* const assessment = new ConjunctionAssessment(
|
|
44
|
+
* { tle: primaryTle, radius: 0.01 as Kilometers },
|
|
45
|
+
* { tle: secondaryTle, radius: 0.01 as Kilometers },
|
|
46
|
+
* );
|
|
47
|
+
*
|
|
48
|
+
* const event = assessment.assess({
|
|
49
|
+
* startTime: EpochUTC.fromDateTime(new Date('2025-01-01T00:00:00Z')),
|
|
50
|
+
* endTime: EpochUTC.fromDateTime(new Date('2025-01-02T00:00:00Z')),
|
|
51
|
+
* useHighFidelity: true,
|
|
52
|
+
* propagateCovariance: true,
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* console.log(event.toString());
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export class ConjunctionAssessment {
|
|
59
|
+
primary;
|
|
60
|
+
secondary;
|
|
61
|
+
primaryProp;
|
|
62
|
+
secondaryProp;
|
|
63
|
+
primaryCovSample;
|
|
64
|
+
secondaryCovSample;
|
|
65
|
+
constructor(primary, secondary) {
|
|
66
|
+
this.primary = primary;
|
|
67
|
+
this.secondary = secondary;
|
|
68
|
+
// Initialize propagators (will be replaced in assess() if needed)
|
|
69
|
+
this.primaryProp = this.createPropagator(primary, false);
|
|
70
|
+
this.secondaryProp = this.createPropagator(secondary, false);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Performs conjunction assessment over the specified time window.
|
|
74
|
+
*
|
|
75
|
+
* @param options Assessment configuration options
|
|
76
|
+
* @returns ConjunctionEvent with TCA, miss distance, and probability of collision
|
|
77
|
+
*/
|
|
78
|
+
assess(options) {
|
|
79
|
+
const { startTime, endTime, useHighFidelity = false, forceModel, propagateCovariance = false, tcaTolerance = 0.001, searchStepSize = 60.0, } = options;
|
|
80
|
+
// Create propagators based on options
|
|
81
|
+
this.primaryProp = this.primary.propagator ?? this.createPropagator(this.primary, useHighFidelity, forceModel);
|
|
82
|
+
this.secondaryProp =
|
|
83
|
+
this.secondary.propagator ?? this.createPropagator(this.secondary, useHighFidelity, forceModel);
|
|
84
|
+
// Initialize covariance samples if requested
|
|
85
|
+
if (propagateCovariance) {
|
|
86
|
+
this.initializeCovarianceSamples(useHighFidelity, forceModel);
|
|
87
|
+
}
|
|
88
|
+
// Find Time of Closest Approach (TCA)
|
|
89
|
+
const tca = this.findTCA(startTime, endTime, searchStepSize, tcaTolerance);
|
|
90
|
+
// Propagate states to TCA
|
|
91
|
+
const primaryState = this.primaryProp.propagate(tca);
|
|
92
|
+
const secondaryState = this.secondaryProp.propagate(tca);
|
|
93
|
+
// Compute relative state in RIC frame
|
|
94
|
+
const relativeState = RIC.fromJ2000(secondaryState, primaryState);
|
|
95
|
+
// Extract RIC components
|
|
96
|
+
const radialDistance = Math.abs(relativeState.position.x);
|
|
97
|
+
const intrackDistance = Math.abs(relativeState.position.y);
|
|
98
|
+
const crosstrackDistance = Math.abs(relativeState.position.z);
|
|
99
|
+
const missDistance = relativeState.range;
|
|
100
|
+
const relativeVelocity = relativeState.velocity.magnitude();
|
|
101
|
+
// Compute combined covariance and Pc if available
|
|
102
|
+
let combinedCovariance;
|
|
103
|
+
let probabilityOfCollision;
|
|
104
|
+
if (this.primaryCovSample && this.secondaryCovSample && this.primary.radius && this.secondary.radius) {
|
|
105
|
+
// Propagate covariance samples to TCA
|
|
106
|
+
this.primaryCovSample.propagate(tca);
|
|
107
|
+
this.secondaryCovSample.propagate(tca);
|
|
108
|
+
// Get covariances in RIC frame
|
|
109
|
+
const primaryCov = this.primaryCovSample.covarianceRIC();
|
|
110
|
+
const secondaryCov = this.secondaryCovSample.covarianceRIC();
|
|
111
|
+
// Combine covariances
|
|
112
|
+
combinedCovariance = ProbabilityOfCollision.combineCovarianceMatrices(primaryCov, secondaryCov);
|
|
113
|
+
// Calculate probability of collision
|
|
114
|
+
const combinedRadius = (this.primary.radius + this.secondary.radius);
|
|
115
|
+
probabilityOfCollision = ProbabilityOfCollision.calculate(relativeState.position, relativeState.velocity, combinedCovariance, combinedRadius);
|
|
116
|
+
}
|
|
117
|
+
else if (this.primary.covariance && this.secondary.covariance && this.primary.radius && this.secondary.radius) {
|
|
118
|
+
// Use provided covariances without propagation
|
|
119
|
+
// Transform to RIC if needed
|
|
120
|
+
let primaryCovRIC = this.primary.covariance;
|
|
121
|
+
let secondaryCovRIC = this.secondary.covariance;
|
|
122
|
+
if (this.primary.covariance.frame === CovarianceFrame.ECI) {
|
|
123
|
+
primaryCovRIC = this.transformCovarianceToRIC(this.primary.covariance, primaryState);
|
|
124
|
+
}
|
|
125
|
+
if (this.secondary.covariance.frame === CovarianceFrame.ECI) {
|
|
126
|
+
secondaryCovRIC = this.transformCovarianceToRIC(this.secondary.covariance, secondaryState);
|
|
127
|
+
}
|
|
128
|
+
combinedCovariance = ProbabilityOfCollision.combineCovarianceMatrices(primaryCovRIC, secondaryCovRIC);
|
|
129
|
+
const combinedRadius = (this.primary.radius + this.secondary.radius);
|
|
130
|
+
probabilityOfCollision = ProbabilityOfCollision.calculate(relativeState.position, relativeState.velocity, combinedCovariance, combinedRadius);
|
|
131
|
+
}
|
|
132
|
+
return new ConjunctionEvent(tca, primaryState, secondaryState, relativeState, missDistance, radialDistance, intrackDistance, crosstrackDistance, relativeVelocity, combinedCovariance, probabilityOfCollision, this.primary.radius, this.secondary.radius);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Finds the Time of Closest Approach (TCA) using golden section search.
|
|
136
|
+
*
|
|
137
|
+
* @param startTime Search window start
|
|
138
|
+
* @param endTime Search window end
|
|
139
|
+
* @param stepSize Initial search step size in seconds
|
|
140
|
+
* @param tolerance TCA search tolerance in seconds
|
|
141
|
+
* @returns TCA epoch
|
|
142
|
+
*/
|
|
143
|
+
findTCA(startTime, endTime, stepSize, tolerance) {
|
|
144
|
+
// Coarse search to find approximate TCA region
|
|
145
|
+
let minRange = Infinity;
|
|
146
|
+
let minEpoch = startTime;
|
|
147
|
+
let current = startTime;
|
|
148
|
+
while (current.posix <= endTime.posix) {
|
|
149
|
+
const primary = this.primaryProp.propagate(current);
|
|
150
|
+
const secondary = this.secondaryProp.propagate(current);
|
|
151
|
+
const ric = RIC.fromJ2000(secondary, primary);
|
|
152
|
+
const range = ric.range;
|
|
153
|
+
if (range < minRange) {
|
|
154
|
+
minRange = range;
|
|
155
|
+
minEpoch = current;
|
|
156
|
+
}
|
|
157
|
+
current = current.roll(stepSize);
|
|
158
|
+
}
|
|
159
|
+
// Fine search using golden section optimization
|
|
160
|
+
const searchWindow = 2 * stepSize;
|
|
161
|
+
const lowerBound = Math.max(startTime.posix, minEpoch.posix - searchWindow);
|
|
162
|
+
const upperBound = Math.min(endTime.posix, minEpoch.posix + searchWindow);
|
|
163
|
+
const tcaPosix = GoldenSection.search((posix) => {
|
|
164
|
+
const epoch = new EpochUTC(posix);
|
|
165
|
+
const primary = this.primaryProp.propagate(epoch);
|
|
166
|
+
const secondary = this.secondaryProp.propagate(epoch);
|
|
167
|
+
const ric = RIC.fromJ2000(secondary, primary);
|
|
168
|
+
return ric.range;
|
|
169
|
+
}, lowerBound, upperBound, { tolerance });
|
|
170
|
+
return new EpochUTC(tcaPosix);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Creates a propagator for a space object.
|
|
174
|
+
*
|
|
175
|
+
* @param obj Space object
|
|
176
|
+
* @param useHighFidelity Whether to use high-fidelity propagation
|
|
177
|
+
* @param forceModel Optional force model for numerical propagation
|
|
178
|
+
* @returns Propagator instance
|
|
179
|
+
*/
|
|
180
|
+
createPropagator(obj, useHighFidelity, forceModel) {
|
|
181
|
+
if (obj.tle) {
|
|
182
|
+
if (useHighFidelity) {
|
|
183
|
+
// Convert TLE to state and use RK89
|
|
184
|
+
const state = obj.tle.toJ2000();
|
|
185
|
+
const fm = forceModel ?? new ForceModel().setGravity();
|
|
186
|
+
return new RungeKutta89Propagator(state, fm);
|
|
187
|
+
}
|
|
188
|
+
return new Sgp4Propagator(obj.tle);
|
|
189
|
+
}
|
|
190
|
+
else if (obj.state) {
|
|
191
|
+
if (useHighFidelity) {
|
|
192
|
+
const fm = forceModel ?? new ForceModel().setGravity();
|
|
193
|
+
return new RungeKutta89Propagator(obj.state, fm);
|
|
194
|
+
}
|
|
195
|
+
// For low-fidelity, still use RK89 but with simpler force model
|
|
196
|
+
const fm = new ForceModel().setGravity();
|
|
197
|
+
return new RungeKutta89Propagator(obj.state, fm);
|
|
198
|
+
}
|
|
199
|
+
throw new Error('Space object must have either a TLE or state vector');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Initializes covariance samples for both objects.
|
|
203
|
+
*
|
|
204
|
+
* @param useHighFidelity Whether to use high-fidelity propagation
|
|
205
|
+
* @param forceModel Optional force model
|
|
206
|
+
*/
|
|
207
|
+
initializeCovarianceSamples(useHighFidelity, forceModel) {
|
|
208
|
+
const fm = forceModel ?? new ForceModel().setGravity();
|
|
209
|
+
// Primary covariance
|
|
210
|
+
if (this.primary.tle) {
|
|
211
|
+
const state = this.primary.tle.toJ2000();
|
|
212
|
+
const covariance = this.primary.covariance ??
|
|
213
|
+
StateCovariance.fromSigmas([1.0, 1.0, 1.0, 0.001, 0.001, 0.001], CovarianceFrame.RIC);
|
|
214
|
+
this.primaryCovSample = new CovarianceSample(state, covariance, this.primary.tle, fm, fm);
|
|
215
|
+
}
|
|
216
|
+
else if (this.primary.state && this.primary.covariance) {
|
|
217
|
+
this.primaryCovSample = new CovarianceSample(this.primary.state, this.primary.covariance, undefined, fm, fm);
|
|
218
|
+
}
|
|
219
|
+
// Secondary covariance
|
|
220
|
+
if (this.secondary.tle) {
|
|
221
|
+
const state = this.secondary.tle.toJ2000();
|
|
222
|
+
const covariance = this.secondary.covariance ??
|
|
223
|
+
StateCovariance.fromSigmas([1.0, 1.0, 1.0, 0.001, 0.001, 0.001], CovarianceFrame.RIC);
|
|
224
|
+
this.secondaryCovSample = new CovarianceSample(state, covariance, this.secondary.tle, fm, fm);
|
|
225
|
+
}
|
|
226
|
+
else if (this.secondary.state && this.secondary.covariance) {
|
|
227
|
+
this.secondaryCovSample = new CovarianceSample(this.secondary.state, this.secondary.covariance, undefined, fm, fm);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Transforms ECI covariance to RIC frame.
|
|
232
|
+
*
|
|
233
|
+
* @param covariance ECI covariance
|
|
234
|
+
* @param state State vector for RIC frame definition
|
|
235
|
+
* @returns RIC covariance
|
|
236
|
+
*/
|
|
237
|
+
transformCovarianceToRIC(covariance, state) {
|
|
238
|
+
// Create RIC transformation matrix (3x3)
|
|
239
|
+
const ricMatrix = this.createRICTransformMatrix(state.position, state.velocity);
|
|
240
|
+
// Build 6x6 transformation matrix (block diagonal with 3x3 rotation)
|
|
241
|
+
const transform = this.build6x6Transform(ricMatrix);
|
|
242
|
+
// Transform covariance: C_ric = T * C_eci * T^T
|
|
243
|
+
const covRIC = transform.multiply(covariance.matrix).multiply(transform.transpose());
|
|
244
|
+
return new StateCovariance(covRIC, CovarianceFrame.RIC);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Creates the 3x3 RIC transformation matrix.
|
|
248
|
+
*
|
|
249
|
+
* @param position Position vector
|
|
250
|
+
* @param velocity Velocity vector
|
|
251
|
+
* @returns 3x3 RIC transformation matrix
|
|
252
|
+
*/
|
|
253
|
+
createRICTransformMatrix(position, velocity) {
|
|
254
|
+
const ru = position.normalize();
|
|
255
|
+
const cu = position.cross(velocity).normalize();
|
|
256
|
+
const iu = cu.cross(ru).normalize();
|
|
257
|
+
return new Matrix([
|
|
258
|
+
[ru.x, ru.y, ru.z],
|
|
259
|
+
[iu.x, iu.y, iu.z],
|
|
260
|
+
[cu.x, cu.y, cu.z],
|
|
261
|
+
]);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Builds a 6x6 transformation matrix from a 3x3 rotation matrix.
|
|
265
|
+
*
|
|
266
|
+
* @param rot 3x3 rotation matrix
|
|
267
|
+
* @returns 6x6 transformation matrix
|
|
268
|
+
*/
|
|
269
|
+
build6x6Transform(rot) {
|
|
270
|
+
const elements = [
|
|
271
|
+
[rot.elements[0][0], rot.elements[0][1], rot.elements[0][2], 0, 0, 0],
|
|
272
|
+
[rot.elements[1][0], rot.elements[1][1], rot.elements[1][2], 0, 0, 0],
|
|
273
|
+
[rot.elements[2][0], rot.elements[2][1], rot.elements[2][2], 0, 0, 0],
|
|
274
|
+
[0, 0, 0, rot.elements[0][0], rot.elements[0][1], rot.elements[0][2]],
|
|
275
|
+
[0, 0, 0, rot.elements[1][0], rot.elements[1][1], rot.elements[1][2]],
|
|
276
|
+
[0, 0, 0, rot.elements[2][0], rot.elements[2][1], rot.elements[2][2]],
|
|
277
|
+
];
|
|
278
|
+
return new Matrix(elements);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=ConjunctionAssessment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConjunctionAssessment.js","sourceRoot":"","sources":["../../src/conjunction/ConjunctionAssessment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Theodore Kruczek
|
|
3
|
+
* @license AGPL-3.0-or-later
|
|
4
|
+
* @copyright (c) 2025 Kruczek Labs LLC
|
|
5
|
+
*
|
|
6
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
7
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
8
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
11
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
* See the GNU Affero General Public License for more details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
15
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
import type { EpochUTC } from '../time/EpochUTC.js';
|
|
18
|
+
import type { J2000 } from '../coordinate/J2000.js';
|
|
19
|
+
import type { RIC } from '../coordinate/RIC.js';
|
|
20
|
+
import type { StateCovariance } from '../covariance/StateCovariance.js';
|
|
21
|
+
import type { Kilometers, KilometersPerSecond } from '../main.js';
|
|
22
|
+
/**
|
|
23
|
+
* Represents the result of a conjunction assessment between two space objects.
|
|
24
|
+
* Contains all relevant information about the close approach event.
|
|
25
|
+
*/
|
|
26
|
+
export declare class ConjunctionEvent {
|
|
27
|
+
/** Time of Closest Approach (TCA) */
|
|
28
|
+
tca: EpochUTC;
|
|
29
|
+
/** Primary object state at TCA in J2000 frame */
|
|
30
|
+
primaryState: J2000;
|
|
31
|
+
/** Secondary object state at TCA in J2000 frame */
|
|
32
|
+
secondaryState: J2000;
|
|
33
|
+
/** Relative state in RIC frame (relative to primary) */
|
|
34
|
+
relativeState: RIC;
|
|
35
|
+
/** Total miss distance at TCA (km) */
|
|
36
|
+
missDistance: Kilometers;
|
|
37
|
+
/** Radial component of miss distance (km) */
|
|
38
|
+
radialDistance: Kilometers;
|
|
39
|
+
/** Intrack component of miss distance (km) */
|
|
40
|
+
intrackDistance: Kilometers;
|
|
41
|
+
/** Crosstrack component of miss distance (km) */
|
|
42
|
+
crosstrackDistance: Kilometers;
|
|
43
|
+
/** Relative velocity magnitude at TCA (km/s) */
|
|
44
|
+
relativeVelocity: KilometersPerSecond;
|
|
45
|
+
/** Combined position covariance matrix in RIC frame (optional) */
|
|
46
|
+
combinedCovariance?: StateCovariance | undefined;
|
|
47
|
+
/** Probability of collision (optional, 0-1) */
|
|
48
|
+
probabilityOfCollision?: number | undefined;
|
|
49
|
+
/** Hard body radius for primary object (km, optional) */
|
|
50
|
+
primaryRadius?: Kilometers | undefined;
|
|
51
|
+
/** Hard body radius for secondary object (km, optional) */
|
|
52
|
+
secondaryRadius?: Kilometers | undefined;
|
|
53
|
+
constructor(
|
|
54
|
+
/** Time of Closest Approach (TCA) */
|
|
55
|
+
tca: EpochUTC,
|
|
56
|
+
/** Primary object state at TCA in J2000 frame */
|
|
57
|
+
primaryState: J2000,
|
|
58
|
+
/** Secondary object state at TCA in J2000 frame */
|
|
59
|
+
secondaryState: J2000,
|
|
60
|
+
/** Relative state in RIC frame (relative to primary) */
|
|
61
|
+
relativeState: RIC,
|
|
62
|
+
/** Total miss distance at TCA (km) */
|
|
63
|
+
missDistance: Kilometers,
|
|
64
|
+
/** Radial component of miss distance (km) */
|
|
65
|
+
radialDistance: Kilometers,
|
|
66
|
+
/** Intrack component of miss distance (km) */
|
|
67
|
+
intrackDistance: Kilometers,
|
|
68
|
+
/** Crosstrack component of miss distance (km) */
|
|
69
|
+
crosstrackDistance: Kilometers,
|
|
70
|
+
/** Relative velocity magnitude at TCA (km/s) */
|
|
71
|
+
relativeVelocity: KilometersPerSecond,
|
|
72
|
+
/** Combined position covariance matrix in RIC frame (optional) */
|
|
73
|
+
combinedCovariance?: StateCovariance | undefined,
|
|
74
|
+
/** Probability of collision (optional, 0-1) */
|
|
75
|
+
probabilityOfCollision?: number | undefined,
|
|
76
|
+
/** Hard body radius for primary object (km, optional) */
|
|
77
|
+
primaryRadius?: Kilometers | undefined,
|
|
78
|
+
/** Hard body radius for secondary object (km, optional) */
|
|
79
|
+
secondaryRadius?: Kilometers | undefined);
|
|
80
|
+
/**
|
|
81
|
+
* Returns a formatted string representation of the conjunction event.
|
|
82
|
+
* @returns A multi-line string with conjunction details.
|
|
83
|
+
*/
|
|
84
|
+
toString(): string;
|
|
85
|
+
/**
|
|
86
|
+
* Checks if this is a high-risk conjunction based on miss distance and Pc.
|
|
87
|
+
* @param distanceThreshold Miss distance threshold in km (default: 1.0 km)
|
|
88
|
+
* @param pcThreshold Probability of collision threshold (default: 1e-4)
|
|
89
|
+
* @returns True if the conjunction exceeds risk thresholds.
|
|
90
|
+
*/
|
|
91
|
+
isHighRisk(distanceThreshold?: Kilometers, pcThreshold?: number): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Gets the Mahalanobis distance if covariance is available.
|
|
94
|
+
* This is the miss distance normalized by the combined covariance.
|
|
95
|
+
* @returns The Mahalanobis distance (unitless), or undefined if no covariance.
|
|
96
|
+
*/
|
|
97
|
+
getMahalanobisDistance(): number | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Extracts the 3x3 position covariance from a 6x6 state covariance matrix.
|
|
100
|
+
* @param stateCov 6x6 state covariance matrix
|
|
101
|
+
* @returns 3x3 position covariance matrix
|
|
102
|
+
*/
|
|
103
|
+
private extractPositionCovariance;
|
|
104
|
+
}
|