ootk 4.0.0-0 → 4.0.0-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/CHANGELOG.md +142 -31
- package/{lib → dist}/coordinate/Hill.d.ts +17 -18
- package/{lib → dist}/coordinate/Hill.js +44 -36
- package/dist/coordinate/Hill.js.map +1 -0
- package/{lib → dist}/covariance/CovarianceSample.d.ts +6 -7
- package/{lib → dist}/covariance/CovarianceSample.js +29 -28
- package/dist/covariance/CovarianceSample.js.map +1 -0
- package/{lib → dist}/covariance/StateCovariance.d.ts +4 -3
- package/{lib → dist}/covariance/StateCovariance.js +8 -5
- package/dist/covariance/StateCovariance.js.map +1 -0
- package/{lib → dist}/force/AtmosphericDrag.d.ts +1 -2
- package/{lib → dist}/force/AtmosphericDrag.js +13 -6
- package/dist/force/AtmosphericDrag.js.map +1 -0
- package/{lib → dist}/force/EarthGravity.d.ts +1 -2
- package/{lib → dist}/force/EarthGravity.js +4 -2
- package/dist/force/EarthGravity.js.map +1 -0
- package/{lib → dist}/force/Force.d.ts +3 -2
- package/{lib → dist}/force/Force.js +3 -2
- package/dist/force/Force.js.map +1 -0
- package/{lib → dist}/force/ForceModel.d.ts +4 -5
- package/{lib → dist}/force/ForceModel.js +6 -2
- package/dist/force/ForceModel.js.map +1 -0
- package/{lib → dist}/force/Gravity.d.ts +1 -4
- package/{lib → dist}/force/Gravity.js +3 -4
- package/dist/force/Gravity.js.map +1 -0
- package/{lib → dist}/force/SolarRadiationPressure.d.ts +1 -2
- package/{lib → dist}/force/SolarRadiationPressure.js +6 -4
- package/dist/force/SolarRadiationPressure.js.map +1 -0
- package/{lib → dist}/force/ThirdBodyGravity.d.ts +1 -2
- package/{lib → dist}/force/ThirdBodyGravity.js +4 -3
- package/dist/force/ThirdBodyGravity.js.map +1 -0
- package/{lib → dist}/force/Thrust.d.ts +10 -11
- package/{lib → dist}/force/Thrust.js +8 -3
- package/dist/force/Thrust.js.map +1 -0
- package/dist/interfaces/RfSensorParams.d.ts +28 -0
- package/dist/interfaces/RfSensorParams.js +24 -0
- package/dist/interfaces/RfSensorParams.js.map +1 -0
- package/dist/interfaces/index.d.ts +1 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/{lib → dist}/interpolator/ChebyshevCoefficients.d.ts +11 -15
- package/{lib → dist}/interpolator/ChebyshevCoefficients.js +19 -15
- package/dist/interpolator/ChebyshevCoefficients.js.map +1 -0
- package/{lib → dist}/interpolator/ChebyshevInterpolator.d.ts +1 -2
- package/{lib → dist}/interpolator/ChebyshevInterpolator.js +2 -2
- package/dist/interpolator/ChebyshevInterpolator.js.map +1 -0
- package/{lib → dist}/interpolator/CubicSpline.d.ts +8 -9
- package/{lib → dist}/interpolator/CubicSpline.js +10 -5
- package/dist/interpolator/CubicSpline.js.map +1 -0
- package/{lib → dist}/interpolator/CubicSplineInterpolator.d.ts +2 -3
- package/{lib → dist}/interpolator/CubicSplineInterpolator.js +6 -4
- package/dist/interpolator/CubicSplineInterpolator.js.map +1 -0
- package/{lib → dist}/interpolator/FieldInterpolator.d.ts +7 -5
- package/{lib → dist}/interpolator/FieldInterpolator.js +6 -3
- package/dist/interpolator/FieldInterpolator.js.map +1 -0
- package/{lib → dist}/interpolator/Interpolator.d.ts +1 -2
- package/{lib → dist}/interpolator/Interpolator.js +1 -2
- package/dist/interpolator/Interpolator.js.map +1 -0
- package/{lib → dist}/interpolator/LagrangeInterpolator.d.ts +8 -10
- package/{lib → dist}/interpolator/LagrangeInterpolator.js +32 -29
- package/dist/interpolator/LagrangeInterpolator.js.map +1 -0
- package/{lib → dist}/interpolator/StateInterpolator.d.ts +2 -4
- package/{lib → dist}/interpolator/StateInterpolator.js +2 -4
- package/dist/interpolator/StateInterpolator.js.map +1 -0
- package/{lib → dist}/interpolator/VerletBlendInterpolator.d.ts +4 -5
- package/{lib → dist}/interpolator/VerletBlendInterpolator.js +16 -13
- package/dist/interpolator/VerletBlendInterpolator.js.map +1 -0
- package/{lib/ootk.d.ts → dist/main.d.ts} +4 -2
- package/dist/main.js +32 -0
- package/dist/main.js.map +1 -0
- package/{lib → dist}/maneuver/TwoBurnOrbitTransfer.d.ts +5 -7
- package/{lib → dist}/maneuver/TwoBurnOrbitTransfer.js +6 -3
- package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -0
- package/{lib → dist}/maneuver/Waypoint.d.ts +30 -5
- package/{lib → dist}/maneuver/Waypoint.js +31 -4
- package/dist/maneuver/Waypoint.js.map +1 -0
- package/{lib → dist}/objects/DetailedSatellite.d.ts +7 -31
- package/{lib → dist}/objects/DetailedSatellite.js +68 -72
- package/dist/objects/DetailedSatellite.js.map +1 -0
- package/{lib → dist}/objects/DetailedSensor.d.ts +1 -2
- package/{lib → dist}/objects/DetailedSensor.js +22 -2
- package/dist/objects/DetailedSensor.js.map +1 -0
- package/{lib → dist}/objects/LandObject.d.ts +3 -6
- package/{lib → dist}/objects/LandObject.js +9 -3
- package/dist/objects/LandObject.js.map +1 -0
- package/{lib → dist}/objects/Marker.d.ts +1 -2
- package/{lib → dist}/objects/Marker.js +1 -2
- package/dist/objects/Marker.js.map +1 -0
- package/dist/objects/RfSensor.d.ts +41 -0
- package/dist/objects/RfSensor.js +67 -0
- package/dist/objects/RfSensor.js.map +1 -0
- package/{lib → dist}/objects/index.d.ts +1 -1
- package/{lib → dist}/objects/index.js +1 -1
- package/dist/objects/index.js.map +1 -0
- package/{lib → dist}/observation/Observation.d.ts +42 -4
- package/{lib → dist}/observation/Observation.js +41 -10
- package/dist/observation/Observation.js.map +1 -0
- package/{lib → dist}/observation/ObservationOptical.d.ts +7 -6
- package/{lib → dist}/observation/ObservationOptical.js +19 -15
- package/dist/observation/ObservationOptical.js.map +1 -0
- package/{lib → dist}/observation/ObservationRadar.d.ts +7 -4
- package/{lib → dist}/observation/ObservationRadar.js +25 -19
- package/dist/observation/ObservationRadar.js.map +1 -0
- package/{lib → dist}/observation/ObservationUtils.d.ts +1 -2
- package/{lib → dist}/observation/ObservationUtils.js +1 -2
- package/dist/observation/ObservationUtils.js.map +1 -0
- package/{lib → dist}/observation/PropagatorPairs.d.ts +3 -2
- package/{lib → dist}/observation/PropagatorPairs.js +7 -4
- package/dist/observation/PropagatorPairs.js.map +1 -0
- package/{lib → dist}/operations/BoxMuller.d.ts +7 -2
- package/{lib → dist}/operations/BoxMuller.js +15 -4
- package/dist/operations/BoxMuller.js.map +1 -0
- package/dist/operations/EulerAngles.d.ts +105 -0
- package/{lib → dist}/operations/EulerAngles.js +72 -22
- package/dist/operations/EulerAngles.js.map +1 -0
- package/{lib → dist}/operations/Quaternion.d.ts +5 -6
- package/{lib → dist}/operations/Quaternion.js +12 -9
- package/dist/operations/Quaternion.js.map +1 -0
- package/{lib → dist}/operations/RandomGaussianSource.d.ts +1 -2
- package/{lib → dist}/operations/RandomGaussianSource.js +3 -3
- package/dist/operations/RandomGaussianSource.js.map +1 -0
- package/{lib → dist}/optimize/ChebyshevCompressor.d.ts +3 -2
- package/{lib → dist}/optimize/ChebyshevCompressor.js +7 -4
- package/dist/optimize/ChebyshevCompressor.js.map +1 -0
- package/{lib → dist}/optimize/DownhillSimplex.d.ts +16 -2
- package/{lib → dist}/optimize/DownhillSimplex.js +16 -2
- package/dist/optimize/DownhillSimplex.js.map +1 -0
- package/{lib → dist}/optimize/GoldenSection.d.ts +9 -3
- package/{lib → dist}/optimize/GoldenSection.js +9 -3
- package/dist/optimize/GoldenSection.js.map +1 -0
- package/{lib → dist}/optimize/PolynomialRegression.d.ts +14 -2
- package/{lib → dist}/optimize/PolynomialRegression.js +19 -2
- package/dist/optimize/PolynomialRegression.js.map +1 -0
- package/{lib → dist}/optimize/PolynomicalRegressionResult.d.ts +5 -2
- package/{lib → dist}/optimize/PolynomicalRegressionResult.js +8 -2
- package/dist/optimize/PolynomicalRegressionResult.js.map +1 -0
- package/{lib → dist}/optimize/SimpleLinearRegression.d.ts +5 -2
- package/{lib → dist}/optimize/SimpleLinearRegression.js +12 -7
- package/dist/optimize/SimpleLinearRegression.js.map +1 -0
- package/{lib → dist}/optimize/SimplexEntry.d.ts +1 -2
- package/{lib → dist}/optimize/SimplexEntry.js +5 -2
- package/dist/optimize/SimplexEntry.js.map +1 -0
- package/{lib → dist}/orbit_determination/BatchLeastSquaresOD.d.ts +14 -3
- package/{lib → dist}/orbit_determination/BatchLeastSquaresOD.js +29 -4
- package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -0
- package/{lib → dist}/orbit_determination/BatchLeastSquaresResult.d.ts +4 -2
- package/{lib → dist}/orbit_determination/BatchLeastSquaresResult.js +7 -2
- package/dist/orbit_determination/BatchLeastSquaresResult.js.map +1 -0
- package/{lib → dist}/orbit_determination/GibbsIOD.d.ts +9 -4
- package/{lib → dist}/orbit_determination/GibbsIOD.js +11 -5
- package/dist/orbit_determination/GibbsIOD.js.map +1 -0
- package/{lib → dist}/orbit_determination/GoodingIOD.d.ts +21 -22
- package/{lib → dist}/orbit_determination/GoodingIOD.js +74 -71
- package/dist/orbit_determination/GoodingIOD.js.map +1 -0
- package/{lib → dist}/orbit_determination/HerrickGibbsIOD.d.ts +4 -4
- package/{lib → dist}/orbit_determination/HerrickGibbsIOD.js +3 -2
- package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -0
- package/{lib → dist}/orbit_determination/LambertIOD.d.ts +21 -8
- package/{lib → dist}/orbit_determination/LambertIOD.js +20 -6
- package/dist/orbit_determination/LambertIOD.js.map +1 -0
- package/{lib → dist}/orbit_determination/ModifiedGoodingIOD.d.ts +6 -7
- package/{lib → dist}/orbit_determination/ModifiedGoodingIOD.js +12 -11
- package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -0
- package/{lib → dist}/propagator/DormandPrince54Propagator.d.ts +1 -2
- package/dist/propagator/DormandPrince54Propagator.js +64 -0
- package/dist/propagator/DormandPrince54Propagator.js.map +1 -0
- package/{lib → dist}/propagator/KeplerPropagator.d.ts +1 -2
- package/{lib → dist}/propagator/KeplerPropagator.js +5 -2
- package/{lib → dist}/propagator/KeplerPropagator.js.map +1 -1
- package/{lib → dist}/propagator/Propagator.d.ts +5 -6
- package/{lib → dist}/propagator/Propagator.js +5 -6
- package/dist/propagator/Propagator.js.map +1 -0
- package/{lib → dist}/propagator/RkCheckpoint.d.ts +1 -2
- package/{lib → dist}/propagator/RkCheckpoint.js +3 -2
- package/dist/propagator/RkCheckpoint.js.map +1 -0
- package/{lib → dist}/propagator/RkResult.d.ts +1 -2
- package/{lib → dist}/propagator/RkResult.js +4 -2
- package/dist/propagator/RkResult.js.map +1 -0
- package/{lib → dist}/propagator/RungeKutta4Propagator.d.ts +14 -10
- package/{lib → dist}/propagator/RungeKutta4Propagator.js +45 -36
- package/dist/propagator/RungeKutta4Propagator.js.map +1 -0
- package/{lib → dist}/propagator/RungeKutta89Propagator.d.ts +1 -2
- package/dist/propagator/RungeKutta89Propagator.js +126 -0
- package/dist/propagator/RungeKutta89Propagator.js.map +1 -0
- package/{lib → dist}/propagator/RungeKuttaAdaptive.d.ts +13 -11
- package/{lib → dist}/propagator/RungeKuttaAdaptive.js +31 -24
- package/dist/propagator/RungeKuttaAdaptive.js.map +1 -0
- package/{lib → dist}/propagator/Sgp4Propagator.d.ts +3 -4
- package/{lib → dist}/propagator/Sgp4Propagator.js +4 -3
- package/dist/propagator/Sgp4Propagator.js.map +1 -0
- package/{lib → dist}/smoothing/ExponentialSmoothing.d.ts +1 -2
- package/{lib → dist}/smoothing/ExponentialSmoothing.js +1 -2
- package/dist/smoothing/ExponentialSmoothing.js.map +1 -0
- package/dist/transforms/index.d.ts +1 -0
- package/dist/transforms/index.js +2 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/transforms/transforms.d.ts +58 -0
- package/dist/transforms/transforms.js +94 -0
- package/dist/transforms/transforms.js.map +1 -0
- package/{lib → dist}/types/types.d.ts +44 -4
- package/{lib → dist}/types/types.js +1 -2
- package/dist/types/types.js.map +1 -0
- package/dist/utils/functions.d.ts +8 -0
- package/dist/utils/functions.js +18 -0
- package/dist/utils/functions.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/jacobian.d.ts +11 -0
- package/dist/utils/jacobian.js +29 -0
- package/dist/utils/jacobian.js.map +1 -0
- package/package.json +32 -42
- package/src/coordinate/Hill.ts +326 -0
- package/src/coordinate/index.ts +1 -0
- package/src/covariance/CovarianceSample.ts +194 -0
- package/src/covariance/StateCovariance.ts +69 -0
- package/src/force/AtmosphericDrag.ts +101 -0
- package/src/force/EarthGravity.ts +157 -0
- package/src/force/Force.ts +33 -0
- package/src/force/ForceModel.ts +91 -0
- package/src/force/Gravity.ts +53 -0
- package/src/force/SolarRadiationPressure.ts +42 -0
- package/src/force/ThirdBodyGravity.ts +62 -0
- package/src/force/Thrust.ts +83 -0
- package/src/interfaces/RfSensorParams.ts +30 -0
- package/src/interfaces/index.ts +1 -0
- package/src/interpolator/ChebyshevCoefficients.ts +109 -0
- package/src/interpolator/ChebyshevInterpolator.ts +87 -0
- package/src/interpolator/CubicSpline.ts +72 -0
- package/src/interpolator/CubicSplineInterpolator.ts +90 -0
- package/src/interpolator/FieldInterpolator.ts +37 -0
- package/src/interpolator/Interpolator.ts +56 -0
- package/src/interpolator/LagrangeInterpolator.ts +192 -0
- package/src/interpolator/StateInterpolator.ts +39 -0
- package/src/interpolator/VerletBlendInterpolator.ts +146 -0
- package/{lib/ootk.js → src/main.ts} +7 -3
- package/src/maneuver/TwoBurnOrbitTransfer.ts +79 -0
- package/src/maneuver/Waypoint.ts +267 -0
- package/src/objects/DetailedSatellite.ts +159 -0
- package/src/objects/DetailedSensor.ts +68 -0
- package/src/objects/LandObject.ts +46 -0
- package/src/objects/Marker.ts +25 -0
- package/src/objects/RfSensor.ts +78 -0
- package/src/objects/index.ts +5 -0
- package/src/observation/Observation.ts +125 -0
- package/src/observation/ObservationOptical.ts +146 -0
- package/src/observation/ObservationRadar.ts +131 -0
- package/src/observation/ObservationUtils.ts +40 -0
- package/src/observation/PropagatorPairs.ts +45 -0
- package/src/operations/BoxMuller.ts +87 -0
- package/src/operations/EulerAngles.ts +183 -0
- package/src/operations/Quaternion.ts +222 -0
- package/src/operations/RandomGaussianSource.ts +51 -0
- package/src/operations/index.ts +4 -0
- package/src/optimize/ChebyshevCompressor.ts +96 -0
- package/src/optimize/DownhillSimplex.ts +212 -0
- package/src/optimize/GoldenSection.ts +71 -0
- package/src/optimize/PolynomialRegression.ts +109 -0
- package/src/optimize/PolynomicalRegressionResult.ts +32 -0
- package/src/optimize/SimpleLinearRegression.ts +127 -0
- package/src/optimize/SimplexEntry.ts +50 -0
- package/src/orbit_determination/BatchLeastSquaresOD.ts +174 -0
- package/src/orbit_determination/BatchLeastSquaresResult.ts +33 -0
- package/src/orbit_determination/GibbsIOD.ts +95 -0
- package/src/orbit_determination/GoodingIOD.ts +380 -0
- package/src/orbit_determination/HerrickGibbsIOD.ts +51 -0
- package/src/orbit_determination/LambertIOD.ts +260 -0
- package/src/orbit_determination/ModifiedGoodingIOD.ts +133 -0
- package/src/propagator/DormandPrince54Propagator.ts +73 -0
- package/src/propagator/KeplerPropagator.ts +102 -0
- package/src/propagator/Propagator.ts +253 -0
- package/src/propagator/RkCheckpoint.ts +25 -0
- package/src/propagator/RkResult.ts +26 -0
- package/src/propagator/RungeKutta4Propagator.ts +179 -0
- package/src/propagator/RungeKutta89Propagator.ts +132 -0
- package/src/propagator/RungeKuttaAdaptive.ts +232 -0
- package/src/propagator/Sgp4Propagator.ts +71 -0
- package/src/smoothing/ExponentialSmoothing.ts +90 -0
- package/src/transforms/index.ts +1 -0
- package/src/transforms/transforms.ts +117 -0
- package/src/types/types.ts +135 -0
- package/src/utils/functions.ts +21 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/jacobian.ts +38 -0
- package/.eslintrc.json +0 -244
- package/jest.config.ts +0 -30
- package/lib/coordinate/Hill.js.map +0 -1
- package/lib/covariance/CovarianceSample.js.map +0 -1
- package/lib/covariance/StateCovariance.js.map +0 -1
- package/lib/force/AtmosphericDrag.js.map +0 -1
- package/lib/force/EarthGravity.js.map +0 -1
- package/lib/force/Force.js.map +0 -1
- package/lib/force/ForceModel.js.map +0 -1
- package/lib/force/Gravity.js.map +0 -1
- package/lib/force/SolarRadiationPressure.js.map +0 -1
- package/lib/force/ThirdBodyGravity.js.map +0 -1
- package/lib/force/Thrust.js.map +0 -1
- package/lib/interpolator/ChebyshevCoefficients.js.map +0 -1
- package/lib/interpolator/ChebyshevInterpolator.js.map +0 -1
- package/lib/interpolator/CubicSpline.js.map +0 -1
- package/lib/interpolator/CubicSplineInterpolator.js.map +0 -1
- package/lib/interpolator/FieldInterpolator.js.map +0 -1
- package/lib/interpolator/Interpolator.js.map +0 -1
- package/lib/interpolator/LagrangeInterpolator.js.map +0 -1
- package/lib/interpolator/StateInterpolator.js.map +0 -1
- package/lib/interpolator/VerletBlendInterpolator.js.map +0 -1
- package/lib/maneuver/TwoBurnOrbitTransfer.js.map +0 -1
- package/lib/maneuver/Waypoint.js.map +0 -1
- package/lib/objects/DetailedSatellite.js.map +0 -1
- package/lib/objects/DetailedSensor.js.map +0 -1
- package/lib/objects/LandObject.js.map +0 -1
- package/lib/objects/Marker.js.map +0 -1
- package/lib/objects/index.js.map +0 -1
- package/lib/observation/Observation.js.map +0 -1
- package/lib/observation/ObservationOptical.js.map +0 -1
- package/lib/observation/ObservationRadar.js.map +0 -1
- package/lib/observation/ObservationUtils.js.map +0 -1
- package/lib/observation/PropagatorPairs.js.map +0 -1
- package/lib/ootk.js.map +0 -1
- package/lib/operations/BoxMuller.js.map +0 -1
- package/lib/operations/EulerAngles.d.ts +0 -50
- package/lib/operations/EulerAngles.js.map +0 -1
- package/lib/operations/Quaternion.js.map +0 -1
- package/lib/operations/RandomGaussianSource.js.map +0 -1
- package/lib/optimize/ChebyshevCompressor.js.map +0 -1
- package/lib/optimize/DownhillSimplex.js.map +0 -1
- package/lib/optimize/GoldenSection.js.map +0 -1
- package/lib/optimize/PolynomialRegression.js.map +0 -1
- package/lib/optimize/PolynomicalRegressionResult.js.map +0 -1
- package/lib/optimize/SimpleLinearRegression.js.map +0 -1
- package/lib/optimize/SimplexEntry.js.map +0 -1
- package/lib/orbit_determination/BatchLeastSquaresOD.js.map +0 -1
- package/lib/orbit_determination/BatchLeastSquaresResult.js.map +0 -1
- package/lib/orbit_determination/GibbsIOD.js.map +0 -1
- package/lib/orbit_determination/GoodingIOD.js.map +0 -1
- package/lib/orbit_determination/HerrickGibbsIOD.js.map +0 -1
- package/lib/orbit_determination/LambertIOD.js.map +0 -1
- package/lib/orbit_determination/ModifiedGoodingIOD.js.map +0 -1
- package/lib/propagator/DormandPrince54Propagator.js +0 -68
- package/lib/propagator/DormandPrince54Propagator.js.map +0 -1
- package/lib/propagator/Propagator.js.map +0 -1
- package/lib/propagator/RkCheckpoint.js.map +0 -1
- package/lib/propagator/RkResult.js.map +0 -1
- package/lib/propagator/RungeKutta4Propagator.js.map +0 -1
- package/lib/propagator/RungeKutta89Propagator.js +0 -130
- package/lib/propagator/RungeKutta89Propagator.js.map +0 -1
- package/lib/propagator/RungeKuttaAdaptive.js.map +0 -1
- package/lib/propagator/Sgp4Propagator.js.map +0 -1
- package/lib/smoothing/ExponentialSmoothing.js.map +0 -1
- package/lib/types/types.js.map +0 -1
- /package/{lib → dist}/coordinate/index.d.ts +0 -0
- /package/{lib → dist}/coordinate/index.js +0 -0
- /package/{lib → dist}/coordinate/index.js.map +0 -0
- /package/{lib → dist}/operations/index.d.ts +0 -0
- /package/{lib → dist}/operations/index.js +0 -0
- /package/{lib → dist}/operations/index.js.map +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -26,40 +25,44 @@ import { LambertIOD } from './LambertIOD';
|
|
|
26
25
|
* Used for orbit determination from three optical observations.
|
|
27
26
|
*/
|
|
28
27
|
export class GoodingIOD {
|
|
28
|
+
_mu;
|
|
29
|
+
o1_;
|
|
30
|
+
o2_;
|
|
31
|
+
o3_;
|
|
32
|
+
vObserverPosition1_ = Vector3D.origin;
|
|
33
|
+
vObserverPosition2_ = Vector3D.origin;
|
|
34
|
+
vObserverPosition3_ = Vector3D.origin;
|
|
35
|
+
r_ = 0.0;
|
|
36
|
+
v_ = 0.0;
|
|
37
|
+
t_ = 0.0;
|
|
38
|
+
r1_ = 0.0;
|
|
39
|
+
r2_ = 0.0;
|
|
40
|
+
r3_ = 0.0;
|
|
41
|
+
rho1_ = 0.0;
|
|
42
|
+
rho2_ = 0.0;
|
|
43
|
+
rho3_ = 0.0;
|
|
44
|
+
d1_ = 0.0;
|
|
45
|
+
d3_ = 0.0;
|
|
46
|
+
facFiniteDiff_ = 0.0;
|
|
47
|
+
_forceModel = new ForceModel().setGravity(1.0);
|
|
29
48
|
constructor(o1, o2, o3, mu = Earth.mu) {
|
|
30
|
-
this._vObserverPosition1 = Vector3D.origin;
|
|
31
|
-
this._vObserverPosition2 = Vector3D.origin;
|
|
32
|
-
this._vObserverPosition3 = Vector3D.origin;
|
|
33
|
-
this._r = 0.0;
|
|
34
|
-
this._v = 0.0;
|
|
35
|
-
this._t = 0.0;
|
|
36
|
-
this._r1 = 0.0;
|
|
37
|
-
this._r2 = 0.0;
|
|
38
|
-
this._r3 = 0.0;
|
|
39
|
-
this._rho1 = 0.0;
|
|
40
|
-
this._rho2 = 0.0;
|
|
41
|
-
this._rho3 = 0.0;
|
|
42
|
-
this._d1 = 0.0;
|
|
43
|
-
this._d3 = 0.0;
|
|
44
|
-
this._facFiniteDiff = 0.0;
|
|
45
|
-
this._forceModel = new ForceModel().setGravity(1.0);
|
|
46
49
|
this._mu = mu;
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
49
|
-
this.
|
|
50
|
+
this.o1_ = o1;
|
|
51
|
+
this.o2_ = o2;
|
|
52
|
+
this.o3_ = o3;
|
|
50
53
|
}
|
|
51
54
|
_getPositionOnLoS2({ e1, r01, e3, r03, t13, t12, nRev, posigrade, }) {
|
|
52
|
-
const p1 = this.
|
|
53
|
-
this.
|
|
54
|
-
const p3 = this.
|
|
55
|
-
this.
|
|
55
|
+
const p1 = this.vObserverPosition1_.add(e1.scale(r01));
|
|
56
|
+
this.r1_ = p1.magnitude();
|
|
57
|
+
const p3 = this.vObserverPosition3_.add(e3.scale(r03));
|
|
58
|
+
this.r3_ = p3.magnitude();
|
|
56
59
|
const p13 = p1.cross(p3);
|
|
57
60
|
let th = Math.atan2(p13.magnitude(), p1.dot(p3));
|
|
58
61
|
if (!posigrade) {
|
|
59
62
|
th = TAU - th;
|
|
60
63
|
}
|
|
61
64
|
const v1 = new Float64Array(2);
|
|
62
|
-
const exitflag = LambertIOD.solve(this.
|
|
65
|
+
const exitflag = LambertIOD.solve(this.r1_, this.r3_, th, t13, nRev, v1);
|
|
63
66
|
if (exitflag) {
|
|
64
67
|
const pn = p1.cross(p3);
|
|
65
68
|
const pt = pn.cross(p1);
|
|
@@ -67,26 +70,26 @@ export class GoodingIOD {
|
|
|
67
70
|
if (!posigrade) {
|
|
68
71
|
rt = -rt;
|
|
69
72
|
}
|
|
70
|
-
const vel1 = p1.scale(v1[0] / this.
|
|
71
|
-
const p2 = new RungeKutta89Propagator(new J2000(this.
|
|
73
|
+
const vel1 = p1.scale(v1[0] / this.r1_).add(pt.scale(v1[1] / rt));
|
|
74
|
+
const p2 = new RungeKutta89Propagator(new J2000(this.o1_.epoch, p1, vel1), this._forceModel).propagate(this.o1_.epoch.roll(t12)).position;
|
|
72
75
|
return p2;
|
|
73
76
|
}
|
|
74
77
|
return null;
|
|
75
78
|
}
|
|
76
79
|
_modifyIterate(lineOfSight1, lineOfSight3) {
|
|
77
|
-
const r13 = this.
|
|
78
|
-
this.
|
|
79
|
-
this.
|
|
80
|
+
const r13 = this.vObserverPosition3_.subtract(this.vObserverPosition1_);
|
|
81
|
+
this.d1_ = r13.dot(lineOfSight1);
|
|
82
|
+
this.d3_ = r13.dot(lineOfSight3);
|
|
80
83
|
const d2 = lineOfSight1.dot(lineOfSight3);
|
|
81
84
|
const d4 = 1.0 - d2 * d2;
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
85
|
+
this.rho1_ = Math.max((this.d1_ - this.d3_ * d2) / d4, 0.0);
|
|
86
|
+
this.rho3_ = Math.max((this.d1_ * d2 - this.d3_) / d4, 0.0);
|
|
84
87
|
}
|
|
85
88
|
_computeDerivatives({ x, y, lineOfSight1, lineOfSight3, pin, ein, t13, t12, nrev, direction, fd, gd, }) {
|
|
86
89
|
const p = pin.normalize();
|
|
87
90
|
const en = ein.normalize();
|
|
88
|
-
const dx = this.
|
|
89
|
-
const dy = this.
|
|
91
|
+
const dx = this.facFiniteDiff_ * x;
|
|
92
|
+
const dy = this.facFiniteDiff_ * y;
|
|
90
93
|
const cm1 = this._getPositionOnLoS2({
|
|
91
94
|
e1: lineOfSight1,
|
|
92
95
|
r01: x - dx,
|
|
@@ -96,7 +99,7 @@ export class GoodingIOD {
|
|
|
96
99
|
t12,
|
|
97
100
|
nRev: nrev,
|
|
98
101
|
posigrade: direction,
|
|
99
|
-
}).subtract(this.
|
|
102
|
+
}).subtract(this.vObserverPosition2_);
|
|
100
103
|
const fm1 = p.dot(cm1);
|
|
101
104
|
const gm1 = en.dot(cm1);
|
|
102
105
|
const cp1 = this._getPositionOnLoS2({
|
|
@@ -108,7 +111,7 @@ export class GoodingIOD {
|
|
|
108
111
|
t12,
|
|
109
112
|
nRev: nrev,
|
|
110
113
|
posigrade: direction,
|
|
111
|
-
}).subtract(this.
|
|
114
|
+
}).subtract(this.vObserverPosition2_);
|
|
112
115
|
const fp1 = p.dot(cp1);
|
|
113
116
|
const gp1 = en.dot(cp1);
|
|
114
117
|
const fx = (fp1 - fm1) / (2.0 * dx);
|
|
@@ -122,7 +125,7 @@ export class GoodingIOD {
|
|
|
122
125
|
t12,
|
|
123
126
|
nRev: nrev,
|
|
124
127
|
posigrade: direction,
|
|
125
|
-
}).subtract(this.
|
|
128
|
+
}).subtract(this.vObserverPosition2_);
|
|
126
129
|
const fm3 = p.dot(cm3);
|
|
127
130
|
const gm3 = en.dot(cm3);
|
|
128
131
|
const cp3 = this._getPositionOnLoS2({
|
|
@@ -134,7 +137,7 @@ export class GoodingIOD {
|
|
|
134
137
|
t12,
|
|
135
138
|
nRev: nrev,
|
|
136
139
|
posigrade: direction,
|
|
137
|
-
}).subtract(this.
|
|
140
|
+
}).subtract(this.vObserverPosition2_);
|
|
138
141
|
const fp3 = p.dot(cp3);
|
|
139
142
|
const gp3 = en.dot(cp3);
|
|
140
143
|
const fy = (fp3 - fm3) / (2.0 * dy);
|
|
@@ -145,21 +148,21 @@ export class GoodingIOD {
|
|
|
145
148
|
gd[1] = gy;
|
|
146
149
|
}
|
|
147
150
|
solve(r1Init, r3Init, nRev = 0, direction = true) {
|
|
148
|
-
const lineOfSight1 = this.
|
|
149
|
-
const lineOfSight2 = this.
|
|
150
|
-
const lineOfSight3 = this.
|
|
151
|
-
this.
|
|
152
|
-
this.
|
|
153
|
-
this.
|
|
154
|
-
this.
|
|
155
|
-
this.
|
|
156
|
-
this.
|
|
151
|
+
const lineOfSight1 = this.o1_.observation.lineOfSight();
|
|
152
|
+
const lineOfSight2 = this.o2_.observation.lineOfSight();
|
|
153
|
+
const lineOfSight3 = this.o3_.observation.lineOfSight();
|
|
154
|
+
this.r_ = Math.max(r1Init, r3Init);
|
|
155
|
+
this.v_ = Math.sqrt(this._mu / this.r_);
|
|
156
|
+
this.t_ = this.r_ / this.v_;
|
|
157
|
+
this.vObserverPosition1_ = this.o1_.site.position.scale(1.0 / this.r_);
|
|
158
|
+
this.vObserverPosition2_ = this.o2_.site.position.scale(1.0 / this.r_);
|
|
159
|
+
this.vObserverPosition3_ = this.o3_.site.position.scale(1.0 / this.r_);
|
|
157
160
|
const maxiter = 100;
|
|
158
161
|
this._solveRangeProblem({
|
|
159
|
-
rho1init: r1Init / this.
|
|
160
|
-
rho3init: r3Init / this.
|
|
161
|
-
t13: this.
|
|
162
|
-
t12: this.
|
|
162
|
+
rho1init: r1Init / this.r_,
|
|
163
|
+
rho3init: r3Init / this.r_,
|
|
164
|
+
t13: this.o3_.epoch.difference(this.o1_.epoch) / this.t_,
|
|
165
|
+
t12: this.o2_.epoch.difference(this.o1_.epoch) / this.t_,
|
|
163
166
|
nrev: nRev,
|
|
164
167
|
direction,
|
|
165
168
|
lineOfSight1,
|
|
@@ -168,25 +171,25 @@ export class GoodingIOD {
|
|
|
168
171
|
maxIterations: maxiter,
|
|
169
172
|
});
|
|
170
173
|
const gibbs = new GibbsIOD(this._mu);
|
|
171
|
-
const p1 = this.
|
|
172
|
-
const p2 = this.
|
|
173
|
-
const p3 = this.
|
|
174
|
-
return gibbs.solve(p1, p2, p3, this.
|
|
174
|
+
const p1 = this.vObserverPosition1_.add(lineOfSight1.scale(this.rho1_)).scale(this.r_);
|
|
175
|
+
const p2 = this.vObserverPosition2_.add(lineOfSight2.scale(this.rho2_)).scale(this.r_);
|
|
176
|
+
const p3 = this.vObserverPosition3_.add(lineOfSight3.scale(this.rho3_)).scale(this.r_);
|
|
177
|
+
return gibbs.solve(p1, p2, p3, this.o2_.epoch, this.o3_.epoch);
|
|
175
178
|
}
|
|
176
179
|
_solveRangeProblem({ rho1init, rho3init, t13, t12, nrev, direction, lineOfSight1, lineOfSight2, lineOfSight3, maxIterations, }) {
|
|
177
180
|
const arbf = 1e-6;
|
|
178
181
|
const cvtol = 1e-14;
|
|
179
|
-
this.
|
|
180
|
-
this.
|
|
182
|
+
this.rho1_ = rho1init;
|
|
183
|
+
this.rho3_ = rho3init;
|
|
181
184
|
let iter = 0;
|
|
182
185
|
let stoppingCriterion = 10.0 * cvtol;
|
|
183
186
|
while (iter < maxIterations && Math.abs(stoppingCriterion) > cvtol) {
|
|
184
|
-
this.
|
|
187
|
+
this.facFiniteDiff_ = arbf;
|
|
185
188
|
const p2 = this._getPositionOnLoS2({
|
|
186
189
|
e1: lineOfSight1,
|
|
187
|
-
r01: this.
|
|
190
|
+
r01: this.rho1_,
|
|
188
191
|
e3: lineOfSight3,
|
|
189
|
-
r03: this.
|
|
192
|
+
r03: this.rho3_,
|
|
190
193
|
t13,
|
|
191
194
|
t12,
|
|
192
195
|
nRev: nrev,
|
|
@@ -196,9 +199,9 @@ export class GoodingIOD {
|
|
|
196
199
|
this._modifyIterate(lineOfSight1, lineOfSight3);
|
|
197
200
|
}
|
|
198
201
|
else {
|
|
199
|
-
this.
|
|
200
|
-
const c = p2.subtract(this.
|
|
201
|
-
this.
|
|
202
|
+
this.r2_ = p2.magnitude();
|
|
203
|
+
const c = p2.subtract(this.vObserverPosition2_);
|
|
204
|
+
this.rho2_ = c.magnitude();
|
|
202
205
|
const cr = lineOfSight2.dot(c);
|
|
203
206
|
const u = lineOfSight2.cross(c);
|
|
204
207
|
const p = u.cross(lineOfSight2).normalize();
|
|
@@ -212,8 +215,8 @@ export class GoodingIOD {
|
|
|
212
215
|
const fd = new Float64Array(2);
|
|
213
216
|
const gd = new Float64Array(2);
|
|
214
217
|
this._computeDerivatives({
|
|
215
|
-
x: this.
|
|
216
|
-
y: this.
|
|
218
|
+
x: this.rho1_,
|
|
219
|
+
y: this.rho3_,
|
|
217
220
|
lineOfSight1,
|
|
218
221
|
lineOfSight3,
|
|
219
222
|
pin: p,
|
|
@@ -230,11 +233,11 @@ export class GoodingIOD {
|
|
|
230
233
|
const gr1 = gd[0];
|
|
231
234
|
const gr3 = gd[1];
|
|
232
235
|
const detj = fr1 * gr3 - fr3 * gr1;
|
|
233
|
-
this.
|
|
234
|
-
this.
|
|
235
|
-
this.
|
|
236
|
-
this.
|
|
237
|
-
const den = Math.max(cr, this.
|
|
236
|
+
this.d3_ = (-gr3 * fc) / detj;
|
|
237
|
+
this.d1_ = (gr1 * fc) / detj;
|
|
238
|
+
this.rho1_ = this.rho1_ + this.d3_;
|
|
239
|
+
this.rho3_ = this.rho3_ + this.d1_;
|
|
240
|
+
const den = Math.max(cr, this.r2_);
|
|
238
241
|
stoppingCriterion = fc / den;
|
|
239
242
|
}
|
|
240
243
|
++iter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoodingIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/GoodingIOD.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -15,7 +14,7 @@
|
|
|
15
14
|
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
16
|
*/
|
|
18
|
-
import { EpochUTC, J2000, Vector3D } from 'ootk-core';
|
|
17
|
+
import { EpochUTC, J2000, Kilometers, Vector3D } from 'ootk-core';
|
|
19
18
|
/**
|
|
20
19
|
* Herrik-Gibbs 3-position initial orbit determination.
|
|
21
20
|
*
|
|
@@ -27,7 +26,8 @@ export declare class HerrickGibbsIOD {
|
|
|
27
26
|
/**
|
|
28
27
|
* Create a new [HerrickGibbsIOD] object with optional
|
|
29
28
|
* gravitational parameter [mu].
|
|
29
|
+
* @param mu Gravitational parameter (default: Earth.mu)
|
|
30
30
|
*/
|
|
31
31
|
constructor(mu?: number);
|
|
32
|
-
solve(r1: Vector3D, t1: EpochUTC, r2: Vector3D
|
|
32
|
+
solve(r1: Vector3D, t1: EpochUTC, r2: Vector3D<Kilometers>, t2: EpochUTC, r3: Vector3D, t3: EpochUTC): J2000;
|
|
33
33
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -23,9 +22,11 @@ import { Earth, J2000 } from 'ootk-core';
|
|
|
23
22
|
* vectors (less than 5°).
|
|
24
23
|
*/
|
|
25
24
|
export class HerrickGibbsIOD {
|
|
25
|
+
mu;
|
|
26
26
|
/**
|
|
27
27
|
* Create a new [HerrickGibbsIOD] object with optional
|
|
28
28
|
* gravitational parameter [mu].
|
|
29
|
+
* @param mu Gravitational parameter (default: Earth.mu)
|
|
29
30
|
*/
|
|
30
31
|
constructor(mu = Earth.mu) {
|
|
31
32
|
this.mu = mu;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerrickGibbsIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/HerrickGibbsIOD.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,EAAY,KAAK,EAA6C,MAAM,WAAW,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAMP;IALnB;;;;OAIG;IACH,YAAmB,KAAa,KAAK,CAAC,EAAE;QAArB,OAAE,GAAF,EAAE,CAAmB;QACtC,sBAAsB;IACxB,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,EAAY,EAAE,EAAY,EAAE,EAAwB,EAAE,EAAY,EAAE,EAAY,EAAE,EAAY;QAClG,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAkC,CAAC;QAE/D,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -15,17 +14,16 @@
|
|
|
15
14
|
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
16
|
*/
|
|
18
|
-
import { EpochUTC, J2000, Vector3D } from 'ootk-core';
|
|
17
|
+
import { EpochUTC, J2000, Kilometers, Vector3D } from 'ootk-core';
|
|
19
18
|
export declare class LambertIOD {
|
|
20
19
|
mu: number;
|
|
21
|
-
/**
|
|
22
|
-
* Create a new [LambertIOD] object with optional
|
|
23
|
-
* gravitational parameter [mu].
|
|
24
|
-
*/
|
|
25
20
|
constructor(mu?: number);
|
|
26
21
|
/**
|
|
27
22
|
* Try to guess the short path argument given an [interceptor] and
|
|
28
23
|
* [target] state.
|
|
24
|
+
* @param interceptor Interceptor
|
|
25
|
+
* @param target Target
|
|
26
|
+
* @returns True if the short path should be used, false otherwise.
|
|
29
27
|
*/
|
|
30
28
|
static useShortPath(interceptor: J2000, target: J2000): boolean;
|
|
31
29
|
private static timeOfFlight_;
|
|
@@ -33,13 +31,28 @@ export declare class LambertIOD {
|
|
|
33
31
|
* Attempt to solve output velocity [v1] _(km/s)_ given radii [r1] and
|
|
34
32
|
* [r2] _(canonical)_, sweep angle [dth] _(rad)_, time of flight [tau]
|
|
35
33
|
* _(canonical)_, and number of revolutions _(mRev)_.
|
|
34
|
+
* @param r1 Radius 1
|
|
35
|
+
* @param r2 Radius 2
|
|
36
|
+
* @param dth Sweep angle
|
|
37
|
+
* @param tau Time of flight
|
|
38
|
+
* @param mRev Number of revolutions
|
|
39
|
+
* @param v1 Output velocity
|
|
40
|
+
* @returns True if successful, false otherwise.
|
|
36
41
|
*/
|
|
37
42
|
static solve(r1: number, r2: number, dth: number, tau: number, mRev: number, v1: Float64Array): boolean;
|
|
38
43
|
/**
|
|
39
44
|
* Estimate a state vector for inertial position [p1] _(km)_ given the
|
|
40
45
|
* two epoch and positions.
|
|
46
|
+
* @param p1 Position vector 1
|
|
47
|
+
* @param p2 Position vector 2
|
|
48
|
+
* @param t1 Epoch 1
|
|
49
|
+
* @param t2 Epoch 2
|
|
50
|
+
* @param root0 Optional parameters
|
|
51
|
+
* @param root0.posigrade If true, use the positive root (default: true)
|
|
52
|
+
* @param root0.nRev Number of revolutions (default: 0)
|
|
53
|
+
* @returns A [J2000] object with the estimated state vector.
|
|
41
54
|
*/
|
|
42
|
-
estimate(p1: Vector3D
|
|
55
|
+
estimate(p1: Vector3D<Kilometers>, p2: Vector3D<Kilometers>, t1: EpochUTC, t2: EpochUTC, { posigrade, nRev }?: {
|
|
43
56
|
posigrade?: boolean;
|
|
44
57
|
nRev?: number;
|
|
45
58
|
}): J2000 | null;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -18,10 +17,7 @@
|
|
|
18
17
|
import { Earth, J2000 } from 'ootk-core';
|
|
19
18
|
// / Lambert two-position and time initial orbit determination.
|
|
20
19
|
export class LambertIOD {
|
|
21
|
-
|
|
22
|
-
* Create a new [LambertIOD] object with optional
|
|
23
|
-
* gravitational parameter [mu].
|
|
24
|
-
*/
|
|
20
|
+
mu;
|
|
25
21
|
constructor(mu = Earth.mu) {
|
|
26
22
|
this.mu = mu;
|
|
27
23
|
// Nothing to do here.
|
|
@@ -29,6 +25,9 @@ export class LambertIOD {
|
|
|
29
25
|
/**
|
|
30
26
|
* Try to guess the short path argument given an [interceptor] and
|
|
31
27
|
* [target] state.
|
|
28
|
+
* @param interceptor Interceptor
|
|
29
|
+
* @param target Target
|
|
30
|
+
* @returns True if the short path should be used, false otherwise.
|
|
32
31
|
*/
|
|
33
32
|
static useShortPath(interceptor, target) {
|
|
34
33
|
const transN = interceptor.position.cross(target.position);
|
|
@@ -54,6 +53,13 @@ export class LambertIOD {
|
|
|
54
53
|
* Attempt to solve output velocity [v1] _(km/s)_ given radii [r1] and
|
|
55
54
|
* [r2] _(canonical)_, sweep angle [dth] _(rad)_, time of flight [tau]
|
|
56
55
|
* _(canonical)_, and number of revolutions _(mRev)_.
|
|
56
|
+
* @param r1 Radius 1
|
|
57
|
+
* @param r2 Radius 2
|
|
58
|
+
* @param dth Sweep angle
|
|
59
|
+
* @param tau Time of flight
|
|
60
|
+
* @param mRev Number of revolutions
|
|
61
|
+
* @param v1 Output velocity
|
|
62
|
+
* @returns True if successful, false otherwise.
|
|
57
63
|
*/
|
|
58
64
|
static solve(r1, r2, dth, tau, mRev, v1) {
|
|
59
65
|
const leftBranch = dth < Math.PI;
|
|
@@ -169,6 +175,14 @@ export class LambertIOD {
|
|
|
169
175
|
/**
|
|
170
176
|
* Estimate a state vector for inertial position [p1] _(km)_ given the
|
|
171
177
|
* two epoch and positions.
|
|
178
|
+
* @param p1 Position vector 1
|
|
179
|
+
* @param p2 Position vector 2
|
|
180
|
+
* @param t1 Epoch 1
|
|
181
|
+
* @param t2 Epoch 2
|
|
182
|
+
* @param root0 Optional parameters
|
|
183
|
+
* @param root0.posigrade If true, use the positive root (default: true)
|
|
184
|
+
* @param root0.nRev Number of revolutions (default: 0)
|
|
185
|
+
* @returns A [J2000] object with the estimated state vector.
|
|
172
186
|
*/
|
|
173
187
|
estimate(p1, p2, t1, t2, { posigrade = true, nRev = 0 } = {}) {
|
|
174
188
|
const r1 = p1.magnitude();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LambertIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/LambertIOD.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -15,7 +14,7 @@
|
|
|
15
14
|
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
15
|
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
16
|
*/
|
|
18
|
-
import { J2000 } from 'ootk-core';
|
|
17
|
+
import { J2000, Kilometers } from 'ootk-core';
|
|
19
18
|
import { ObservationOptical } from './../observation/ObservationOptical';
|
|
20
19
|
type SolveOptions = {
|
|
21
20
|
nRev?: number;
|
|
@@ -31,11 +30,11 @@ type SolveOptions = {
|
|
|
31
30
|
* Used for orbit determination from multiple optical observations.
|
|
32
31
|
*/
|
|
33
32
|
export declare class ModifiedGoodingIOD {
|
|
34
|
-
private
|
|
35
|
-
private
|
|
33
|
+
private observations_;
|
|
34
|
+
private mu_;
|
|
36
35
|
constructor(observations: ObservationOptical[], mu?: number);
|
|
37
|
-
private
|
|
36
|
+
private createInitial_;
|
|
38
37
|
private _createErrorFunction;
|
|
39
|
-
solve(r0:
|
|
38
|
+
solve(r0: Kilometers, rN: Kilometers, { nRev, direction, posSearch, velSearch, tolerance, printIter, }: SolveOptions): J2000;
|
|
40
39
|
}
|
|
41
40
|
export {};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|
|
@@ -26,27 +25,29 @@ import { GoodingIOD } from './GoodingIOD';
|
|
|
26
25
|
* Used for orbit determination from multiple optical observations.
|
|
27
26
|
*/
|
|
28
27
|
export class ModifiedGoodingIOD {
|
|
28
|
+
observations_;
|
|
29
|
+
mu_;
|
|
29
30
|
constructor(observations, mu = Earth.mu) {
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
31
|
+
this.observations_ = observations;
|
|
32
|
+
this.mu_ = mu;
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
-
const iod = new GoodingIOD(this.
|
|
34
|
+
createInitial_(r0, rN, nRev, direction) {
|
|
35
|
+
const iod = new GoodingIOD(this.observations_[0], this.observations_[Math.floor(this.observations_.length / 2)], this.observations_[this.observations_.length - 1], this.mu_);
|
|
35
36
|
return iod.solve(r0, rN, nRev, direction);
|
|
36
37
|
}
|
|
37
38
|
_createErrorFunction(aprioriEpoch) {
|
|
38
|
-
const forceModel = new ForceModel().setGravity(this.
|
|
39
|
+
const forceModel = new ForceModel().setGravity(this.mu_);
|
|
39
40
|
const scoreFn = (x) => {
|
|
40
41
|
const position = new Vector3D(x[0], x[1], x[2]);
|
|
41
42
|
const velocity = new Vector3D(x[3], x[4], x[5]);
|
|
42
43
|
const state = new J2000(aprioriEpoch, position, velocity);
|
|
43
44
|
const propagator = new RungeKutta89Propagator(state, forceModel);
|
|
44
45
|
let total = 0;
|
|
45
|
-
for (const oC of this.
|
|
46
|
+
for (const oC of this.observations_) {
|
|
46
47
|
const sC = propagator.propagate(oC.epoch);
|
|
47
48
|
const pC = oC.site;
|
|
48
49
|
const expected = oC.observation.lineOfSight();
|
|
49
|
-
const actual = RadecTopocentric.
|
|
50
|
+
const actual = RadecTopocentric.fromStateVector(sC, pC).lineOfSight();
|
|
50
51
|
const error = expected.angle(actual);
|
|
51
52
|
total += error;
|
|
52
53
|
}
|
|
@@ -55,10 +56,10 @@ export class ModifiedGoodingIOD {
|
|
|
55
56
|
return scoreFn;
|
|
56
57
|
}
|
|
57
58
|
solve(r0, rN, { nRev = 0, direction = true, posSearch = 10.0, velSearch = 0.1, tolerance = 1e-6, printIter = false, }) {
|
|
58
|
-
if (this.
|
|
59
|
+
if (this.observations_.length < 3) {
|
|
59
60
|
throw new Error('At least 3 observations required for Gooding IOD.');
|
|
60
61
|
}
|
|
61
|
-
const init = this.
|
|
62
|
+
const init = this.createInitial_(r0, rN, nRev, direction);
|
|
62
63
|
const guess = Float64Array.from([...init.position.toArray(), ...init.velocity.toArray()]);
|
|
63
64
|
const solveFn = this._createErrorFunction(init.epoch);
|
|
64
65
|
const simplex = [
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModifiedGoodingIOD.js","sourceRoot":"","sources":["../../src/orbit_determination/ModifiedGoodingIOD.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author @thkruz Theodore Kruczek
|
|
3
|
-
*
|
|
4
3
|
* @license AGPL-3.0-or-later
|
|
5
|
-
* @
|
|
4
|
+
* @copyright (c) 2020-2024 Theodore Kruczek
|
|
6
5
|
*
|
|
7
6
|
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
7
|
* terms of the GNU Affero General Public License as published by the Free Software
|