irfpy.jdc.frame1
¶
Frame definition. Based on JUI-ADST-INST-TN-000122_01
The frame of the JDC is defined, though it is not the final. JDC’s frame0
Spacecraft frame
+z: nadir deck
-z: zenith deck.
-x: HGA
JDC will be located at the edge of +x/-z.
JDC1 frame
+z: JDC symmetric axis. The JDC looking hemisphere is +x hemisphere.
+x: Open direction (same direction as SC frame)
-x: Toward the thruster (and HGA direction)
Note also that JDC would have a tilt around y axis, due to the contamination from the thrusters. The angle of tilt is not yet determined. Thus, this angle would be given as a parameter.
Conversion between JDC & SC
The conversion matrix is as follows:
Convert between the JDC0 angles and vectors
The converion of the angles to JDC1 frame is implemented.
See angles2jdc()
and jdc2angles()
.
The definition follows the definition of myself.
Thus, the coordinate system may be chagned in the future.
The definition is consistent to the one defined in fov1
.
The elevation angle, \(\theta\), 0 is the zenith (z axis) and 180 for the nadir looking direction.
The azimutha angle, \(\phi\), 0 is x axis and 90 for y axis.
Angle \(\theta\) and \(\phi\) is the polar coordinate system of the JDC1 frame.
Convert from NSC vectors to physical frame
The conversion is implemented in irfpy.pep.pep_attitude
module.
-
irfpy.jdc.frame1.
angles2jdc
(theta, phi)[source]¶ Return the unit vector corresponding to the given angles.
- Parameters
theta (float) – Theta in degrees. Float or (N,) shape np.array.
phi (float) – Phi in degrees. Float or (N,) shape np.array.
- Returns
The corresponding vector with shape of (3,) or (3, N)
- Return type
np.array
>>> print(angles2jdc(0, 0)) [ 0. 0. 1.]
The following returns the corresponding vector for \((\theta, \phi) = (0, 0), (1, 1), (2, 2), ...\) at once.
>>> print(angles2jdc(np.arange(181), np.arange(181)).shape) (3, 181)
-
irfpy.jdc.frame1.
jdc2angles
(vec)[source]¶ Return the JDC angle for the corresponding JDC vector.
- Parameters
vec (np.array) – np.array, with (3,) or (3, N) shape.
- Returns
Theta and Phi
- Return type
np.array with (2,) or (2, N) shape.
>>> print(jdc2angles([1, 0, 0])) [90. 0.]
For multiple vectors, you can convert to angles. Note that the shape should be (3, N), thus, the array should look like
np.array([[x0, x1, x2, ...], [y0, y1, y2, ...], [z0, z1, z2, ...]])
>>> print(jdc2angles([[1, 10, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]])) [[90. 90. 90. 45.] [ 0. 0. 90. 0.]]
-
irfpy.jdc.frame1.
nsc2jdc
(vecnsc, tilt=0)[source]¶ Convert from NSC to JDC.
- Parameters
vec – (3,) or (3,N) array.
tilt – Tilt angle in degrees.
vec should be (3,) or (3,N) array.
>>> nsc = [ 1., -2., 3.] >>> print(nsc2jdc(nsc)) [ 1. 2. -3.] >>> nsc = [-1.41421356, -2., 2.82842712] >>> print(nsc2jdc(nsc, tilt=45)) [ 1. 2. -2.99999999] >>> nscs = [[ 2., 1., 0., -1., 2.,], ... [-1., -1., -1., -1., -1.], ... [-3., -1., 0., 1., 3.]] >>> print(nsc2jdc(nscs)) [[ 2. 1. 0. -1. 2.] [ 1. 1. 1. 1. 1.] [ 3. 1. 0. -1. -3.]]
-
irfpy.jdc.frame1.
jdc2nsc
(vecjdc, tilt=0)[source]¶ Convert from JDC to (N)SC.
- Parameters
vec – (3,) or (3,N) array.
tilt – Tilt angle in degrees.
\[x_SC \cos heta 0 \sin heta x_JDC y_SC = 0 -1 0 y_JDC z_SC \sin heta 0 -\cos heta z_JDC\]>>> jdc = [1, 2, -3] >>> print(jdc2nsc(jdc)) [ 1. -2. 3.] >>> print(jdc2nsc(jdc, tilt=45)) [-1.41421356 -2. 2.82842712] >>> jdcs = [ [ 2, 1, 0, -1, 2], ... [ 1, 1, 1, 1, 1], ... [ 3, 1, 0, -1, -3]] >>> print(jdc2nsc(jdcs)) [[ 2. 1. 0. -1. 2.] [-1. -1. -1. -1. -1.] [-3. -1. 0. 1. 3.]]