Platform Pointing Techniques#

Various pointing techniques have been developed that rotate the entire Platform Control Frame (PCF) so the \(\hat{x}_{PCF}\) unit vector is pointing in the desired direction. Most techniques are useful for instrument simulation work where the user wishes to have a simulation look at a given location while other techniques are useful when working with real instruments where attitude solutions are already provided for the platform. All of these techniques only modify the platform rotation matrix which allows the user to create multiple instrument look vectors in the Instrument Control Frame (ICF) and rotate them all, in a consistent fashion, to the final reference frame.

The plaform pointing techniques provide a standard set of core methods and users are free to develop their own solutions if they wish. We provide techniques to support common geometries encountered in atmospheric remote sensing, limb, nadir and standard. The various techniques are summarized in the table below. Note that we recommended the Roll Control setting to be used with each technique but this is only a guideline and users may choose to use other Roll Control values if it meets their needs. This list of techniques is not extensive by any means and we have built the OrientationTechniques class so the new techniques can be added as needs arise, including techniques developed by users.

Pointing Technique

Recommended Roll Control

Description

tangent_xyz_look

limb

Look towards a tangent point with an (x,y,z) unit vector.

tangent_altitude

limb

Look towards a tangent point with given height and geographic bearing

location_xyz

nadir

Look in nadir towards location given by x,y,z

location_llh

nadir

Look in nadir towards location at geodetic lat, long, height.

from_platform

Set platform orientation from :class`~.Platform` class. This is used for real instruments

unit_vectors

Set platform orientation with explicit \(\hat{x}_{ICF}\) and \(\hat{z}_{ICF}\) unit vectors.

azi_elev

standard

Look in azimuth, elevation and roll direction.

yaw_pitch_roll

standard

Look in yaw, pitch, roll direction

tangent_from_orbitplane

limb

Look towards a tangent point with a given height and bearing from the orbit plane.

Extreme Cases

It is difficult to provide sensible analysis for extreme cases. For example, the roll control zero point is undefined in limb mode when looking directly downwards. Similar conditions occur when looking horizontally in nadir mode. The software does detect these extreme conditions and attempts to do something reasonable but we strongly recommend the user only use limb and nadir roll control values for sensible and nadir geometries.

The standard setting has difficulties when looking straight up or down if used with techniques intended for nadir or limb geometries as the required azimuth of the instrument \(\hat{y}_{ICF}\) becomes undefined. The problem does not exist for the techniques specifically recommended for standard roll control as we ensure the users explicitly provides the azimuth information.


tangent_xyz_look#

Configures the platform so the instrument boresight, \(\hat{x}_{ICF}\), points in the specified look direction. The tangent point of the look vector is used as the target location for determining Roll Control in either limb or nadir modes.

( 'tangent_xyz_look',  roll_control,  parameters )

parameters is an N element array of 3 or 4 element arrays, [array[3], array[3], ...] or [array[4], array[4], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,3) or (N,4). All look vectors are expressed in the Geocentric Control Frame (ECEF)

Parameters
  • roll_control (str) – The Roll Control value applied to this set of measurements. Most users will use limb.

  • [0] (float) – x. The x component of the look direction unit vector

  • [1] (float) – y. The y component of the look direction unit vector

  • [2] (float) – z. The z component of the look direction unit vector

  • [3] (float) – roll. Optional [default 0.0]. The roll angle in degrees of the instrument control frame around the boresight, \(\hat{x}_{ICF}\), from the zero point implied by roll_control

Example:

def configure_look( platform: Platform ):
    utc  = ['2020-09-24T12:15:36.123456', '2020-09-24T12:15:37.456123', '2020-09-24 12:15:38.654321']
    pos  = [(52, -107, 600000), (52, -107, 600000), (54, -107, 600002)]
    look = [(0.58311235, -0.43069497, -0.68882642,  0.0), ( 0.58320668, -0.43220012, -0.68780304, 0.0), (0.5833907, -0.43522548, -0.68573615, 0.0)]

    platform.add_measurement_set('limb', utc, ('llh', pos), ('tangent_xyz_look', 'limb', look))
    obspolicy = platform.make_observation_policy()

Note

This technique is intended to be used for tangent altitudes that are below the observer’s position and above 5 km below sea-level. Look vectors outside this range are discarded.


tangent_altitude#

The platform looks at the tangent height, geographic bearing and roll specifie in the parameters. This technique should be used to get the instrument boresight look

( 'tangent_altitude',  roll_control,  parameters )

parameters is an N element array of 2 or 3 element arrays, [array[2], array[2], ...] or [array[3], array[3], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,3) or (N,4).

Parameters
  • roll_control (str) – The Roll Control value applied to this set of measurements. Most users will use limb.

  • [0] (float) – height. The height in meters above sea-level of the requested tangent altitude. This value should be less than the observers height and greater than 5 km below ground.

  • [1] (float) – bearing. The geographic, compass bearing in degrees of the tangent direction measured at the observer’s location. 0 is North, 90 is East, 180 is South and 270 is West.

  • [2] (float) – roll. Optional [default 0.0]. The roll angle in degrees of the instrument control frame around the boresight, \(\hat{x}_{ICF}\), from the zero point implied by roll_control


tangent_from_orbitplane#

The platform looks at the tangent height, bearing and roll specified in the parameters. The bearing is measured from the orbit plane rather than geographic North. This technique is only available on platforms that have a valid platform_locator object which calculates velocity in addition to position.

( 'tangent_from_orbitplane',  roll_control,  parameters )

parameters is an N element array of 2 or 3 element arrays, [array[2], array[2], ...] or [array[3], array[3], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,3) or (N,4).

Parameters
  • roll_control (str) – The Roll Control value applied to this set of measurements. Most users will use limb.

  • [0] (float) – height. The height in meters above sea-level of the requested tangent altitude. This value should be less than the observers height and greater than 5 km below ground.

  • [1] (float) – bearing. The bearing in degrees of the tangent point from the orbit plane. The forward looking direction, parallel to the platform velocity is the point of zero bearing. Bearing increases in the same direction as a compass bearing, i.e. clockwise when viewed from above: North->East->South->West.

  • [2] (float) – roll. Optional [default 0.0]. The roll angle in degrees of the instrument control frame around the boresight, \(\hat{x}_{ICF}\), from the zero point implied by roll_control

Note

The platform_locator can be set when you create an instance of class Platform.


location_xyz#

The platform looks at the given geocentric location (x,y,z) with roll of ‘roll’ degrees. Typically used for satellite nadir observations

( 'location_xyz',  roll_control,  parameters )

parameters is an N element array of 3 or 4 element arrays, [array[3], array[3], ...] or [array[4], array[4], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,3) or (N,4). All position vectors are expressed in meters in the Geocentric Control Frame (ECEF)

Parameters
  • roll_control (str) – The Roll Control value applied to this set of measurements.

  • [0] (float) – x. The x component of the target position vector

  • [1] (float) – y. The y component of the target position vector

  • [2] (float) – z. The z component of the target position vector

  • [3] (float) – roll. Optional [default 0.0]. The roll angle in degrees of the instrument control frame around the boresight, \(\hat{x}_{ICF}\), from the zero point implied by roll_control


location_llh#

The platform looks at the given geodetic location (lat, lng, height) with roll of ‘roll’ degrees. Typically used for satellite nadir observations

( 'location_llh',  roll_control,  parameters )

parameters is an N element array of 3 or 4 element arrays, [array[3], array[3], ...] or [array[4], array[4], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,3) or (N,4). All position vectors are expressed in meters in the Geocentric Control Frame (ECEF)

Parameters
  • roll_control (str) – The Roll Control value applied to this set of measurements.

  • [0] (float) – Latitude. The geodetic latitude of the target position in degrees.

  • [1] (float) – Longitude. The geodetic longitude of the target position in degrees

  • [2] (float) – Height. The height of the target position above sea-level in meters.

  • [3] (float) – roll. Optional [default 0.0]. The roll angle in degrees of the instrument control frame around the boresight, \(\hat{x}_{ICF}\), from the zero point implied by roll_control


azi_elev#

The platform looks in the direction given by azimuth, elevation and roll (applied in that order). Used for ground sites

( 'azi_elev',  roll_control,  parameters )

parameters is an N element array of 2 or 3 element arrays, [array[2], array[2], ...] or [array[3], array[3], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,2) or (N,3).

Parameters
  • roll_control (str) – The Roll Control value applied to this set of measurements.

  • [0] (float) – Azimuth. The geographic azimuth of the instrument boresight in degrees from North. Measured clockwise from North. 0 is North, 90 is East, 180 is South, 270 is West.

  • [1] (float) – Elevation. The elevation in degrees of the instrument boresight from the horizontal plane at the observer’s location. Positive elevation (0-90) is upwards. Negative elevation (-90 to 0) is downwards.

  • [2] (float) – roll. Optional [default 0.0]. The roll angle in degrees of the instrument control frame around the boresight, \(\hat{x}_{ICF}\), from the zero point implied by roll_control. Most users will use standard.


yaw_pitch_roll#

The platform applies pointing information in the order yaw, pitch, roll. This is useful for aircraft and balloon systems. Most users will choose to use standard Roll Control.

( 'yaw_pitch_roll',  roll_control,  parameters )

parameters is an N element array of 2 or 3 element arrays, [array[2], array[2], ...] or [array[3], array[3], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,2) or (N,3).

Parameters
  • roll_control (str) – The Roll Control value applied to this set of measurements.

  • [0] (float) – Yaw. The geographic bearing of the instrument boresight in degrees from North. Measured clockwise from North. 0 is North, 90 is East, 180 is South, 270 is West.

  • [1] (float) – Pitch. The pitch or elevation elevation in degrees of the instrument boresight from the horizontal plane at the observer’s location. Positive elevation (0-90) is upwards. Negative elevation (-90 to 0) is downwards.

  • [2] (float) – roll. Optional [default 0.0]. The roll angle in degrees of the instrument control frame around the boresight, \(\hat{x}_{ICF}\), from the zero point implied by roll_control. Most users will use standard.


from_platform#

The platform orientation is set by the parameters returned by the :class`~.Platform` class at the required times. This is used for real instruments

( 'from_platform',) or ('from_platform')

No limb control values or parameters are required.


unit_vectors#

The platform orientation is explicitly so the instrument \(\hat{x}_{ICF}\) and \(\hat{z}_{ICF}\) are positioned along the two unit-vectors defined by the 6 parameters. The orientation of \(\hat{y}_{ICF}\) is given by forming a right-handed orthogonal system. The roll_control value is ignored. Users should be careful as no checks are made to ensure the input vectors are orthogonal unit vectors.

( 'unit_vectors',  roll_control,  parameters )

parameters is an N element array of 6 element arrays, [array[6], array[6], ...]. It is anything that can be sensibly coerced into a numpy array of dimension (N,6).

Parameters