예제 #1
0
def _OneWeb_00041():

    # OneWeb initial LEO constellation
    # SAT-LOI-20160428-00041
    # Orbital planes 1 to 18
    # 1200 km 87.9 degree
    # RAAN[0] = 0, delta_RAAN = 10.2
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 4.5 delta_NNU = 9
    n_planes = 18  # number of planes
    n_sats = 40  # number of satellites per plane
    set = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 1200 * u.km,
        ecc=0 * u.one,
        inc=87.9 * u.deg,
        rraan=np.arange(0, n_planes) * 10.2 * u.deg,
        aargp=np.repeat(0 * u.deg, n_planes),
        nnnu=np.split(
            np.mod(
                np.tile(np.arange(0, n_sats) * 9 * u.deg, (n_planes, 1)) +
                np.tile(np.arange(0, n_planes) * 4.5 * u.deg,
                        (n_sats, 1)).T, 360 * u.deg), n_planes))
    set.set_color("#0074D9")  # Blue
    set.set_fov(40.14 * u.deg)

    constellation = Constellation()
    constellation.append(set)

    return constellation
예제 #2
0
def _Audacy_00117():

    asat_1 = Satellite.circular(Earth.poli_body,
                                20270.4 * u.km - Earth.poli_body.R_mean,
                                inc=25 * u.deg,
                                raan=157.64 * u.deg,
                                arglat=0 * u.deg)
    asat_2 = Satellite.circular(Earth.poli_body,
                                20270.4 * u.km - Earth.poli_body.R_mean,
                                inc=25 * u.deg,
                                raan=217.64 * u.deg,
                                arglat=180 * u.deg)
    asat_3 = Satellite.circular(Earth.poli_body,
                                20270.4 * u.km - Earth.poli_body.R_mean,
                                inc=25 * u.deg,
                                raan=277.64 * u.deg,
                                arglat=0 * u.deg)
    constellation = Constellation()
    constellation.append(asat_1)
    constellation.append(asat_2)
    constellation.append(asat_3)
    constellation.set_color("#0074D9")
    constellation.set_fov(21.22 * u.deg)

    return constellation
예제 #3
0
def _Astrome():

    n_planes = 11
    n_sats = 18
    set = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 1530 * u.km,
        ecc=0 * u.one,
        inc=30.0 * u.deg,
        rraan=np.arange(0, n_planes) * 30 * u.deg,
        aargp=np.repeat(0 * u.deg, n_planes),
        nnnu=np.split(
            np.mod(
                np.tile(np.linspace(0, 360, n_sats) * u.deg, (n_planes, 1)) +
                np.tile(np.arange(0, n_planes) * 1.818 * u.deg,
                        (n_sats, 1)).T, 360 * u.deg), n_planes))
    set.set_color("#0074D9")
    set.set_fov(37.00 * u.deg)

    constellation = Constellation()
    constellation.append(set)

    return constellation
예제 #4
0
def _Telesat_00053():

    J2017 = time.Time('J2017', scale='tt')

    # SAT-MPL-20200526-00053
    # Orbital plane 1 - 20 & 37 - 43 (polar orbits)
    # 27 planes (@ 1015 km, 99.0 degree, 13 sats/plane)
    # RAAN[0] = 0, delta_RAAN = 360 / 27 * 2
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 1.025 delta_NNU = 360 / 13
    # Index of NNNU[plane#][sat#]
    # Note: to let the code make more sense indexes match schedule planes as:
    # [37, 39, ..., 43, 2, 4, ..., 42, 1, 3, ..., 19]
    num_plane = 27  # number of planes
    num_sat = 13  # number of satellites per plane
    set_polar = SatSet.as_set(Earth.poli_body,
                                a=Earth.poli_body.R_mean + 1015 * u.km, ecc=0 * u.one, inc=99.0 * u.deg,
                                rraan=np.mod(np.arange(0, num_plane) * 360.0 / num_plane * 2, 360.0) * u.deg,
                                aargp=np.repeat(0 * u.deg, num_plane),
                                nnnu=np.split(
                                    np.mod(np.tile(np.arange(0, num_sat) * 360.0 / num_sat, (num_plane, 1)) +
                                                np.tile(np.arange(0, num_plane) * 1.025, (num_sat, 1)).T, 360),
                                    num_plane) * u.deg,
                                epoch=J2017)
    set_polar.set_color("#0074D9")  # Blue
    set_polar.set_fov(44.85 * u.deg)

    # 40 planes (@ 1325 km, 50.88 degree, 33 sats/plane)
    # RAAN[0] = 0, delta_RAAN = 360 / 40
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 360 / 33 / 5 delta_NNU = 360 / 33  --- 0.0:1.09:13.1 with some weird ordering per plane
    # Index of NNNU[plane#][sat#]
    # Note: to let the code make more sense indexes match schedule planes as:
    num_plane = 40  # number of planes
    num_sat = 33  # number of satellites per plane
    set_inc = SatSet.as_set(Earth.poli_body,
                              a=Earth.poli_body.R_mean + 1325 * u.km, ecc=0 * u.one, inc=50.88 * u.deg,
                              rraan=np.mod(np.arange(0, num_plane) * 360.0 / num_plane * 2, 360.0) * u.deg,
                              aargp=np.repeat(0 * u.deg, num_plane),
                              nnnu=np.split(
                                  np.mod(np.tile(np.arange(0, num_sat) * 360.0 / num_sat, (num_plane, 1)) +
                                         np.tile(np.array([0, 3, 1, 4, 2] * 8) * 2.18, (num_sat, 1)).T, 360),
                                  num_plane) * u.deg,
                              epoch=J2017)
    set_inc.set_color("#FF4136")  # Blue
    set_inc.set_fov(44.85 * u.deg)

    constellation = Constellation()
    constellation.append(set_polar)
    constellation.append(set_inc)

    return constellation
예제 #5
0
def _O3b():
    inc_plane1 = SatPlane.as_plane(
        Earth,
        a=Earth.R_mean + 8062 * u.km,
        ecc=0 * u.one,
        inc=70 * u.deg,
        raan=0 * u.deg,
        argp=0 * u.deg,
        nnu=np.array([3.5, 75.5, 147.5, 219.5, 291.5]) * u.deg)
    inc_plane1.set_color("#0074D9")
    equ_plane = SatPlane.as_plane(Earth,
                                  a=Earth.R_mean + 8062 * u.km,
                                  ecc=0 * u.one,
                                  inc=0 * u.deg,
                                  raan=0 * u.deg,
                                  argp=0 * u.deg,
                                  nnu=np.linspace(0, 360, 32) * u.deg)
    equ_plane.set_color("#FF4136")
    equ_plane.set_fov(51.53 * u.deg)

    inc_plane2 = SatPlane.as_plane(
        Earth,
        a=Earth.R_mean + 8062 * u.km,
        ecc=0 * u.one,
        inc=70 * u.deg,
        raan=180 * u.deg,
        argp=0 * u.deg,
        nnu=np.array([183.5, 225.5, 327.5, 111.5, 39.5]) * u.deg)
    inc_plane2.set_color("#0074D9")

    constellation = Constellation()
    constellation.append(inc_plane1)
    constellation.append(equ_plane)
    constellation.append(inc_plane2)

    return constellation
예제 #6
0
set = SatSet.as_set(
    Earth.poli_body,
    a=Earth.poli_body.R_mean + 550 * u.km,
    ecc=0 * u.one,
    inc=53.0 * u.deg,
    rraan=np.arange(0, n_plane) * 360 / n_plane * u.deg,
    aargp=np.repeat(0 * u.deg, n_plane),
    nnnu=np.split(
        np.mod(
            np.tile(np.arange(0, n_sat) * 360 / n_sat * u.deg, (n_plane, 1)) +
            np.tile(np.arange(0, n_plane) * (0) * u.deg,
                    (n_sat, 1)).T, 360 * u.deg), n_plane),
    epoch=J2019)
set.set_color("#0074D9")  # Blue

constellation = Constellation()
constellation.append(set)

#constellation.set_fov(44.85 * u.deg)

scenario.add_satellite(constellation)

# Initizalize scenario
scenario.initialize()

# Start animation
scenario.draw_scenario()
scenario.step()  # do one step to let numba compile
fig.scene.movie_maker.record = True
scenario.animate(scenario)
mlab.show()
예제 #7
0
def _SpaceX_00087():
    J2015 = time.Time('J2015', scale='tt')

    # SAT-MOD-20190830-00087
    # Orbital plane 1
    # 550 km 53 degree
    # RAAN[0] = 0, delta_RAAN = 5
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 0 ?? delta_NNU = 360 / 72
    np_550_530 = 72  # number of planes
    ns_550_530 = 22  # number of satellites per plane
    set_550_530 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 550 * u.km,
        ecc=0 * u.one,
        inc=53.0 * u.deg,
        rraan=np.arange(0, np_550_530) * 5 * u.deg,
        aargp=np.repeat(0 * u.deg, np_550_530),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_550_530) * 360 / ns_550_530 * u.deg,
                    (np_550_530, 1)) +
                np.tile(np.arange(0, np_550_530) * 0 * u.deg,
                        (ns_550_530, 1)).T, 360 * u.deg), np_550_530),
        epoch=J2015)
    set_550_530.set_color("#0074D9")  # Blue
    set_550_530.set_fov(44.85 * u.deg)

    # Sat-LOA-20161115-00118
    # Orbital planes 33 to 64
    # 1110 km 53.8 degree
    # RAAN[0] = 5.6, delta_RAAN = 11.25
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 3.375 delta_NNU = 7.2
    np_1110_538 = 32  # number of planes
    ns_1110_538 = 50  # number of satellites per plane
    set_1110_538 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 1110 * u.km,
        ecc=0 * u.one,
        inc=53.8 * u.deg,
        rraan=np.arange(5.6, 360, 11.25) * u.deg,
        aargp=np.repeat(0 * u.deg, np_1110_538),
        nnnu=np.split(
            np.mod(
                np.tile(np.arange(0, 360, 7.2) * u.deg, (np_1110_538, 1)) +
                np.tile(np.arange(0, 105, 3.375) * u.deg,
                        (ns_1110_538, 1)).T, 360 * u.deg), np_1110_538),
        epoch=J2015)
    set_1110_538.set_color("#FF851B")  # Orange
    set_1110_538.set_fov(40.72 * u.deg)

    # Sat-LOA-20161115-00118
    # Orbital planes 65 to 72
    # 1130 km 74 degree
    # RAAN[0] = 0, delta_RAAN = 45
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 7.2 delta_NNU = 7.2
    np_1130_740 = 8  # number of planes
    ns_1130_740 = 50  # number of satellites per plane
    set_1130_740 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 1130 * u.km,
        ecc=0 * u.one,
        inc=74.0 * u.deg,
        rraan=np.arange(0, 360, 45) * u.deg,
        aargp=np.repeat(0 * u.deg, np_1130_740),
        nnnu=np.split(
            np.mod(
                np.tile(np.arange(0, 360, 7.2) * u.deg, (np_1130_740, 1)) +
                np.tile(np.arange(0, 55, 7.2) * u.deg,
                        (ns_1130_740, 1)).T, 360 * u.deg), np_1130_740),
        epoch=J2015)
    set_1130_740.set_color("#2ECC40")  # Green
    set_1130_740.set_fov(40.59 * u.deg)

    # Sat-LOA-20161115-00118
    # Orbital planes 73 to 78
    # 1325 km 70 degree
    # RAAN[0] = 0, delta_RAAN = 60
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 0.8 delta_NNU = 4.8
    np_1325_700 = 6  # number of planes
    ns_1325_700 = 75  # number of satellites per plane
    set_1325_700 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 1325 * u.km,
        ecc=0 * u.one,
        inc=70.0 * u.deg,
        rraan=np.arange(0, np_1325_700) * 60 * u.deg,
        aargp=np.repeat(0 * u.deg, np_1325_700),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_1325_700) * 4.8 * u.deg,
                    (np_1325_700, 1)) + np.tile(
                        np.arange(0, np_1325_700) * 0.8 * u.deg,
                        (ns_1325_700, 1)).T, 360 * u.deg), np_1325_700),
        epoch=J2015)
    set_1325_700.set_color("#B10DC9")  # Purple
    set_1325_700.set_fov(39.67 * u.deg)

    # Sat-LOA-20161115-00118
    # Orbital planes 79 to 83
    # 1275 km 81 degree
    # RAAN[0] = 0, delta_RAAN = 72.0
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 7.2 delta_NNU = 7.2
    np_1275_810 = 5  # number of planes
    ns_1275_810 = 75  # number of satellites per plane
    set_1275_810 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 1275 * u.km,
        ecc=0 * u.one,
        inc=81.0 * u.deg,
        rraan=np.arange(0, np_1275_810) * 72.0 * u.deg,
        aargp=np.repeat(0 * u.deg, np_1275_810),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_1275_810) * 4.8 * u.deg,
                    (np_1275_810, 1)) + np.tile(
                        np.arange(0, np_1275_810) * 0.8 * u.deg,
                        (ns_1275_810, 1)).T, 360 * u.deg), np_1275_810),
        epoch=J2015)
    set_1275_810.set_color("#FF4136")  # Red
    set_1275_810.set_fov(39.36 * u.deg)

    constellation = Constellation()
    constellation.append(set_550_530)
    constellation.append(set_1110_538)
    constellation.append(set_1130_740)
    constellation.append(set_1325_700)
    constellation.append(set_1275_810)

    return constellation
예제 #8
0
def _SpaceX_00037():

    J2015 = time.Time('J2015', scale='tt')

    # Shell 1
    # 550 km 53 degree
    # RAAN[0] = 0, delta_RAAN = 5
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 8.8 delta_NNU = 360 / 22
    np_550_530 = 72  # number of planes
    ns_550_530 = 22  # number of satellites per plane
    set_550_530 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 550 * u.km,
        ecc=0 * u.one,
        inc=53.0 * u.deg,
        rraan=np.arange(0, np_550_530) * 5 * u.deg,
        aargp=np.repeat(0 * u.deg, np_550_530),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_550_530) * 360 / 22 * u.deg,
                    (np_550_530, 1)) + np.tile(
                        np.arange(0, np_550_530) * 8.8 * u.deg,
                        (ns_550_530, 1)).T, 360 * u.deg), np_550_530),
        epoch=J2015)
    set_550_530.set_color("#0074D9")  # Blue
    set_550_530.set_fov(44.85 * u.deg)

    # Shell 2
    # 540 km 53.2 degree
    # RAAN[0] = 2.5, delta_RAAN = 5
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 12.35 delta_NNU = 360 / 22
    np_540_532 = 72  # number of planes
    ns_540_532 = 22  # number of satellites per plane
    set_540_532 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 540 * u.km,
        ecc=0 * u.one,
        inc=53.2 * u.deg,
        rraan=np.arange(0, np_540_532) * 5 * u.deg + 2.5 * u.deg,
        aargp=np.repeat(0 * u.deg, np_540_532),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_540_532) * 360 / 22 * u.deg,
                    (np_540_532, 1)) + np.tile(
                        np.arange(0, np_540_532) * 12.35 * u.deg,
                        (ns_540_532, 1)).T, 360 * u.deg), np_540_532),
        epoch=J2015)
    set_540_532.set_color("#FF851B")  # Orange
    set_540_532.set_fov(40.72 * u.deg)

    # Shell 3
    # 570 km 70 degree
    # RAAN[0] = 0, delta_RAAN = 10
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 7.65 delta_NNU = 360 / 20
    np_570_70 = 36  # number of planes
    ns_570_70 = 20  # number of satellites per plane
    set_570_70 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 570.0 * u.km,
        ecc=0 * u.one,
        inc=70.0 * u.deg,
        rraan=np.arange(0, np_570_70) * 10 * u.deg,
        aargp=np.repeat(0 * u.deg, np_570_70),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_570_70) * 360 / 20 * u.deg,
                    (np_570_70, 1)) + np.tile(
                        np.arange(0, np_570_70) * 7.65 * u.deg,
                        (ns_570_70, 1)).T, 360 * u.deg), np_570_70),
        epoch=J2015)
    set_570_70.set_color("#2ECC40")  # Green
    set_570_70.set_fov(40.59 * u.deg)

    # Shell 4
    # 560 km 97.6 degree
    # RAAN[0] = 63.7, delta_RAAN = 60
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 0.8 delta_NNU = 4.8
    np_560_976a = 6  # number of planes
    ns_560_976a = 58  # number of satellites per plane
    set_560_976a = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 560.0 * u.km,
        ecc=0 * u.one,
        inc=97.6 * u.deg,
        rraan=np.arange(0, np_560_976a) * 60 * u.deg + 63.7 * u.deg,
        aargp=np.repeat(0 * u.deg, np_560_976a),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_560_976a) * 360 / ns_560_976a * u.deg,
                    (np_560_976a, 1)) + np.tile(
                        np.arange(0, np_560_976a) * 1.04 * u.deg,
                        (ns_560_976a, 1)).T, 360 * u.deg), np_560_976a),
        epoch=J2015)
    set_560_976a.set_color("#B10DC9")  # Purple
    set_560_976a.set_fov(97.6 * u.deg)

    # Shell 5
    # 560 km 97.6 degree
    # RAAN[0] = 75.7, delta_RAAN = 12.0
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 0.275 delta_NNU = 360 / 43
    np_560_976b = 4  # number of planes
    ns_560_976b = 43  # number of satellites per plane
    set_560_976b = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 560.0 * u.km,
        ecc=0 * u.one,
        inc=97.6 * u.deg,
        rraan=np.arange(0, np_560_976b) * 12.0 * u.deg + 75.7 * u.deg,
        aargp=np.repeat(0 * u.deg, np_560_976b),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_560_976b) * 360 / ns_560_976b * u.deg,
                    (np_560_976b, 1)) + np.tile(
                        np.arange(0, np_560_976b) * 0.275 * u.deg,
                        (ns_560_976b, 1)).T, 360 * u.deg), np_560_976b),
        epoch=J2015)
    set_560_976b.set_color("#FF4136")  # Red
    set_560_976b.set_fov(97.6 * u.deg)

    constellation = Constellation()
    constellation.append(set_550_530)
    constellation.append(set_540_532)
    constellation.append(set_570_70)
    constellation.append(set_560_976a)
    constellation.append(set_560_976b)

    return constellation
예제 #9
0
def _Kuiper_00057():
    J2020 = time.Time('J2020', scale='tt')

    # The excel sheet attached to the application provides the details of each sat.

    # 630 km 51.9 degree shell
    # RAAN[0] = 0, delta_RAAN = 360/34
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 360 / 34 / 34 * 3 delta_NNU = 360 / 34
    np_630 = 34  # number of planes
    ns_630 = 34  # number of satellites per plane
    set_630 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 630 * u.km,
        ecc=0 * u.one,
        inc=51.9 * u.deg,
        rraan=np.arange(0, np_630) * 360 / np_630 * u.deg,
        aargp=np.repeat(0 * u.deg, np_630),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_630) * 360 / ns_630 * u.deg, (np_630, 1)) +
                np.tile(
                    np.arange(0, np_630) * 360 / np_630 / ns_630 * 3 * u.deg,
                    (ns_630, 1)).T, 360 * u.deg), np_630),
        epoch=J2020)
    set_630.set_color("#0074D9")  # Blue
    set_630.set_fov(48.2 * u.deg)

    # 610 km 42 degree shell
    # RAAN[0] = 0, delta_RAAN = 360 / 36
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 360/36/36*3 delta_NNU = 360/36
    np_610 = 36  # number of planes
    ns_610 = 36  # number of satellites per plane
    set_610 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 610 * u.km,
        ecc=0 * u.one,
        inc=42.0 * u.deg,
        rraan=np.arange(0, np_610) * 360 / np_610 * u.deg,
        aargp=np.repeat(0 * u.deg, np_610),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_610) * 360 / ns_610 * u.deg, (np_610, 1)) +
                np.tile(
                    np.arange(0, np_610) * 360 / ns_610 / np_610 * 3 * u.deg,
                    (ns_610, 1)).T, 360 * u.deg), np_610),
        epoch=J2020)
    set_610.set_color("#FF851B")  # Orange
    set_610.set_fov(48.2 * u.deg)

    # 590 km 33 degree shell
    # RAAN[0] = 0, delta_RAAN = 360 / 28
    # ARGP[:] = 0
    # NNNU[0][0] = 0 delta_NNNU = 360 / 28 / 28 delta_NNU = 360 / 28
    np_590 = 28  # number of planes
    ns_590 = 28  # number of satellites per plane
    set_590 = SatSet.as_set(
        Earth.poli_body,
        a=Earth.poli_body.R_mean + 590 * u.km,
        ecc=0 * u.one,
        inc=33.0 * u.deg,
        rraan=np.arange(0, np_590) * 360 / np_590 * u.deg,
        aargp=np.repeat(0 * u.deg, np_590),
        nnnu=np.split(
            np.mod(
                np.tile(
                    np.arange(0, ns_590) * 360 / ns_590 * u.deg,
                    (np_590, 1)) + np.tile(
                        np.arange(0, np_590) * 360 / ns_590 / np_590 * u.deg,
                        (ns_590, 1)).T, 360 * u.deg), np_590),
        epoch=J2020)
    set_590.set_color("#2ECC40")  # Green
    set_590.set_fov(48.2 * u.deg)

    constellation = Constellation()
    constellation.append(set_630)
    constellation.append(set_610)
    constellation.append(set_590)

    return constellation