Как получить траекторию MSL EDL с помощью Javascript и webgeocalc API?

Jan 18 2021

Я нашел " шлюз javascript" для данных NASA SPICE , веб-api "webgeocalc":

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

Он работает как в сети, так и в автономном режиме (но в автономном режиме я должен использовать обходной путь для политики CORS ), но я не могу получить данные для траектории EDL Марсианской научной лаборатории.

Для одной из многих попыток я использовал этот ввод:

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

Но я получаю эту ошибку («Загружено недостаточно данных эфемерид»):

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

Это ядро ​​содержит все опорные кадры, доступные для MSL:

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

Например:

   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

Данные должны быть доступны на указанную дату, поскольку NASA Horizons может их предоставить: 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

Я включил перечисленные в этом примере ядра из библиотеки Timecraft.js, но, возможно, мне все еще не хватает некоторых из них:

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

Пути к ядрам (интерфейс webgeocalc, сервер NASA NAIF и сервер webgeocal):

  • "MSL /" -> https://naif.jpl.nasa.gov/pub/naif/MSL/ -> / группа / наиф / критический / наифвеб / паб / наиф / MSL
  • "pds / wgc / kernels /" -> https://naif.jpl.nasa.gov/pub/naif/generic_kernels/ -> / группа / наиф / критический / наифвеб / паб / наиф / pds / wgc / ядра /

Ответы

1 jumpjack Jan 19 2021 at 15:30

После десятков тестов я нашел способ.

Данные для отправки по запросу 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"
}

Обратите внимание, что указанные ядра не являются настоящими ядрами, а являются списками ядер:

Содержимое 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

 

Содержимое 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 ) (наверное, не все эти ядра нужны для 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 ...)

Поместите вышеуказанные данные на эту страницу и нажмите ОТПРАВИТЬ РАСЧЕТ. Как только результаты будут готовы, вы получите идентификатор расчета; нажмите ПОЛУЧИТЬ РЕЗУЛЬТАТЫ, чтобы загрузить ответ.

Страница также работает в автономном режиме, если вы добавите эту строку:

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

после этого:

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

Как это работает:

Вызов функции performRequest (urlSuffix, payload, onComplete) в первый раз с использованием performRequest («вычисление / новый», payloadText, showProgress) , что означает, что showProgress () будет вызываться после получения ответа; предварительный ответ будет иметь вид (после завершения расчета):

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

Вы должны проверить «фазу», пока она переходит от «ЗАГРУЗКА ЯДЕР» на «ЗАВЕРШЕНИЕ».

После завершения расчета ответ будет содержать идентификатор («CalculationId»), который будет использоваться для запроса фактического ответа с результатами, который будет доступен только в течение «expiresIn» секунд.

Чтобы запросить результаты вычислений, снова вызовите performRequest (urlSuffix, payload, onComplete) с помощью performRequest ("вычисление /" + вычислениеID + "/ results, null, showProgress)

В окончательном ответе response.columns будет массивом столбцов ваших данных.

== Дополнительные примечания ==

Ядро https://naif.jpl.nasa.gov/pub/naif/pds/data/msl-m-spice-6-v1.0/mslsp_1000/data/fk/msl_v08.tfсодержит список доступных опорных кадров для MSL; наиболее важными являются:

  • MSL_LANDING_SITE -76900
  • MSL_SITE_1 ... 399-76501 ...- 76899
  • MSL -76
  • MSL_ROVER -76000
  • MSL_SPACECRAFT -76010 (скайкран + марсоход + кожух + теплозащитный экран?)
  • MSL_CRUISE_STAGE -76020
  • MSL_DESCENT_STAGE -76030 (небесный кран или небесный кран + марсоход?)
  • MSL_ROVER_MECH -76040
  • MSL_CACS -76050 (кадр MSL Cruise ACS (Attitude Control System?))
  • MSL_DIMU_A -76031 (ИДУ ступени спуска)

Создана специальная страница для загрузки данных EDL:

http://win98.altervista.org/space/exploration/EDL/ (конкретно http://win98.altervista.org/space/exploration/EDL/edl-retriever.html

)