TLE_Propagation.ipynb 94.9 KB
 Petrus Hyvönen committed May 13, 2014 1 ``````{ `````` Petrus Hyvönen committed Feb 07, 2016 2 `````` "cells": [ `````` Petrus Hyvönen committed May 13, 2014 3 `````` { `````` Petrus Hyvönen committed Feb 07, 2016 4 5 6 `````` "cell_type": "markdown", "metadata": {}, "source": [ `````` Petrus Hyvönen committed Mar 21, 2020 7 `````` "# Two Line Elements Propagation" `````` Petrus Hyvönen committed Feb 07, 2016 8 9 10 11 12 13 `````` ] }, { "cell_type": "markdown", "metadata": {}, "source": [ `````` Petrus Hyvönen committed Mar 21, 2020 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 `````` "## Authors\n", "Petrus Hyvönen, SSC\n", "\n", "## Learning Goals\n", "* *Propagate an TLE*: Specify and read a TLE and propagate it with the orekit TLE propagator\n", "* *Representation of ground station*: How to represent ground points\n", "* *Elementary plotting in Python*: Simple ways to plot data\n", "\n", "## Keywords\n", "orekit, TLE, ground station\n", "\n", "## Summary\n", "\n", "This small tutorial is a first step to a real propagation of a satellite orbit\n", "based on the common TLE format. The results are propagated in an inertial coordinate\n", "system and then converted to a topocentric coordinate system, such as a ground station.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Set up " `````` Petrus Hyvönen committed Feb 07, 2016 37 38 39 40 `````` ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 41 `````` "execution_count": 3, `````` Petrus Hyvönen committed Mar 01, 2020 42 43 44 45 46 47 48 49 `````` "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", `````` Petrus Hyvönen committed Oct 20, 2018 50 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 51 `````` "source": [ `````` Petrus Hyvönen committed Mar 01, 2020 52 53 54 55 56 57 58 59 `````` "## Initialize Orekit " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Import orekit and set up the java virtual machine." `````` Petrus Hyvönen committed Feb 07, 2016 60 61 62 63 `````` ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 64 `````` "execution_count": 4, `````` Petrus Hyvönen committed Oct 20, 2018 65 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 66 67 68 `````` "outputs": [], "source": [ "import orekit\n", `````` Petrus Hyvönen committed Mar 01, 2020 69 70 71 72 73 74 75 76 77 78 79 80 `````` "vm = orekit.initVM()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the orekit-data file with basic paramters. This file is assumed to be in the current directory." ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 81 `````` "execution_count": 5, `````` Petrus Hyvönen committed Mar 01, 2020 82 83 84 `````` "metadata": {}, "outputs": [], "source": [ `````` Petrus Hyvönen committed Feb 07, 2016 85 86 87 88 89 90 91 92 93 94 95 96 97 `````` "from orekit.pyhelpers import setup_orekit_curdir\n", "setup_orekit_curdir()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we are set up to import and use objects from the orekit library." ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 98 `````` "execution_count": 6, `````` Petrus Hyvönen committed Oct 20, 2018 99 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 100 101 102 103 104 105 106 `````` "outputs": [], "source": [ "from org.orekit.frames import FramesFactory, TopocentricFrame\n", "from org.orekit.bodies import OneAxisEllipsoid, GeodeticPoint\n", "from org.orekit.time import TimeScalesFactory, AbsoluteDate, DateComponents, TimeComponents\n", "from org.orekit.utils import IERSConventions, Constants\n", "\n", `````` Petrus Hyvönen committed Mar 01, 2020 107 `````` "from org.orekit.propagation.analytical.tle import TLE, TLEPropagator" `````` Petrus Hyvönen committed Feb 07, 2016 108 109 110 111 `````` ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 112 `````` "execution_count": 7, `````` Petrus Hyvönen committed Mar 01, 2020 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 `````` "metadata": {}, "outputs": [], "source": [ "from math import radians, pi\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting up the TLE " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Specify the two line elements that describes the orbit of the satellite as strings. Here these are specified directly, in a larger example these would likely be fetched from a file or from an on-line service." ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 136 `````` "execution_count": 8, `````` Petrus Hyvönen committed Oct 20, 2018 137 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 138 139 140 141 142 143 144 `````` "outputs": [], "source": [ "#SPOT-5 \n", "tle_line1 = \"1 27421U 02021A 02124.48976499 -.00021470 00000-0 -89879-2 0 20\"\n", "tle_line2 = \"2 27421 98.7490 199.5121 0001333 133.9522 226.1918 14.26113993 62\"" ] }, `````` Petrus Hyvönen committed Mar 01, 2020 145 146 147 148 149 150 151 `````` { "cell_type": "markdown", "metadata": {}, "source": [ "The orekit TLE object parses the two line strings. [See TLE Doc](https://www.orekit.org/static/apidocs/org/orekit/propagation/analytical/tle/TLE.html) The Epoch is the timestamp where the two line elements are referenced to." ] }, `````` Petrus Hyvönen committed Feb 07, 2016 152 153 `````` { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 154 `````` "execution_count": 9, `````` Petrus Hyvönen committed Oct 20, 2018 155 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 156 `````` "outputs": [ `````` Petrus Hyvönen committed May 13, 2014 157 `````` { `````` Petrus Hyvönen committed Feb 07, 2016 158 159 160 `````` "name": "stdout", "output_type": "stream", "text": [ `````` Petrus Hyvönen committed Mar 01, 2020 161 `````` "1 27421U 02021A 02124.48976499 -.00021470 00000-0 -89879-2 0 20\n", `````` Petrus Hyvönen committed Feb 07, 2016 162 163 `````` "2 27421 98.7490 199.5121 0001333 133.9522 226.1918 14.26113993 62\n", "Epoch : 2002-05-04T11:45:15.695\n" `````` Petrus Hyvönen committed May 13, 2014 164 `````` ] `````` Petrus Hyvönen committed Feb 07, 2016 165 166 167 168 `````` } ], "source": [ "mytle = TLE(tle_line1,tle_line2)\n", `````` Petrus Hyvönen committed Mar 01, 2020 169 `````` "\n", `````` Petrus Hyvönen committed Oct 20, 2018 170 171 `````` "print (mytle)\n", "print ('Epoch :',mytle.getDate())" `````` Petrus Hyvönen committed Feb 07, 2016 172 173 `````` ] }, `````` Petrus Hyvönen committed Mar 01, 2020 174 175 176 177 178 179 180 181 182 183 184 185 186 187 `````` { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Coordinate systems " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Orekit supports several coordinate systems, for this example the International Terrestrial Reference Frame (ITRF) is used for the planet. A slightly elliptical body is created for the Earth shape, according to the WGS84 model." ] }, `````` Petrus Hyvönen committed Feb 07, 2016 188 189 `````` { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 190 `````` "execution_count": 10, `````` Petrus Hyvönen committed Oct 20, 2018 191 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 `````` "outputs": [], "source": [ "ITRF = FramesFactory.getITRF(IERSConventions.IERS_2010, True)\n", "earth = OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, \n", " Constants.WGS84_EARTH_FLATTENING, \n", " ITRF)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define the station" ] }, `````` Petrus Hyvönen committed Mar 01, 2020 207 208 209 210 211 212 213 214 215 216 217 218 219 `````` { "cell_type": "markdown", "metadata": {}, "source": [ "The location of the station is defined, and a [TopocentricFrame](https://www.orekit.org/site-orekit-10.1/apidocs/org/orekit/frames/TopocentricFrame.html) specific for this location is created.\n", "\n", "This frame is based on a position near the surface of a body shape. The origin of the frame is at the defining geodetic point location, and the right-handed canonical trihedra is:\n", "\n", "- X axis in the local horizontal plane (normal to zenith direction) and following the local parallel towards East\n", "- Y axis in the horizontal plane (normal to zenith direction) and following the local meridian towards North\n", "- Z axis towards Zenith direction" ] }, `````` Petrus Hyvönen committed Feb 07, 2016 220 221 `````` { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 222 `````` "execution_count": 11, `````` Petrus Hyvönen committed Oct 20, 2018 223 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 224 225 226 227 228 `````` "outputs": [], "source": [ "longitude = radians(21.063)\n", "latitude = radians(67.878)\n", "altitude = 341.0\n", `````` Petrus Hyvönen committed Mar 01, 2020 229 230 231 232 233 234 235 236 237 `````` "station = GeodeticPoint(latitude, longitude, altitude)\n", "station_frame = TopocentricFrame(earth, station, \"Esrange\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the propagation a Earth centered inertial coordinate system is used, the EME2000. This frame is commonly also called J2000. This is a commonly used frame centered at the Earth, and fixed towards reference stars (not rotating with the Earth)." `````` Petrus Hyvönen committed Feb 07, 2016 238 239 240 241 `````` ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 242 `````` "execution_count": 12, `````` Petrus Hyvönen committed Mar 01, 2020 243 244 245 246 247 248 249 250 `````` "metadata": {}, "outputs": [], "source": [ "inertialFrame = FramesFactory.getEME2000()" ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 251 `````` "execution_count": 13, `````` Petrus Hyvönen committed Oct 20, 2018 252 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 253 254 255 256 257 `````` "outputs": [], "source": [ "propagator = TLEPropagator.selectExtrapolator(mytle)" ] }, `````` Petrus Hyvönen committed Mar 01, 2020 258 259 260 261 262 263 264 `````` { "cell_type": "markdown", "metadata": {}, "source": [ "Set the start and end date that is then used for the propagation." ] }, `````` Petrus Hyvönen committed Feb 07, 2016 265 266 `````` { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 267 `````` "execution_count": 14, `````` Petrus Hyvönen committed Oct 20, 2018 268 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 269 270 `````` "outputs": [], "source": [ `````` Petrus Hyvönen committed Mar 01, 2020 271 `````` "extrapDate = AbsoluteDate(2002, 5, 7, 12, 0, 0.0, TimeScalesFactory.getUTC())\n", `````` Petrus Hyvönen committed Feb 07, 2016 272 273 274 275 276 `````` "finalDate = extrapDate.shiftedBy(60.0*60*24) #seconds" ] }, { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 277 `````` "execution_count": 15, `````` Petrus Hyvönen committed Oct 20, 2018 278 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 279 280 281 282 283 284 `````` "outputs": [], "source": [ "el=[]\n", "pos=[]" ] }, `````` Petrus Hyvönen committed Mar 01, 2020 285 286 287 288 289 290 291 `````` { "cell_type": "markdown", "metadata": {}, "source": [ "This is the core loop that performs the propagation, stepping extrapDate through the range with set stepsize. The results are stored in the el and pos lists." ] }, `````` Petrus Hyvönen committed Feb 07, 2016 292 293 `````` { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 294 `````` "execution_count": 16, `````` Petrus Hyvönen committed Oct 20, 2018 295 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 296 297 298 299 300 301 302 `````` "outputs": [], "source": [ "while (extrapDate.compareTo(finalDate) <= 0.0): \n", " pv = propagator.getPVCoordinates(extrapDate, inertialFrame)\n", " pos_tmp = pv.getPosition()\n", " pos.append((pos_tmp.getX(),pos_tmp.getY(),pos_tmp.getZ()))\n", " \n", `````` Petrus Hyvönen committed Mar 01, 2020 303 `````` " el_tmp = station_frame.getElevation(pv.getPosition(),\n", `````` Petrus Hyvönen committed Feb 07, 2016 304 305 306 307 308 309 310 311 312 313 314 315 316 317 `````` " inertialFrame,\n", " extrapDate)*180.0/pi\n", " el.append(el_tmp)\n", " #print extrapDate, pos_tmp, vel_tmp\n", " extrapDate = extrapDate.shiftedBy(10.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot Results" ] }, `````` Petrus Hyvönen committed Mar 01, 2020 318 319 320 321 322 323 324 `````` { "cell_type": "markdown", "metadata": {}, "source": [ "Plot some of the results from the propagation. Note that in the plots below the x-axis are samples and not proper time." ] }, `````` Petrus Hyvönen committed Feb 07, 2016 325 326 `````` { "cell_type": "code", `````` Petrus Hyvönen committed Mar 21, 2020 327 `````` "execution_count": 17, `````` Petrus Hyvönen committed Oct 20, 2018 328 `````` "metadata": {}, `````` Petrus Hyvönen committed Feb 07, 2016 329 `````` "outputs": [ `````` Petrus Hyvönen committed May 13, 2014 330 `````` { `````` Petrus Hyvönen committed Feb 07, 2016 331 `````` "data": { `````` Petrus Hyvönen committed Mar 21, 2020 332 `````` "image/png": "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\n", `````` Petrus Hyvönen committed Feb 07, 2016 333 `````` "text/plain": [ `````` Petrus Hyvönen committed Oct 20, 2018 334 `````` "