Hi all! I’ve just started to use Orekit in the last few weeks to perform some trade studies on some remote sensing concepts I am working on. Up until now - I had been using the NadirPointing as my attitude provider. I would like to offset the satellite boresite to be a varying amount of degrees from the nadir configuration. My satellite using a Circular FOV combined with an Elevation Detector to find access points to the ground. I had assumed that all I needed to do was to create a LofOffsetPointing using the Nadir Pointing as the Attitude provider and rotate the center (which I assumed was 0,0,1) along another axis a certain amount. I’ve tried that but it does not seem to have any effect. Am I on the right track?
Hi @JanzelO, welcome to the Orekit community!
You should rather use the LofOffset
attitude law, which does not require an underlying pointing and does allow offsets angle specification.
In fact, LofOffsetPointing
is a misnomer. It was first intended to be used with LofOffset
as the underlying provider and just to add some methods allowing to easily get the target ground point, hence the name. So if your needs for remote sensing are fullfilled by CircularFieldOfViewDetector
and you never directly use the attitude law itself, LofOffset
by itself will be sufficient. If on the other hands you need to call the getTargetPV
that LofOffsetPointing
inherits from GroundPointing
, then you should use LofOffsetPointing
with LofOffset
as its attitude provider.
Also if you have needs related to geolocation taking into account a Digital Elevation Model, then you should also look at the companion library Rugged.
Thanks Luc! I appreciate the clarification. Yes, I plan on exploring rugged after I have a bit more familiarity with the Orekit.
Sorry for reopening this discussion but I don’t understand how to achieve an Offset on top of the already existing provider.
For example, NadirPointing
provider aligns +Z of the satellite to the Nadir, and when one is interested in simulating an off-nadir, say, roll angle of 30 degrees (so +Z should be aligned 30 degrees away from Nadir), how to achieve that and add the same to the Propagator?
The primary attitude provider could be anything, like even SunPointing. I would be glad to understand how to add an offset to the primary provider which can then be added to the propagator.
Your new attitude provider should wrap another provider that will be an embedded field. In order to allow users to retrieve this embedded provider if they need to, it should probably implement the small AttitudeProviderModifier
interface.
You can look ho other implementations of èAttitudeProviderModifier like ('SpinStabilized
, YawCompensation
, or YawSteering
) work. The simplest case is SpinStabilized
. when the getAttitude
method is called, it starts by calling getAttitude
from the wrapped provider, and compute a new rotation/rotation rate/acceleration as a transform and then combines both to for a new transform that is used to build the combined attitude.