Sé que hay muchos satélites geoestacionarios, pero me pregunto: ¿hay algún satélite geosincrónico que no sea geoestacionario (es decir, que tenga una inclinación notable en su órbita)?
¿Hay satélites en órbitas geosíncronas pero no geoestacionarias?
¡Sí, muchos!
Aparentemente, hay varias ventajas de ser sincrónico, incluso cuando oscila de forma salvaje en una posición por encima o por debajo del ecuador de la Tierra (¡hasta +/- 60 grados!)
Después de ver las cifras a continuación en Una nueva mirada a los regímenes GEO y Near-GEO: Operaciones, Eliminaciones y Escombros (que se encuentran en este comentario ), decidí ir a buscar satélites yo mismo.
izquierda: "Fig. 3. El número y la complejidad de las órbitas geosíncronas para las naves espaciales operativas aumentó significativamente de 1999 a 2011. Arriba solo se muestran las naves espaciales cuyos parámetros orbitales están disponibles en www.spacetrack.org ". derecha: "Fig. 7. Los sistemas de navegación y comunicaciones geosincrónicos altamente inclinados (Sirius, Beidou y Michibiki) se han implementado desde 2000"
Fui a los conjuntos de elementos de dos líneas NORAD de Celestrak; Datos actuales y descargué https://celestrak.org/NORAD/elements/geo.txt Luego los propagué todos en Python usando Skyfield (script a continuación) y comencé a trazar.
Hay 513 TLE en la lista. Aquí están sus inclinaciones actuales frente al año de lanzamiento:
Hay 18 satélites con una inclinación superior a 19 grados:
AMC-14 2008 20.4237
SDO 2010 29.7791
QZS-1 (MICHIBIKI-1) 2010 41.3507
BEIDOU 8 2011 58.8155
BEIDOU 9 2011 54.4339
BEIDOU 10 2011 52.1119
IRNSS-1A 2013 30.184
IRNSS-1B 2014 29.253
IRNSS-1D 2015 29.1615
BEIDOU 17 2015 53.522
BEIDOU 20 2015 53.1176
IRNSS-1E 2016 29.3272
BEIDOU IGSO-6 2016 56.5705
QZS-2 (MICHIBIKI-2) 2017 43.5483
QZS-4 (MICHIBIKI-4) 2017 40.7615
IRNSS-1I 2018 29.3069
BEIDOU IGSO-7 2018 55.0396
BEIDOU-3 IGSO-1 2019 55.0177
Aquí hay algunos gráficos 3D gratuitos del 18 con inclinaciones superiores a los 19 grados:
Vista lateral:
Vista superior:
"Retrato familiar"
Guión de Python 3:
class Object(object):
def __init__(self, name, L1, L2):
self.name = name.strip()
self.L1 = L1
self.L2 = L2
year = int(L1[9:11]) + 1900
if year < 1957:
year += 100
self.year = year
self.inc = float(L2[8:16])
import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Topos, Loader, EarthSatellite
from mpl_toolkits.mplot3d import Axes3D
fname = 'Celestrak satellites in GEO.txt' # https://celestrak.org/NORAD/elements/geo.txt
with open(fname, 'r') as infile:
lines = infile.readlines()
TLEs = zip(*[[line for line in lines[n::3]] for n in range(3)])
load = Loader('~/Documents/fishing/SkyData') # single instance for big files
ts = load.timescale()
de421 = load('de421.bsp')
earth = de421['earth']
zero = Topos(0.0, 0.0)
minutes = np.arange(0, 24*60, 4) # last one is 23h 56m
times = ts.utc(2019, 7, 19, 0, minutes)
# Doing a quick ugly de-rotate to imitate earth-fixed coordinates.
zeropos = zero.at(times).position.km
theta = np.arctan2(zeropos[1], zeropos[0])
cth, sth, zth, oth = [f(-theta) for f in (np.cos, np.sin, np.zeros_like, np.ones_like)]
R = np.array([[cth, -sth, zth], [sth, cth, zth], [zth, zth, oth]])
objects = []
for i, (name, L1, L2) in enumerate(TLEs):
o = Object(name, L1, L2)
objects.append(o)
o.orbit = EarthSatellite(L1, L2).at(times).position.km
if not i%20:
print (i,)
data = [(o.year, o.inc) for o in objects]
plt.figure()
year, inc = zip(*data)
plt.plot(year, inc, '.k', markersize=8)
plt.xlabel('launch year', fontsize=16)
plt.ylabel('current inclination (degs)', fontsize=16)
plt.title('Geosynchronous TLEs from Celestrak', fontsize=16)
plt.show()
high_incs = [o for o in objects if o.inc > 19]
fig = plt.figure(figsize=[10, 8]) # [12, 10]
ax = fig.add_subplot(1, 1, 1, projection='3d')
for o in high_incs:
orbit = (R * o.orbit).sum(axis=1)
x, y, z = orbit
ax.plot(x, y, z)
ax.plot(x[:1], y[:1], z[:1], 'ok')
ax.set_xlim(-40000, 40000)
ax.set_ylim(-40000, 40000)
ax.set_zlim(-40000, 40000)
plt.show()
fig = plt.figure(figsize=[10, 8]) # [12, 10]
ax = fig.add_subplot(1, 1, 1, projection='3d')
for o in objects:
orbit = (R * o.orbit).sum(axis=1)
x, y, z = orbit
ax.plot(x, y, z)
# ax.plot(x[:1], y[:1], z[:1], 'ok')
ax.set_xlim(-40000, 40000)
ax.set_ylim(-40000, 40000)
ax.set_zlim(-40000, 40000)
plt.show()
for o in high_incs:
print(o.name, o.year, o.inc)
python -i myscript.py
así que cuando termine, el espacio de nombres y los resultados se conservan. Si quiero simplemente volver a trazar, solo copio/pego una sección que comienza if True:
en el indicador de python en la ventana de comandos para ejecutarlo.if verbose:
y establecer verbose = False
. No creo que sea un flujo de trabajo ideal, pero funciona para mí.
UH oh
manu h
UH oh
manu h
UH oh