Ejemplo n.º 1
0
    def from_tle(cls, sate_id, source, date=None):
        """Returns approximate keplerian elements from TLE.

        The conversion between mean elements in the TEME reference
        frame to osculating elements in any standard reference frame
        is not well defined in literature (see Vallado 3rd edition, pp 236 to 240)

        """
        # Get latest TLE, or the one corresponding to a specified date
        if date is None:
            date = datetime.datetime.utcnow()

        tle = source.get_tle(sate_id, date)

        # Retrieve TLE epoch and corresponding position
        epoch = twoline2rv(tle.lines[0], tle.lines[1], wgs84).epoch
        pos = TLEPredictor(sate_id, source).get_position(epoch)

        # Convert position from ECEF to ECI
        gmst = gstime_from_datetime(epoch)
        position_eci = coordinate_systems.ecef_to_eci(pos.position_ecef, gmst)
        velocity_eci = coordinate_systems.ecef_to_eci(pos.velocity_ecef, gmst)

        # Convert position to Keplerian osculating elements
        p, ecc, inc, raan, argp, ta = rv2coe(wgs84.mu, np.array(position_eci),
                                             np.array(velocity_eci))
        sma = p / (1 - ecc**2)

        return cls(sma, ecc, degrees(inc), degrees(raan), degrees(argp),
                   degrees(ta), epoch)
 def setUp(self):
     # Source
     self.db = MemoryTLESource()
     self.db.add_tle(BUGSAT_SATE_ID, BUGSAT1_TLE_LINES,
                     dt.datetime.utcnow())
     # Predictor
     self.predictor = TLEPredictor(BUGSAT_SATE_ID, self.db)
Ejemplo n.º 3
0
 def setUp(self):
     # Source
     self.db = MemoryTLESource()
     self.db.add_tle(SATE_ID, BUGSAT1_TLE_LINES, datetime.datetime.now())
     # Predictor
     self.predictor = TLEPredictor(SATE_ID, self.db)
     date = datetime.datetime.strptime("2014-10-22 20:18:11.921921", '%Y-%m-%d %H:%M:%S.%f')
     self.next_pass = self.predictor.get_next_pass(tortu1, when_utc=date)
 def setUp(self):
     # Source
     self.db = MemoryTLESource()
     self.start = dt.datetime(2017, 3, 6, 7, 51)
     self.db.add_tle(SATE_ID, LINES, self.start)
     # Predictor
     self.predictor = TLEPredictor(SATE_ID, self.db)
     self.end = self.start + dt.timedelta(days=5)
 def setUp(self):
     tle_lines = (
         "1 42760U 17034C   19070.46618549  .00000282  00000-0  30543-4 0  9995",
         "2 42760  43.0166  56.1509 0009676 356.3576 146.0151 15.09909885 95848",
     )
     self.db = MemoryTLESource()
     self.db.add_tle("42760U", tle_lines, dt.datetime.now())
     self.predictor = TLEPredictor("42760U", self.db)
Ejemplo n.º 6
0
def get_predictor_from_tle_lines(tle_lines):
    db = MemoryTLESource()
    sgp4_sat = Satrec.twoline2rv(tle_lines[0], tle_lines[1])
    db.add_tle(
        sgp4_sat.satnum,
        tuple(tle_lines),
        datetime_from_jday(sgp4_sat.jdsatepoch, sgp4_sat.jdsatepochF),
    )
    predictor = TLEPredictor(sgp4_sat.satnum, db)
    return predictor
 def setUp(self):
     # Source
     self.db = MemoryTLESource()
     self.db.add_tle(BUGSAT_SATE_ID, BUGSAT1_TLE_LINES,
                     dt.datetime.utcnow())
     # Predictor
     self.predictor = TLEPredictor(BUGSAT_SATE_ID, self.db)
     self.is_ascending_mock = self._patch(
         'orbit_predictor.predictors.base.LocationPredictor._is_ascending')
     self.start = dt.datetime(2017, 3, 6, 7, 51)
     logassert.setup(self, 'orbit_predictor.predictors.pass_iterators')
Ejemplo n.º 8
0
    def test_from_tle_returns_same_initial_conditions_on_epoch(self):
        start = datetime(2017, 3, 6, 7, 51)
        db = MemoryTLESource()
        db.add_tle(self.SATE_ID, self.LINES, start)

        keplerian_predictor = KeplerianPredictor.from_tle(self.SATE_ID, db, start)
        tle_predictor = TLEPredictor(self.SATE_ID, db)

        epoch = keplerian_predictor._epoch

        pos_keplerian = keplerian_predictor.get_position(epoch)
        pos_tle = tle_predictor.get_position(epoch)

        assert_allclose(pos_keplerian.position_ecef, pos_tle.position_ecef, rtol=1e-11)
        assert_allclose(pos_keplerian.velocity_ecef, pos_tle.velocity_ecef, rtol=1e-13)
Ejemplo n.º 9
0
    def from_tle(cls, sate_id, source, date=None):
        """Returns approximate keplerian elements from TLE.

        The conversion between mean elements in the TEME reference
        frame to osculating elements in any standard reference frame
        is not well defined in literature (see Vallado 3rd edition, pp 236 to 240)

        """
        # Get latest TLE, or the one corresponding to a specified date
        if date is None:
            date = dt.datetime.utcnow()

        # Retrieve TLE position at given date as starting point
        pos = TLEPredictor(sate_id, source).get_position(date)

        return cls(*pos.osculating_elements, epoch=date)
Ejemplo n.º 10
0
 def get_predictor(self, sate_id):
     """Return a Predictor instance using the current storage."""
     return TLEPredictor(sate_id, self)
Ejemplo n.º 11
0
def get_predictor_from_tle_lines(tle_lines):
    db = MemoryTLESource()
    sgp4_sat = twoline2rv(tle_lines[0], tle_lines[1], wgs84)
    db.add_tle(sgp4_sat.satnum, tuple(tle_lines), sgp4_sat.epoch)
    predictor = TLEPredictor(sgp4_sat.satnum, db)
    return predictor
Ejemplo n.º 12
0
    def get_predictor(self, sate_id, precise=False):
        """Return a Predictor instance using the current storage."""
        if precise:
            return HighAccuracyTLEPredictor(sate_id, self)

        return TLEPredictor(sate_id, self)
Ejemplo n.º 13
0
 def setUpClass(cls):
     # Source
     cls.db = MemoryTLESource()
     cls.db.add_tle(SATE_ID, BUGSAT1_TLE_LINES, datetime.datetime.now())
     # Predictor
     cls.predictor = TLEPredictor(SATE_ID, cls.db)
 def setUp(self):
     self.db = MemoryTLESource()
     self.db.add_tle(TRICKY_SAT_ID, TRICKY_SAT_TLE_LINES, dt.datetime.now())
     self.predictor = TLEPredictor(TRICKY_SAT_ID, self.db)
Ejemplo n.º 15
0
import matplotlib.pyplot as plt

import cartopy.crs as ccrs

import pandas as pd

from orbit_predictor.sources import EtcTLESource
from orbit_predictor.predictors import TLEPredictor

source = EtcTLESource(filename=r'e:/resource.txt')
#source = EtcTLESource(filename=r'd:/visual.txt')
predictor = TLEPredictor("WORLDVIEW-2 (WV-2)      ", source)
#predictor = TLEPredictor('ATLAS CENTAUR 2         ', source)

dates = pd.date_range(start="2018-04-01 00:00", periods=1000, freq="30S")

latlon = pd.DataFrame(index=dates, columns=["lat", "lon"])

for date in dates:
    lat, lon, _ = predictor.get_position(date).position_llh
    latlon.loc[date] = (lat, lon)

latlon.plot()

plt.figure(figsize=(15, 25))
ax = plt.axes(projection=ccrs.PlateCarree())
ax.stock_img()

plt.plot(
    latlon["lon"],
    latlon["lat"],