Connecting detectors, manoeuvres, and manoeuvre planning

Hi Orekit community,

I am new to Orekit and developing a simulator which should

  • perform manoeuvre planning at specified state of the sattelite
  • execute multiple burn manoeuvres at state of the sattelite.

I was reading through all of the forums in Orekit, but could not find a topic related to what I want to do. I think this topic would be useful for many users if any wants to develop a similar simulator.

To provide some detail, my goal is to perform the following.

I will generalise the detectors used so that every user can put there own detector required.

  1. propagate the sattelite state until it reaches a specific state of sattelite (use detector)
  2. When sattelite reach specified state (triggered by detector), perform manoeuvre planning. The code should extract the current state of the sattelite, and calculate a manoeuvre (dV and specified point to start burning).
  3. After the manoeuvre is planned, and the point to start burning is specified, propagate until that point using a detector (for my case, this would be mean argument of latitude detector).
  4. when that point is reached, start the burn (for my case, this would be finite burn).
  5. when burn is finished, using that finished state, the next manoeuvre is planned. This time, lets say 2 consecutive manoeuvre is planned.
  6. The state is propagated, and when the point to start burning for the first burn is met, the first burn of the consecutive manoeuvre is executed.
  7. After the completion of first burn, the second burn should start burning after half orbit of the first burn. This should be possible by date detector or eventshifter.

I already have all the detectors to be used, and manoeuver planning functions to be used. I am struggling to find a way to

  • start manoeuver planning when a detector is detected
  • start manoeuver burning when a detector is detected
  • start second manoeuver half orbit after the first manoeuver
  • connect all the components in one flow (how to handle the propagation between manoeuvers).

I hope this topic is helpful for many users in the Orekit community!!

Hi @metamon welcome

Maneuver planning is definitely something important for all Orekit users.
Looking at your process, it seems to me that you trigger maneuver planning a one specific discrete time, which puzzles me, except if it is linked to collision avoidance maneuvers.

What I have seen up to now is a two step process with some complete propagation over a future range without maneuvers (can be from one day to one month or more depending on strategy), and then to perform planning to change this trajectory.

For regular station-keeping maneuvers, it is therefore not a single discrete detector that triggers maneuver planning, but rather something like an external schedule (say plan maneuvers for next week). For collision avoidance maneuvers, there is a detector (for the upcoming collision) but I am not sure it is what you want.

Could you elaborate a little on your use case?

1 Like

Thank you for the quick reply!!

Could you elaborate a little on your use case?

Absolutely!!

What I am trying to create is a simulator involving two sattelites. The simulation tries to close the relative distance between the two sattelites, one just propagating without manoeuvre and one with manoeuvre to close the separation. Let me call the sattelite without manoeuvre ‘client’, and one with manoeuvre ‘servicer’. We will perform manoeuver planning and execution for this ‘servicer’ to close the gap between the ‘client’.

The first manoeuvre is planned when the separation between the client and the servicer reaches a specific number (lets say 200km) (assuming the servicer is dlowly approaching client by difference in orbital element). A manoeuver is planned (outputting dV and mean argument of latitude) which closes the gap between the servicer and client.

I am trying to control the rate at which the servicer closes the gap between the client by performing multiple manoeuvers.

Some manoeuvers involve two burns with one burn in radial direction, and one burn in in-track direction in RIC frame (servicer centric). So what I would like to do, is to perform two consecutive manoeuvres seperated by half an orbit.

The ‘maneuver #1 burn end’ is same timing as ‘maneuver #2#3 planning’ as the maneuver #2 and maneuver #3 has to planned using the state after the first burn (maneuver #1).

For now, I only have

  • the manoeuver planning function which outputs the a dV and mean argument of latitude to start burning, given the target rate of servicer sattelite getting closer to client sattelite and the current state of the servicer sattelite
  • detector for specific seperation between servicer and client sattelite
  • detector for mean argument of latitude

After I develop detector for burn duration )somehow), I would like to know a way to integrate everything together to achieve the simulation as shown in the diagram. Are you able to suggest any recommended way to do this (orekit function to use…, how to peroform consecutive maneuver using Orekit propagation)?

I think you should look at the maneuvers architecture with one Maneuver for each direction (radial and in-track), with custom ManeuverTriggers. Your ManeuverTriggers would be mutable objects that are updated during the simulation, so when the maneuver #1 ends, the trigger dates for maneuvers #2 and #3 are estimated and therefore the maneuvers will be triggered accordingly.
One way to implement that is to have your custom ManeuverTriggers store a TimeSpanMap of booleans representing the on/off maneuver status.