I am new to Orekit and confused while working on it. Sorry if I am asking a stupid question.
I am trying to calculate the position and velocity of a LEO satellite in ECEF frame (or TEME since I can convert it to ECEF). In Best Practices for Propagating LEO Satellite for long durations, you recommend using DSST with a predefined initial state. However, It is not discussed how I should define an initial state.
My question is, how can I define the initial state of a satellite to obtain the best accuracy? I used TLE data with SGP4 before searching for a better propagator. Can I use TLE data with the DSST propagator without loss of accuracy? If I should get better data, where can I get it?
Specifically, I am working on Iridium NEXT satellites, but my questions are for the general case.
Thank you for your time and interest,
Hi @mahmutercan, welcome
If your initial data is from TLE, this is more complicated than with other types of orbit. TLE correspond to a mean model and are tigthly bound to the SGP4/SDP4 propagators. In fact, you cannot use any other propagator.
So if you want to propagate with something better, you have to convert the data, and as SGP4/SDP4 are mean models, this cannot be done on a single point but rather on a long arc that expands at least one or two orbits. The idea is to set up a
NumericalPropagatorBuilder or a
DDSTPropagatorBuilder, from it to set up a
JacobianPropagatorConverter. Then you can call its
convert method with a source propagator (here the
TLEPropagator you can select from your TLE), a time span, a number of sampling points and some free parameters (for example if you want to adjust some propagation models like drag coefficients).
This process will tune the numerical propagator or DSST propagator (mainly its initial state, but as written above you can adjust also other model coefficients) so that it remains close to the source propagator throughout the time range. Converting a TLE on one initial point only would really not work, you have to use some kind of fitting.
Hi @luc, thanks for your quick reply!
As I understood, to use TLE data with DSST or another propagator, I should also update the TLE data (in other words, propagate it, as it is called TLEPropagator). But it seems like a long shot, and I don’t know how to propagate or perform some kind of fitting the way that you explained.
Do you have any advice on selecting the time span, the number of samples, etc? Actually, I am not obliged to use TLE data, but it is the only open-source data I know. Any advice using another open-source data?
I am very new to this topic and know little about such propagators. Any help will be appreciated.
Again thanks for your help,
Yes, this is a convoluted process.
There are several problems with TLE. The first one is this this conversion problem. The second one is that TLE are not very accurate, SGP4/SDP4 are analytical models that take into account a small set of perturbations. The third one is the fact TLE are very unreliable, the main source is from the public NORAD catalog and we don’t know how they are updated. I remember a conference by T.S. Kelso a decade ago where he presented one worse case with a satellite position in GTO that was wrong by 60000km (he insisted this was really kilometers on the plot), because some update of the orbit was not done, despite the operator did notify about the maneuvers. Seeing position errors in the range of kilometers or more is the rule. You can read the Celestrak page about the Iridium/Cosmos collision in early 2009, which shows that you just cannot expect accuracy from TLE data.
Given these problems, one can wonder why TLE are used at all. The solution is simply because for many satellites, it is the only data publicly available. One other big data source is CDDIS, and this is extremely accurate (down to a few centimeter level), but this is only for satellites that are related to geodesy and navigation (because GNSS is used for geodesy, despite it was not designed for that).
I am wondering about your needs: you say that you are interested in long term propagation. Do you mean you will propagate the data extracted from TLE for weeks? IF you are going to propagate more than a few days, you will be very far from reality. And if you are going to use TLE data at all, converting to another propagator will induce additional conversion errors, so I doubt you will get any useful results. Even if you could get some accurate non-TLE data, beware also that propagating low Earth orbiting operational spacecrafts is not possible on the long term if you don’t know the station-keeping strategy. The operators will update the orbits from time to time to meet mission requirements.
Sorry for the misunderstanding. I didn’t point out that I am interested in short-term propagation, which is a maximum of 24 hours. I am trying to estimate a LEO satellite’s position and velocity in the ECEF frame in real-time (for example, each second). Since TLE is provided in 24h period, and as you stated, it is the only publicly available data, I am trying to use it effectively.
More specifically, my problem is to estimate a LEO satellite’s position and velocity using any publicly available data as accurately as possible.
Then the best you can do is just use the
TLEPropagator itself, there is no need to convert
it to something else.
So you get the propagator and the ECEF frame as follows:
TLEPropagator propagator = TLEPropagator.selectExtrapolator(tle);
Frame itrf = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
And for any date of your choosing you can call
TimeStampedPVCoordinates pvt = propagator.propagate(date).getPVCoordinates(itrf);
As explained in another thread, if you want to get the position-velocity over a full range, you can use a step handler to pick them up on one go.
This seems like a proper way to solve the issue I have asked. Thank you so much for replying to the questions pretty quickly and properly . I will write again under this post if I encounter any difficulty.