Hello Chris, I agree. Is there anyway you would go for to get “not exact” results but somewhat similar results with just using the OREKIT? Sadly, going back to SGP4 equations and solving ODE will not be feasible for me right now. Thank you for your time. Best, Justin Justin, You're not going to be able to do this. By definition TLEs are the results of a least squares type fit of data and therefore will have the effects of various perturbations smoothed out along the whole of an orbit. Each of the force models in Orekit are point-by-point models which are empirically driven to provide the perturbing force at a give point in time & space.What you'd have to do is simply go back to the SGP4 equations and take time derivatives of them and simply integrate them as ODEs, although because of the various corrections I don't think this would be very fruitful.
On Tue, Mar 28, 2017 at 3:01 PM, <justin4leb@gmail.com> wrote: Hello All,
I am new in using OREKIT. I was wondering if its possible to mimic TLEPropagator by incorporating similar force models into a Numerical propagator. Basically, I am trying to replicate the results of the "Satellite Orbital Conjunction Reports Assessing Threatening Encounters in Space" (SOCRATES) that are given in the celestrak website :http://celestrak.com/cgi-bin/searchSOCRATES.pl?IDENT=NAME&NAME_TEXT1=&NAME_TEXT2=&ORDER=MINRANGE&MAX=10
I am able to get exact (very closer : +/-0.1 seconds) closest approach results, but not with a Numerical Propagator (with J2 perturbations). I am aware TLEprop is based on SGP4/SDP4 model but I wonder if it is possible to bring that model into Numerical. Because I would like to experiment by applying small delta-Vs to the state to increase the closest approach distance which cannot be done within a TLEPropagator.
I used something like this(in Python):
objA_tle = TLE("1 40037U 14033AD 17085.78642693 .00000199 00000-0 28987-4 0 9998", "2 40037 97.9175 354.9522 0013624 210.8425 149.1991 14.86189764149576") objB_tle = TLE("1 16263U 85108B 17085.79797911 .00000114 00000-0 11121-4 0 9997", "2 16263 82.5064 191.6062 0018606 258.6047 216.3527 14.82975072692179")
propagator_tleA = TLEPropagator.selectExtrapolator(objA_tle) propagator_tleB = TLEPropagator.selectExtrapolator(objB_tle)
epo_objA = objA_tle.getDate() epo_objB = objB_tle.getDate() pvA_init = propagator_tleA.propagate(epo_objA).getPVCoordinates() pvB_init = propagator_tleB.propagate(epo_objB).getPVCoordinates()
initialOrbitA = CartesianOrbit(pvA_init_, inertialFrame, epo_objA, mu) initialOrbitB = CartesianOrbit(pvB_init_, inertialFrame, epo_objB, mu)
def NumProp(initialOrbit, orbitType):
#Setup Propagator minStep = 0.001; maxstep = 1000.0; initStep = 10.0 positionTolerance = 1e-2 initialState = SpacecraftState(initialOrbit) tol = NumericalPropagator.tolerances(positionTolerance, initialOrbit, orbitType) integrator = DormandPrince853Integrator(minStep, maxstep, JArray_double.cast_(tol[0]), # Double array of doubles needs to be casted in Python JArray_double.cast_(tol[1])) integrator.setInitialStepSize(initStep)
propagator_num = NumericalPropagator(integrator) propagator_num.setOrbitType(orbitType) propagator_num.setInitialState(initialState) propagator_num.setEphemerisMode() return propagator_num
propagator_numA = NumProp(initialOrbitA, orbitType) propagator_numB = NumProp(initialOrbitB, orbitType)
itrf = FramesFactory.getITRF(IERSConventions.IERS_2010, True) gravityProvider = GravityFieldFactory.getNormalizedProvider(10,10) gravity = HolmesFeatherstoneAttractionModel(itrf, gravityProvider)
propagator_numA.addForceModel(gravity) propagator_numB.addForceModel(gravity)
Best, Justin
|