Line of sight issues in Rugged module


I am new in using the rugged module (in python) for a simple GIFOV calculation with nadir pointing. Following your tutorials on rugged, I wrote a code which can compute GIFOV using the satellite propagation coordinates but I am facing two issues:

  1. Error (“line of sight does not reach to the ground”) occurs when sat GIFOV is approaching to the equator. Do we need to correct for line of sight vector?, if yes, how?.
  2. How can we fix nadir pointing in the GIFOV calculations?. also in orbit propagation computation?

Your response will be highly appreciated.

A nadir pointing should always reach the ground, so if the line of sight misses it, there is most probably a problem in the attitude law which is not nadir pointing.

You should ensure that the attitude quaternions are properly defined. They should represent the rotation between inertial frame and spacecraft frame (and then the line of sight of the sensor is expressed in spacecraft frame).

Hi Luc,
Many thanks for this reply. Perhaps, this is easy to do but I am really new into this and I do not know, how can I get (or compute) the attitude quaternions?. Alternatively, I defined attitude in rugged as TimeStampedAngularCoordinates(Date, pvs0, pvs1) where pvs0 and pvs1 are defined as PV coordinates at time t0 and t1. Is it wrong?.
Could you refer any example to get/compute the rotation between inertial frame and satellite frame?. or to compute quaternions?.
I shall be thankful.

Thanks and regards

It depends on what pvs0 and pvs1 represent, by I am pretty sure it is wrong, except if you built pvs0 and pvs1 specifically for this purpose.

The simplest way to create the quaternions is to use an Orekit propagator with a nadir attitude mode.
How do you compute the positions themselves? If you have either a precomputed ephemeris for position-velocity or an initial orbit, you can set up an Orekit propagator from this (either an Ephemeris propagator that will use interpolation or some other propagator that will compute the evolution by itself), taking car to add a NadirPointing attitude provider. Then the propagator will provide a complete sate with both position, velocity and attitude consistent with your settings.

Thanks Luc. The “pvs0 and pvs1” are actually pre-computed from orbit propagation with nadir attitude law.
propagator = EcksteinHechlerPropagator(initialOrbit, NadirPointing(inertialFrame, earth),
Constants.EIGEN5C_EARTH_MU, Constants.EIGEN5C_EARTH_C20,
Constants.EIGEN5C_EARTH_C30, Constants.EIGEN5C_EARTH_C40,
Constants.EIGEN5C_EARTH_C50, Constants.EIGEN5C_EARTH_C60)

Is it a wrong way of providing nadir attitude law in orbit propagation?.

As you already have a properly configured propagator with the correct attitude provider, you should
extract the TimeStampedAngularCoordinates using something like: state.getAttitude().getOrientation().

Hi Luc,

Many many thanks. It worked!!!