Come recuperare la traiettoria MSL EDL utilizzando Javascript e l'API webgeocalc?
Ho trovato un " gateway javascript" per i dati SPICE della NASA , l'api web "webgeocalc":
https://wgc2.jpl.nasa.gov:8443/webgeocalc/example/perform-calculation.html
Funziona sia online che offline (ma offline devo usare una soluzione alternativa per la politica CORS ), ma non riesco a ottenere dati per la traiettoria EDL del Mars Science Laboratory.
Per uno dei tanti tentativi ho usato questo input:
{ "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" }
Ma ricevo questo errore ("Sono stati caricati dati effemeridi insufficienti"):
{ "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." } }
Questo kernel contiene tutti i frame di riferimento disponibili per MSL:
https://naif.jpl.nasa.gov/pub/naif/MSL/kernels/fk/msl_v08.tf
Per esempio:
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
I dati dovrebbero essere disponibili per una data specificata, poiché la NASA Horizons è in grado di fornirli: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
Ho incluso i kernel elencati in questo esempio dalla libreria Timecraft.js, ma forse ne mancano ancora alcuni:
https://github.com/NASA-AMMOS/timecraftjs/blob/master/example/index.js
Percorsi dei kernel (interfaccia webgeocalc vs server NAIF NASA vs server webgeocal):
- "MSL/" -->https://naif.jpl.nasa.gov/pub/naif/MSL/--> /group/naif/critical/naifweb/pub/naif/MSL
- "pds/wgc/kernels/" -->https://naif.jpl.nasa.gov/pub/naif/generic_kernels/--> /group/naif/critical/naifweb/pub/naif/pds/wgc/kernels/
Risposte
Dopo dozzine di test, ho trovato la strada.
Payload da inviare tramite query 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" }
Si noti che i kernel specificati non sono veri kernel ma in realtà elenchi di kernel:
Contenuto di 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
Contenuto di 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) (probabilmente non tutti questi kernel sono necessari per 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 ...)
Metti sopra il payload in questa pagina e fai clic su INVIA CALCOLO. Una volta che i risultati sono pronti, otterrai un ID di calcolo; clicca su OTTIENI RISULTATI per scaricare la risposta.
La pagina funziona anche offline se aggiungi questa riga:
baseURL = "https://cors-anywhere.herokuapp.com/https://wgc2.jpl.nasa.gov:8443/webgeocalc/api/";
dopo questo:
var baseURL = ourLocation.substring(0, splicePoint) + "/api/"
Come funziona:
Chiama la funzione performRequest(urlSuffix, payload, onComplete) una prima volta usando performRequest("calculation/new", payloadText, showProgress) , il che significa che showProgress() verrà chiamato una volta ricevuta la risposta; la risposta preliminare sarà simile (una volta completato il calcolo):
{ "status": "OK", "message": "The request was successful.", "calculationId": "7a304773-50f2-45c1-bb5a-bfd9fcbd063c", "result": { "phase": "COMPLETE", "expiresIn": 600 } }
Dovresti controllare "fase" mentre passa da "LOADING KERNELS" a "COMPLETE".
Una volta completato il calcolo, la risposta conterrà l'identificatore ("calculationId") da utilizzare per richiedere la risposta effettiva con i risultati, che sarà disponibile solo per "expiresIn" secondi.
Per richiedere i risultati del calcolo, chiama nuovamente performRequest(urlSuffix, payload, onComplete) by performRequest("calculation/" + CalculationID + "/results, null, showProgress)
Nella risposta finale, response.columns sarà una matrice delle colonne dei tuoi dati.
== Note aggiuntive ==
kernelhttps://naif.jpl.nasa.gov/pub/naif/pds/data/msl-m-spice-6-v1.0/mslsp_1000/data/fk/msl_v08.tfcontiene l'elenco dei quadri di riferimento disponibili per MSL; i più importanti sono:
- MSL_LANDING_SITE -76900
- MSL_SITE_1...399 -76501...-76899
- MSL -76
- MSL_ROVER -76000
- MSL_SPACECRAFT -76010 (skycrane + rover + backshell + scudo termico?)
- MSL_CRUISE_STAGE -76020
- MSL_DESCENT_STAGE -76030 (skycrane o skycrane + rover?)
- MSL_ROVER_MECH -76040
- MSL_CACS -76050 (telaio MSL Cruise ACS (sistema di controllo dell'assetto?))
- MSL_DIMU_A -76031 (IMU fase di discesa)
Creata una pagina specifica per scaricare i dati EDL:
http://win98.altervista.org/space/exploration/EDL/(nello specificohttp://win98.altervista.org/space/exploration/EDL/edl-retriever.html
)