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

Re: [Orekit Users] Newbye question on how to get satellite location given a TLE

Thank you for your reply and for your time!

2014-03-11 9:25 GMT+01:00 Luc Maisonobe <Luc.Maisonobe@c-s.fr>:
Le 10/03/2014 20:30, Marco Serioli a écrit :
> Thank you for your super fast reponses!!
> Here you are what I have done in order to get altitude, latitude and
> longitude of sat: http://codepaste.net/horgh2

Here are a few advices.

Despite configuring OREKIT_DATA_PATH still works, I would not recommend
using it anymore. The following is more easy to read and understand:

   File home = new File(System.getProperty("user.home");
   File data = "" File(home, "Desktop/orekit");
       addProvider(new DirectoryCrawler(data);

Starting from a TLE and using it only as initial condition for a
Keplerian propagator leads to big errors. This is due to the orbital
models. TLE is something very specific that is difficult to convert
into other models. If you start with a TLE, either keep it all the way
through, or convert it using more elaborate methods (see the
propagation.conversion package and the associated Junit tests for examples).

In your case, as your propagation model includes a 10x10
Earth gravity field, you should really do the conversion.

> I have compared results with satview.org <http://satview.org> for OSCAR
> 7 AO-7:

If you want to compare with another propagator, you should know what
this propagator uses as a model. I guess all web based trackers use TLE.
In this specific case, instead of using a numerical propagator with a
10x10 field, just keep the initial TLE propagator.

Orekit propagators all implement the Propagator interface, which means
all of them can be used with step handlers and event handlers. switching
to another propagator should work without any problem.

Ok. I have changed my code in order to use TlePropagator as you suggested. So I have posted my new code here: http://pastebin.com/285eLcRR

My TLE is about 10 hours old.

// gives me: Age of TLE (s): 35703.5268; (h): 9.917646333333334 (d): 0.41323526388888887
AbsoluteDate now = new AbsoluteDate(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime(), TimeScalesFactory.getUTC());
double ageOfTle = now.durationFrom(tle.getDate());
logger.info("Age of TLE (s): "+ ageOfTle + "; (h): " + ageOfTle/(60*60)+" (d): " + ageOfTle/(24*60*60));

/* now i use TLE propagator in this way */
TLEPropagator tlePropagator = TLEPropagator.selectExtrapolator(tle);
tlePropagator.setMasterMode(1.0, new TutorialStepHandler());

tlePropagator.propagate(now, now.shiftedBy(3600));

> Mine:
> date: 2014-03-10T19:24:00.000
> altitude: 1453.9749291524224
> latitude: 24.804338612981198
> longitude: -49.60234374328559
> Satview.org:
> date: 2014-03-10T19:24:08.000
> altitude: 1451.68
> latitude: 25.63
> longitude: -49.47.
> TLE data for this sat is the latest I can get
> from http://www.celestrak.com/NORAD/elements/amateur.txt
> Can this difference be acceptable (given that satview could be a good
> reference).. or there is a mistake of mine?

These differences are extremely large! However, I don't expect anything
based on TLE to give accurate results. The problem is mainly the quality
of the input data. If you are sure you and the other propagator use
exactly the same input TLE and both use the vanilla TLE propagator, then
you should be good. If you change propagator (which you did here) or you
use another TLE for the same satellite, you can get very large
differences. From one TLE to the next published ones, you can get
hundreds of kilometers errors. Publicly available TLE data is not meant
to be used for accurate comparison.

So I would first advise to use directly the TLE propagator for this
comparison, trying to make sure you use the exact same TLE as they use.

I don't know which TLE they use.. maybe there another way to track a sample satellite in order to get my accuracy? Or another way not using TLE?
There is also to say that the measurements that I take is to move an HF 50MHz radio antenna. So this kind of error maybe acceptable..

Another point that may explain some differences (but not at kilometer
level!) are the frames. TLE use their own frame (called TEME), and there
are several possible Earth frame to project to. You selected the most
accurate one (a good choice), but it needs recent Earth Orientation
Parameter data to be at its full accuracy. You can update the
finals2000A.all file in the orekit-data folder with up to date data you
get from here:
If the other propagator doesn't use the same Earth frame, or doesn't
apply EOP corrections, you can get a few meters errors. Don't care about
that for now, you should first try to track down from where you
kilometers errors come before fine tuning the frames.

I have not tryed yet to change Frame by now, in order to understand how get better accuracy from TlePropagator.

This is the result I get with last changes, compared with satview results:

Measurement date: 2014-03-11T15:16:59.052
Altitudde: 1443.8754853445319 Km 
Azimuth: 348.644872431631° 
Elevation: -54.5544740479099° 
Latitude: 16.939192631846876° 
Longitude: -159.2128446809584° 
Sampled values: 3601 

Measurement date: 2014-03-11T15:16:59
Altitudde: 1442.39 Km 
Azimuth: 349.14° 
Elevation: -54.00° 
Latitude: 17.45° 
Longitude: -158.69° 

Altitudde: 1.4854 Km 
Azimuth: .49° 
Elevation: .55° 
Latitude: .51° 
Longitude: .52° 

Thank you very very much for your time.
best regards,

> Thank you very very much!
> Marco
> 2014-03-10 17:30 GMT+01:00 MAISONOBE Luc <luc.maisonobe@c-s.fr
> <mailto:luc.maisonobe@c-s.fr>>:
>     Hi Marco,
>     Marco Serioli <mserioli@gmail.com <mailto:mserioli@gmail.com>> a écrit :
>         Hi and compliments for your super project!
>     Thanks a lot for these kind words.
>         I'm a newbye and moreover I know nothing about background
>         concept of this
>         project.
>         I'm simply developing a software in which I have to find azimuth and
>         elevation of a Satellite at a given time from a given Ground
>         Station.
>         Moreover I want to find Satellite lat and long.
>         What I have tryed to do is: after setting OREKIT_DATA_PATH,
>         create a TLE
>         object
>         TLE tle = new TLE(
>             "1 07530U 74089B   14068.85842801 -.00000028  00000-0  96998-4 0
>          9129",
>             "2 07530 101.4628  53.9967 0012290 127.9050 292.4577
>         12.53603117799073");
>         TLEPropagator propagator = TLEPropagator.__selectExtrapolator(tle);
>         But I have not found a way to create a ground station.
>     You can use TopocentricFrame for this, and even better
>     ElevationDetector (which is built from a topocentric frame) if you
>     want to automatically display start and end of visibilities from
>     this specified station. You can look in the src/tutorials  folder in
>     the source distribution (fr.cs.examples.propagation.__VisibilityCheck).
>         Moreover I can get
>         only PVCoordinates from propagator and I don't know how to get
>         relative
>         angular coordinates to plot satellite position projected on a
>         world map.
>     In order to display geodetic coordinates, you can look at another
>     tutorial: MasterMode. There, you will see a local implementation of
>     OrekitFixedStepHandler. Copy it and replace the print part in the
>     handleStep with a new print dedicated to geodetic coordinates. In
>     order to compute these coordinates, you would have first created a
>     model for Earth as follows:
>      Frame earthFrame =
>     FramesFactory.getITRF(__IERSConventions.IERS_2010, true);
>      BodyShape earth = new
>     OneAxisEllipsoid(Constants.__WGS84_EARTH_EQUATORIAL_RADIUS,
>     Constants.WGS84_EARTH___FLATTENING,
>                                             earthFrame);
>     and then in the handleStep method you can do:
>      GeodeticPoint gp =
>        earth.transform(curentState.__getPVCoordinates().__getPosition(),
>                        currentState.getFrame(),
>                        currentState.getDae());
>     Then you can print gp.getLatitude(), gp.getLongitude(),
>     get.getAltitude().
>         How can I get information requested?
>     You should browse the tutorials and look at
>     <https://www.orekit.org/forge/__projects/orekit/wiki
>     <https://www.orekit.org/forge/projects/orekit/wiki>>.
>         Thank you and sorry if my question is silly
>     No problem, you're welcome
>     Luc
>         Marco
>     ------------------------------__------------------------------__----
>     This message was sent using IMP, the Internet Messaging Program.