[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orekit Users] Mimic TLEPropagator with Numerical?



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.

Regards,

CN


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