Hi, I’m working my way through the tutorials, currently looking at the orbit determination ones. Maybe it’s my lack of Java knowledge but while complete I can’t call it entirely helpful as there are no additional information(Video tutorial, or even tutorial PDF) to go with the code.
For example, to start I see the abstractOrbitDetermination and all it says it’s the base class for the OD tutorial. While I understand this is probably a very cleaver programming arrangement but it really confuses a beginner like me(it took sometime to realize this is not a Orekit thing but something created specifically for the tutorial). Just by looking at it I have questions like should I use this when I need to develop my own OD code or can this be simplified. I wish there is a bare minimal version of this. Like a hello world version.
I would like to still say that I believe Orekit is a very powerful and probably the most flexible Astro tool. But it comes with great complexity for beginners. If you guys believe this is my own lack of Java knowledge then ignore this as I do plan to continue to learn on my own. But if possible I think a better or more complete tutorial would be extremely helpful. I know some of my friends find the lack of tutorial (not just code) makes it difficult to use as well. Thank you for your consideration.
We agree there is a lack of beginners information on Orekit and that the orbit determination tutorial is too complex for now and comes without any explanation.
The Orekit team is well aware of this and tries to fix it. We want to improve documentation, we want to provide better tutorials and more tutorials (for example there are no tutorials on measurements simulation despite this is a frequent need for mission analysis). This is however a lot of work and up to now we were not able to do it properly, as we focused more on the library itself, unfortunately increasing the difficulty for newcomers as it became more and more complex.
The only thing I can suggest in the meantime is to ask questions on the forum. The Orekit community is doing very well and people are helpful (not only the developers team, but also users that help each other).
So don’t hesitate to ask.
Sorry for the difficulty of the orbit determination tutorials. Maybe you can have a look on the orbit determination tutorial develop by Clément Jonglez. It is available here. Even if it is in Python, the philosophy of the initialization of the parameters is closed to Java.
We will try in the future to provide more user-friendly tutorials. Especially by using that kind of Jupiter Notebook.
Thank you for getting back, yes, everybody have been extremely helpful and it’s a very actively community. I will start with the easier tutorial and build out my understand of Orekit and Java.
On a different note, would you be interested to have someone as a volunteer tutorial writer for Orekit? I’d like to help if there is the need. You can privet message me if there is such interest. Thanks!
Hi, thanks, that is a great tutorial I’ll be taking a look for sure.
I’m curious, at the current level of Orekit development, would the recommendation be continue to use Java with Orekit or is using the Python wrapper with Orekit better? I’m asking mainly because I’m more comfortable with Python, however, if there are advantage in running Orekit with Java I’m certainly have no problem continue down the path of using Java as well. Thanks.
I completely feel you. Four months ago I started using Java and Orekit for the very first time. At the moment, I already have a custom OD system which uses Orekit. What I can recommend you is going through the tutorials and trying to understand the implemented blocks. If you need to go deeper in some classes, synchronises with Orekit repository and look there the class, the advantage is that the repository has not only the javadoc comments (the ones you can find on Orekit API webpage) but also more code comments in which each process is detailed.
Once you understand more or less what is going on the tutorial, “try and error” is one of the best options for learning. Learn how to debug Java codes, then try to copy the tutorial classes, simplify and modify them towards your needs. With time everything will work
Thank you I really appreciate the tip. Can you elaborate a little bit on the use of the try and error, or maybe an example? I know What try an error is but I’m curious what is your exact way to learn from it?
Also when you say implementation block can you show me an example? Thanks.
Both use are correct, the choice really belong to the users and their preferences. The core team develops the Java library and then the Python team adapt the port when a new release it made (often just a few days after the release). So the two projects are synchronized at release time.
Sure, with implementation block for instance in NumericalOrbitDetermination tutorial is the AbstractOrbitDetermination class which handles all the steps. There you can find portions of the code dedicated to the propagator builder configuration, estimator initialization, measurements, etc. These portions are the ones I refer to as a block, you can see the blocks also like the different methods you can find inside the class.
With “try and error” I mean to change a little these codes and see what happens, for example, focusing on the input observables, you can try to introduce a custom precomputed range values.
If you still find it difficult you can try also from the very beginning, the core of the Least Squares is implemented in the Hipparcus Optim library, starting to make dummy examples using this library can sometimes help.
Once again, thanks again. Statements like “AbstractOrbitDetermination class which handles all the steps”, really help. I’ve been taking Java courses, but I had no realized the OD tutorial was built with such abstract as the step drivers in mind.
Yes, I have started to try to learn from the very basic. I’m creating a class for every package in the Orekit, just to learn and document the various way of using the packages. I’ll keep your recommendation in mind. Appreciate the feedback.
Depending on my projects, I use either Orekit Java directly or the Python wrapper (for smaller projects or those where having access to Python tools such as plotting libraries is useful). Once you’ve built a knowledge of the library, it is fairly easy to switch between the two. So if you are more comfortable with Python, you might want to start there so you can focus on learning the library without the additional difficulty of working in a language you’re not familiar with. Recreating the Java tutorials in Python could be a good exercise, and something that could be contributed to the project afterwards.
The only downside with the Python wrapper that I am aware of is related to performance. In general, performance should be roughly equal between the two. Except if you need to create Python subclasses for things that are called at a high frequency during propagation, typically EventDetector or AttitudeProvider. If you create your own subclasses in Python, there will be frequent back-and-forth between Java propagation and your Python classes and this will hurt performance. For everything else, Python should work just as well as Java.
Hi yes, I have start to work/learn to use Orekit on Python. I making a Jupyter notebook for every package, and within the package I’m try to use and writing down as much example as I can find for each of the classes.
I find the Python usage a bit easier, as I don’t have to figure out what object type for the instance variable that I have to set (the mismatch cased me a lot of headache). I feel that often times it was very difficult for me to figure right the right object type to use. I do plan to go back to Java after I feel more comfortable with Orekit on Python. But I want to go with Python for now as Python has easier plotting capability. How do you guys recommend plotting with Java?
In pure java, I’ve been quite satisfied with JFreeChart. I have not used it for a few years though, so it’s possible that a better library has appeared nowadays.
Another route could be to produce data files from your java program, and then plot them with the solution that you are familiar with.