Exemple #1
0
    def test_far_away_equal_priority(self):
        own_ship = get_own_ship(0.0, 0, 220)
        aircraft_a = Aircraft(100000, 0, 0, 270.0, 0, 220, 0, 1)
        aircraft_b = Aircraft(-100000, 0, 0, 90.0, 0, 220, 0, 2)

        result = do_compare_a_to_b(own_ship, aircraft_a, aircraft_b)
        self.assertEqual(0, result)
Exemple #2
0
    def test_equal_dist_equal_priority(self):
        own_ship = get_own_ship(0.0, 0, 220)
        aircraft_a = Aircraft(5280, 5280, 0, 180.0, 0, 220, 0, 1)
        aircraft_b = Aircraft(-5280, 5280, 0, 180.0, 0, 220, 0, 2)

        result = do_compare_a_to_b(own_ship, aircraft_a, aircraft_b)
        self.assertEqual(0, result)
Exemple #3
0
    def test_vert_closer_gt(self):
        own_ship = get_own_ship(0.0, 0, 220)
        v_closer = Aircraft(0, 5280, 0, 180.0, 0, 220, 0, 1)
        v_farther = Aircraft(0, 5280, 1000, 180.0, 0, 220, 0, 1)

        result = do_compare_a_to_b(own_ship, v_closer, v_farther)
        self.assertLess(result, 0)
Exemple #4
0
    def test_horiz_closer_gt(self):
        own_ship = get_own_ship(0.0, 0, 220)
        h_closer = Aircraft(0, 2000, 0, 180.0, 0, 220, 0, 1)
        h_farther = Aircraft(0, 20000, 0, 180.0, 0, 220, 0, 2)

        result = do_compare_a_to_b(own_ship, h_closer, h_farther)
        self.assertLess(result, 0)
Exemple #5
0
 def __init__(self):
     self.ownShip = Aircraft(0, 0, 0, 0, 0, 0, 0, 0)
     self.aircraftQueue = PriorityQueue()
     self.myAction = Action(0, 0)
     self.ads_bInt = ADS_BDriver()
     self.display = Display()
     self.loudSpeaker = LoudSpeaker()
     self.panelBtns = FrontPanelButtons()
 def test_doNothing(self):
     main = MainClass()
     main.setOwnShip(0, 0, 0, 50, 30, 40, 0, 1)
     main.aircraftQueue.put(
         Aircraft(0, 0, 0, 50, 30, 40, AlertLevel.AL_NoAlert, 2))
     main.aircraftQueue.put(
         Aircraft(1, 1, 1, 50, 30, 40, AlertLevel.AL_NoAlert, 3))
     main.aircraftQueue.put(
         Aircraft(2, 2, 2, 50, 30, 40, AlertLevel.AL_NoAlert, 4))
     main.aircraftQueue.put(
         Aircraft(3, 3, 3, 50, 30, 40, AlertLevel.AL_NoAlert, 5))
     testAction = main.determineAction
     self.assertEquals(0, testAction.getVSChange())
     self.assertLess(testAction.getUrgency(), 0)
 def test_sharpDescendEqualZ(self):
     main = MainClass()
     main.setOwnShip(0, 14000, 11000, 50, 40, 40, 0, 1)
     main.aircraftQueue.put(
         Aircraft(0, 0, 0, 50, 30, 40, AlertLevel.AL_NoAlert, 2))
     main.aircraftQueue.put(
         Aircraft(1, 1, 1, 50, 30, 40, AlertLevel.AL_NoAlert, 3))
     main.aircraftQueue.put(
         Aircraft(2, 2, 2, 50, 30, 40, AlertLevel.AL_NoAlert, 4))
     main.aircraftQueue.put(
         Aircraft(15000, 15000, 11000, 50, 30, 40,
                  AlertLevel.AL_ResolAdvisoryHigh, 5))
     testAction = main.determineAction
     self.assertLess(testAction.getVSChange(), 0)
     self.assertGreater(testAction.getUrgency(), 0)
 def test_gentleDescend(self):
     main = MainClass()
     main.setOwnShip(0, 0, 10000, 50, 30, 40, 0, 1)
     main.aircraftQueue.put(
         Aircraft(0, 0, 0, 50, 30, 40, AlertLevel.AL_NoAlert, 2))
     main.aircraftQueue.put(
         Aircraft(1, 1, 1, 50, 30, 40, AlertLevel.AL_NoAlert, 3))
     main.aircraftQueue.put(
         Aircraft(2, 2, 2, 50, 30, 40, AlertLevel.AL_NoAlert, 4))
     main.aircraftQueue.put(
         Aircraft(25000, 25000, 12500, 50, 30, 40,
                  AlertLevel.AL_ResolAdvisoryLow, 5))
     testAction = main.determineAction
     self.assertLess(testAction.getVSChange(), 0)
     self.assertLess(testAction.getUrgency(), 0)
 def test_normalAscend(self):
     main = MainClass()
     main.setOwnShip(0, 0, 11600, 50, 30, 40, 0, 1)
     main.aircraftQueue.put(
         Aircraft(0, 0, 0, 50, 30, 40, AlertLevel.AL_NoAlert, 2))
     main.aircraftQueue.put(
         Aircraft(1, 1, 1, 50, 30, 40, AlertLevel.AL_NoAlert, 3))
     main.aircraftQueue.put(
         Aircraft(2, 2, 2, 50, 30, 40, AlertLevel.AL_NoAlert, 4))
     main.aircraftQueue.put(
         Aircraft(20000, 20000, 10000, 50, 30, 40,
                  AlertLevel.AL_ResolAdvisoryMed, 5))
     testAction = main.determineAction
     self.assertGreater(testAction.getVSChange(), 0)
     self.assertEqual(testAction.getUrgency(), 0)
 def __init__(self):
     self.ownShip = Aircraft(0, 0, 0, 0, 0, 0, 0, 0)
     self.aircraftQueue = PriorityQueue()
     self.myAction = Action(0, 0)
     self.ads_bInt = ADS_BDriver()
     self.display = Display()
     self.loudSpeaker = LoudSpeaker()
     self.panelBtns = FrontPanelButtons()
 def setOwnShip(
     self,
     xInFeet: int,
     yInFeet: int,
     zInFeet: int,
     heading: float,
     vSpeedFPS: int,
     gSpeedFPS: int,
     alertLevel: AlertLevel,
     id: int,
 ):
     self.ownShip = Aircraft(xInFeet, yInFeet, zInFeet, heading, vSpeedFPS, gSpeedFPS, alertLevel, id)
Exemple #12
0
def make_random_aircraft(id):
    rng = SystemRandom()
    alertLevels = list(AlertLevel)
    return Aircraft(
        rng.randint(-100000, 100000),
        rng.randint(-100000, 100000),
        rng.randint(-50000, 50000),
        rng.uniform(0.0, 360.0),
        rng.randint(0, 10000),
        rng.randint(0, 4400),
        rng.choice(alertLevels),
        id
    )
Exemple #13
0
def do_compare_a_to_b(own_ship: Aircraft, aircraft_a: Aircraft,
                      aircraft_b: Aircraft):
    aircraft_a.calcAlertLevel(own_ship)
    aircraft_b.calcAlertLevel(own_ship)

    return aircraft_a.comparePriority(aircraft_b)
Exemple #14
0
def get_own_ship(heading: float, v_speed_fps: int, g_speed_fps: int):
    return Aircraft(0, 0, 0, heading, v_speed_fps, g_speed_fps, 0, 0)
 def test_alertLv3(self):
     main = MainClass()
     testAircraft = Aircraft(0,35000,2500,180,0,200,0,1)
     testAircraft.calcAlertLevel(main.ownShip)
     self.assertEquals(testAircraft.getAlertLevel(), 3)
 def test_alertLv1(self):
     main = MainClass()
     testAircraft = Aircraft(60000,60000,8000,50,30,40,0,1)
     testAircraft.calcAlertLevel(main.ownShip)
     self.assertEquals(testAircraft.getAlertLevel(), 1)
Exemple #17
0
class MainClass:
    def __init__(self):
        self.ownShip = Aircraft(0, 0, 0, 0, 0, 0, 0, 0)
        self.aircraftQueue = PriorityQueue()
        self.myAction = Action(0, 0)
        self.ads_bInt = ADS_BDriver()
        self.display = Display()
        self.loudSpeaker = LoudSpeaker()
        self.panelBtns = FrontPanelButtons()

    def refreshAircraftListFromADSB(self):
        adsData = self.ads_bInt.refresh()
        return ADS_BDataProcessor.getAircraftList(adsData)

    def buildAircraftPriorityQueue(self, aircraftList):
        self.aircraftQueue = PriorityQueue()
        for a in aircraftList:
            self.aircraftQueue.put(a)

    def updateDisplay(self, aircraftList, alertLevel, action):
        self.display.updateAircraftList(aircraftList)
        self.display.updateCurAlertLevel(alertLevel)
        self.display.updateCurAction(action)

    def updateLoudSpeaker(self, action):
        self.loudSpeaker.annunciate(action)

    def loopIter(self):
        aircraftList = self.refreshAircraftListFromADSB()

        if len(aircraftList) > 0:
            self.buildAircraftPriorityQueue(aircraftList)

            curAlertLevel = self.aircraftQueue.queue[0].getAlertLevel()
            curAction = self.determineAction

            self.updateDisplay(aircraftList, curAlertLevel, curAction)
            self.updateLoudSpeaker(curAction)

    def eventLoop(self):
        while True:
            self.loopIter()

    @property
    def determineAction(self):
        myAircraft = self.aircraftQueue.get()
        if (myAircraft.getAlertLevel() == AlertLevel.AL_PrevAdvisory):
            return Action(0, 1)
        elif (myAircraft.getAlertLevel() == AlertLevel.AL_ResolAdvisoryLow):
            if (myAircraft.getZInFeet() > self.ownShip.getZInFeet()):
                return Action(-1, -1)
            elif (myAircraft.getZInFeet() < self.ownShip.getZInFeet()):
                return Action(1, -1)
            elif (myAircraft.getYInFeet > self.ownShip.getYInFeet()):
                return Action(-1, -1)
            elif (myAircraft.getYInFeet() < self.ownShip.getYInFeet()):
                return Action(1, -1)
            elif (myAircraft.getXInFeet > self.ownShip.getXInFeet()):
                return Action(-1, -1)
            elif (myAircraft.getXInFeet() < self.ownShip.getXInFeet()):
                return Action(1, -1)
        elif (myAircraft.getAlertLevel() == AlertLevel.AL_ResolAdvisoryMed):
            if (myAircraft.getZInFeet() > self.ownShip.getZInFeet()):
                return Action(-1, 0)
            elif (myAircraft.getZInFeet() < self.ownShip.getZInFeet()):
                return Action(1, 0)
            elif (myAircraft.getYInFeet() > self.ownShip.getYInFeet()):
                return Action(-1, 0)
            elif (myAircraft.getYInFeet() < self.ownShip.getYInFeet()):
                return Action(1, 0)
            elif (myAircraft.getXInFeet() > self.ownShip.getXInFeet()):
                return Action(-1, 0)
            elif (myAircraft.getXInFeet() < self.ownShip.getXInFeet()):
                return Action(1, 0)
        elif (myAircraft.getAlertLevel() == AlertLevel.AL_ResolAdvisoryHigh):
            if (myAircraft.getZInFeet() > self.ownShip.getZInFeet()):
                return Action(-1, 1)
            elif (myAircraft.getZInFeet() < self.ownShip.getZInFeet()):
                return Action(1, 1)
            elif (myAircraft.getYInFeet() > self.ownShip.getYInFeet()):
                return Action(-1, 1)
            elif (myAircraft.getYInFeet() < self.ownShip.getYInFeet()):
                return Action(1, 1)
            elif (myAircraft.getXInFeet() > self.ownShip.getXInFeet()):
                return Action(-1, 1)
            elif (myAircraft.getXInFeet() < self.ownShip.getXInFeet()):
                return Action(1, 1)
        else:
            return Action(0, -1)

    def setOwnShip(self, xInFeet: int, yInFeet: int, zInFeet: int,
                   heading: float, vSpeedFPS: int, gSpeedFPS: int,
                   alertLevel: AlertLevel, id: int):
        self.ownShip = Aircraft(xInFeet, yInFeet, zInFeet, heading, vSpeedFPS,
                                gSpeedFPS, alertLevel, id)

    def getAction(self):
        return self.myAction
Exemple #18
0
 def setOwnShip(self, xInFeet: int, yInFeet: int, zInFeet: int,
                heading: float, vSpeedFPS: int, gSpeedFPS: int,
                alertLevel: AlertLevel, id: int):
     self.ownShip = Aircraft(xInFeet, yInFeet, zInFeet, heading, vSpeedFPS,
                             gSpeedFPS, alertLevel, id)
Exemple #19
0
 def test_alertLv1(self):
     main = MainClass()
     testAircraft = Aircraft(60000, 60000, 8000, 50, 30, 40, 0, 1)
     testAircraft.calcAlertLevel(main.ownShip)
     self.assertEquals(testAircraft.getAlertLevel(), 1)
Exemple #20
0
 def test_alertLv3(self):
     main = MainClass()
     testAircraft = Aircraft(0, 35000, 2500, 180, 0, 200, 0, 1)
     testAircraft.calcAlertLevel(main.ownShip)
     self.assertEquals(testAircraft.getAlertLevel(), 3)
def do_compare_a_to_b(own_ship: Aircraft, aircraft_a: Aircraft,
                      aircraft_b: Aircraft):
    aircraft_a.calcAlertLevel(own_ship)
    aircraft_b.calcAlertLevel(own_ship)

    return aircraft_a.comparePriority(aircraft_b)
class MainClass:
    def __init__(self):
        self.ownShip = Aircraft(0, 0, 0, 0, 0, 0, 0, 0)
        self.aircraftQueue = PriorityQueue()
        self.myAction = Action(0, 0)
        self.ads_bInt = ADS_BDriver()
        self.display = Display()
        self.loudSpeaker = LoudSpeaker()
        self.panelBtns = FrontPanelButtons()

    def refreshAircraftListFromADSB(self):
        adsData = self.ads_bInt.refresh()
        return ADS_BDataProcessor.getAircraftList(adsData)

    def buildAircraftPriorityQueue(self, aircraftList):
        self.aircraftQueue = PriorityQueue()
        for a in aircraftList:
            self.aircraftQueue.put(a)

    def updateDisplay(self, aircraftList, alertLevel, action):
        self.display.updateAircraftList(aircraftList)
        self.display.updateCurAlertLevel(alertLevel)
        self.display.updateCurAction(action)

    def updateLoudSpeaker(self, action):
        self.loudSpeaker.annunciate(action)

    def loopIter(self):
        aircraftList = self.refreshAircraftListFromADSB()

        if len(aircraftList) > 0:
            self.buildAircraftPriorityQueue(aircraftList)

            curAlertLevel = self.aircraftQueue.queue[0].getAlertLevel()
            curAction = self.determineAction

            self.updateDisplay(aircraftList, curAlertLevel, curAction)
            self.updateLoudSpeaker(curAction)

    def eventLoop(self):
        while True:
            self.loopIter()

    @property
    def determineAction(self):
        myAircraft = self.aircraftQueue.get()
        if myAircraft.getAlertLevel() == AlertLevel.AL_PrevAdvisory:
            return Action(0, 1)
        elif myAircraft.getAlertLevel() == AlertLevel.AL_ResolAdvisoryLow:
            if myAircraft.getZInFeet() > self.ownShip.getZInFeet():
                return Action(-1, -1)
            elif myAircraft.getZInFeet() < self.ownShip.getZInFeet():
                return Action(1, -1)
            elif myAircraft.getYInFeet > self.ownShip.getYInFeet():
                return Action(-1, -1)
            elif myAircraft.getYInFeet() < self.ownShip.getYInFeet():
                return Action(1, -1)
            elif myAircraft.getXInFeet > self.ownShip.getXInFeet():
                return Action(-1, -1)
            elif myAircraft.getXInFeet() < self.ownShip.getXInFeet():
                return Action(1, -1)
        elif myAircraft.getAlertLevel() == AlertLevel.AL_ResolAdvisoryMed:
            if myAircraft.getZInFeet() > self.ownShip.getZInFeet():
                return Action(-1, 0)
            elif myAircraft.getZInFeet() < self.ownShip.getZInFeet():
                return Action(1, 0)
            elif myAircraft.getYInFeet() > self.ownShip.getYInFeet():
                return Action(-1, 0)
            elif myAircraft.getYInFeet() < self.ownShip.getYInFeet():
                return Action(1, 0)
            elif myAircraft.getXInFeet() > self.ownShip.getXInFeet():
                return Action(-1, 0)
            elif myAircraft.getXInFeet() < self.ownShip.getXInFeet():
                return Action(1, 0)
        elif myAircraft.getAlertLevel() == AlertLevel.AL_ResolAdvisoryHigh:
            if myAircraft.getZInFeet() > self.ownShip.getZInFeet():
                return Action(-1, 1)
            elif myAircraft.getZInFeet() < self.ownShip.getZInFeet():
                return Action(1, 1)
            elif myAircraft.getYInFeet() > self.ownShip.getYInFeet():
                return Action(-1, 1)
            elif myAircraft.getYInFeet() < self.ownShip.getYInFeet():
                return Action(1, 1)
            elif myAircraft.getXInFeet() > self.ownShip.getXInFeet():
                return Action(-1, 1)
            elif myAircraft.getXInFeet() < self.ownShip.getXInFeet():
                return Action(1, 1)
        else:
            return Action(0, -1)

    def setOwnShip(
        self,
        xInFeet: int,
        yInFeet: int,
        zInFeet: int,
        heading: float,
        vSpeedFPS: int,
        gSpeedFPS: int,
        alertLevel: AlertLevel,
        id: int,
    ):
        self.ownShip = Aircraft(xInFeet, yInFeet, zInFeet, heading, vSpeedFPS, gSpeedFPS, alertLevel, id)

    def getAction(self):
        return self.myAction