La actividad de la Red del Espacio Profundo de la NASA se puede ver convenientemente en https://eyes.nasa.gov/dsn/dsn.html , pero si desea obtener datos en un formato XML más crudo, puede acceder a ellos como se describe en esta respuesta .
A continuación se muestra un pequeño script de Python que lee el XML en una lista de diccionarios y lo guarda en el disco como JSON.
Los diccionarios están organizados en el nivel superior por plato, luego por nave espacial por plato.
Pregunta: ¿Cuáles son los significados más probables de todos los campos de datos contenidos en los datos XML de Deep Space Network?
Esta es la URL de ejemplo de la otra respuesta, utilizada en el siguiente script: https://eyes.nasa.gov/dsn/data/1365107113.xml
def dictify(r,root=True): # https://stackoverflow.com/questions/2148119/how-to-convert-an-xml-string-to-a-dictionary-in-python/30923963#30923963
if root:
return {r.tag : dictify(r, False)}
d=copy(r.attrib)
if r.text:
d["_text"]=r.text
for x in r.findall("./*"):
if x.tag not in d:
d[x.tag]=[]
d[x.tag].append(dictify(x,False))
return d
import xml.etree.ElementTree as ET
from copy import copy
import requests, json, pprint
# https://deepspace.jpl.nasa.gov/dsnnow/
# https://eyes.nasa.gov/dsn/dsn.html
# https://space.stackexchange.com/questions/17046/is-there-any-publicly-available-logging-or-wayback-machine-for-dsn-now-activi
N = 1365107113
url = "https://eyes.nasa.gov/dsn/data/" + str(N) + ".xml"
r = requests.get(url)
text = r.text
a = ET.fromstring(text)
things = [dictify(x) for x in a]
with open (str(N) + '_XML', 'w') as outfile:
json.dump(things, outfile)
pp = pprint.PrettyPrinter(indent=1)
for i, thing in enumerate(things):
print "i = ", i
pp.pprint(thing)
Aquí están las dos últimas "cosas" que imprime:
i = 14
{'dish': {'_text': '\n\t\t',
'azimuthAngle': '16.999969',
'created': '2013-04-04T07:00:42.036Z',
'downSignal': [{'dataRate': '2291.963470',
'frequency': '8445767679.000001',
'power': '-482.579407',
'signalType': 'none',
'signalTypeDebug': 'IDLE OFF 0 MCD2',
'spacecraft': 'RSTS',
'spacecraftId': '99'}],
'elevationAngle': '88.000488',
'isArray': 'false',
'isDDOR': 'false',
'isMSPA': 'false',
'name': 'DSS43',
'target': [{'downlegRange': '-1.0',
'id': '99',
'name': 'RSTS',
'rtlt': '-1.0',
'uplegRange': '-1.0'}],
'upSignal': [{'dataRate': '',
'frequency': '',
'power': '',
'signalType': 'none',
'signalTypeDebug': ' ',
'spacecraft': 'RSTS',
'spacecraftId': '99'}],
'updated': '2013-04-04T07:00:42.036Z',
'windSpeed': '0.000000'}}
i = 15
{'timestamp': {'_text': '1365107113334'}}
Me tomó varios días observar los datos de DSN. Aquí está mi análisis de los campos de los archivos de datos XML.
station
name
: Distintivo de llamada de la estación.friendlyName
: Nombre común de la estación (Goldstone, Madrid, Canberra).timeUTC
: Tiempo que pasó este reporte, usando el Tiempo Universal Coordinado, en milisegundos (1/1000 de segundo) desde la época Unix (1 de enero de 1970).timeZoneOffset
: Agregue este número a timeUTC
para obtener la hora local de esta estación, nuevamente en milisegundos desde la época de Unix.dish
name
: Identificador del plato. Por lo general, "DSS" seguido de dos dígitos decimales.azimuthAngle
, elevationAngle
: El acimut astronómico y la elevación hacia donde apunta actualmente este plato, en grados con una fracción decimal.windSpeed
: La velocidad del viento alrededor del plato, en km/h.isMSPA
: Si es "verdadero", el plato está escuchando a más de un objetivo (múltiples naves espaciales por apertura).isArray
: Si es "verdadero", el plato es parte de una matriz de platos.isDDOR
: Si es "verdadero", el plato se está utilizando para el rango unidireccional diferencial delta .created
, updated
: Tiempos de creación y modificación de archivos (¿de qué?), en formato ISO 8601 .target
name
: El distintivo de llamada de la nave espacial objetivo.id
: Un número de identificación decimal para cada nave espacial. Parece estar asignado secuencialmente (comenzando en 1) cuando la nave espacial se agregó a la base de datos.uplegRange
, downlegRange
: Distancia estimada hacia y desde el objetivo, en km. Debería ser el mismo, a menos que use una matriz o DDOR. Parece estar fuera por un factor de 2.rtlt
: Tiempo de luz de ida y vuelta, en segundos. Parece estar fuera por un factor de 2.upSignal
signalType
: none
si se configura/desmonta/seguimiento, carrier
si solo la frecuencia de la portadora, data
si realmente se envía algo.signalTypeDebug
: Desconocido; destinado a los programadores.power
: Potencia de la señal transmitida, en kW.frequency
: Frecuencia de la señal transmitida, en MHz .dataRate
: Bits por segundo de datos transmitidos.spacecraft
: Distintivo de llamada de la nave espacial objetivo.spacecraftId
: número de identificación de la nave espacial objetivo.downSignal
signalType
: none
si configuración/desmontaje/seguimiento, carrier
si solo frecuencia portadora, data
si realmente se está recibiendo algo.signalTypeDebug
: Desconocido; destinado a los programadores.spacecraft
: Distintivo de llamada de la nave espacial objetivo.spacecraftId
: número de identificación de la nave espacial objetivo.dataRate
: Bits por segundo de los datos recibidos.frequency
: Frecuencia de la señal recibida, en Hz . Tenga en cuenta las diferentes unidades y la mayor precisión que upSignal; esto sería útil para analizar el efecto Doppler del movimiento de la nave espacial.power
: Potencia de la señal recibida, en dBm . Ha habido varias ocasiones en las que dos objetivos del mismo plato tienen una potencia casi idéntica, excepto compensada por un valor de 300: normalmente -1xx,xx y -4xx,xx dBm. Por lo tanto, creo que 300 se descuentan del poder como una bandera para una determinada condición (que aún tengo que identificar). El código para manejar este valor debería verse así:if (power < -300.00) power = power + 300.00
¡ Pruébelo, grafique los resultados y háganos saber si funciona!
Notarás que las unidades no son consistentes. El tiempo puede estar en tiempo Unix o en ISO 8601. La frecuencia puede estar en Hz o MHz. La potencia puede ser en kW o dBm.
Me preocuparía que las unidades pudieran cambiar en el futuro, o que hayan cambiado en el pasado. Por lo tanto, recomendaría realizar una "comprobación de cordura" en los valores y ajustarlos correspondientemente. Frecuencia por ejemplo:
if (frequency < 40.0)
# Gigahertz
frequency = frequency * 1E9
else if (frequency < 40000)
# Megahertz
frequency = frequency * 1E6
# else Hertz
Frecuencias de banda de radio IEEE (de Wikipedia):
S 2 to 4 GHz Short wave
C 4 to 8 GHz Compromise between S and X
X 8 to 12 GHz Used in WW II for fire control, X for cross (as in crosshair). Exotic.
Ku 12 to 18 GHz Kurz-under
K 18 to 27 GHz Kurz (German for "short")
Ka 27 to 40 GHz Kurz-above
DSN almacena los datos internamente en un formato llamado "TRK-2-34". Se describe en la nota técnica DSN 820-013. He encontrado 15 documentos que se refieren al uso de este formato de datos. Dos de esos documentos afirman específicamente que se trata de un "documento interno". Considere también esta publicación de blog:
Este es un artículo técnico sobre cómo usar la red de espacio profundo (DSN). Voy a comenzar alto brevemente y sumergirme profundamente. Puede buscar en Google/wiki las cosas de nivel superior. Quiero llegar directamente a cómo traducir de tipos de datos con formato DSN a rango y velocidad de rango en kilómetros/kilómetros por segundo.
Quiero hacer esto porque fue innecesariamente difícil para mí. No por la teoría sino por la falta de documentación o de orientación . He despotricado antes que la idea del DSN de un automóvil a la venta es una bolsa de piezas, algunos duplicados, algunos malos, sin instrucciones.
y
La documentación sobre el formato TRK-2-34 es realmente completa , pero no explica cómo unir las piezas para obtener una medida utilizable.
y
En general, mi queja número 1 con casi todo lo relacionado con las operaciones de naves espaciales es lo innecesariamente complicado que es todo y lo difícil que es ponerse de acuerdo sobre el formato de los datos, la interfaz y el acceso, incluso las unidades y el modelado.
y
DSN hace algo hermoso, pero no es una empresa pública con fines de lucro. Si quieres usar el DSN para rastrear tu preciosa nave espacial, tendrás que jugar con los juguetes que te dan. Necesitará un vector de estado a priori medio decente para su nave espacial, un simulador para propagarlo y extraer geometría, un analizador binario, el manual TRK-2-34 y todos los pasos enumerados anteriormente.
La descripción del formato TRK-2-34 (820-013) no es información pública. Parece que la única forma de obtener una copia es enviar su propia nave espacial y pagarle a DSN para que la rastree.
saltador