Làm cách nào để truy xuất quỹ đạo MSL EDL bằng Javascript và API webgeocalc?

Jan 18 2021

Tôi đã tìm thấy " cổng javascript" vào dữ liệu SPICE của NASA , api web "webgeocalc":

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

Nó hoạt động cả trực tuyến và ngoại tuyến (nhưng ngoại tuyến, tôi phải sử dụng giải pháp thay thế cho chính sách CORS ), nhưng tôi không thể lấy dữ liệu cho quỹ đạo EDL của Phòng thí nghiệm Khoa học Sao Hỏa.

Đối với một trong nhiều lần thử, tôi đã sử dụng đầu vào này:

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

Nhưng tôi gặp lỗi này ("Không đủ dữ liệu về con thiêu thân đã được tải"):

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

Kernel này chứa tất cả các khung tham chiếu có sẵn cho MSL:

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

Ví dụ:

   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

Dữ liệu phải có sẵn cho ngày cụ thể, vì NASA Horizons có thể cung cấp cho chúng: 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

Tôi đã bao gồm các hạt nhân được liệt kê trong ví dụ này từ thư viện Timecraft.js, nhưng có thể tôi vẫn thiếu một số hạt nhân:

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

Đường dẫn nhân (giao diện webgeocalc so với máy chủ NAIF của NASA và máy chủ 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 /

Trả lời

1 jumpjack Jan 19 2021 at 15:30

Sau hàng chục lần thử nghiệm, tôi đã tìm ra con đường.

Tải trọng sẽ được gửi qua truy vấn 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"
}

Xin lưu ý rằng các nhân được chỉ định không phải là nhân thực mà thực sự là danh sách các nhân:

Nội dung của pds / wgc / mk / new_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

 

Nội dung của pds / data / msl-m-Cay-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 ) (có lẽ không phải tất cả các hạt nhân này đều cần thiết cho 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 ...)

Đặt tải trọng phía trên vào trang này và nhấp vào GỬI TÍNH TOÁN. Khi kết quả đã sẵn sàng, bạn sẽ nhận được một id tính toán; bấm vào NHẬN KẾT QUẢ để tải xuống phản hồi.

Trang cũng hoạt động ngoại tuyến miễn là bạn thêm dòng này:

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

sau cái này:

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

Làm thế nào nó hoạt động:

Gọi hàm performanceRequest (urlSuffix, payload, onComplete) lần đầu tiên bằng cách sử dụng PerformRequest ("tính toán / mới", payloadText, showProgress) , có nghĩa là showProgress () sẽ được gọi sau khi nhận được phản hồi; phản hồi sơ bộ sẽ như thế nào (sau khi tính toán hoàn tất):

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

Bạn nên kiểm tra "phase" trong khi nó chuyển từ "LOADING KERNELS" sang "COMPLETE".

Khi quá trình tính toán hoàn tất, phản hồi sẽ chứa số nhận dạng ("mathId") để sử dụng để yêu cầu phản hồi thực tế kèm theo kết quả, sẽ chỉ có sẵn trong giây "expiresIn".

Để yêu cầu kết quả tính toán, hãy gọi lại hàm performanceRequest (urlSuffix, payload, onComplete) bằng performanceRequest ("tính toán /" + tính toánID + "/ kết quả, null, showProgress)

Trong phản hồi cuối cùng, response.columns sẽ là một mảng các cột dữ liệu của bạn.

== Ghi chú bổ sung ==

Kernel https://naif.jpl.nasa.gov/pub/naif/pds/data/msl-m-spice-6-v1.0/mslsp_1000/data/fk/msl_v08.tfchứa danh sách các hệ quy chiếu có sẵn cho MSL; quan trọng nhất là:

  • MSL_LANDING_SITE -76900
  • MSL_SITE_1 ... 399 -76501 ...- 76899
  • MSL -76
  • MSL_ROVER -76000
  • MSL_SPACECRAFT -76010 (skycrane + rover + backhell + heatshield?)
  • MSL_CRUISE_STAGE -76020
  • MSL_DESCENT_STAGE -76030 (skycrane hay skycrane + rover?)
  • MSL_ROVER_MECH -76040
  • MSL_CACS -76050 (Khung MSL Cruise ACS (Hệ thống Kiểm soát Thái độ?))
  • MSL_DIMU_A -76031 (IMU giai đoạn đi xuống)

Đã tạo một trang cụ thể để tải xuống dữ liệu EDL:

http://win98.altervista.org/space/exploration/EDL/ (đặc biệt http://win98.altervista.org/space/exploration/EDL/edl-retriever.html

)