Detection of continuous maneuver

Hi all,

I am working on maneuver detection and I could use your help.

Here is my work : I have a known maneuver at a time t and two SP vectors, one before the date of the maneuver and one after. I have to detect this maneuver and to have the Delta_V and the duration Delta_t. So what I am doing is that I propagate forward the state before the maneuver and the state after backward. I assume constant acceleration a=+/-Delta_V/2Delta_t. I would like to find the Delta_V and Delta_t that minimize the distance d=f(Delta_t, Delta_V) between the states. First question, am I in the good way ?
To minimize this, what I was thinking is to initiate a maneuver into the propagator using the class ConstantThrustManeuver and to iterate with different values of Delta_t and Delta_V until the distance reaches a minimum.

Do you think could be possible ?

Thank you very much.


It could work, but I would suggest another way.

You could use orbit determination, by using two position-velocity measurements (one corresponding
to your state before and one corresponding to your state after), not estimating orbit itself (i.e. changing the orbital parameter drivers to not selected), and estimate the maneuvers parameters. This corresponds in fact to maneuver calibration.

Hello Luc,

Thanks for your answer. I understand but how could I estimate the maneuvers parameters ?

I looked more precisely at the available parameters in the Maneuver, PropulsionModel and ManeuverTriggers. Unfortunately, this does not map preperly to you needs, in particular there is currently no way to set up a ParameterDriver with the maneuver duration.

So you should probably ignore my suggest and go back to your initial solution. Sorry for the noise.

Indeed maneuver duration is not something we are able to determine with the current state of Orekit.
It would be a good addition though.
Is it worth opening an issue or shall we discuss the feasibility of doing it first?

It is certainly feasible.
The maneuver induces an acceleration a_man = dV/dt ⇒ ΔV = a_man Δt.
So if we change start/stop time, this means we add or subtract a small ΔV during the small Δt interval.
Hence from a spacecraft state Jacobian point of view, we have the partial derivatives: ∂V/∂Δt = a_man,
so the partials are really straightforward to compute.

I think it is worth opening an issue for that, and that we should have both start and stop time that could be estimated, or start time and duration. Start/stop are easier that start/duration because they correspond to naturally independent variable.

Of course, one has to take care of sign. For start time, the partial is rather ∂V/∂Δt = -a_man.

Hi Maxime, Luc,

Thanks for your reply, but I have a question, how can I find the start and end time of the maneuver if I don’t know either the duration or delta-v ?

I just opened the issue.

@Sacha, as of today, using Orekit’s orbit determination features, you can only estimate the ΔV vector (no dates).

So your initial solution may be a good way to achieve your goal.

Okay thank you Maxime, I’ll try and keep you update.