Spacecraft Control Framework 1.0
Spacecraft Control Library
sc_coord.h
Go to the documentation of this file.
1/*
2 * sc_coord.h
3 *
4 * Programmers: Joseph Mueller, Mike Paluszek, Lavanya Swetharanyan, Stephanie Thomas, Wil Turner, David Wilson
5 *
6 * Copyright 1996-2010, Princeton Satellite Systems. All rights reserved.
7 *
8 * Coordinate transforms.
9 */
10
17#ifndef __SC_COORD__
18#define __SC_COORD__
19
20#ifdef AS_OS_WINDOWS
21#include "matrixlib.h"
22#else
23#include <MatrixLib/MatrixLib.h>
24#endif
25#include "sc_constants.h"
26
27extern "C++"
28{
29
30 typedef struct sun_vector_out_s {
31 ml_matrix q_eci_to_body;
34
36ml_matrix az_el_range_range_rate_to_rv( const ml_matrix& q_radar_to_hills, double az, double el, double range, double range_dot );
38ml_matrix q_from_u(const ml_matrix &u_catalog, const ml_matrix &u_meas );
40double q_to_angle(const ml_matrix &quaternion);
42ml_matrix q_to_vec(const ml_matrix &quaternion);
44ml_matrix au_to_q(double angle, double unit_vec[3]);
46ml_matrix au_to_q(double angle, const ml_matrix &unit_vec);
48double q_to_au(const ml_matrix &quaternion, ml_matrix &unit_vec);
49
51ml_matrix eul_to_mat(const ml_matrix &euler);
53ml_matrix eul_to_q(const ml_matrix &euler);
55ml_matrix delta_eul_to_q(const ml_matrix &q, const ml_matrix &euler);
57ml_matrix rot_mat_x( const double& a );
59ml_matrix rot_mat_y( const double& a );
61 ml_matrix rot_mat_z( const double& a );
62
64ml_matrix mat_to_q(const ml_matrix &mat);
66ml_matrix mat_to_eul(const ml_matrix &mat, const ml_matrix &euler);
68ml_matrix u_to_q(const ml_matrix &vec1, const ml_matrix &vec2);
70ml_matrix perpendicular(const ml_matrix &vec);
71
72
74ml_matrix q_error(const ml_matrix &q_ref, const ml_matrix &q_meas);
76ml_matrix qb_to_i_dot(const ml_matrix &quaternion,const ml_matrix &w);
78ml_matrix qi_to_b_dot(const ml_matrix &quat, const ml_matrix &w);
80ml_matrix qeb_re_ub_to_az_el(const ml_matrix &qEB, const ml_matrix &rE, const ml_matrix &vB);
82ml_matrix mat_eci_to_lvlh(const ml_matrix &pos, const ml_matrix &vel);
84ml_matrix q_eci_to_lvlh(const ml_matrix &pos, const ml_matrix &vel);
86ml_matrix mat_eci_to_hills(const ml_matrix &r, const ml_matrix &v);
88ml_matrix q_eci_to_hills(const ml_matrix &r, const ml_matrix &v);
90ml_matrix eci_to_hills( const ml_matrix &x0, const ml_matrix &x1 );
92ml_matrix hills_to_eci( const ml_matrix &x0, const ml_matrix &xH );
93
94// @name Right Ascension and Declination Conversions
97ml_matrix q_to_ra_dec(const ml_matrix &quaternion, const ml_matrix &uu);
99ml_matrix u_to_ra_dec(const ml_matrix &unit_vec);
101ml_matrix u_to_ra_dec(const ml_matrix &unit_vec, bool normalize);
103ml_matrix ra_dec_to_q(const ml_matrix &uu, double ra, double dec);
105ml_matrix ra_dec_to_u(double ra, double dec);
107ml_matrix ra_dec_to_u(const ml_matrix &ra, const ml_matrix &dec);
109ml_matrix az_el_to_q( ml_matrix az, ml_matrix el);
111ml_matrix az_el_to_q( double az, double el);
113
115ml_matrix qslerp(const ml_matrix &quat1, const ml_matrix &quat2, double t);
116
118ml_matrix lat_lon_alt_to_pos(double lat, double lon, double h, double f=FLATTENING_FACTOR, double a=RADIUS_EARTH);
120ml_matrix lat_lon_alt_to_pos( const ml_matrix& lat_lon_alt, double f=FLATTENING_FACTOR, double a=RADIUS_EARTH);
122ml_matrix lat_lon_to_pos(double lat, double lon, double f, double a, bool is_geodetic);
124ml_matrix lat_lon_to_pos(double lat, double lon, double f=FLATTENING_FACTOR, double a=RADIUS_EARTH, int type=0);
125
127ml_matrix pos_to_lat_lon_alt(const ml_matrix &efPos, double f=FLATTENING_FACTOR, double a=RADIUS_EARTH, double tolerance=1.0e-6);
128
130void cart_to_sph( const ml_matrix& x, const ml_matrix& y, const ml_matrix& z, ml_matrix& r, ml_matrix& theta, ml_matrix& phi );
132ml_matrix cart_to_sph( const ml_matrix& x );
134void sph_to_cart( const ml_matrix& r, const ml_matrix& theta, const ml_matrix& phi, ml_matrix& x, ml_matrix& y, ml_matrix& z );
136ml_matrix RPhiTheta2Cart(const ml_matrix& r);
138ml_matrix CameraToECI( double az, double el, double tt, const ml_matrix& qECIToBody, const ml_matrix& mBaseToBody );
140ml_matrix eci_to_ned( const ml_matrix& r, int opt = 0, double f=FLATTENING_FACTOR );
142ml_matrix u_to_az_el( const ml_matrix& u );
144ml_matrix u_to_x_z( const ml_matrix& u );
146ml_matrix az_el_to_u( double az, double el );
148ml_matrix az_el_to_u( const ml_matrix &az, const ml_matrix &el);
150ml_matrix q_from_dq( const ml_matrix& q, const ml_matrix& dX );
152ml_matrix dq_from_dX( const ml_matrix& dX );
154ml_matrix r_lvlh_to_eci( const ml_matrix& r_eci, const ml_matrix& v_eci, const ml_matrix& r );
156ml_matrix v_lvlh_to_eci( const ml_matrix& r_eci, const ml_matrix& v_eci, const ml_matrix& v );
158ml_matrix r_eci_to_lvlh( const ml_matrix& r_eci, const ml_matrix& v_eci, const ml_matrix& r );
160ml_matrix v_eci_to_lvlh( const ml_matrix& r_eci, const ml_matrix& v_eci, const ml_matrix& v );
162ml_matrix x_lvlh_to_eci( const ml_matrix& r_eci, const ml_matrix& v_eci, const ml_matrix& x );
164ml_matrix x_eci_to_lvlh( const ml_matrix& r_eci, const ml_matrix& v_eci, const ml_matrix& x );
166ml_matrix x_lvlh_to_eci( const ml_matrix& x_eci, const ml_matrix& x );
168ml_matrix x_eci_to_lvlh( const ml_matrix& x_eci, const ml_matrix& x );
170ml_matrix LLAToECEF( const ml_matrix& lla, double rP = RADIUS_EARTH );
172ml_matrix small_angles_to_q( const ml_matrix& angle );
174ml_matrix spice_to_3_by_3( const ml_matrix& m, int k = 1 );
176double esd_to_azim( const ml_matrix& u );
178double esd_to_elev( const ml_matrix& u );
180ml_matrix azim_elev_to_esd( const double& azim, const double& elev );
182ml_matrix ecef_to_esd( const ml_matrix& rEF );
184ml_matrix u_eci_to_az_el_body( const ml_matrix& u_eci, const ml_matrix& q_eci_to_body, const ml_matrix& q_body_to_base);
186sun_vector_out sun_vector_pointing( const ml_matrix& u_eci, const ml_matrix& u_sun_eci );
188ml_matrix target_from_r_v_d( const ml_matrix& r, double rP, const ml_matrix& v, double d );
190ml_matrix ef_to_lla(const ml_matrix& r);
192ml_matrix eci_to_llr(const ml_matrix& eciCoord, double jd);
194ml_matrix q_from_two_u(const ml_matrix& u, const ml_matrix& v);
195}
196
197#endif
Physical and mathematical constants.
const double FLATTENING_FACTOR
Flattening factor default value which is for the earth.
Definition: sc_constants.h:65
const double RADIUS_EARTH
Earth equatorial radius in km.
Definition: sc_constants.h:59
ml_matrix qslerp(const ml_matrix &quat1, const ml_matrix &quat2, double t)
Interpolates between two quaternions.
Definition: sc_coord.cc:829
ml_matrix rot_mat_x(const double &a)
Generate a rotation matrix for angular rotation about the x axis.
Definition: sc_coord.cc:365
ml_matrix az_el_range_range_rate_to_rv(const ml_matrix &q_radar_to_hills, double az, double el, double range, double range_dot)
Converts az, el, range and range rate to exact r and approximate v.
Definition: sc_coord.cc:83
ml_matrix qb_to_i_dot(const ml_matrix &quaternion, const ml_matrix &w)
Calculates the derivative of the body to inertial quaternion.
Definition: sc_coord.cc:438
ml_matrix ra_dec_to_q(const ml_matrix &uu, double ra, double dec)
Compute a quaternion from right ascension and declination.
Definition: sc_coord.cc:749
double q_to_au(const ml_matrix &quaternion, ml_matrix &unit_vec)
Compute angle and unit vector from quaternion.
Definition: sc_coord.cc:224
ml_matrix x_lvlh_to_eci(const ml_matrix &r_eci, const ml_matrix &v_eci, const ml_matrix &x)
LVLH state to ECI.
Definition: sc_coord.cc:1462
ml_matrix q_error(const ml_matrix &q_ref, const ml_matrix &q_meas)
Finds the small error between two quaternions and converts them into an angle vector.
Definition: sc_coord.cc:423
ml_matrix q_eci_to_lvlh(const ml_matrix &pos, const ml_matrix &vel)
Generate the quaternion that transforms from ECI to LVLH coordinates.
Definition: sc_coord.cc:567
ml_matrix eul_to_q(const ml_matrix &euler)
Convert 3-2-1 Euler angle sequence to a quaternion that transforms in the direction of the rotation.
Definition: sc_coord.cc:338
ml_matrix rot_mat_z(const double &a)
Generate a rotation matrix for angular rotation about the z axis.
Definition: sc_coord.cc:401
ml_matrix RPhiTheta2Cart(const ml_matrix &r)
Computes the transformation matrix from an r, phi, theta frame to cartesian.
Definition: sc_coord.cc:1159
ml_matrix eci_to_hills(const ml_matrix &x0, const ml_matrix &x1)
Transform from two ECI states to one relative state in Hills-frame.
Definition: sc_coord.cc:612
void sph_to_cart(const ml_matrix &r, const ml_matrix &theta, const ml_matrix &phi, ml_matrix &x, ml_matrix &y, ml_matrix &z)
Convert spherical coordinates to cartesian.
Definition: sc_coord.cc:1141
ml_matrix u_eci_to_az_el_body(const ml_matrix &u_eci, const ml_matrix &q_eci_to_body, const ml_matrix &q_body_to_base)
Find az and el from an ECI vector.
Definition: sc_coord.cc:1688
double esd_to_azim(const ml_matrix &u)
Convert an East-South-Down vector to azimuth from North.
Definition: sc_coord.cc:1629
ml_matrix ra_dec_to_u(double ra, double dec)
Calculate a unit vector from right ascension and declination.
Definition: sc_coord.cc:794
ml_matrix q_from_dq(const ml_matrix &q, const ml_matrix &dX)
Computes q as the product of q and a delta quaternion.
Definition: sc_coord.cc:1371
ml_matrix mat_eci_to_lvlh(const ml_matrix &pos, const ml_matrix &vel)
Generate the matrix that transforms from ECI to LVLH coordinates.
Definition: sc_coord.cc:552
ml_matrix azim_elev_to_esd(const double &azim, const double &elev)
Convert azimuth / elevation angles to an East-South-Down unit vector.
Definition: sc_coord.cc:1654
ml_matrix q_from_u(const ml_matrix &u_catalog, const ml_matrix &u_meas)
Returns a quaternion given at least 3 matching vectors.
Definition: sc_coord.cc:123
ml_matrix ecef_to_esd(const ml_matrix &rEF)
Compute rotation matrix from Earth-fixed frame to East-South-Down frame at given Earth-fixed position...
Definition: sc_coord.cc:1668
ml_matrix q_to_ra_dec(const ml_matrix &quaternion, const ml_matrix &uu)
Compute right ascension and declination (in radians) of a unit vector in the body frame from a quater...
Definition: sc_coord.cc:681
ml_matrix u_to_x_z(const ml_matrix &u)
Computes the x and z rotations to align z with a unit vector.
Definition: sc_coord.cc:1287
void cart_to_sph(const ml_matrix &x, const ml_matrix &y, const ml_matrix &z, ml_matrix &r, ml_matrix &theta, ml_matrix &phi)
Converts cartesian coordinates to spherical.
Definition: sc_coord.cc:1102
ml_matrix mat_to_q(const ml_matrix &mat)
Convert a matrix to a quaternion.
Definition: sc_coord.cc:307
ml_matrix mat_to_eul(const ml_matrix &mat, const ml_matrix &euler)
Convert a matrix to an Euler angle sequence.
Definition: sc_coord.cc:296
ml_matrix qi_to_b_dot(const ml_matrix &quat, const ml_matrix &w)
Calculates the derivative of the inertial to body quaternion.
Definition: sc_coord.cc:456
ml_matrix au_to_q(double angle, double unit_vec[3])
Compute quaternion from angle and unit vector, array format.
Definition: sc_coord.cc:188
ml_matrix CameraToECI(double az, double el, double tt, const ml_matrix &qECIToBody, const ml_matrix &mBaseToBody)
Computes the transformation matrix from a camera frame with 3 rotations to the body frame.
Definition: sc_coord.cc:1186
ml_matrix dq_from_dX(const ml_matrix &dX)
Delta quaternion from a 3 vector.
Definition: sc_coord.cc:1382
ml_matrix hills_to_eci(const ml_matrix &x0, const ml_matrix &xH)
Transform from a relative state in Hills-frame to an absolute ECI state.
Definition: sc_coord.cc:645
ml_matrix lat_lon_to_pos(double lat, double lon, double f, double a, bool is_geodetic)
Converts latitude and longitude to r for an ellipsoidal planet.
Definition: sc_coord.cc:974
ml_matrix target_from_r_v_d(const ml_matrix &r, double rP, const ml_matrix &v, double d)
Landing target.
Definition: sc_coord.cc:1742
ml_matrix lat_lon_alt_to_pos(double lat, double lon, double h, double f=FLATTENING_FACTOR, double a=RADIUS_EARTH)
Compute EF position vector from latitude, longitude, and altitude.
Definition: sc_coord.cc:949
ml_matrix eci_to_llr(const ml_matrix &eciCoord, double jd)
EF to LLA.
Definition: sc_coord.cc:67
ml_matrix rot_mat_y(const double &a)
Generate a rotation matrix for angular rotation about the y axis.
Definition: sc_coord.cc:383
ml_matrix mat_eci_to_hills(const ml_matrix &r, const ml_matrix &v)
Generate the matrix that transforms from ECI to Hills coordinates.
Definition: sc_coord.cc:584
double esd_to_elev(const ml_matrix &u)
Convert an East-South-Down vector to elevation from nadir.
Definition: sc_coord.cc:1640
ml_matrix pos_to_lat_lon_alt(const ml_matrix &efPos, double f=FLATTENING_FACTOR, double a=RADIUS_EARTH, double tolerance=1.0e-6)
Compute latitude, longitude, and altitude from EF position vector.
Definition: sc_coord.cc:1052
ml_matrix small_angles_to_q(const ml_matrix &angle)
Convert small angles to a quaternion.
Definition: sc_coord.cc:1589
ml_matrix delta_eul_to_q(const ml_matrix &q, const ml_matrix &euler)
Apply a 3-2-1 Euler angle sequence to a quaternion that transforms in the direction of the rotation.
Definition: sc_coord.cc:319
ml_matrix q_eci_to_hills(const ml_matrix &r, const ml_matrix &v)
Generate the quaternion that transforms from ECI to Hills coordinates.
Definition: sc_coord.cc:599
ml_matrix q_from_two_u(const ml_matrix &u, const ml_matrix &v)
Quaternion from two unit vectors.
Definition: sc_coord.cc:1760
ml_matrix eul_to_mat(const ml_matrix &euler)
Convert 3-2-1 Euler angle sequence to a matrix that transforms in the direction of the rotation.
Definition: sc_coord.cc:236
ml_matrix u_to_ra_dec(const ml_matrix &unit_vec)
Computes right ascension and declination from a unit vector.
Definition: sc_coord.cc:694
ml_matrix q_to_vec(const ml_matrix &quaternion)
Returns the value of the vector from quaternion.
Definition: sc_coord.cc:170
ml_matrix qeb_re_ub_to_az_el(const ml_matrix &qEB, const ml_matrix &rE, const ml_matrix &vB)
Calculate azimuth & elevation angle from ECI to body quaternion, position, and boresight vector.
Definition: sc_coord.cc:480
ml_matrix LLAToECEF(const ml_matrix &lla, double rP=RADIUS_EARTH)
Compute ECEF position from latitude, longitude, altitude.
Definition: sc_coord.cc:1545
ml_matrix r_lvlh_to_eci(const ml_matrix &r_eci, const ml_matrix &v_eci, const ml_matrix &r)
LVLH position to ECI.
Definition: sc_coord.cc:1403
ml_matrix ef_to_lla(const ml_matrix &r)
EF to LLA.
Definition: sc_coord.cc:20
ml_matrix v_eci_to_lvlh(const ml_matrix &r_eci, const ml_matrix &v_eci, const ml_matrix &v)
ECI position to LVLH.
Definition: sc_coord.cc:1447
ml_matrix eci_to_ned(const ml_matrix &r, int opt=0, double f=FLATTENING_FACTOR)
Computes the transformation matrix or quaternion from a eciframe to the North East Down (NED) frame.
Definition: sc_coord.cc:1224
ml_matrix x_eci_to_lvlh(const ml_matrix &r_eci, const ml_matrix &v_eci, const ml_matrix &x)
ECI state to LVLH.
Definition: sc_coord.cc:1480
ml_matrix spice_to_3_by_3(const ml_matrix &m, int k=1)
Convert SPICE rotation matrix to 3x3.
Definition: sc_coord.cc:1611
ml_matrix az_el_to_u(double az, double el)
Computes u from azimuth and elevation of a unit vector.
Definition: sc_coord.cc:1319
ml_matrix r_eci_to_lvlh(const ml_matrix &r_eci, const ml_matrix &v_eci, const ml_matrix &r)
LVLH position to ECI.
Definition: sc_coord.cc:1432
ml_matrix u_to_az_el(const ml_matrix &u)
Computes the azimuth and elevation of a unit vector.
Definition: sc_coord.cc:1303
ml_matrix u_to_q(const ml_matrix &vec1, const ml_matrix &vec2)
Computes the quaternion which aligns one vector with a second.
Definition: sc_coord.cc:284
double q_to_angle(const ml_matrix &quaternion)
Returns value of the angle from the quaternion in radians.
Definition: sc_coord.cc:151
ml_matrix az_el_to_q(ml_matrix az, ml_matrix el)
Compute a quaternion from azimuth and elevation.
Definition: sc_coord.cc:898
ml_matrix perpendicular(const ml_matrix &vec)
Computes the perpendicular vector.
Definition: sc_coord.cc:269
ml_matrix v_lvlh_to_eci(const ml_matrix &r_eci, const ml_matrix &v_eci, const ml_matrix &v)
ECI position to LVLH.
Definition: sc_coord.cc:1418
sun_vector_out sun_vector_pointing(const ml_matrix &u_eci, const ml_matrix &u_sun_eci)
Rotation angles to point a solar wing at the sun.
Definition: sc_coord.cc:1708
Definition: sc_coord.h:30
double angle_solar_wing
Solar array angle.
Definition: sc_coord.h:32
ml_matrix q_eci_to_body
Body quaternion.
Definition: sc_coord.h:31