Example #1
0
 def setUp(self):
     gVars.logger = sailbot_logger.Logger()
     self.round_buoy = roundbuoy.RoundBuoy()
     gVars.currentData = datatypes.ArduinoData(
         0, 0, 0, 0, datatypes.GPSCoordinate(0, 0), 0, 0, 0, 0, 0)
     self.buoyLoc = datatypes.GPSCoordinate(1, 1)
     self.angleBetweenBuoyAndGPSCoord = standardcalc.angleBetweenTwoCoords(
         gVars.currentData.gps_coord, self.buoyLoc)
Example #2
0
	def setUp(self):
		self.stationKeeping = stationkeeping.StationKeeping()
		topLeftCoord= datatypes.GPSCoordinate(50,-123)
		topRightCoord=datatypes.GPSCoordinate(50,-122)
		botLeftCoord=datatypes.GPSCoordinate(49,-123)
		botRightCoord=datatypes.GPSCoordinate(49,-122)
		self.boxCoords = standardcalc.setBoxCoords(topLeftCoord, topRightCoord, botLeftCoord, botRightCoord)  
		self.waypoints = self.stationKeeping.setWayPtCoords(self.boxCoords)
 def setUp(self):
     self.coords=[]
     self.coords.append(datatypes.GPSCoordinate(1.0,1.0))
     self.coords.append(datatypes.GPSCoordinate(1.0,2.0))
     self.coords.append(datatypes.GPSCoordinate(2.0,2.0))
     self.coords.append(datatypes.GPSCoordinate(2.0,1.0))
     self.chaseRace = chaserace.ChaseRace()
     gVars.instructions = datatypes.Instructions("none",[],[],"port",0)
     gVars.currentData = datatypes.ArduinoData(0, 1, 2, 3, datatypes.GPSCoordinate(4, 4) , 5, 6, 7, 0, 20)
Example #4
0
    def testReadyToTackTrue(self):
        AWA = 30
        GPSCoord = datatypes.GPSCoordinate(49, -123)
        Dest = datatypes.GPSCoordinate(49.1, -123)  # 0 degrees, N
        bearingToMark = standardcalc.angleBetweenTwoCoords(GPSCoord, Dest)
        hog = 90  # E
        self.assertTrue(self.tackengine.readyToTack(AWA, hog, bearingToMark))

        hog = -90  # NW
        self.assertTrue(self.tackengine.readyToTack(AWA, hog, bearingToMark))
Example #5
0
 def testSetInstructionsWithNavChallenge(self):
     self.resetGlobVar()
     self.instructions = datatypes.Instructions(
         sVars.NAVIGATION_CHALLENGE,
         [datatypes.Waypoint(datatypes.GPSCoordinate(1, 1), sVars.GO_TO)],
         [datatypes.Boundary(datatypes.GPSCoordinate(1, 1), 1)], "port", 0)
     self.gui_handler.setInstructions(self.instructions)
     self.assertTrue(gVars.instructions, self.instructions)
     self.assertListEqual(gVars.functionQueue, [sVars.NAVIGATION_CHALLENGE])
     self.assertEqual(gVars.queueParameters[0][0].coordinate.lat, 1)
Example #6
0
 def testSetOuterBoundaries(self):
     gVars.currentData.gps_coord = datatypes.GPSCoordinate(49, -123.1)
     coordinate = datatypes.GPSCoordinate(49, -123)  #same coordinate
     radius = 50
     boundary1 = datatypes.Boundary(coordinate, radius)
     coordinate = datatypes.GPSCoordinate(49, -123.1)  #same coordinate
     radius = 50
     boundary2 = datatypes.Boundary(coordinate, radius)
     boundaries = [boundary1, boundary2]
     self.assertEqual(self.boundaryHandler.getInnerBoundaries(boundaries),
                      [boundary2])
Example #7
0
 def setUp(self):
     self.source1 = datatypes.GPSCoordinate(100,100)
     self.dest1 = datatypes.GPSCoordinate(300,100)
     
     self.angle1 = standardcalc.angleBetweenTwoCoords(self.source1, self.dest1)
     self.angle2 = standardcalc.angleBetweenTwoCoords(self.dest1, self.source1)
     
     self.source2 = datatypes.GPSCoordinate(0,0)
     self.dest2 = datatypes.GPSCoordinate(1,1)
     
     self.angle3 = standardcalc.angleBetweenTwoCoords(self.source2, self.dest2)
     self.angle4 = standardcalc.angleBetweenTwoCoords(self.dest2, self.source2)
Example #8
0
 def initControlInstructionsObject(self, instructions):
     waypointsList = []
     boundariesList = []
     for wpt in instructions['waypoints']:
         coordinate = control.GPSCoordinate(wpt[0], wpt[1])
         waypointsList.append(control.Waypoint(coordinate, wpt[2]))
     for bnd in instructions['boundaries']:
         coordinate = control.GPSCoordinate(bnd[0], bnd[1])
         boundariesList.append(control.Boundary(coordinate, bnd[2]))
     controlInstructions = control.Instructions(
         instructions['challenge'], waypointsList, boundariesList,
         instructions['rounding'], instructions['SK_exit_speed'])
     return controlInstructions
Example #9
0
    def testOutsideHitBoundaries(self):
        gVars.currentData.gps_coord = datatypes.GPSCoordinate(49, -123)
        gVars.boundaries = []
        coordinate = datatypes.GPSCoordinate(49, -123.1)  #11ish km west
        radius = 50
        boundary = datatypes.Boundary(coordinate, radius)
        gVars.boundaries.append(boundary)
        self.boundaryHandler.innerBoundaries = self.boundaryHandler.getInnerBoundaries(
            gVars.boundaries)
        self.boundaryHandler.outerBoundaries = self.boundaryHandler.getOuterBoundaries(
            gVars.boundaries)

        self.assertFalse(self.boundaryHandler.checkInnerBoundaryInterception())
Example #10
0
    def testInsideHitBoundaries(self):
        gVars.currentData.gps_coord = datatypes.GPSCoordinate(49, -123.1)
        gVars.boundaries = []
        coordinate = datatypes.GPSCoordinate(49, -123)  #same coordinate
        radius = 50
        boundary = datatypes.Boundary(coordinate, radius)
        gVars.boundaries = [boundary]
        self.boundaryHandler.innerBoundaries = self.boundaryHandler.getInnerBoundaries(
            gVars.boundaries)
        self.boundaryHandler.outerBoundaries = self.boundaryHandler.getOuterBoundaries(
            gVars.boundaries)
        gVars.currentData.gps_coord = datatypes.GPSCoordinate(49, -123)
        self.assertTrue(len(self.boundaryHandler.outerBoundaries) > 0)

        self.assertTrue(self.boundaryHandler.checkOuterBoundaryInterception())
Example #11
0
 def testGetCurrentData(self):
     self.resetGlobVar()
     self.currdata = datatypes.ArduinoData(0, 1, 2, 3,
                                           datatypes.GPSCoordinate(4, 4), 5,
                                           6, 7, 0, 20)
     gVars.currentData = self.currdata
     self.gui_handler.getData()
     if (not gVars.taskStartTime):
         seconds = None
     else:
         seconds = (datetime.now() - gVars.taskStartTime).total_seconds()
         seconds = round(seconds)
     self.assertEqual(
         self.gui_handler.getData(), {
             "telemetry": {
                 "Heading": self.currdata.hog,
                 "COG": self.currdata.cog,
                 "SOG": self.currdata.sog,
                 "AWA": self.currdata.awa,
                 "latitude": self.currdata.gps_coord.lat,
                 "longitude": self.currdata.gps_coord.long,
                 "SheetPercent": self.currdata.sheet_percent,
                 "Rudder": self.currdata.rudder
             },
             "connectionStatus": {
                 "gpsSat": self.currdata.num_sat,
                 "HDOP": self.currdata.gps_accuracy,
                 "automode": self.currdata.auto
             },
             "currentProcess": {
                 "name": gVars.currentProcess,
                 "Starttime": seconds
             }
         })
Example #12
0
    def run(self, wayList):
        self.nav_log_timer = 0

        buoyCoords = None
        portStartInnerPoint = None
        starboardStartInnerPoint = None
        navMidpoint = None

        gVars.kill_flagNav = 0

        for waypoint in wayList:
            if (waypoint.wtype == sVars.NAV_FIRST):
                buoyCoords = waypoint.coordinate
            elif (waypoint.wtype == sVars.NAV_START_PORT):
                portStartInnerPoint = waypoint.coordinate
            elif (waypoint.wtype == sVars.NAV_START_STARBOARD):
                starboardStartInnerPoint = waypoint.coordinate
            elif (waypoint.wtype == sVars.NAV_MIDPOINT):
                navMidpoint = waypoint.coordinate

        if not (buoyCoords and portStartInnerPoint
                and starboardStartInnerPoint):
            gVars.logger.error("Arguments Incorrect!")

        self.interpolatedPoint = standardcalc.returnMidPoint(
            portStartInnerPoint, starboardStartInnerPoint)

        if not navMidpoint:
            halfwayBackPoint = datatypes.GPSCoordinate(
                (self.interpolatedPoint.lat + buoyCoords.lat) / 2,
                (self.interpolatedPoint.long + buoyCoords.long) / 2)
            gVars.logger.info("Using dynamically created midpoint.")
        else:
            halfwayBackPoint = navMidpoint
            gVars.logger.info("Using user given midpoint")

        gVars.logger.info("Rounding Buoy")
        if (gVars.kill_flagNav == 0):
            self.roundbuoy.run(buoyCoords)
        gVars.logger.info("Heading for Midpoint ")

        if (gVars.kill_flagNav == 0):
            self.pointtopoint.run(halfwayBackPoint)
        gVars.logger.info("Heading for Finish")

        if (gVars.kill_flagNav == 0):
            acceptDistance = 1
            thread.start_new_thread(self.printNavigationLog, ())
            self.pointtopoint.run(self.interpolatedPoint, acceptDistance)

        if gVars.kill_flagNav == 1:
            gVars.logger.info(
                "Nav Kill Flag initialized. Nav has been stopped.")
        else:
            gVars.logger.info("Navigation challenge finished")
Example #13
0
 def setUp(self):
     self.returnstr = "\n1, 22222222, 33333333, 4, 5, 6, 7, 8, 9, 10, 11, 12 \n1, 22222222, 33333333, 4, 5, 6, 7, 8, 9, 10, 11, 12 \n1, 22222222, 33333333, 4, 5, 6, 7, 8, 9, 10, 11, 12"
     self.returnarr = [1, 22222222, 33333333, 4, 5, 6, 7, 8, 9, 10, 11, 12]
     self.returnstrnospace = "\n1,22222222,33333333,4,5,6,7,8,9,10,11,12\n1,22222222,33333333,4,5,6,7,8,9,10,11,12\n1,22222222,33333333,4,5,6,7,8,9,10,11,12"
     self.arduinoData = datatypes.ArduinoData(
         5.0, 4.0, 11.0, 7.0, datatypes.GPSCoordinate(3.3333333, 2.2222222),
         8.0, 9.0, 10.0, 1.0, 12.0)
     self.ser = serial.Serial()
     serial.Serial = MagicMock(return_value=self.ser)
     self.ser.Serial = MagicMock(return_value=None)
     self.ser.flushInput = MagicMock(return_value=None)
     self.ard = arduino.arduino()
Example #14
0
 def interpretArr(self, ardArr):
     arduinoData = datatypes.ArduinoData()
     arduinoData.hog = standardcalc.boundTo180(ardArr[ARD_HOG])
     arduinoData.cog = standardcalc.boundTo180(ardArr[ARD_COG])
     arduinoData.sog = ardArr[ARD_SOG]
     arduinoData.awa = ardArr[ARD_AWAV]
     arduinoData.gps_coord = datatypes.GPSCoordinate(
         ardArr[ARD_LAT] / 10000000, ardArr[ARD_LONG] / 10000000)
     arduinoData.sheet_percent = ardArr[ARD_SHT]
     arduinoData.num_sat = ardArr[ARD_SAT]
     arduinoData.gps_accuracy = ardArr[ARD_ACC]
     arduinoData.auto = ardArr[ARD_AUT]
     arduinoData.rudder = ardArr[ARD_RUD]
     return arduinoData
Example #15
0
def angleBetweenTwoCoords(sourceCoord, destCoord):
    GPSCoord = datatypes.GPSCoordinate()

    if (sourceCoord.lat > destCoord.lat):
        GPSCoord.lat = sourceCoord.lat
        GPSCoord.long = destCoord.long

    elif (sourceCoord.lat < destCoord.lat):
        GPSCoord.lat = destCoord.lat
        GPSCoord.long = sourceCoord.long

    elif (sourceCoord.long < destCoord.long):
        return 90

    elif (sourceCoord.long > destCoord.long):
        return -90

    else:
        return None

    distBtwnCoords = distBetweenTwoCoords(sourceCoord, destCoord)
    distSin = distBetweenTwoCoords(destCoord, GPSCoord)

    angle = math.asin(distSin / distBtwnCoords) * 180 / math.pi

    if (sourceCoord.lat < destCoord.lat):
        if (sourceCoord.long < destCoord.long):
            return angle
        elif (sourceCoord.long > destCoord.long):
            angle = -angle
            return angle
        else:
            return 0
    else:
        if (sourceCoord.long < destCoord.long):
            angle = 90 + angle
            return angle
        elif (sourceCoord.long > destCoord.long):
            angle = -90 - angle
            return angle
        else:
            return 180
Example #16
0
 def setUp(self):
     self.coords =[]
     self.coords.append(datatypes.GPSCoordinate(1.0,3.0))
     self.coords.append(datatypes.GPSCoordinate(1.0,2.0))
     self.coords.append(datatypes.GPSCoordinate(2.0,2.0))
     self.coords.append(datatypes.GPSCoordinate(2.0,3.0))
Example #17
0
 def setUp(self):
     gVars.logger = sailbot_logger.Logger()
     self.boundaryHandler = circleboundaryhandler.CircleBoundaryHandler()
     gVars.currentData = datatypes.ArduinoData(
         0, 1, 2, 3, datatypes.GPSCoordinate(4, 4), 5, 6, 7, 0, 20)
 def setUp(self):
     gVars.logger = sailbot_logger.Logger()
     self.p2p = pointtopoint.PointToPoint()
     self.p2p.GPSCoord = datatypes.GPSCoordinate(49, -123)
     self.p2p.Dest = datatypes.GPSCoordinate(50, -122)  #north east
     self.p2p.sog = 100
Example #19
0
 def setUp(self):
     self.point1 = datatypes.GPSCoordinate(0,0)
     self.point2 = datatypes.GPSCoordinate(1,1)
Example #20
0
	def testSouthWpt(self):
		southWpt = datatypes.GPSCoordinate(49,-122.5)
		self.assertEqual(round(self.waypoints[2].long,1),southWpt.long)
		self.assertEqual(self.waypoints[2].lat,southWpt.lat)
Example #21
0
 def setUp(self):
     self.coord0 = datatypes.GPSCoordinate(1.0,3.0)
     self.coord1 = datatypes.GPSCoordinate(1.0,2.0)
     self.coord2 = datatypes.GPSCoordinate(2.0,2.0) #square
     self.coord3 = datatypes.GPSCoordinate(2.0,3.0)
Example #22
0
 def setUp(self):
     self.list1 = []
     gVars.currentData = datatypes.ArduinoData(0, 1, 2, 3, datatypes.GPSCoordinate(4, 4) , 5, 6, 7, 0, 20)
     self.list2 = [1,2,3]
     self.list3 = standardcalc.changeSpdList(self.list2)
Example #23
0
 def testExpectNotNoGoStrange(self):
     self.appWind = 130
     self.heading = -140
     self.GPSCoord = datatypes.GPSCoordinate(49,-123)
     self.Dest = datatypes.GPSCoordinate(48,-123)
     self.assertFalse(standardcalc.isWPNoGoAWA(self.appWind, self.heading, self.Dest, self.sog, self.GPSCoord))
Example #24
0
 def setUp(self):
     self.appWind = 131
     self.heading = -30
     self.GPSCoord = datatypes.GPSCoordinate(49,-123)
     self.Dest = datatypes.GPSCoordinate(48.9,-123.1)
     self.sog = 0
Example #25
0
	def testEnteringFromEast(self):    
		gVars.currentData.gps_coord = datatypes.GPSCoordinate(49.4,-122) #east edge
		gVars.currentData.hog = -90
		startDirection = self.stationKeeping.getStartDirection(self.waypoints)
		self.assertEqual(startDirection,3)
Example #26
0
 def testClosestPointIsIndex1(self):
     gVars.currentData.gps_coord = datatypes.GPSCoordinate(2.0,2.0)
     self.assertEqual(standardcalc.returnClosestWaypointIndex(self.coords),2)  
Example #27
0
	def testNorthWpt(self):
		northWpt = datatypes.GPSCoordinate(50,-122.5)
		self.assertEqual(self.waypoints[0].lat,northWpt.lat)
		self.assertEqual(round(self.waypoints[0].long,1),northWpt.long)
Example #28
0
 def setUp(self):
     self.coord0 = datatypes.GPSCoordinate(1.0,3.0)
     self.coord1 = datatypes.GPSCoordinate(2.0,3.0)
     self.coord2 = datatypes.GPSCoordinate(2.0,2.0)#90 degrees
Example #29
0
	def testWestWpt(self):
		eastWpt = datatypes.GPSCoordinate(49.5,-123)
		self.assertEqual(self.waypoints[3].lat,eastWpt.lat)
		self.assertEqual(self.waypoints[3].long,eastWpt.long)             
Example #30
0
 def setUp(self):
     self.source = datatypes.GPSCoordinate(49.262330, -123.248148)
     self.result1 = datatypes.GPSCoordinate(49.26322919993, -123.24677409844) #100m north, 100m east
     self.result2 = datatypes.GPSCoordinate(49.26143080008, -123.24952185164) #100m south, 100m west
     self.result3 = datatypes.GPSCoordinate(49.27132080213, -123.23440919997) #1km north, 1km east
     self.result4 = datatypes.GPSCoordinate(49.25333758688, -123.26188680003) #1km south, 1km west