Hi Orekit community
I am trying to convert from my TLE SpacecraftState into mean Keplerian elements, using the BrouwerLyddanePropagator. It has an implemented method: computeMeanOrbit, that, according to my understanding, will give back the Orbit object, with mean Keplerian elements.
Unfortunately, I am encountering some issues: it fails the convergence if I give not the starting state from TLE, but a propagated one.
Here the example:
long start = 1613870730000L;
/* TLEs of the satellite */
TLE tleOrbit = new TLE
"1 43196U 18015E 21055.59816856 .00000894 00000-0 38966-4 0 9996",
"2 43196 97.4662 188.8169 0016935 299.6845 60.2706 15.24746686170319");
Propagator propagator = TLEPropagator.selectExtrapolator(tleOrbit);
//Get state at initial date and 3 days before
SpacecraftState tleState = propagator.getInitialState();
SpacecraftState tleStateAtDate = propagator.propagate(Time.getAbsoluteDateFromTimestamp(start));
//BL mean orbit
double epsilon = 1.0e-12;
int maxIter = 500;
UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(7, 7);
Orbit meanOrbitOK = BrouwerLyddanePropagator.computeMeanOrbit(tleState.getOrbit(), provider,
provider.onDate(tleState.getDate()), BrouwerLyddanePropagator.M2, epsilon, maxIter);
Orbit meanOrbitKO = BrouwerLyddanePropagator.computeMeanOrbit(tleStateAtDate.getOrbit(), provider,
provider.onDate(tleStateAtDate.getDate()), BrouwerLyddanePropagator.M2, epsilon, maxIter);
where
public static AbsoluteDate getAbsoluteDateFromTimestamp(long timestamp) {
LocalDateTime utcDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), UTC_ZONE_ID);
val year = utcDate.getYear();
val month = utcDate.getMonthValue();
val day = utcDate.getDayOfMonth();
val hour = utcDate.getHour();
val minute = utcDate.getMinute();
val second = utcDate.getSecond();
val millis = utcDate.getNano() / 1e9;
return new AbsoluteDate(year, month, day, hour, minute, second, TimeScalesFactory.getUTC()).shiftedBy(millis);
Here the error:
invalid parameter eccentricity: -0 not in range [0, ∞]
org.orekit.errors.OrekitException: invalid parameter eccentricity: -0 not in range [0, ∞]
at app//org.orekit.orbits.KeplerianOrbit.checkParameterRangeInclusive(KeplerianOrbit.java:1624)
at app//org.orekit.orbits.KeplerianOrbit.<init>(KeplerianOrbit.java:206)
Do I make something wrong?
Thanks in advance!
Alberto