skyfielders / python-skyfield

Elegant astronomy for Python
MIT License
1.41k stars 211 forks source link

Can you load an EarthSatellite from a list of positions, or from position and velocity? #457

Open bismurphy opened 3 years ago

bismurphy commented 3 years ago

Hi!

I have a satellite on-orbit which has a GPS unit built in. I have a list of ECEF positions and velocities. There are 20 of these data points, spaced out by 10 seconds each. Is there a good way to load these in, in order to propagate an orbit with a precision that is better than the 1km afforded by TLE's? Ideally I'd like to have something like 10m precision.

Similarly, what's the highest precision I can get out of a listing like the one available for the ISS at https://spaceflight.nasa.gov/realdata/sightings/SSapplications/Post/JavaSSOP/orbit/ISS/SVPOST.html? Should I just take the Keplerian elements and feed those in, as per the Satrec method described at the end of https://rhodesmill.org/skyfield/earth-satellites.html? Again, 10m precision would be fantastic. Just not sure exactly how to build the satellite object.

Thanks!

brandon-rhodes commented 3 years ago

Good question — Skyfield does not currently have any facility for turning a series of observations into an orbit; while I have seen one or two publications online from T.S. Kelso about the subject, none of them have been specific enough that I am sure exactly how the relevant calculation would be constructed.

I'm not sure how precise a satellite orbit can be once it's freed from the number of significant digits of the TLE file. I have not seen 10m precision claimed anywhere, but, again, I'm not widely read in that literature.

Similarly, as I don't track satellites myself or operate one, I'm not sure what limit an orbit propagation runs into first if it's loaded from high-precision elements like the ones you link to. Does the satellite behave for a few weeks quite exactly as the final digits of precision would imply? Or does it very quickly diverge because of the irregularity of space weather and the near-earth environment? You will probably need to check with experts specifically in the satellite tracking and flight operations industry to learn more details — if you do, please feel free to share them here, and I'll be happy to update Skyfield's docs.

glangford commented 3 years ago

@tj-murphy Not something I have done, but this paper and the set of references might be helpful.

A Novel Method for Precise Onboard Real-Time Orbit Determination with a Standalone GPS Receiver https://www.mdpi.com/1424-8220/15/12/29805/pdf

Sec42 commented 3 years ago

I have run into a similar problem where I want to propagate a sat position from a list (>20) of (noisy) positions. I have not found any good code on how to do that yet. If skyfield could offer some help with this, that would be indeed a cool feature :)

brandon-rhodes commented 3 years ago

For interested contributors (or myself, if in the next year or two I find the time and interest to spend a week or two on the problem) here is what looks like a paper on the subject:

https://celestrak.com/publications/AIAA/2008-6770/AIAA-2008-6770.pdf

And the FORTRAN routines here have a file ASTDC.FOR that might be relevant:

https://celestrak.com/software/vallado-sw.php

A series of columns on the subjects of orbit determination and propagation are here:

https://celestrak.com/columns/

If someone were to show a working example of using the old Vallado code to build an orbit, that would move us a step closer to someone's being able to adapt the math to Python and get the same thing working there!

samokus commented 3 years ago

My tuppence: I'd be happy to be set straight on this from someone more knowledgeable though its not clear to me that the question as asked in the OP, first paragraph, is actually an orbit determination problem.

Each of the twenty data posvels, spaced by ten seconds, is individually sufficient to define "an" orbit (strictly, once one assumes a specific orbit model). It would be very different if the data were ranging or angles data. Strictly one could say, as per Brandon Rhodes' helpful answer here https://space.stackexchange.com/questions/14731/nuances-of-the-terms-mean-osculating-keplerian-orbital-elements/50546#50546, that there is no reason to expect the SGP4 orbit to pass through any of the points its fitted from, though really that applies to any kind of orbit determination anyway, they all have residuals.

Putting it another way, if Skyfield can already output posvels from a TLE then, in principle, it could also do the reverse as there is a one to one mapping between them; caveat, to the level of the vaguaries of the SGP4 algorithm. I know this is a bit of a leap but its better than nothing, particularly as the OP has a stream of twenty such posvels from which twenty TLE's can be created and all propagated forward in a cloud, giving an idea of the spread of possible orbits.

dcajacob commented 1 year ago

I've just released a proof of concept for this: https://github.com/dcajacob/tle-tailor