Understanding purpose of Thrust Direction And Attitude Provider when setting up a maneuver

I am setting up a script to compute and apply low thrust maneuvers to my satellite. I have set up my custom maneuver as follows:

# Set up thrust direction and attitude provider
    thrustDirProvider = ThrustDirectionAndAttitudeProvider.buildFromDirectionInLOF(
                    LOFType.QSW,    # local orbital frame (QSW frame is same as RTN )
                    thrustDirectionProvider,  # variableDirectionInFrame
                    Vector3D.MINUS_I  # thrusterAxisInSatelliteFrame
                )

    # Define custom maneuver and add to propagator
    customManeuver = Maneuver(thrustDirProvider, maneuverTrigger, customPropulsionModel)
    propagator_num.addForceModel(customManeuver)

My script works. However, i am unable to understand the purpose of the ThrustDirectionAndAttitudeProvider being used. I have also noticed that changing the thrusterAxisInSatelliteFrame from Vector3D.MINUS_I to Vector3D.MINUS_J doesn’t change the output (orbital elements) of the simulation

Can someone explain what this ThrustDirectionAndAttitudeProvider does during propagation?

Additional info: In my script getDirection() and getThrustVector() methods of my custom PropulsionModel are already set up to return the thrust vector and thrust direction in satellite frame. And computeThrustDirection() method in my custom ThrustDirectionProvider returns the thrust direction in local orbit (RTN) frame.

Hi there,

I would advise you not to use ThrustDirectionAndAttitudeProvider.
You can use any ThrustPropulsionModel in Maneuver and pass an AttitudeProvider as override if need be (otherwise it will use the SpacecraftState Attitude).

Cheersr,
Romain.

Hi Romain,

Thank you for your response. Is there a specific reason you ask me not to use the ThrustDirectionAndAttitudeProvider ?

The description of this class says this “manages” both the attitude of the satellite and the direction of thrust. Does this mean that this sets the attitude of the satellite according to the required thrust direction?

Hi,

ThrustDirectionAndAttitudeProvider is made for use with ConfigurableLowThrustManeuver, which is obsolete and has been removed on the develop branch.

The class Maneuver that you are already using is the one to go with. It takes three arguments:

  • Maneuver triggers. The simplest one is DateBasedManeuverTrigger that fires on a given time interval.
  • A propulsion model. If your thrust vector is constant in a given frame (not necessarily inertial), you can use BasicConstantThrustPropulsionModel
  • An optional (can be null) AttitudeProvider. If null, the attitude from the propagation will be used. If non-null, the provider you’re passing will be used. For example if you pass new LofOffset(frame, LofType.QSW) it will assume the thrust vector is given the QSW

Cheers,
Romain.