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)
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)
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))
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)
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])
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)
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
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())
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())
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 } })
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")
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()
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
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
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))
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
def setUp(self): self.point1 = datatypes.GPSCoordinate(0,0) self.point2 = datatypes.GPSCoordinate(1,1)
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)
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)
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)
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))
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
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)
def testClosestPointIsIndex1(self): gVars.currentData.gps_coord = datatypes.GPSCoordinate(2.0,2.0) self.assertEqual(standardcalc.returnClosestWaypointIndex(self.coords),2)
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)
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
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)
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