attitude_analysis: Module to obtain instrument pointing direction in various reference frames
attitude_analysis module includes functions for finding the instrument pointing direction in spacecraft orbital frame(ORF), GEI J2000, ECEF, ITRF,
NEC, NED and ENU.
Additional functions are available to calculate the look angles of the spacecraft and the instrument with respect to a ground point, line-of-sight look direction vector from the ground point to the spacecraft and the distance between spacecraft and the ground point. Slew quality can be calculated given the threshold for the angle between the LOS direction and the instrument pointing.
@author: ceren
- attitude_analysis.LA_inst(vec, e, n, lon, lat, pLon)
- vecArray of float
Boresight pointing vector.
- eint
Column of the east vector in vec.
- nint
Column of the north vector in vec.
- lonnumpy.ndarray[float]
spacecraft longitude (degrees).
- latnumpy.ndarray[float]
spacecraft latitude (degrees).
- pLonfloat
Longitude of the target on the ground (degrees).
- dictdict
Look angles of the instrument: azimuth and depression. vec_azim: Array of float
Look angle of the instrument in horizontal plane (degrees)
- vec_dep: Array of float
Depression angle of the instrument (degrees)
inst_look_angles = LA_rri(RRI_enu, 0, 1, Lon, Lat)
- attitude_analysis.LA_sat(plon, plat, palt, slon, slat, salt)
Calculates the satellite look angle: elevation and azimuth angle that is needed for the satellite to look towards a point in GEO frame.
- Ref: ASD5: Earth Station Look Angles By Prof. Gregory D. Durgin,
Astrodynamics, Georgia Tech, 2009.
- plonfloat
Longitude of the target on the ground (degrees).
- platfloat
Latitude of the target on the ground (degrees).
- paltfloat
altitude of the point in GEO frame (km).
- slonnumpy.ndarray[float]
spacecraft longitude (degrees).
- slatnumpy.ndarray[float]
spacecraft latitude (degrees).
- saltnumpy.ndarray[float]
altitude of satellite in GEO frame (km).
- dictdict
Look angles of the spacecraft: azimuth and elevation. azimuth: numpy.ndarray[float]
Satellite location in terms of azimuth (degrees).
- elevation: numpy.ndarray[float]
Elevation angle of the spacecraft (degrees).
sat_look_angles = LA_sat(plon, plat, palt, slon, slat, salt)
- attitude_analysis.calculate_los_vec(pLon, pLat, pAlt, slon, slat, salt)
calculates line-of-sight vector from a point to the spacecraft location using the geopy.dist.geodesic
- plonfloat
Longitude of the target on the ground (degrees).
- platfloat
Latitude of the target on the ground (degrees).
- paltfloat
altitude of the point in GEO frame (km).
- slonnumpy.ndarray[float]
spacecraft longitude (degrees).
- slatnumpy.ndarray[float]
spacecraft latitude (degrees).
- saltnumpy.ndarray[float]
altitude of satellite in GEO frame (km).
- los_enu_arrnumpy.ndarray[float]
line-of-sight vector from the point to the spacecraft in ENU system.
- los_ned_arrnumpy.ndarray[float]
line-of-sight vector from the point to the spacecraft in NED system.
- attitude_analysis.calculate_reception_angle(inst_ned, pLat, pLon, pAlt, lat, lon, alt, inst='boresight')
function to calculate the reception angle of an instrument. reception angle: angle between the instrument look direction vector and the line-of-sight vector from the target
- inst_nednumpy.ndarray[float]
instrument look direction vector in North-East-Down.
- pLatfloat
geodetic latitude of the target (degrees).
- pLonfloat
geodetic longitude of the target (degrees).
- pAltfloat
Altitude of the target (km).
- latnumpy.ndarray[float]
spacecraft position in geodetic latitude (degrees).
- lonnumpy.ndarray[float]
spacecraft position in geodetic latitude(degrees).
- altnumpy.ndarray[float]
spacecraft altitude (km).
- inststr, optional
cra is calculated as (90-ra) for dipoles, (180-ra) for boresight. input can be boresight or dipole. The default is ‘boresight’.
- ra_losnumpy.ndarray(float)
reception angle of the instrument (degrees).
- cra_losnumpy.ndarray(float)
complementary reception angle of the instrument (degrees).
- attitude_analysis.find_instrument_attitude(rotated_body, geiX, geiY, geiZ, geiVx, geiVy, geiVz, geoX, geoY, geoZ, time_array, start_date, end_date, lat, lon, method1='ephemeris', frame2='itrf', frame3='nec')
Takes in the rotated body vector in orbital frame and outputs instrument look direction in NEC or NED coordinate systems by utilizing the functions in use_rotation_matrices module.
- rotated_bodyTYPE
DESCRIPTION.
- geiXnumpy.ndarray[float]
X position in GEIJ2K (km).
- geiYnumpy.ndarray[float]
Y position in GEIJ2K (km).
- geiZnumpy.ndarray[float]
Z position in GEIJ2K (km).
- geiVxnumpy.ndarray[float]
X component of velocity in GEIJ2K (km/s).
- geiVynumpy.ndarray[float]
Y component of velocity in GEIJ2K (km/s).
- geiVznumpy.ndarray[float]
Z component of velocity in GEIJ2K (km/s).
- geoXnumpy.ndarray[float]
X position in GEO (km).
- geoYnumpy.ndarray[float]
Y position in GEO (km).
- geoZnumpy.ndarray[float]
Z position in GEO (km).
- time_arraydatetime.datetime
time.
- start_datedatetime.datetime
start of the experiment.
- latnumpy.ndarray[float]
Geodetic latitude in degrees.
- lonnumpy.ndarray[float]
Geodetic longitude in degrees.
- method1str, optional
Transformation method to ICRF/GEI J2K. Can be ‘ephemeris’ or ‘orbital_elements’. The default is ‘ephemeris’.
- frame2str, optional
Terrestrial frame: ‘ecef’ or ‘itrf’. The default is ‘itrf’.
- frame3str, optional
Final coordinate system. The default is ‘nec’. Options are: ‘nec’, ‘ned’, ‘enc_u’, ‘enu’
- inst_geonumpy.ndarray[float]
instrument look direction in the requested coordinate system:NEC or NED
- attitude_analysis.find_slew_inst(ra_los, criteria)
- function to classify slew according to the given criteria
1 : Front face slew 0: no dipoles slewed -1: Back face slew
- ra_losnumpy.ndarray[float]
Boresight reception angle (degrees).
- criteriafloat
criteria/threshold for slew (degrees).
- slewint
Classification of slew according to the given criteria
- attitude_analysis.find_slew_rri(ra_los, ra_D1, ra_D2, criteria)
- function to classify slew according to the given criteria
2: Front face slew 1: 1 dipole back, 1 dipole front, boresight front slew 0.5 : 1 dipole front slew 0: no dipoles slewed -0.5: 1 dipole back slew -1: 1 dipole back, 1 dipole front, boresight back slew -2: Back face slew
- ra_losnumpy.ndarray[float]
Boresight reception angle (degrees).
- ra_D1numpy.ndarray[float]
Dipole1 reception angle (degrees).
- ra_D2numpy.ndarray[float]
Dipole2 reception angle (degrees).
- criterianumpy.ndarray[float]
criteria/threshold for slew (degrees).
- slewint
Classification of slew according to the given criteria
- attitude_analysis.rotate_inst(body_vec, Roll, Pitch, Yaw)
Rotation of body vectors in orbital frame (ORF) of Swarm-E using roll, pitch, and yaw angles.
The rotation sequence is X->Y->Z; roll->pitch->yaw according to the RRI data description.
Ref: University of Calgary, e-POP Radio Receiver Instrument (RRI) User’s Manual, Doc. no. ePOP-5024, Rev. D (2018)
https://epop.phys.ucalgary.ca/data-handbook/coordinate-systems/
- body_vectuple
x, y, z : initial position vectors for antenna in ORF
- Rollfloat
roll angle in degrees
- Pitchfloat
pitch angle in degrees
- Yawfloat
yaw angle in degrees
- rotated_bodynumpy.ndarray
rotated body vectors of instruments onboard Swarm-E in ORF
- attitude_analysis.spacecraft_distance_from_a_point(pLon, pLat, pAlt, slon, slat, salt)
calculates spacecraft distance from a point using the geopy.dist.geodesic
- plonfloat
Longitude of the target on the ground (degrees).
- platfloat
Latitude of the target on the ground (degrees).
- paltfloat
altitude of the point in GEO frame (km).
- slonnumpy.ndarray[float]
spacecraft longitude (degrees).
- slatnumpy.ndarray[float]
spacecraft latitude (degrees).
- saltnumpy.ndarray[float]
altitude of satellite in GEO frame (km).
- distancenp.ndarray[float]
slant range between the ground point and spacecraft (km).