Offset on GroundPointing and YawSteering

Dear Orekit community.
I am asking some support in understanding the proper usage of the YawSteering attitude provider.

So by default, YawSteering accepts a GroundPointing attitude provider, that will govern the main attitude law of the satellite. Then we can set up a phase angle to align the secondary axis of the satellite.
Is my understanding correct?
I have few questions.

  1. Can we add another PVCoordinatesProvider rather than the sun in the YawSteering attitude provider, so constraining the secondary axis to steer direction let’s say the Moon?
  2. There is no check if we point the Earth, and main body is Earth. Or phasing orientation is the same as the orientation pointing ground (like +Z and +Z). I encountered some “Cannot normalize a Zero vector errors”.
  3. How can we have another primary axis pointing ground? GroundPointing has harcoded axis the Vector3D.PLUS_Z, right? Is there a way to do it with the new GroundPointingAttitudeModifier? How so?

Thanks!

Alberto

You should have a look at the new AlignedAndConstrained attitude mode, it may be better suited to your needs.

Thanks for the quick response and suggestion, AlignedAndConstrained can definitely solve some use cases.

However here my objective is to use the YawSteering attitude mode.
Maybe the 3 questions where addressing too different topics?
More globally, can I orient the satellite to point Earth with another axis rather than the hardcoded +Z?
Is my understanding correct that I can potentially give to YawSteering attitude the Moon celestial body instead of the Sun? (so eventually the function call would be a bit misleading having sun as name of the variable)?

Thanks

Alberto

You currently cannot change +Z, it is hardcoded. What you can do is postprocess the attitude to switch axes after the fact.
You can use Moon as the target.

Thanks for the confirmation.
So I will propose two small updates:

Hi Alberto,

I would actually propose to have a new implementation of AttitudeProviderModifier, which “swaps” two directions using a Rotation. This would allow to have any axis in ground pointing, not just the Z one. What do you think?

Cheers,
Romain.

3 Likes

As solution, we could also use the LofOffsetPointing, to to orient the GroundPointing attitude provider it embeds. I propose this modification for the specific case of Ground Pointing attitudes.

I must say I’m confused by the implementation of LofOffsetPointing. It inherits from GroundPointing yet bypasses everything there since it basically delegates to the input attitude provided for getAttitude(Rotation).