Targeting using Orekit

Dear all,

First of all thank you for this amazing tool you developed. I am new here and I was wondering if it is possible to perform orbit targeting with Orekit. I managed to perform scenarios with ConstantThrustManeuve such as inclination changes or Hohmann transfers. I am using high thrust, however, the time, direction of thrust and time when the maneuvers are performed does not reach exactly the orbit I want to reach. I was wondering if there is a way to perform a Differential Corrector in Orekit or if I need to do it on my own. I will be really grateful if someone did something similar and has examples or has any idea about how implement this.

Thank you all

Dear @antonio.checa,

Welcome to the Orekit community and thank you for your kind words.

To my knowledge, there is no built-in method or class in Orekit that would do this kind of maneuver adjustments.
But this would be a much-appreciated addition if you feel like contributing it :wink:

Hope the community will be able to help you more than I do.


Dear @MaximeJ , thank you and I am really sorry for not answering earlier.
I came back to try again this differential corrector scheme and I have a couple of questions.

  • To compute the jacobian, I tried to use the driver parameters from the maneuver object but I could only find thrust, isp, mass flow rate and for scaled propulsion models, the scale factors, but not the direction of such maneuver. To perform such correction, I only need the partial derivatives of the state w.r.t the maneuver acceleration.
  • I also tried to insert my own variational equations, but I am a little bit lost with this since the examples I found are from last versions. I am trying to use the PythonFieldAdditionalDerivativesProvider but I am getting the same error as @Serrof in this other post: Additional derivatives of propagator. Something about using the same name for the yield method as the python yield.

If you could help me to find the best way to obtain the partial derivatives w.r.t. this acceleration or add the direction of the maneuver as a ParameterDriver so I could use setupMatricesComputation to get the jacobian, I would be really grateful :).

With respect to contributing it, I would love to, but I am not really familiar with Java. I can provide the Python code as soon as I make it work!

All the best,

Hi @antonio.checa,

Welcome back on the forum and thanks for the update.

Indeed when we overhauled the maneuvers package a few years back only the “basic” and “scaled” constant thrust propulsion models were added.
Maybe you could open an issue for adding the “vector” version ?
I was thinking on replacing the AbstractConstantThrustPropulsionModel + ``Basic…+Scaled…` by an enumerate by the way.
So, to answer your question, you can either:

  • Develop your own extension of AbstractConstantThrustPropulsionModel that would use the X, Y, Z value of the thrust as ParameterDriver
  • Use the Scaled version of the propulsion model, get the Jacobian w.r.t to the scale factors, and multiply this last by a diagonal matrix made of the inverse of the initial thrust on X, Y, Z.

That way you should obtain the partial derivatives of the final state with respect to the three components of your maneuver.
Is that what you’re looking for ?