{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Orbit determination example\n", "This notebook does the following:\n", "* Download an orbit first guess from SpaceTrack\n", "* Get laser ranging data\n", "* Feed the data to Orekit\n", "* Estimate the orbit\n", "* Propagate and compare the orbit to the first guess" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## OD parameters\n", "First, some parameters need to be defined for the orbit determination:\n", "* Satellite ID in NORAD format\n", "* Spacecraft mass: important for the drag term\n", "* Measurement weights: used to weight certain measurements more than others during the orbit estimation. Here, we only have range measurements and we do not know the confidence associated to these measurements, so all weights are identical\n", "* OD date: date at which the orbit will be estimated. \n", "* Data collection duration: for example, if equals 2 days, the laser data from the 2 days before the OD date will be used to estimate the orbit. This value is an important trade-off for the quality of the orbit determination:\n", " * The longer the duration, the more ranging data is available, which can increase the quality of the estimation\n", " * The longer the duration, the longer the orbit must be propagated, and the higher the covariance because of the orbit perturbations such as the gravity field, drag, Sun, Moon, etc.\n", " * In some cases, the estimator can only converge if the time windows is small enough\n", " * In the case of CALIPSO, it must be kept very short because we don't know if there were orbit boosts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Satellite parameters" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "sat_list = { \n", " 'calipso': {\n", " 'norad_id': 29108, # For Space-Track TLE queries\n", " 'mass': 560.0, # kg; https://atrain.nasa.gov/publications/CALIPSO.pdf\n", " 'cross_section': 5.0, # m2; Estimation based on satellite's geometry\n", " 'cd': 2.0, # TODO: compute proper value\n", " 'cr': 1.0 # TODO: compute proper value\n", " }\n", "}\n", "\n", "sc_name = 'calipso' # Change the name to select a different satellite in the dict" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "range_weight = 1.0 # Will be normalized later (i.e divided by the number of observations)\n", "range_sigma = 1.0 # Estimated covariance of the range measurements, in meters\n", "\n", "import numpy as np\n", "\n", "from datetime import datetime\n", "odDate = datetime(2021, 4, 19, 21, 0, 0) # Epoch of the orbit determination\n", "collectionDuration = 6000.0 # seconds, approximately one orbit. In CALIPSO's case, only small windows work\n", "from datetime import timedelta\n", "# The data is taken before the epoch\n", "startCollectionDate = odDate + timedelta(seconds=-collectionDuration)\n", "\n", "# Orbit propagator parameters\n", "prop_min_step = 0.001 # s\n", "prop_max_step = 300.0 # s\n", "prop_position_error = 0.1 # m\n", "\n", "# Estimator parameters\n", "estimator_position_scale = 1.0 # m\n", "estimator_convergence_thres = 1e-2\n", "estimator_max_iterations = 25\n", "estimator_max_evaluations = 35" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Loading the ground stations from a CSV file. These ground station coordinates will be used for generated simulated measurements, for instance RA/DEC or range." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | longitude_deg | \n", "latitude_deg | \n", "altitude | \n", "
---|---|---|---|
name | \n", "\n", " | \n", " | \n", " |
Svalbard | \n", "15.0 | \n", "78.0 | \n", "0.0 | \n", "
Australia | \n", "117.0 | \n", "-32.0 | \n", "0.0 | \n", "
Argentina | \n", "-65.0 | \n", "-35.0 | \n", "0.0 | \n", "
Antarctica | \n", "-75.0 | \n", "-73.0 | \n", "0.0 | \n", "
Tunka | \n", "102.5 | \n", "51.7 | \n", "0.0 | \n", "
\n", " | lat_deg | \n", "lon_deg | \n", "range_km | \n", "
---|---|---|---|
datetime_utc | \n", "\n", " | \n", " | \n", " |
2021-04-19 19:20:00 | \n", "-45.3315 | \n", "-67.2500 | \n", "704.3260 | \n", "
2021-04-19 19:20:10 | \n", "-44.7363 | \n", "-67.4658 | \n", "704.0738 | \n", "
2021-04-19 19:20:20 | \n", "-44.1407 | \n", "-67.6781 | \n", "703.8208 | \n", "
2021-04-19 19:20:30 | \n", "-43.5448 | \n", "-67.8869 | \n", "703.5671 | \n", "
2021-04-19 19:20:40 | \n", "-42.9486 | \n", "-68.0926 | \n", "703.3129 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
2021-04-19 20:59:20 | \n", "-42.4227 | \n", "-92.8997 | \n", "703.0635 | \n", "
2021-04-19 20:59:30 | \n", "-41.8259 | \n", "-93.0995 | \n", "702.8062 | \n", "
2021-04-19 20:59:40 | \n", "-41.2288 | \n", "-93.2965 | \n", "702.5487 | \n", "
2021-04-19 20:59:50 | \n", "-40.6314 | \n", "-93.4906 | \n", "702.2910 | \n", "
2021-04-19 21:00:00 | \n", "-40.0336 | \n", "-93.6821 | \n", "702.0331 | \n", "
601 rows × 3 columns
\n", "\n", " | lat_deg | \n", "lon_deg | \n", "alt_m | \n", "
---|---|---|---|
2021-04-18 19:20:00 | \n", "81.534088 | \n", "-179.484191 | \n", "697594.926055 | \n", "
2021-04-18 19:25:00 | \n", "68.232100 | \n", "124.298114 | \n", "696008.853261 | \n", "
2021-04-18 19:30:00 | \n", "50.789342 | \n", "112.031613 | \n", "692532.689928 | \n", "
2021-04-18 19:35:00 | \n", "32.830495 | \n", "105.928791 | \n", "688921.312645 | \n", "
2021-04-18 19:40:00 | \n", "14.697556 | \n", "101.500749 | \n", "687183.710030 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
2021-04-20 20:40:00 | \n", "70.030270 | \n", "107.795182 | \n", "696290.287243 | \n", "
2021-04-20 20:45:00 | \n", "52.705196 | \n", "94.048206 | \n", "692978.606638 | \n", "
2021-04-20 20:50:00 | \n", "34.776813 | \n", "87.620379 | \n", "689317.171181 | \n", "
2021-04-20 20:55:00 | \n", "16.656291 | \n", "83.089021 | \n", "687320.786977 | \n", "
2021-04-20 21:00:00 | \n", "-1.531643 | \n", "79.139757 | \n", "688502.705612 | \n", "
597 rows × 3 columns
\n", "\n", " | x | \n", "y | \n", "z | \n", "vx | \n", "vy | \n", "vz | \n", "
---|---|---|---|---|---|---|
2021-04-19 19:20:00 | \n", "1.924822e+06 | \n", "-4.568520e+06 | \n", "-5.041413e+06 | \n", "280.957011 | \n", "-5560.983210 | \n", "5150.741715 | \n", "
2021-04-19 19:20:01 | \n", "1.925101e+06 | \n", "-4.574079e+06 | \n", "-5.036259e+06 | \n", "277.990259 | \n", "-5555.903791 | \n", "5156.427400 | \n", "
2021-04-19 19:20:02 | \n", "1.925378e+06 | \n", "-4.579632e+06 | \n", "-5.031100e+06 | \n", "275.023920 | \n", "-5550.817674 | \n", "5162.107314 | \n", "
2021-04-19 19:20:03 | \n", "1.925651e+06 | \n", "-4.585180e+06 | \n", "-5.025935e+06 | \n", "272.057997 | \n", "-5545.724866 | \n", "5167.781449 | \n", "
2021-04-19 19:20:04 | \n", "1.925922e+06 | \n", "-4.590723e+06 | \n", "-5.020764e+06 | \n", "269.092496 | \n", "-5540.625371 | \n", "5173.449799 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
2021-04-19 20:59:56 | \n", "-3.307806e+05 | \n", "-5.372073e+06 | \n", "-4.584675e+06 | \n", "-2099.659040 | \n", "-4655.262224 | \n", "5612.014295 | \n", "
2021-04-19 20:59:57 | \n", "-3.328804e+05 | \n", "-5.376726e+06 | \n", "-4.579060e+06 | \n", "-2099.965532 | \n", "-4648.932022 | \n", "5617.187974 | \n", "
2021-04-19 20:59:58 | \n", "-3.349805e+05 | \n", "-5.381371e+06 | \n", "-4.573440e+06 | \n", "-2100.268743 | \n", "-4642.596513 | \n", "5622.355353 | \n", "
2021-04-19 20:59:59 | \n", "-3.370809e+05 | \n", "-5.386011e+06 | \n", "-4.567815e+06 | \n", "-2100.568672 | \n", "-4636.255706 | \n", "5627.516427 | \n", "
2021-04-19 21:00:00 | \n", "-3.391817e+05 | \n", "-5.390644e+06 | \n", "-4.562185e+06 | \n", "-2100.865319 | \n", "-4629.909607 | \n", "5632.671190 | \n", "
6001 rows × 6 columns
\n", "\n", " | x | \n", "y | \n", "z | \n", "vx | \n", "vy | \n", "vz | \n", "
---|---|---|---|---|---|---|
2021-04-19 19:20:00 | \n", "1.629402e+06 | \n", "4.678402e+06 | \n", "-5.044775e+06 | \n", "3193.674912 | \n", "4430.334291 | \n", "5144.219082 | \n", "
2021-04-19 19:20:01 | \n", "1.632595e+06 | \n", "4.682830e+06 | \n", "-5.039628e+06 | \n", "3191.839439 | \n", "4425.066779 | \n", "5149.908555 | \n", "
2021-04-19 19:20:02 | \n", "1.635786e+06 | \n", "4.687253e+06 | \n", "-5.034475e+06 | \n", "3190.000359 | \n", "4419.794244 | \n", "5155.592263 | \n", "
2021-04-19 19:20:03 | \n", "1.638975e+06 | \n", "4.691670e+06 | \n", "-5.029317e+06 | \n", "3188.157674 | \n", "4414.516692 | \n", "5161.270200 | \n", "
2021-04-19 19:20:04 | \n", "1.642162e+06 | \n", "4.696082e+06 | \n", "-5.024153e+06 | \n", "3186.311386 | \n", "4409.234129 | \n", "5166.942359 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
2021-04-19 20:59:56 | \n", "1.887238e+06 | \n", "5.036988e+06 | \n", "-4.588564e+06 | \n", "3020.405959 | \n", "3969.880321 | \n", "5605.846700 | \n", "
2021-04-19 20:59:57 | \n", "1.890257e+06 | \n", "5.040955e+06 | \n", "-4.582955e+06 | \n", "3018.278877 | \n", "3964.205547 | \n", "5611.024761 | \n", "
2021-04-19 20:59:58 | \n", "1.893274e+06 | \n", "5.044916e+06 | \n", "-4.577342e+06 | \n", "3016.148378 | \n", "3958.526261 | \n", "5616.196530 | \n", "
2021-04-19 20:59:59 | \n", "1.896289e+06 | \n", "5.048872e+06 | \n", "-4.571723e+06 | \n", "3014.014465 | \n", "3952.842469 | \n", "5621.362001 | \n", "
2021-04-19 21:00:00 | \n", "1.899302e+06 | \n", "5.052822e+06 | \n", "-4.566099e+06 | \n", "3011.877139 | \n", "3947.154178 | \n", "5626.521167 | \n", "
6001 rows × 6 columns
\n", "\n", " | ground_station | \n", "az_deg | \n", "el_deg | \n", "
---|---|---|---|
2021-04-19 20:02:23 | \n", "Tunka | \n", "15.115783617032385 | \n", "7.66812839220923 | \n", "
2021-04-19 20:02:24 | \n", "Tunka | \n", "15.122700514659531 | \n", "7.751957209168841 | \n", "
2021-04-19 20:02:25 | \n", "Tunka | \n", "15.129634927361755 | \n", "7.836097603463941 | \n", "
2021-04-19 20:02:26 | \n", "Tunka | \n", "15.136587045799004 | \n", "7.9205522614634365 | \n", "
2021-04-19 20:02:27 | \n", "Tunka | \n", "15.143557063116962 | \n", "8.005323899386005 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
2021-04-19 20:14:21 | \n", "Tunka | \n", "-164.13817079955322 | \n", "0.3036960741738218 | \n", "
2021-04-19 20:14:22 | \n", "Tunka | \n", "-164.13383659179337 | \n", "0.24119900191966986 | \n", "
2021-04-19 20:14:23 | \n", "Tunka | \n", "-164.12951251781402 | \n", "0.17884562380385266 | \n", "
2021-04-19 20:14:24 | \n", "Tunka | \n", "-164.1251985181108 | \n", "0.11663496456349737 | \n", "
2021-04-19 20:14:25 | \n", "Tunka | \n", "-164.12089453374423 | \n", "0.05456605756710139 | \n", "
723 rows × 3 columns
\n", "\n", " | ground_station | \n", "ra_deg | \n", "dec_deg | \n", "
---|---|---|---|
2021-04-19 19:20:00 | \n", "Argentina | \n", "-73.66852095441548 | \n", "-76.67135779903485 | \n", "
2021-04-19 19:20:01 | \n", "Argentina | \n", "-72.86381262705333 | \n", "-76.74465684573238 | \n", "
2021-04-19 19:20:02 | \n", "Argentina | \n", "-72.04453000559761 | \n", "-76.81573644924268 | \n", "
2021-04-19 19:20:03 | \n", "Argentina | \n", "-71.21063690261401 | \n", "-76.88450069522003 | \n", "
2021-04-19 19:20:04 | \n", "Argentina | \n", "-70.36212129471667 | \n", "-76.95085159654056 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
2021-04-19 20:59:56 | \n", "Argentina | \n", "-3.1530873942438413 | \n", "-19.996196891839794 | \n", "
2021-04-19 20:59:57 | \n", "Argentina | \n", "-3.0612274494554192 | \n", "-19.865481796190636 | \n", "
2021-04-19 20:59:58 | \n", "Argentina | \n", "-2.96971573053403 | \n", "-19.73473397801875 | \n", "
2021-04-19 20:59:59 | \n", "Argentina | \n", "-2.878551349264586 | \n", "-19.603955737852363 | \n", "
2021-04-19 21:00:00 | \n", "Argentina | \n", "-2.7877334142899812 | \n", "-19.473149365982014 | \n", "
2812 rows × 3 columns
\n", "