示例#1
0
class KeplerianPredictorTests(TestCase):
    def setUp(self):
        # Data from Vallado, example 2.4
        # Converted to classical orbital elements
        sma = 7200.478692389954
        ecc = 0.00810123424807035
        inc = 98.59998936154028
        raan = 319.7043176816153
        argp = 70.87958362589532
        ta = 0.004121614893481961

        self.epoch = datetime(2000, 1, 1, 12, 0)

        self.predictor = KeplerianPredictor(sma, ecc, inc, raan, argp, ta,
                                            self.epoch)

    def test_initial_position(self):
        expected_position = np.array([1131.340, -2282.343, 6672.423])
        expected_velocity = np.array([-5.64305, 4.30333, 2.42879])

        position_eci, velocity_eci = self.predictor._propagate_eci(self.epoch)

        assert_allclose(position_eci, expected_position, rtol=1e-7)
        assert_allclose(velocity_eci, expected_velocity, rtol=1e-6)

    def test_propagate_eci(self):
        expected_position = np.array([-4219.7527, 4363.0292, -3958.7666])
        expected_velocity = np.array([3.689866, -1.916735, -6.112511])

        when_utc = self.epoch + timedelta(minutes=40)

        position_eci, velocity_eci = self.predictor._propagate_eci(when_utc)

        assert_allclose(position_eci, expected_position, rtol=1e-5)
        assert_allclose(velocity_eci, expected_velocity, rtol=1e-5)
    def test_from_tle_with_no_date_works(self):
        # https://github.com/satellogic/orbit-predictor/issues/52
        start = dt.datetime(2017, 3, 6, 7, 51)
        db = MemoryTLESource()
        db.add_tle(self.SATE_ID, self.LINES, start)

        KeplerianPredictor.from_tle(self.SATE_ID, db)
示例#3
0
    def setUp(self):
        # Converted to classical orbital elements
        sma = 6780
        ecc = 0.001
        inc = 28.5
        raan = 67.0
        argp = 355.0
        ta = 250.0

        self.epoch = datetime(2000, 1, 1, 12, 0)

        self.predictor = KeplerianPredictor(sma, ecc, inc, raan, argp, ta, self.epoch)
示例#4
0
    def setUp(self):
        # Data from Vallado, example 2.4
        # Converted to classical orbital elements
        sma = 7200.478692389954
        ecc = 0.00810123424807035
        inc = 98.59998936154028
        raan = 319.7043176816153
        argp = 70.87958362589532
        ta = 0.004121614893481961

        self.epoch = datetime(2000, 1, 1, 12, 0)

        self.predictor = KeplerianPredictor(sma, ecc, inc, raan, argp, ta, self.epoch)
class KeplerianPredictorOneDayTests(TestCase):
    def setUp(self):
        # Converted to classical orbital elements
        sma = 6780
        ecc = 0.001
        inc = 28.5
        raan = 67.0
        argp = 355.0
        ta = 250.0

        self.epoch = dt.datetime(2000, 1, 1, 12, 0)

        self.predictor = KeplerianPredictor(sma, ecc, inc, raan, argp, ta,
                                            self.epoch)

    def test_initial_position(self):
        expected_position = np.array(
            [3852.57404763, -4749.1872318, -2933.02952967])
        expected_velocity = np.array([5.33068317, 5.28723659, -1.54255441])

        position_eci, velocity_eci = self.predictor.propagate_eci(self.epoch)

        assert_allclose(position_eci, expected_position, rtol=1e-7)
        assert_allclose(velocity_eci, expected_velocity, rtol=1e-6)

    def test_propagate_eci(self):
        expected_position = np.array(
            [-5154.02724044, 3011.19175291, 3214.77198183])
        expected_velocity = np.array([-3.67652279, -6.71613987, 0.41267465])

        when_utc = self.epoch + dt.timedelta(hours=23.999999999)

        position_eci, velocity_eci = self.predictor.propagate_eci(when_utc)

        assert_allclose(position_eci, expected_position, rtol=1e-2)
        assert_allclose(velocity_eci, expected_velocity, rtol=1e-2)

    def test_propagate_one_day(self):
        expected_position = np.array(
            [-5154.02724044, 3011.19175291, 3214.77198183])
        expected_velocity = np.array([-3.67652279, -6.71613987, 0.41267465])

        when_utc = self.epoch + dt.timedelta(hours=24)

        position_eci, velocity_eci = self.predictor.propagate_eci(when_utc)

        assert_allclose(position_eci, expected_position, rtol=1e-2)
        assert_allclose(velocity_eci, expected_velocity, rtol=1e-2)
示例#6
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)
示例#7
0
def equatorial_orbits(
        draw,
        sma=floats(R_E_KM, 42000),
        ecc=floats(0, 1, exclude_max=True),
        argp=floats(0, 360),
        ta=floats(0, 360),
        epoch=datetimes(),
):
    return KeplerianPredictor(
        draw(sma),
        draw(ecc),
        0,
        0,
        draw(argp),
        draw(ta),
        draw(epoch),
    )
示例#8
0
def elliptical_orbit():
    return KeplerianPredictor(7000, 0.2, 0, 0, 0, 0,
                              dt.datetime(2020, 2, 26, 0, 0, 0))