Greetings Orekit community,
I was thinking about working with some preliminary orbit determination and I had a quick look at what Orekit has. I might have missed it, but I could not see Gauss’ method among other preliminary orbit determination methods.
Is Gauss method included somewhere else or have you not implemented it on purpose for some other reason?
Thank you for your answer in advance
The Gauss method is not available in Orekit.
For angular based initial orbit determination you can use Laplace (i.e.,
IodLaplace.java) or Gooding (i.e.,
I recommend you to try the Laplace method because it is close to the Gauss method in terms of accuracy and use.
Please not that the Gooding method is also an angular based IOD method but it requires two first guess for the ranges values. However, it is usually not available.
According to the literature (see for example this), Gauss is much more useful than Laplace for Earth-orbiting objects, so I think it would be actually be nice addition to Orekit! There even exists an iterative version of it by the way, available in D. Vallado’s book.
Note that the advantage of both Laplace and Gauss is that as mentionned by Bryan they do not require any guess, so they could even be used to initialize Gooding.
I think it could be useful to open issues on the Orekit’s Gitlab repository to implement these new IOD methods. Gauss method will be easy to implement and validate following Vallado’s book. I think adding the Double-R iteration method could be also interesting.
I found this thesis which is very interesting about IOD.
Hello @bcazabonne , @Serrof
In the meantime, I myself were searching the literature for the accuracy of different IOD methods. As @Serrof mentioned, Gauss method prooves useful in certain cases which can be a nice feature for Orekit. I was also checking Vallado’s book and I think I may adapt his example to implement a Gauss method. I also found this thesis, which may prove useful particularly in this subject.
I will share the Gauss method once I write it, though it will be in Python since I am not competent in Java And I will try to open issue in Orekit’s Gitlab Repo if I can create the time.
Thanks for the discussion!
That’s great if you can contribute it! Don’t worry about the Python to Java translation, we can do it
Here is the Jupyter Notebook for the initial orbit determination with Gauss method. I’ve also compared it with Lambert and Gibbs methods.
It may be poor coding but I believe it does the job
IOD with Gauss Method.ipynb (24.0 KB)
Greate! Thank you!
Could you open an issue in our Gitlab repository with a title like “Add Gauss method for initial orbit determination”.
Also, could you put in the description the link of the current forum thread?
A small question, for Gauss method they are three coordinates for the observer (i.e. one per measurement). Can the observer be the same (at three different epochs) or Gauss method needs three different observers at three different locations?
Okay I will open an issue whenever I can, thanks.
On the other hand,
The code I have shared implements 3 observations from one observing location. But it is also possible and easy to apply different observation locations as well. From the below figure given in the Orbital Mechanics for Engineering Students book of Curtis it can also be seen:
Here, having three observations from same or different locations would not create a problem, since capital R vectors will change either way with the rotation of earth.
I haven’t looked at the code yet but I don’t understand what you mean by comparing it to Lambert and Gibbs. Unlike those Gauss is an angle only method. If you want to compare like for like, you need to use Laplace and Gooding.
Yes you are right, and thank you for the feedback @Serrof . Let me elaborate and fix what I meant there. By using 3 observations and utilizing angles-only Gauss method, we can find the respective position vectors of the satellite.
These three position vectors can later be used in Lambert and Gibbs method to estimate an initial orbit. This was what I meant, and I am sorry if I caused any misunderstanding.
Warning about code: In the code, I tried to test my findings with the results of an example which Vallado shared (Example 7-2). There has been some time since this book was first published so Vallado uses earth parameters slightly different than what we use here in Orekit. Therefore, the capital R vectors we find via this code does not match with Vallado’s results. Although I’ve tested and verified that this is the case, any other user is welcome to test it again. Its a good practice (though time consuming ).
After being certain about the source of this discrepancy I just overwritten these R vectors manually to get aligning results in the end.