I’m comparing the semi major axis for a satellite directly from Orbit Mean element messages (OMM) from Spacetrack with the semi major axis obtained from SGP4 from TLE’s (at the same epoch as the OMM) also from Spacetrack. The values seem to be different by a few kilometres consistently. Does anyone have any idea why? I’m thinking it might be because sgp4 is giving an oscillating orbit but the semi major axis isn’t oscillating in the plot. I’ve attached an example plot and how I get the sma from sgp4.
// Read text file containing tles for a time period and store in a list
List<String> tles = new ArrayList<>();
BufferedReader reader = new BufferedReader(new FileReader(path));
String line;
while ((line = reader.readLine()) != null){
tles.add(line);
System.out.println(line);
}
Object[] tlesArray = tles.toArray();
List<String> output = new ArrayList<>();
// Get semimajor axis for each tle stored
for (int i =0; i < tlesArray.length; i+=2){
String line1 = (String) tlesArray[I];
String line2 = (String) tlesArray[i+1];
TLE inputTLE = new TLE(line1, line2, TimeScalesFactory.getUTC());
TLEPropagator tlePropagator = TLEPropagator.selectExtrapolator(inputTLE);
String out = tlePropagator.getInitialState().getDate().toString() + " " + "%.3f";
out = String.format(out,tlePropagator.getInitialState().getA());
System.out.println(out);
output.add(out);
}
I don’t have a direct answer, just some questions to open discussions.
I see a time span from 2014 to 2022. How do you extrapolate the OMM? Do you use a TLEPropagator or do you take a lot of OMM files?
The TLEPropagator of Orekit returns a spacecraft state expressed in TEME frame. It is a frame specific to TLE. Are you comparing the two outputs in the same orbital frame?
Could you show us the difference in a shorter time span? Both a one day and one week comparisons would be welcome.
In the end I think that the problem here is that OP is comparing a “mean (SGP4)” semi-major axis (computed from the mean motion value, without applying the procedure described in the paper above), with the correct osculating value.
For example using the TLE below for BEESAT-2 I obtain 6873.571 km for the osculating semi-major axis at epoch and 6867.138 km for a “mean” semi-major axis computed by applying Kepler’s 3rd law using the mean motion value contained in the TLE. The error seems of the order of those encountered by the original poster.
For the OMM, i use the spacetrack api to pull omm messages within that time interval and then retrieve the mean semimajor axes from them. Alternatively, to compare one epoch, say today, you could use the query builder on spacetrack to get the elements and tle.
I use TLEPropagator to retrieve the state in the EME2000 frame then retieve the sma from the state. (Perhaps this is where i’m getting it wrong?).
I was thinking back about this issue and I wanted to understand further: do you think we should allow the TLEPropagator to let the user choose the state (s)he wants to retrieve, meaning osculating or mean ?
Something along the lines of what is already done in DSST, Brouwer-Lyddane or Eckstein-Hechler propagators ?
@andfio I’ve looked very quickly at the paper you mentioned but there are dozens of equations in the annexes so I didn’t take the time to pinpoint the right ones
If I am correct, as of now the user cannot retrieve the mean elements associated with the TLE but only access the osculating ones using the TLE propagator.
I think this could be a useful addition! Maybe in the form of a TLE.TLEtoMeanState() method ?
As for the paper, I had mentioned it thinking about part A. in the Appendix B: SGP4 Model (citation corrected thanks @MaximeJ )(sorry for not pointing to this in the original post!). That is where it is explained how to retrieve the mean semi-major axis value from the mean motion value provided in the TLE.
I think the same!
If we want to have the same semantic as in BL, EK and DSST I think we should add a static method computeMeanOrbit.
No problem.
I thought from reading the paper that PPT3 (for Naval Space Command TLEs) and SGP4/SDP4 (for US Space Command TLEs) were two different implementations (see the “Operational Implementations: 1964-1979” part of the paper). And we’re using SGP4/SDP4 for TLE propagation right ?
So I’m not sure we can apply the PPT3 logic to our TLEPropagator… (I may be wrong, I’m not really proficient with these models)