Wie rufe ich die MSL EDL-Trajektorie mit Javascript und der Webgeocalc-API ab?

Jan 18 2021

Ich habe ein " Javascript-Gateway" zu NASA SPICE-Daten gefunden , die Web-API "webgeocalc":

https://wgc2.jpl.nasa.gov:8443/webgeocalc/example/perform-calculation.html

Es funktioniert sowohl online als auch offline (aber offline muss ich eine Problemumgehung für die CORS-Richtlinie verwenden ), aber ich kann keine Daten für die EDL-Trajektorie des Mars Science Laboratory abrufen.

Für einen von vielen Versuchen habe ich diese Eingabe verwendet:

{
  "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"
}

Aber ich erhalte diesen Fehler ("Unzureichende Ephemeridendaten wurden geladen"):

{
  "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."
  }
}

Dieser Kernel enthält alle für MSL verfügbaren Referenzrahmen:

https://naif.jpl.nasa.gov/pub/naif/MSL/kernels/fk/msl_v08.tf

Zum Beispiel:

   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

Daten sollten für ein bestimmtes Datum verfügbar sein, da NASA Horizons sie bereitstellen kann: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

Ich habe die in diesem Beispiel aufgeführten Kernel aus der Timecraft.js-Bibliothek eingefügt, aber vielleicht fehlen mir noch einige:

https://github.com/NASA-AMMOS/timecraftjs/blob/master/example/index.js

Kernel-Pfade (Webgeocalc-Schnittstelle vs. NASA-NAIF-Server vs. Webgeocal-Server):

  • "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/

Antworten

1 jumpjack Jan 19 2021 at 15:30

Nach Dutzenden von Tests fand ich den Weg.

Nutzlast, die über die POST-Abfrage gesendet werden soll:

{
  "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"
}

Bitte beachten Sie, dass angegebene Kernel keine echten Kernel sind, sondern Listen von Kerneln:

Inhalt von 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

 

Inhalt von 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) (wahrscheinlich sind nicht alle diese Kernel für EDL notwendig):

 \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 ...)

Geben Sie die obige Nutzlast in diese Seite ein und klicken Sie auf BERECHNUNG SENDEN. Sobald die Ergebnisse fertig sind, erhalten Sie eine Berechnungs-ID; Klicken Sie auf ERGEBNISSE ERHALTEN, um die Antwort herunterzuladen.

Die Seite funktioniert auch offline, solange Sie diese Zeile hinzufügen:

baseURL = "https://cors-anywhere.herokuapp.com/https://wgc2.jpl.nasa.gov:8443/webgeocalc/api/"; 

nach diesem:

var baseURL = ourLocation.substring(0, splicePoint) + "/api/"

Wie es funktioniert:

Rufen Sie die Funktion performRequest(urlSuffix, payload, onComplete) ein erstes Mal mit performRequest("calculation/new", payloadText, showProgress) auf, was bedeutet, dass showProgress() aufgerufen wird, sobald die Antwort empfangen wird; Die vorläufige Antwort sieht so aus (nach Abschluss der Berechnung):

{
  "status": "OK",
  "message": "The request was successful.",
  "calculationId": "7a304773-50f2-45c1-bb5a-bfd9fcbd063c",
  "result": {
    "phase": "COMPLETE",
    "expiresIn": 600
  }
}

Sie sollten "Phase" überprüfen, während es von "LOADING KERNELS" zu "COMPLETE" übergeht.

Sobald die Berechnung abgeschlossen ist, enthält die Antwort den Bezeichner („calculationId“), der zum Anfordern der eigentlichen Antwort mit Ergebnissen verwendet werden soll, die nur für „expiresIn“-Sekunden verfügbar sind.

Um die Berechnungsergebnisse anzufordern, rufen Sie erneut performRequest(urlSuffix, payload, onComplete) von performRequest("calculation/" + computeID + "/results, null, showProgress) auf.

In der endgültigen Antwort ist response.columns ein Array der Spalten Ihrer Daten.

== Zusätzliche Anmerkungen ==

Kernelhttps://naif.jpl.nasa.gov/pub/naif/pds/data/msl-m-spice-6-v1.0/mslsp_1000/data/fk/msl_v08.tfenthält die Liste der verfügbaren Referenzrahmen für MSL; am wichtigsten sind:

  • MSL_LANDING_SITE -76900
  • MSL_SITE_1...399 -76501...-76899
  • MSL-76
  • MSL_ROVER -76000
  • MSL_SPACECRAFT -76010 (Skycrane + Rover + Backshell + Hitzeschild?)
  • MSL_CRUISE_STAGE -76020
  • MSL_DESCENT_STAGE -76030 (Skycrane oder Skycrane + Rover?)
  • MSL_ROVER_MECH -76040
  • MSL_CACS -76050 (Rahmen MSL Cruise ACS (Attitude Control System?))
  • MSL_DIMU_A -76031 (Abstiegsstufe IMU)

Eine bestimmte Seite zum Herunterladen von EDL-Daten erstellt:

http://win98.altervista.org/space/exploration/EDL/(speziellhttp://win98.altervista.org/space/exploration/EDL/edl-retriever.html

)