ootk 5.1.1 → 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/README.md +18 -0
- package/dist/body/Celestial.d.ts +1 -1
- package/dist/body/Celestial.js +1 -1
- package/dist/body/Celestial.js.map +1 -1
- package/dist/body/Earth.d.ts +3 -3
- package/dist/body/Earth.js +1 -1
- 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 +1 -1
- package/dist/body/PrecessionAngles.d.ts +1 -1
- package/dist/body/Sun.d.ts +1 -1
- package/dist/body/Sun.js +2 -2
- package/dist/body/Sun.js.map +1 -1
- package/dist/body/index.d.ts +4 -4
- package/dist/body/index.js +4 -4
- 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 +6 -6
- package/dist/coordinate/ClassicalElements.js +6 -6
- package/dist/coordinate/ClassicalElements.js.map +1 -1
- package/dist/coordinate/EquinoctialElements.d.ts +4 -4
- package/dist/coordinate/EquinoctialElements.js +3 -3
- package/dist/coordinate/EquinoctialElements.js.map +1 -1
- package/dist/coordinate/FormatTle.d.ts +1 -1
- package/dist/coordinate/FormatTle.js +1 -1
- package/dist/coordinate/FormatTle.js.map +1 -1
- package/dist/coordinate/Geodetic.d.ts +3 -3
- package/dist/coordinate/Geodetic.js +6 -6
- package/dist/coordinate/Geodetic.js.map +1 -1
- package/dist/coordinate/Hill.d.ts +3 -3
- package/dist/coordinate/Hill.js +2 -2
- package/dist/coordinate/Hill.js.map +1 -1
- package/dist/coordinate/ITRF.d.ts +4 -4
- package/dist/coordinate/ITRF.js +4 -4
- package/dist/coordinate/ITRF.js.map +1 -1
- package/dist/coordinate/J2000.d.ts +4 -4
- package/dist/coordinate/J2000.js +4 -4
- package/dist/coordinate/J2000.js.map +1 -1
- package/dist/coordinate/RIC.d.ts +3 -3
- package/dist/coordinate/RIC.js +2 -2
- package/dist/coordinate/RIC.js.map +1 -1
- package/dist/coordinate/RelativeState.d.ts +4 -4
- package/dist/coordinate/RelativeState.js +1 -1
- package/dist/coordinate/RelativeState.js.map +1 -1
- package/dist/coordinate/StateVector.d.ts +1 -1
- package/dist/coordinate/StateVector.js +1 -1
- package/dist/coordinate/StateVector.js.map +1 -1
- package/dist/coordinate/TEME.d.ts +3 -3
- package/dist/coordinate/TEME.js +3 -3
- package/dist/coordinate/TEME.js.map +1 -1
- package/dist/coordinate/Tle.d.ts +4 -4
- package/dist/coordinate/Tle.js +8 -8
- 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/covariance/CovarianceSample.d.ts +4 -4
- package/dist/covariance/CovarianceSample.js +4 -4
- package/dist/covariance/CovarianceSample.js.map +1 -1
- package/dist/covariance/StateCovariance.d.ts +1 -1
- package/dist/covariance/StateCovariance.js +1 -1
- 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 +3 -3
- package/dist/data/DataHandler.js +4 -4
- package/dist/data/DataHandler.js.map +1 -1
- package/dist/data/values/Egm96Data.js +2 -2
- package/dist/data/values/Egm96Data.js.map +1 -1
- package/dist/data/values/HpAtmosphereData.d.ts +1 -1
- package/dist/data/values/HpAtmosphereData.js +2 -2
- package/dist/data/values/HpAtmosphereData.js.map +1 -1
- package/dist/data/values/HpAtmosphereResult.d.ts +1 -1
- package/dist/data/values/Iau1980Data.js +1 -1
- package/dist/data/values/Iau1980Data.js.map +1 -1
- package/dist/data/values/LeapSecondData.d.ts +1 -1
- package/dist/data/values/LeapSecondData.js +1 -1
- package/dist/data/values/LeapSecondData.js.map +1 -1
- package/dist/data/values/egm96.d.ts +1 -1
- package/dist/data/values/hpAtmosphere.d.ts +1 -1
- package/dist/data/values/iau1980.d.ts +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 +2 -2
- package/dist/force/AtmosphericDrag.js +1 -1
- package/dist/force/AtmosphericDrag.js.map +1 -1
- package/dist/force/EarthGravity.d.ts +2 -2
- package/dist/force/EarthGravity.js +1 -1
- package/dist/force/EarthGravity.js.map +1 -1
- package/dist/force/Force.d.ts +2 -2
- package/dist/force/Force.js +0 -9
- package/dist/force/Force.js.map +1 -1
- package/dist/force/ForceModel.d.ts +2 -2
- package/dist/force/ForceModel.js +6 -6
- package/dist/force/ForceModel.js.map +1 -1
- package/dist/force/Gravity.d.ts +2 -2
- package/dist/force/Gravity.js +1 -1
- package/dist/force/Gravity.js.map +1 -1
- package/dist/force/SolarRadiationPressure.d.ts +2 -2
- package/dist/force/SolarRadiationPressure.js +3 -3
- package/dist/force/SolarRadiationPressure.js.map +1 -1
- package/dist/force/ThirdBodyGravity.d.ts +2 -2
- package/dist/force/ThirdBodyGravity.js +1 -1
- package/dist/force/ThirdBodyGravity.js.map +1 -1
- package/dist/force/Thrust.d.ts +2 -2
- package/dist/force/Thrust.js +1 -1
- 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 +1 -1
- package/dist/interfaces/ClassicalElementsParams.d.ts +1 -1
- package/dist/interfaces/EquinoctialElementsParams.d.ts +1 -1
- package/dist/interfaces/GroundPositionParams.d.ts +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 +1 -1
- package/dist/interpolator/ChebyshevCoefficients.js +1 -1
- package/dist/interpolator/ChebyshevCoefficients.js.map +1 -1
- package/dist/interpolator/ChebyshevInterpolator.d.ts +3 -3
- package/dist/interpolator/ChebyshevInterpolator.js +2 -2
- package/dist/interpolator/ChebyshevInterpolator.js.map +1 -1
- package/dist/interpolator/CubicSpline.d.ts +1 -1
- package/dist/interpolator/CubicSplineInterpolator.d.ts +3 -3
- package/dist/interpolator/CubicSplineInterpolator.js +3 -3
- package/dist/interpolator/CubicSplineInterpolator.js.map +1 -1
- package/dist/interpolator/FieldInterpolator.d.ts +2 -2
- package/dist/interpolator/FieldInterpolator.js +1 -11
- package/dist/interpolator/FieldInterpolator.js.map +1 -1
- package/dist/interpolator/Interpolator.d.ts +1 -1
- package/dist/interpolator/Interpolator.js +1 -1
- package/dist/interpolator/Interpolator.js.map +1 -1
- package/dist/interpolator/LagrangeInterpolator.d.ts +2 -2
- package/dist/interpolator/LagrangeInterpolator.js +2 -2
- package/dist/interpolator/LagrangeInterpolator.js.map +1 -1
- package/dist/interpolator/StateInterpolator.d.ts +3 -3
- package/dist/interpolator/StateInterpolator.js +1 -9
- package/dist/interpolator/StateInterpolator.js.map +1 -1
- package/dist/interpolator/VerletBlendInterpolator.d.ts +4 -4
- package/dist/interpolator/VerletBlendInterpolator.js +4 -4
- package/dist/interpolator/VerletBlendInterpolator.js.map +1 -1
- package/dist/main.d.ts +19 -19
- package/dist/main.js +20 -19
- package/dist/main.js.map +1 -1
- package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +2 -2
- package/dist/maneuver/TwoBurnOrbitTransfer.js +2 -2
- package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -1
- package/dist/maneuver/Waypoint.d.ts +4 -4
- package/dist/maneuver/Waypoint.js +6 -6
- package/dist/maneuver/Waypoint.js.map +1 -1
- package/dist/objects/BaseObject.d.ts +2 -2
- package/dist/objects/BaseObject.js +1 -1
- package/dist/objects/BaseObject.js.map +1 -1
- package/dist/objects/DetailedSatellite.d.ts +3 -3
- package/dist/objects/DetailedSatellite.js +3 -3
- package/dist/objects/DetailedSatellite.js.map +1 -1
- package/dist/objects/DetailedSensor.d.ts +4 -4
- package/dist/objects/DetailedSensor.js +1 -1
- package/dist/objects/DetailedSensor.js.map +1 -1
- package/dist/objects/GroundObject.d.ts +3 -3
- package/dist/objects/GroundObject.js +2 -2
- package/dist/objects/GroundObject.js.map +1 -1
- package/dist/objects/LandObject.d.ts +2 -2
- package/dist/objects/LandObject.js +1 -1
- package/dist/objects/LandObject.js.map +1 -1
- package/dist/objects/Marker.d.ts +1 -1
- package/dist/objects/Marker.js +1 -1
- 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 +11 -11
- package/dist/objects/Satellite.js +11 -11
- package/dist/objects/Satellite.js.map +1 -1
- package/dist/objects/Sensor.d.ts +5 -5
- package/dist/objects/Sensor.js +4 -4
- package/dist/objects/Sensor.js.map +1 -1
- package/dist/objects/Star.d.ts +2 -2
- package/dist/objects/Star.js +2 -2
- 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 +10 -10
- package/dist/observation/Observation.js +0 -51
- package/dist/observation/Observation.js.map +1 -1
- package/dist/observation/ObservationOptical.d.ts +5 -5
- package/dist/observation/ObservationOptical.js +3 -3
- package/dist/observation/ObservationOptical.js.map +1 -1
- package/dist/observation/ObservationRadar.d.ts +5 -5
- package/dist/observation/ObservationRadar.js +3 -3
- package/dist/observation/ObservationRadar.js.map +1 -1
- package/dist/observation/ObservationUtils.d.ts +1 -1
- package/dist/observation/ObservationUtils.js +1 -1
- package/dist/observation/ObservationUtils.js.map +1 -1
- package/dist/observation/PropagatorPairs.d.ts +1 -1
- package/dist/observation/RAE.d.ts +5 -5
- package/dist/observation/RAE.js +5 -5
- package/dist/observation/RAE.js.map +1 -1
- package/dist/observation/RadecGeocentric.d.ts +5 -5
- package/dist/observation/RadecGeocentric.js +4 -4
- package/dist/observation/RadecGeocentric.js.map +1 -1
- package/dist/observation/RadecTopocentric.d.ts +5 -5
- package/dist/observation/RadecTopocentric.js +8 -6
- package/dist/observation/RadecTopocentric.js.map +1 -1
- package/dist/observation/index.d.ts +4 -4
- package/dist/observation/index.js +4 -4
- package/dist/observation/index.js.map +1 -1
- package/dist/operations/BoxMuller.d.ts +1 -1
- package/dist/operations/BoxMuller.js +1 -1
- package/dist/operations/BoxMuller.js.map +1 -1
- package/dist/operations/EulerAngles.d.ts +1 -1
- package/dist/operations/EulerAngles.js +1 -1
- package/dist/operations/EulerAngles.js.map +1 -1
- package/dist/operations/Matrix.d.ts +1 -1
- package/dist/operations/Matrix.js +1 -1
- package/dist/operations/Matrix.js.map +1 -1
- package/dist/operations/Quaternion.d.ts +1 -1
- package/dist/operations/Quaternion.js +1 -1
- package/dist/operations/Quaternion.js.map +1 -1
- package/dist/operations/RandomGaussianSource.d.ts +1 -1
- package/dist/operations/RandomGaussianSource.js +2 -2
- package/dist/operations/RandomGaussianSource.js.map +1 -1
- package/dist/operations/Vector.d.ts +1 -1
- package/dist/operations/Vector.js +1 -1
- package/dist/operations/Vector.js.map +1 -1
- package/dist/operations/Vector3D.d.ts +4 -3
- package/dist/operations/Vector3D.js +4 -3
- 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 +4 -4
- package/dist/operations/operations.js +4 -4
- package/dist/operations/operations.js.map +1 -1
- package/dist/optimize/ChebyshevCompressor.d.ts +2 -2
- package/dist/optimize/ChebyshevCompressor.js +3 -3
- package/dist/optimize/ChebyshevCompressor.js.map +1 -1
- package/dist/optimize/DownhillSimplex.d.ts +1 -1
- package/dist/optimize/DownhillSimplex.js +1 -1
- package/dist/optimize/DownhillSimplex.js.map +1 -1
- package/dist/optimize/GoldenSection.d.ts +1 -1
- package/dist/optimize/PolynomialRegression.d.ts +1 -1
- package/dist/optimize/PolynomialRegression.js +3 -3
- package/dist/optimize/PolynomialRegression.js.map +1 -1
- package/dist/optimize/SimplexEntry.js +1 -1
- package/dist/optimize/SimplexEntry.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +4 -4
- package/dist/orbit_determination/BatchLeastSquaresOD.js +7 -7
- package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -1
- package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +2 -2
- 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 +1 -1
- package/dist/orbit_determination/GibbsIOD.js +3 -3
- package/dist/orbit_determination/GibbsIOD.js.map +1 -1
- package/dist/orbit_determination/GoodingIOD.d.ts +57 -7
- package/dist/orbit_determination/GoodingIOD.js +224 -34
- package/dist/orbit_determination/GoodingIOD.js.map +1 -1
- package/dist/orbit_determination/HerrickGibbsIOD.d.ts +1 -1
- package/dist/orbit_determination/HerrickGibbsIOD.js +1 -1
- package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -1
- package/dist/orbit_determination/LambertIOD.d.ts +1 -1
- package/dist/orbit_determination/LambertIOD.js +1 -1
- package/dist/orbit_determination/LambertIOD.js.map +1 -1
- package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +2 -2
- package/dist/orbit_determination/ModifiedGoodingIOD.js +7 -7
- 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 +1 -1
- package/dist/propagator/DormandPrince54Propagator.js +1 -1
- package/dist/propagator/DormandPrince54Propagator.js.map +1 -1
- package/dist/propagator/KeplerPropagator.d.ts +5 -5
- package/dist/propagator/KeplerPropagator.js +5 -6
- package/dist/propagator/KeplerPropagator.js.map +1 -1
- package/dist/propagator/Propagator.d.ts +4 -4
- package/dist/propagator/Propagator.js +4 -4
- package/dist/propagator/Propagator.js.map +1 -1
- package/dist/propagator/RkCheckpoint.d.ts +1 -1
- package/dist/propagator/RkResult.d.ts +1 -1
- package/dist/propagator/RungeKutta4Propagator.d.ts +5 -5
- package/dist/propagator/RungeKutta4Propagator.js +4 -4
- package/dist/propagator/RungeKutta4Propagator.js.map +1 -1
- package/dist/propagator/RungeKutta89Propagator.d.ts +1 -1
- package/dist/propagator/RungeKutta89Propagator.js +1 -1
- package/dist/propagator/RungeKutta89Propagator.js.map +1 -1
- package/dist/propagator/RungeKuttaAdaptive.d.ts +5 -5
- package/dist/propagator/RungeKuttaAdaptive.js +51 -8
- package/dist/propagator/RungeKuttaAdaptive.js.map +1 -1
- package/dist/propagator/Sgp4Propagator.d.ts +6 -6
- package/dist/propagator/Sgp4Propagator.js +3 -3
- 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 +1 -1
- package/dist/sgp4/index.js +1 -1
- package/dist/sgp4/index.js.map +1 -1
- package/dist/sgp4/sgp4.d.ts +2 -2
- package/dist/sgp4/sgp4.js +4 -4
- package/dist/sgp4/sgp4.js.map +1 -1
- package/dist/smoothing/ExponentialSmoothing.d.ts +1 -1
- package/dist/time/Epoch.d.ts +1 -1
- package/dist/time/Epoch.js +1 -1
- package/dist/time/Epoch.js.map +1 -1
- package/dist/time/EpochGPS.d.ts +2 -2
- package/dist/time/EpochGPS.js +2 -2
- package/dist/time/EpochGPS.js.map +1 -1
- package/dist/time/EpochTAI.d.ts +1 -1
- package/dist/time/EpochTAI.js +1 -1
- package/dist/time/EpochTAI.js.map +1 -1
- package/dist/time/EpochTDB.d.ts +1 -1
- package/dist/time/EpochTDB.js +1 -1
- package/dist/time/EpochTDB.js.map +1 -1
- package/dist/time/EpochTT.d.ts +1 -1
- package/dist/time/EpochTT.js +1 -1
- package/dist/time/EpochTT.js.map +1 -1
- package/dist/time/EpochUTC.d.ts +6 -6
- package/dist/time/EpochUTC.js +8 -8
- package/dist/time/EpochUTC.js.map +1 -1
- package/dist/time/EpochWindow.d.ts +1 -1
- package/dist/time/TimeStamped.d.ts +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/conversions.d.ts +1 -1
- package/dist/transforms/conversions.js +1 -1
- 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 +4 -4
- package/src/body/Celestial.ts +1 -1
- package/src/body/Earth.ts +3 -3
- package/src/body/Moon.ts +7 -7
- package/src/body/NutationAngles.ts +1 -1
- package/src/body/PrecessionAngles.ts +1 -1
- package/src/body/Sun.ts +3 -3
- package/src/body/index.ts +4 -4
- 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 +9 -9
- package/src/coordinate/EquinoctialElements.ts +6 -6
- package/src/coordinate/FormatTle.ts +1 -1
- package/src/coordinate/Geodetic.ts +7 -7
- package/src/coordinate/Hill.ts +3 -3
- package/src/coordinate/ITRF.ts +5 -5
- package/src/coordinate/J2000.ts +6 -6
- package/src/coordinate/RIC.ts +3 -3
- package/src/coordinate/RelativeState.ts +4 -4
- package/src/coordinate/StateVector.ts +1 -1
- package/src/coordinate/TEME.ts +5 -5
- package/src/coordinate/Tle.ts +8 -8
- package/src/coordinate/index.ts +13 -12
- package/src/covariance/CovarianceSample.ts +5 -5
- package/src/covariance/StateCovariance.ts +1 -1
- package/src/covariance/index.ts +3 -2
- package/src/data/DataHandler.ts +5 -5
- package/src/data/values/Egm96Data.ts +2 -2
- package/src/data/values/HpAtmosphereData.ts +2 -2
- package/src/data/values/HpAtmosphereResult.ts +1 -1
- package/src/data/values/Iau1980Data.ts +1 -1
- package/src/data/values/LeapSecondData.ts +1 -1
- package/src/data/values/egm96.ts +1 -1
- package/src/data/values/hpAtmosphere.ts +1 -1
- package/src/data/values/iau1980.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 +2 -2
- package/src/force/EarthGravity.ts +2 -2
- package/src/force/Force.ts +2 -4
- package/src/force/ForceModel.ts +8 -8
- package/src/force/Gravity.ts +2 -2
- package/src/force/SolarRadiationPressure.ts +3 -3
- package/src/force/ThirdBodyGravity.ts +2 -2
- package/src/force/Thrust.ts +2 -2
- package/src/force/index.ts +2 -1
- package/src/interfaces/BaseObjectParams.ts +1 -1
- package/src/interfaces/ClassicalElementsParams.ts +1 -1
- package/src/interfaces/EquinoctialElementsParams.ts +1 -1
- package/src/interfaces/GroundPositionParams.ts +1 -1
- 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 +1 -1
- package/src/interpolator/ChebyshevInterpolator.ts +3 -3
- package/src/interpolator/CubicSpline.ts +1 -1
- package/src/interpolator/CubicSplineInterpolator.ts +3 -3
- package/src/interpolator/FieldInterpolator.ts +2 -4
- package/src/interpolator/Interpolator.ts +1 -1
- package/src/interpolator/LagrangeInterpolator.ts +2 -2
- package/src/interpolator/StateInterpolator.ts +3 -5
- package/src/interpolator/VerletBlendInterpolator.ts +4 -4
- package/src/main.ts +21 -19
- package/src/maneuver/TwoBurnOrbitTransfer.ts +2 -2
- package/src/maneuver/Waypoint.ts +7 -7
- package/src/objects/BaseObject.ts +2 -2
- package/src/objects/DetailedSatellite.ts +3 -3
- package/src/objects/DetailedSensor.ts +4 -4
- package/src/objects/GroundObject.ts +3 -3
- package/src/objects/LandObject.ts +2 -2
- package/src/objects/Marker.ts +1 -1
- package/src/objects/RfSensor.ts +2 -2
- package/src/objects/Satellite.ts +18 -18
- package/src/objects/Sensor.ts +6 -6
- package/src/objects/Star.ts +2 -2
- package/src/objects/index.ts +11 -10
- package/src/observation/Observation.ts +10 -22
- package/src/observation/ObservationOptical.ts +6 -6
- package/src/observation/ObservationRadar.ts +6 -6
- package/src/observation/ObservationUtils.ts +1 -1
- package/src/observation/PropagatorPairs.ts +1 -1
- package/src/observation/RAE.ts +8 -8
- package/src/observation/RadecGeocentric.ts +8 -8
- package/src/observation/RadecTopocentric.ts +12 -9
- package/src/observation/index.ts +4 -4
- package/src/operations/BoxMuller.ts +1 -1
- package/src/operations/EulerAngles.ts +1 -1
- package/src/operations/Matrix.ts +1 -1
- package/src/operations/Quaternion.ts +1 -1
- package/src/operations/RandomGaussianSource.ts +2 -2
- package/src/operations/Vector.ts +1 -1
- package/src/operations/Vector3D.ts +5 -3
- package/src/operations/index.ts +5 -4
- package/src/operations/operations.ts +4 -4
- package/src/optimize/ChebyshevCompressor.ts +4 -4
- package/src/optimize/DownhillSimplex.ts +1 -1
- package/src/optimize/GoldenSection.ts +1 -1
- package/src/optimize/PolynomialRegression.ts +3 -3
- package/src/optimize/SimplexEntry.ts +1 -1
- package/src/orbit_determination/BatchLeastSquaresOD.ts +9 -9
- package/src/orbit_determination/BatchLeastSquaresResult.ts +2 -2
- package/src/orbit_determination/GaussIOD.ts +393 -0
- package/src/orbit_determination/GibbsIOD.ts +3 -3
- package/src/orbit_determination/GoodingIOD.ts +457 -159
- package/src/orbit_determination/HerrickGibbsIOD.ts +1 -1
- package/src/orbit_determination/LambertIOD.ts +1 -1
- package/src/orbit_determination/ModifiedGoodingIOD.ts +32 -21
- package/src/orbit_determination/index.ts +8 -7
- package/src/propagator/DormandPrince54Propagator.ts +1 -1
- package/src/propagator/KeplerPropagator.ts +6 -7
- package/src/propagator/Propagator.ts +5 -5
- package/src/propagator/RkCheckpoint.ts +1 -1
- package/src/propagator/RkResult.ts +1 -1
- package/src/propagator/RungeKutta4Propagator.ts +5 -5
- package/src/propagator/RungeKutta89Propagator.ts +1 -1
- package/src/propagator/RungeKuttaAdaptive.ts +60 -10
- package/src/propagator/Sgp4Propagator.ts +6 -6
- package/src/propagator/index.ts +4 -3
- package/src/sgp4/index.ts +1 -1
- package/src/sgp4/sgp4.ts +5 -5
- package/src/smoothing/ExponentialSmoothing.ts +1 -1
- package/src/time/Epoch.ts +2 -2
- package/src/time/EpochGPS.ts +4 -4
- package/src/time/EpochTAI.ts +1 -1
- package/src/time/EpochTDB.ts +1 -1
- package/src/time/EpochTT.ts +1 -1
- package/src/time/EpochUTC.ts +9 -9
- package/src/time/EpochWindow.ts +1 -1
- package/src/time/TimeStamped.ts +1 -1
- package/src/time/index.ts +9 -8
- package/src/transforms/conversions.ts +1 -1
- 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
|
@@ -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
|
+
}
|
|
@@ -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 { Matrix } from '../operations/Matrix.js';
|
|
18
|
+
/**
|
|
19
|
+
* Represents the result of a conjunction assessment between two space objects.
|
|
20
|
+
* Contains all relevant information about the close approach event.
|
|
21
|
+
*/
|
|
22
|
+
export class ConjunctionEvent {
|
|
23
|
+
tca;
|
|
24
|
+
primaryState;
|
|
25
|
+
secondaryState;
|
|
26
|
+
relativeState;
|
|
27
|
+
missDistance;
|
|
28
|
+
radialDistance;
|
|
29
|
+
intrackDistance;
|
|
30
|
+
crosstrackDistance;
|
|
31
|
+
relativeVelocity;
|
|
32
|
+
combinedCovariance;
|
|
33
|
+
probabilityOfCollision;
|
|
34
|
+
primaryRadius;
|
|
35
|
+
secondaryRadius;
|
|
36
|
+
constructor(
|
|
37
|
+
/** Time of Closest Approach (TCA) */
|
|
38
|
+
tca,
|
|
39
|
+
/** Primary object state at TCA in J2000 frame */
|
|
40
|
+
primaryState,
|
|
41
|
+
/** Secondary object state at TCA in J2000 frame */
|
|
42
|
+
secondaryState,
|
|
43
|
+
/** Relative state in RIC frame (relative to primary) */
|
|
44
|
+
relativeState,
|
|
45
|
+
/** Total miss distance at TCA (km) */
|
|
46
|
+
missDistance,
|
|
47
|
+
/** Radial component of miss distance (km) */
|
|
48
|
+
radialDistance,
|
|
49
|
+
/** Intrack component of miss distance (km) */
|
|
50
|
+
intrackDistance,
|
|
51
|
+
/** Crosstrack component of miss distance (km) */
|
|
52
|
+
crosstrackDistance,
|
|
53
|
+
/** Relative velocity magnitude at TCA (km/s) */
|
|
54
|
+
relativeVelocity,
|
|
55
|
+
/** Combined position covariance matrix in RIC frame (optional) */
|
|
56
|
+
combinedCovariance,
|
|
57
|
+
/** Probability of collision (optional, 0-1) */
|
|
58
|
+
probabilityOfCollision,
|
|
59
|
+
/** Hard body radius for primary object (km, optional) */
|
|
60
|
+
primaryRadius,
|
|
61
|
+
/** Hard body radius for secondary object (km, optional) */
|
|
62
|
+
secondaryRadius) {
|
|
63
|
+
this.tca = tca;
|
|
64
|
+
this.primaryState = primaryState;
|
|
65
|
+
this.secondaryState = secondaryState;
|
|
66
|
+
this.relativeState = relativeState;
|
|
67
|
+
this.missDistance = missDistance;
|
|
68
|
+
this.radialDistance = radialDistance;
|
|
69
|
+
this.intrackDistance = intrackDistance;
|
|
70
|
+
this.crosstrackDistance = crosstrackDistance;
|
|
71
|
+
this.relativeVelocity = relativeVelocity;
|
|
72
|
+
this.combinedCovariance = combinedCovariance;
|
|
73
|
+
this.probabilityOfCollision = probabilityOfCollision;
|
|
74
|
+
this.primaryRadius = primaryRadius;
|
|
75
|
+
this.secondaryRadius = secondaryRadius;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns a formatted string representation of the conjunction event.
|
|
79
|
+
* @returns A multi-line string with conjunction details.
|
|
80
|
+
*/
|
|
81
|
+
toString() {
|
|
82
|
+
const lines = [
|
|
83
|
+
'[Conjunction Event]',
|
|
84
|
+
` TCA: ${this.tca.toString()}`,
|
|
85
|
+
` Miss Distance: ${this.missDistance.toFixed(6)} km`,
|
|
86
|
+
` Radial: ${this.radialDistance.toFixed(6)} km`,
|
|
87
|
+
` Intrack: ${this.intrackDistance.toFixed(6)} km`,
|
|
88
|
+
` Crosstrack: ${this.crosstrackDistance.toFixed(6)} km`,
|
|
89
|
+
` Relative Velocity: ${this.relativeVelocity.toFixed(6)} km/s`,
|
|
90
|
+
];
|
|
91
|
+
if (this.probabilityOfCollision !== undefined) {
|
|
92
|
+
lines.push(` Probability of Collision: ${this.probabilityOfCollision.toExponential(6)}`);
|
|
93
|
+
}
|
|
94
|
+
if (this.primaryRadius !== undefined && this.secondaryRadius !== undefined) {
|
|
95
|
+
const combinedRadius = this.primaryRadius + this.secondaryRadius;
|
|
96
|
+
lines.push(` Combined Hard Body Radius: ${combinedRadius.toFixed(3)} km`);
|
|
97
|
+
}
|
|
98
|
+
return lines.join('\n');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Checks if this is a high-risk conjunction based on miss distance and Pc.
|
|
102
|
+
* @param distanceThreshold Miss distance threshold in km (default: 1.0 km)
|
|
103
|
+
* @param pcThreshold Probability of collision threshold (default: 1e-4)
|
|
104
|
+
* @returns True if the conjunction exceeds risk thresholds.
|
|
105
|
+
*/
|
|
106
|
+
isHighRisk(distanceThreshold = 1.0, pcThreshold = 1e-4) {
|
|
107
|
+
const distanceRisk = this.missDistance < distanceThreshold;
|
|
108
|
+
const pcRisk = this.probabilityOfCollision !== undefined && this.probabilityOfCollision > pcThreshold;
|
|
109
|
+
return distanceRisk || pcRisk;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Gets the Mahalanobis distance if covariance is available.
|
|
113
|
+
* This is the miss distance normalized by the combined covariance.
|
|
114
|
+
* @returns The Mahalanobis distance (unitless), or undefined if no covariance.
|
|
115
|
+
*/
|
|
116
|
+
getMahalanobisDistance() {
|
|
117
|
+
if (!this.combinedCovariance) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
// Extract position-only covariance (first 3x3 block)
|
|
121
|
+
const posCovariance = this.extractPositionCovariance(this.combinedCovariance.matrix);
|
|
122
|
+
const relativePosition = [
|
|
123
|
+
this.relativeState.position.x,
|
|
124
|
+
this.relativeState.position.y,
|
|
125
|
+
this.relativeState.position.z,
|
|
126
|
+
];
|
|
127
|
+
try {
|
|
128
|
+
// Compute Mahalanobis distance: sqrt(r^T * C^-1 * r)
|
|
129
|
+
const covInv = posCovariance.inverse();
|
|
130
|
+
const temp = covInv.multiplyVector(relativePosition);
|
|
131
|
+
let mahalanobis = 0;
|
|
132
|
+
for (let i = 0; i < 3; i++) {
|
|
133
|
+
mahalanobis += relativePosition[i] * temp[i];
|
|
134
|
+
}
|
|
135
|
+
return Math.sqrt(mahalanobis);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Covariance may be singular
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Extracts the 3x3 position covariance from a 6x6 state covariance matrix.
|
|
144
|
+
* @param stateCov 6x6 state covariance matrix
|
|
145
|
+
* @returns 3x3 position covariance matrix
|
|
146
|
+
*/
|
|
147
|
+
extractPositionCovariance(stateCov) {
|
|
148
|
+
const elements = [
|
|
149
|
+
[stateCov.elements[0][0], stateCov.elements[0][1], stateCov.elements[0][2]],
|
|
150
|
+
[stateCov.elements[1][0], stateCov.elements[1][1], stateCov.elements[1][2]],
|
|
151
|
+
[stateCov.elements[2][0], stateCov.elements[2][1], stateCov.elements[2][2]],
|
|
152
|
+
];
|
|
153
|
+
return new Matrix(elements);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=ConjunctionEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConjunctionEvent.js","sourceRoot":"","sources":["../../src/conjunction/ConjunctionEvent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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 { Vector3D } from '../operations/Vector3D.js';
|
|
18
|
+
import type { StateCovariance } from '../covariance/StateCovariance.js';
|
|
19
|
+
import type { Kilometers } from '../main.js';
|
|
20
|
+
/**
|
|
21
|
+
* Probability of Collision calculator using Chan's 2D method.
|
|
22
|
+
*
|
|
23
|
+
* This implementation projects the combined covariance matrix onto the
|
|
24
|
+
* encounter plane (B-plane) perpendicular to the relative velocity vector,
|
|
25
|
+
* then computes the probability that the relative position lies within
|
|
26
|
+
* the combined hard body radius.
|
|
27
|
+
*
|
|
28
|
+
* Reference: Chan, F. K. (2008). "Spacecraft Collision Probability"
|
|
29
|
+
*/
|
|
30
|
+
export declare class ProbabilityOfCollision {
|
|
31
|
+
/**
|
|
32
|
+
* Computes probability of collision using Chan's 2D method.
|
|
33
|
+
*
|
|
34
|
+
* @param relativePosition Relative position vector in RIC frame (km)
|
|
35
|
+
* @param relativeVelocity Relative velocity vector in RIC frame (km/s)
|
|
36
|
+
* @param combinedCovariance Combined position covariance in RIC frame (6x6)
|
|
37
|
+
* @param combinedRadius Combined hard body radius (km)
|
|
38
|
+
* @returns Probability of collision (0 to 1)
|
|
39
|
+
*/
|
|
40
|
+
static calculate(relativePosition: Vector3D<Kilometers>, relativeVelocity: Vector3D, combinedCovariance: StateCovariance, combinedRadius: Kilometers): number;
|
|
41
|
+
/**
|
|
42
|
+
* Calculates 2D probability of collision in the encounter plane.
|
|
43
|
+
*
|
|
44
|
+
* Uses the analytical solution for 2D Gaussian probability within a circle.
|
|
45
|
+
*
|
|
46
|
+
* @param x X-coordinate in encounter plane (km)
|
|
47
|
+
* @param y Y-coordinate in encounter plane (km)
|
|
48
|
+
* @param cov2D 2x2 covariance matrix in encounter plane
|
|
49
|
+
* @param radius Combined hard body radius (km)
|
|
50
|
+
* @returns Probability of collision (0 to 1)
|
|
51
|
+
*/
|
|
52
|
+
private static calculatePc2D;
|
|
53
|
+
/**
|
|
54
|
+
* Chan's analytical approximation for 2D Pc.
|
|
55
|
+
*
|
|
56
|
+
* Reference: Chan, F. K. (2008). "Spacecraft Collision Probability"
|
|
57
|
+
*
|
|
58
|
+
* @param mahalanobisDistance Mahalanobis distance (sqrt of d2)
|
|
59
|
+
* @param radius Combined hard body radius
|
|
60
|
+
* @param sigma1 Larger semi-axis of covariance ellipse
|
|
61
|
+
* @param sigma2 Smaller semi-axis of covariance ellipse
|
|
62
|
+
* @returns Probability of collision (0 to 1)
|
|
63
|
+
*/
|
|
64
|
+
private static chanPc2D;
|
|
65
|
+
/**
|
|
66
|
+
* Approximates the complementary error function erfc(x).
|
|
67
|
+
*
|
|
68
|
+
* Uses Abramowitz and Stegun approximation (formula 7.1.26).
|
|
69
|
+
*
|
|
70
|
+
* @param x Input value
|
|
71
|
+
* @returns erfc(x)
|
|
72
|
+
*/
|
|
73
|
+
private static approximateErfc;
|
|
74
|
+
/**
|
|
75
|
+
* Fallback 3D probability calculation for cases with very low relative velocity.
|
|
76
|
+
*
|
|
77
|
+
* Uses simple spherical approximation.
|
|
78
|
+
*
|
|
79
|
+
* @param relativePosition Relative position vector
|
|
80
|
+
* @param posCovariance 3x3 position covariance matrix
|
|
81
|
+
* @param combinedRadius Combined hard body radius
|
|
82
|
+
* @returns Probability of collision (0 to 1)
|
|
83
|
+
*/
|
|
84
|
+
private static calculate3D;
|
|
85
|
+
/**
|
|
86
|
+
* Combines two covariance matrices (primary and secondary).
|
|
87
|
+
*
|
|
88
|
+
* The combined covariance is simply the sum of the two covariances,
|
|
89
|
+
* assuming they are independent.
|
|
90
|
+
*
|
|
91
|
+
* @param primaryCov Primary object covariance
|
|
92
|
+
* @param secondaryCov Secondary object covariance
|
|
93
|
+
* @returns Combined covariance
|
|
94
|
+
*/
|
|
95
|
+
static combineCovarianceMatrices(primaryCov: StateCovariance, secondaryCov: StateCovariance): StateCovariance;
|
|
96
|
+
/**
|
|
97
|
+
* Extracts the 3x3 position covariance from a 6x6 state covariance matrix.
|
|
98
|
+
* @param stateCov 6x6 state covariance matrix
|
|
99
|
+
* @returns 3x3 position covariance matrix
|
|
100
|
+
*/
|
|
101
|
+
private static extractPositionCovariance;
|
|
102
|
+
}
|