Esempio n. 1
0
    def isObservable(self, X, t, params):
        """
        Method that decides if a state is observable for a given time and GS coordinates.
        :param X: State.
        :param t: Time.
        :param params: Dynamic parameters (GS coordinates).
        :return: Boolean indicating if it is visible.
        """
        x = X[0]
        y = X[1]
        z = X[2]

        theta_0 = self._params[0]
        theta_dot = self._params[1]
        R_eq = self._params[2]
        e_planet = self._params[3]

        GS_number = params[0]

        GS_coord = self.getObserverCoordinates()

        r_gs_ecef = GS_coord[GS_number]

        r_eci_vec = np.array([x,y,z])
        GMST = theta_dot * t + theta_0 # Greenwhich Mean Sidereal Time

        r_ecef_vec = coordinateTransformations.eci2ecef(r_eci_vec, GMST)

        azElRange = coordinateTransformations.ecef2AzElRange(r_ecef_vec, r_gs_ecef, R_eq, e_planet)

        if azElRange[1] > np.deg2rad(10): # Elevation Mask 10 deg
            return True
        else:
            return False
Esempio n. 2
0
plt.xlabel('Simulation Time [h]')
plt.ylabel('Right ascension of ascending node [deg]')
plt.savefig('../report/include/true_anomaly.png', bbox_inches='tight', dpi=300)


for i in range(0, obs_time_vec.size):
    if select_obs == RA_DEC:
        r_eci = obs_states_vec[i][0:3]
        (rightAs, dec, rang) = coordinateTransformations.eci2RightAscensionDeclinationRange(r_eci)
        print (rightAs - observations[i][0])
        print (dec - observations[i][1])
    else:
        GMST = theta_0 + theta_dot * obs_time_vec[i]
        r_eci = obs_states_vec[i][0:3]
        v_eci = obs_states_vec[i][3:6]
        range_vec = coordinateTransformations.eci2ecef(r_eci, GMST) - GS_coord[observers[i]]
        range_norm = np.linalg.norm(range_vec)

        R_EN = coordinateTransformations.ROT3(GMST)
        range_rate_vec = -w_matrix.dot(R_EN).dot(r_eci) + R_EN.dot(v_eci)

        range_rate = range_vec.dot(range_rate_vec)/range_norm

        print (range_norm - observations[i][0])
        print (range_rate - observations[i][1])


print obs_time_vec

print observers
Esempio n. 3
0
plt.ylabel('Right ascension of ascending node [deg]')
plt.savefig('../report/include/true_anomaly.png', bbox_inches='tight', dpi=300)

for i in range(0, obs_time_vec.size):
    if select_obs == RA_DEC:
        r_eci = obs_states_vec[i][0:3]
        (rightAs, dec,
         rang) = coordinateTransformations.eci2RightAscensionDeclinationRange(
             r_eci)
        print(rightAs - observations[i][0])
        print(dec - observations[i][1])
    else:
        GMST = theta_0 + theta_dot * obs_time_vec[i]
        r_eci = obs_states_vec[i][0:3]
        v_eci = obs_states_vec[i][3:6]
        range_vec = coordinateTransformations.eci2ecef(
            r_eci, GMST) - GS_coord[observers[i]]
        range_norm = np.linalg.norm(range_vec)

        R_EN = coordinateTransformations.ROT3(GMST)
        range_rate_vec = -w_matrix.dot(R_EN).dot(r_eci) + R_EN.dot(v_eci)

        range_rate = range_vec.dot(range_rate_vec) / range_norm

        print(range_norm - observations[i][0])
        print(range_rate - observations[i][1])

print obs_time_vec

print observers

print observations