¿Cómo recuperar la trayectoria de MSL EDL usando Javascript y la API webgeocalc?
Encontré una " puerta de enlace javascript" a los datos de NASA SPICE , la API web "webgeocalc":
https://wgc2.jpl.nasa.gov:8443/webgeocalc/example/perform-calculation.html
Funciona tanto en línea como fuera de línea (pero fuera de línea tengo que usar una solución alternativa para la política CORS ), pero no puedo obtener datos para la trayectoria EDL del Laboratorio de Ciencias de Marte.
Para uno de los muchos intentos, utilicé esta entrada:
{
"kernels": [
{
"type": "KERNEL",
"path": "pds/wgc/kernels/lsk/naif0012.tls"
},
{
"type": "KERNEL",
"path": "pds/wgc/kernels/spk/de430.bsp"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/sclk/MSL_76_SCLKSCET.00017.tsc"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/sclk/msl_lmst_ops120808_v1.tsc"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/pck/pck00008.tpc"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/spk/msl_cruise.bsp"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/spk/msl_edl_v01.bsp"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/spk/msl_ls_ops120808_iau2000_v1.bsp"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/spk/msl_atls_ops120808_v1.bsp"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/fk/msl_v08.tf"
},
{
"type": "KERNEL",
"path": "/MSL/kernels/spk/mar085s.bsp"
}
],
"timeSystem": "UTC",
"timeFormat": "CALENDAR",
"times": [
"2012-08-06T05:00:00.000"
],
"timeStep": 1,
"timeStepUnits": "SECONDS",
"calculationType": "STATE_VECTOR",
"targetType": "FIXED_POINT",
"targetLocation": {
"centerBody": "-76030",
"referenceFrame": "MSL_TOPO",
"coordinateRepresentation": "RECTANGULAR",
"x": 0,
"y": 0,
"z": 248.3
},
"observerType": "OBJECT",
"observer": "MARS",
"referenceFrame": "MSL_TOPO",
"frameLocus": "OBSERVER",
"aberrationCorrection": "NONE",
"stateRepresentation": "RECTANGULAR"
}
Pero recibo este error ("Se han cargado datos de efemérides insuficientes"):
{
"status": "ERROR",
"message": "The request has failed.",
"calculationId": "cbcab756-f854-41d1-95e2-077b840155ec",
"error": {
"shortDescription": "CSPICE_N0066: CSPICE.spkcpt: SPICE(SPKINSUFFDATA): [spkcpt_c --> SPKCPT --> SPKCVT --> ZZSPKFZT --> SPKGEO] Insufficient ephemeris data has been loaded to compute the state of -76030 (MSL_DESCENT_STAGE) relative to 499 (MARS) at the ephemeris epoch 2012 AUG 01 05:01:07.183."
}
}
Este núcleo contiene todos los marcos de referencia disponibles para MSL:
https://naif.jpl.nasa.gov/pub/naif/MSL/kernels/fk/msl_v08.tf
Por ejemplo:
Landing site and sites:
-----------------------
MSL_LANDING_SITE -76900
MSL_SITE_1...399 -76501...-76899
Cruise and descent stages and the rover:
----------------------------------------
MSL -76
MSL_ROVER -76000
MSL_SPACECRAFT -76010
MSL_CRUISE_STAGE -76020
MSL_DESCENT_STAGE -76030
MSL_ROVER_MECH -76040
MSL_CACS -76050
MSL_DIMU_A -76031
Los datos deben estar disponibles para la fecha especificada, ya que NASA Horizons puede proporcionarlos:http://win98.altervista.org/space/exploration/3d/space-explorer-tracker.html?orbiter=-76&body=@499&start=2012-08-06%2005:10:04&stop=2012-08-06%2005:19:00&step=1m
Incluí los núcleos enumerados en este ejemplo de la biblioteca Timecraft.js, pero tal vez todavía me faltan algunos:
https://github.com/NASA-AMMOS/timecraftjs/blob/master/example/index.js
Rutas de kernels (interfaz webgeocalc vs servidor NASA NAIF vs servidor webgeocal):
- "MSL/" -->https://naif.jpl.nasa.gov/pub/naif/MSL/--> /grupo/naif/critical/naifweb/pub/naif/MSL
- "pds/wgc/núcleos/" -->https://naif.jpl.nasa.gov/pub/naif/generic_kernels/--> /grupo/naif/critical/naifweb/pub/naif/pds/wgc/kernels/
Respuestas
Después de decenas de pruebas, encontré el camino.
Carga útil que se enviará a través de la consulta POST:
{
"kernels": [
{
"type": "KERNEL",
"path": "pds/wgc/mk/latest_lsk_v0004.tm"
},
{
"type": "KERNEL",
"path": "pds/data/msl-m-spice-6-v1.0/mslsp_1000/extras/mk/msl_v25.tm"
}
],
"timeSystem": "UTC",
"timeFormat": "CALENDAR",
"intervals": [
{
"startTime": "2012-08-06T05:10:00",
"endTime": "2012-08-06T05:19:00"
}
],
"timeStep": 1,
"timeStepUnits": "SECONDS",
"calculationType": "STATE_VECTOR",
"target" : "-76000",
"targetType": "OBJECT",
"observer": "MARS",
"observerType": "OBJECT",
"referenceFrame": "IAU_MARS",
"frameLocus": "OBSERVER",
"aberrationCorrection": "NONE",
"stateRepresentation": "RECTANGULAR"
}
Tenga en cuenta que los núcleos especificados no son núcleos reales, sino listas de núcleos:
Contenido de pds/wgc/mk/latest_lsk_v0004.tm (https://naif.jpl.nasa.gov/pub/naif/pds/wgc/mk/latest_lsk_v0004.tm)
KPL/MK
This meta-kernel lists the latest generic LSK file available at the time
when this meta-kernel was created.
\begindata
PATH_VALUES = (
'../kernels'
)
PATH_SYMBOLS = (
'DATA'
)
KERNELS_TO_LOAD = (
'$DATA/lsk/naif0012.tls'
)
\begintext
Contenido de pds/data/msl-m-spice-6-v1.0/mslsp_1000/extras/mk/msl_v25.tm (https://naif.jpl.nasa.gov/pub/naif/pds/data/msl-m-spice-6-v1.0/mslsp_1000/extras/mk/msl_v25.tm) (probablemente no todos estos núcleos sean necesarios para EDL):
\begindata
PATH_VALUES = ( './data' )
PATH_SYMBOLS = ( 'KERNELS' )
KERNELS_TO_LOAD = (
'$KERNELS/lsk/naif0012.tls' '$KERNELS/pck/pck00008.tpc'
'$KERNELS/sclk/msl_lmst_ops120808_v1.tsc' '$KERNELS/sclk/msl_76_sclkscet_refit_s2.tsc'
'$KERNELS/fk/msl_v08.tf'
'$KERNELS/ik/msl_aux_v00.ti' '$KERNELS/ik/msl_chrmi_20120731_c03.ti'
'$KERNELS/ik/msl_hbla_20120731_c03.ti' '$KERNELS/ik/msl_hblb_20120731_c03.ti'
'$KERNELS/ik/msl_hbra_20120731_c03.ti' '$KERNELS/ik/msl_hbrb_20120731_c03.ti'
'$KERNELS/ik/msl_hfla_20120731_c03.ti' '$KERNELS/ik/msl_hflb_20120731_c03.ti'
'$KERNELS/ik/msl_hfra_20120731_c03.ti' '$KERNELS/ik/msl_hfrb_20120731_c03.ti'
'$KERNELS/ik/msl_mahli_20120731_c02.ti' '$KERNELS/ik/msl_mardi_20120731_c02.ti'
'$KERNELS/ik/msl_ml_20120731_c03.ti' '$KERNELS/ik/msl_mr_20120731_c03.ti'
'$KERNELS/ik/msl_nla_20120731_c04.ti' '$KERNELS/ik/msl_nlb_20130530_c05.ti'
'$KERNELS/ik/msl_nra_20120731_c04.ti' '$KERNELS/ik/msl_nrb_20130530_c05.ti'
'$KERNELS/ik/msl_struct_v01.ti' '$KERNELS/spk/msl_struct_v02.bsp'
'$KERNELS/spk/de425s.bsp' '$KERNELS/spk/mar085s.bsp'
'$KERNELS/spk/msl_cruise_v1.bsp' '$KERNELS/spk/msl_edl_v01.bsp'
'$KERNELS/spk/msl_ls_ops120808_iau2000_v1.bsp'
(...cut.... rover kernels for each sol ..... cut ...)
Coloque la carga útil anterior en esta página y haga clic en ENVIAR CÁLCULO. Una vez que los resultados estén listos, obtendrá una identificación de cálculo; haga clic en OBTENER RESULTADOS para descargar la respuesta.
La página también funciona sin conexión siempre que agregue esta línea:
baseURL = "https://cors-anywhere.herokuapp.com/https://wgc2.jpl.nasa.gov:8443/webgeocalc/api/";
despues de este:
var baseURL = ourLocation.substring(0, splicePoint) + "/api/"
Cómo funciona:
Llame a la función performRequest(urlSuffix, payload, onComplete) por primera vez usando performRequest("calculation/new", payloadText, showProgress) , lo que significa que se llamará a showProgress() una vez que se reciba la respuesta; la respuesta preliminar se verá así (una vez que se complete el cálculo):
{
"status": "OK",
"message": "The request was successful.",
"calculationId": "7a304773-50f2-45c1-bb5a-bfd9fcbd063c",
"result": {
"phase": "COMPLETE",
"expiresIn": 600
}
}
Debe marcar "fase" mientras pasa de "CARGANDO NÚCLEO" a "COMPLETO".
Una vez que se completa el cálculo, la respuesta contendrá el identificador ("calculationId") que se usará para solicitar la respuesta real con los resultados, que estará disponible solo durante "expiresIn" segundos.
Para solicitar los resultados del cálculo, vuelva a llamar a performRequest(urlSuffix, payload, onComplete) mediante performRequest("calculation/" +calculationID + "/results, null, showProgress)
En la respuesta final, response.columns será una matriz de las columnas de sus datos.
== Notas adicionales ==
Núcleohttps://naif.jpl.nasa.gov/pub/naif/pds/data/msl-m-spice-6-v1.0/mslsp_1000/data/fk/msl_v08.tfcontiene la lista de marcos de referencia disponibles para MSL; más importantes son:
- MSL_LANDING_SITE -76900
- MSL_SITE_1...399 -76501...-76899
- MSL-76
- MSL_ROVER-76000
- MSL_SPACECRAFT -76010 (¿skycrane + rover + carcasa trasera + escudo térmico?)
- MSL_CRUISE_ETAPA -76020
- MSL_DESCENT_STAGE -76030 (¿grúa aérea o grúa aérea + rover?)
- MSL_ROVER_MECH-76040
- MSL_CACS -76050 (marco MSL Cruise ACS (¿Sistema de control de actitud?))
- MSL_DIMU_A -76031 (IMU de etapa de descenso)
Creó una página específica para descargar datos de EDL:
http://win98.altervista.org/space/exploration/EDL/(específicamentehttp://win98.altervista.org/space/exploration/EDL/edl-retriever.html
)