def Start(self, vehicle): logger.log("+-+-+-+-+-+-+ Starting up %s +-+-+-+-+-+-+" % VERSION) ### initialize dronekit vehicle ### self.vehicle = vehicle ### switch vehicle to loiter mode ### self.vehicle.mode = VehicleMode("LOITER") ### initialize rc manager ### self.rcMgr = rcManager.rcManager(self) ### initialize app manager ### self.appMgr = appManager.appManager(self) ### initialize button manager ### self.buttonManager = buttonManager.buttonManager(self) ### initialize extended functions ### self.extFunctions = extFunctions.extFunctions(self.vehicle, self) ### initialize gopro manager ### self.goproManager = GoProManager.GoProManager(self) ### Initialize GeoFence manager ### self.geoFenceManager = GeoFenceManager.GeoFenceManager(self) # instantiate rewindManager self.rewindManager = rewindManager.RewindManager(self.vehicle, self) ### init APM stream rates ### self.initStreamRates() ### register callbacks ### self.registerCallbacks() # Try to maintain a constant tick rate self.timeOfLastTick = monotonic.monotonic() # how many ticks have we performed since an RC update? # register all connections (gopro manager communicates via appMgr's socket) self.inputs = [self.rcMgr.server, self.appMgr.server] self.outputs = [] #check if gimbal is present if self.vehicle.gimbal.yaw is not None: logger.log("[shot]: Gimbal detected.") # Initialize gimbal to RC targeting self.vehicle.gimbal.release() else: logger.log("[shot]: No gimbal detected.") # mark first tick time self.timeOfLastTick = monotonic.monotonic() # check for In-Air start from Shotmanager crash if self.vehicle.system_status == 'ACTIVE': logger.log("[shot]: Restart in air.") # load vehicle home self.rewindManager.loadHomeLocation()
def setUp(self): with patch('buttonManager.buttonManager.connect') as mock: mock.read = Mock() mock.get = Mock() shotmgr = Mock() self.v = Mock() shotmgr.vehicle = self.v self.mgr = buttonManager.buttonManager(shotmgr) self.mgr.setArtooButton = Mock() buttonManager.connected = True
def setUp(self): self.mgr = shotManager.ShotManager() self.mgr.rcMgr = Mock() self.mgr.buttonManager = buttonManager.buttonManager(self.mgr) self.mgr.lastMode = "LOITER" self.mgr.appMgr = Mock() self.mgr.vehicle = mock.create_autospec(Vehicle) self.mgr.vehicle.system_status = 'ACTIVE' self.mgr.sendPacket = Mock() self.mgr.goproManager = Mock() self.mgr.geoFenceManager = GeoFenceManager.GeoFenceManager(self.mgr)
def setUp(self): with patch('buttonManager.buttonManager.connect') as mock: mock.read = Mock() mock.get = Mock() shotmgr = Mock() self.v = Mock() shotmgr.vehicle = self.v self.mgr = buttonManager.buttonManager(shotmgr) self.mgr.setArtooButton = Mock() buttonManager.connected = True self.mgr.freeButtonMappings = [(shots.APP_SHOT_NONE, 1), (shots.APP_SHOT_NONE, 13)]
def Start(self, vehicle): logger.log("+-+-+-+-+-+-+ Starting up %s +-+-+-+-+-+-+" % VERSION) ### initialize dronekit vehicle ### self.vehicle = vehicle ### switch vehicle to loiter mode ### self.vehicle.mode = VehicleMode("LOITER") ### initialize rc manager ### self.rcMgr = rcManager.rcManager(self) ### initialize app manager ### self.appMgr = appManager.appManager(self) ### initialize button manager ### self.buttonManager = buttonManager.buttonManager(self) ### initialize gopro manager ### self.goproManager = GoProManager.GoProManager(self) ### Initialize GeoFence manager ### self.geoFenceManager = GeoFenceManager.GeoFenceManager(self) # instantiate rewindManager self.rewindManager = rewindManager.RewindManager(self.vehicle, self) # Create a PyMata instance and initialize the object avoidance toggles self.led_left_state = 0 self.led_right_state = 0 self.led_center_state = 0 self.led_beam_angle_state = 0 self.center_collision_state = 0 try: self.arduinoBoard = PyMata("/dev/ttyACM0", verbose=True) self.arduinoBoard.set_pin_mode(COLL_RIGHT, self.arduinoBoard.INPUT, self.arduinoBoard.DIGITAL) self.arduinoBoard.set_pin_mode(COLL_CENTER, self.arduinoBoard.INPUT, self.arduinoBoard.DIGITAL) self.arduinoBoard.set_pin_mode(COLL_LEFT, self.arduinoBoard.INPUT, self.arduinoBoard.DIGITAL) self.arduinoBoard.set_pin_mode(SCAN_BIT1, self.arduinoBoard.INPUT, self.arduinoBoard.DIGITAL) self.arduinoBoard.set_pin_mode(SCAN_BIT2, self.arduinoBoard.INPUT, self.arduinoBoard.DIGITAL) self.arduinoBoard.set_pin_mode(SCAN_BIT3, self.arduinoBoard.INPUT, self.arduinoBoard.DIGITAL) self.arduinoBoard.set_pin_mode(SCAN_BIT4, self.arduinoBoard.INPUT, self.arduinoBoard.DIGITAL) except: logger.log("[shotmanager]: Error in communication to Arduino") ### init APM stream rates ### self.initStreamRates() ### register callbacks ### self.registerCallbacks() # Try to maintain a constant tick rate self.timeOfLastTick = monotonic.monotonic() # how many ticks have we performed since an RC update? # register all connections (gopro manager communicates via appMgr's socket) self.inputs = [self.rcMgr.server, self.appMgr.server] self.outputs = [] #check if gimbal is present if self.vehicle.gimbal.yaw is not None: logger.log("[shot]: Gimbal detected.") # Initialize gimbal to RC targeting self.vehicle.gimbal.release() else: logger.log("[shot]: No gimbal detected.") # mark first tick time self.timeOfLastTick = monotonic.monotonic() # check for In-Air start from Shotmanager crash if self.vehicle.system_status == 'ACTIVE': logger.log("[shot]: Restart in air.") # load vehicle home self.rewindManager.loadHomeLocation()
def Start(self, api): logger.log("starting up shotManager 1.3.0") # get our vehicle - when running with mavproxy it only knows about one vehicle (for now) self.vehicle = api.get_vehicles()[0] logger.log("got api vehicle") # set up a socket to receive rc inputs from pixrc if os.path.exists( "/tmp/shotManager_RCInputs_socket" ): os.remove( "/tmp/shotManager_RCInputs_socket" ) self.rcSock = socket.socket( socket.AF_UNIX, socket.SOCK_DGRAM ) self.rcSock.bind("/tmp/shotManager_RCInputs_socket") self.rcSock.setblocking(0) self.remapper = RCRemapper.RCRemapper(self.rcSock, self) # set up a TCP server to receive commands from the app # Create a TCP/IP socket self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if platform.system() != 'Darwin': self.server.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # After 1 second, start KEEPALIVE self.server.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1) # 5 seconds in between keepalive pings self.server.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 5) # 5 max fails self.server.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5) # Bind the socket to the port server_address = ('', SERVER_PORT) while True: try: self.server.bind(server_address) except: # logger.log("address in use") time.sleep(1.0) pass else: break logger.log("ready for connections") # Listen for incoming connections self.server.listen(0) self.client = None self.inputs = [self.server, self.rcSock] self.outputs = [] self.currentPacket = "" self.currentPacketLength = 9999 self.enableManualGimbalControl() self.buttonManager = buttonManager.buttonManager(self) self.last_ekf_ok = False self.last_armed = False # Store off the last received set of RC channels # If we have short gaps where we aren't receiving RC, fill them in with this self.lastRCData = [RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.CHANNEL6_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.CHANNEL8_MID ] # Try to maintain a constant tick rate self.timeOfLastTick = time.time() # how many ticks have we performed since an RC update? self.numTicksSinceRCUpdate = 0 logger.log("Going to wait for vehicle init") while True: try: self.vehicle.wait_init() except: exceptStr = traceback.format_exc() print exceptStr logger.log(exceptStr) logger.log("failed to init vehicle") else: break logger.log("vehicle inited") self.goproManager = GoProManager.GoProManager(self) self.xiaomiManager = XiaomiManager.XiaomiManager(self) #check if gimbal is present if self.vehicle.mount_status[0] is not None: logger.log("Gimbal detected.") else: logger.log("No gimbal detected.") self.vehicle.mode = VehicleMode("LOITER") self.lastMode = self.vehicle.mode.name # set callback for when modes change self.vehicle.add_attribute_observer('mode', self.mode_callback) # set callback for when ekf changes self.vehicle.add_attribute_observer('ekf_ok', self.ekf_callback) # set callback for when armed state changes self.vehicle.add_attribute_observer('armed', self.armed_callback) # set callback when camera is triggered through a mavlink message self.vehicle.add_attribute_observer('camera_trigger', self.camera_trigger_callback) # gopro manager callbacks self.vehicle.add_attribute_observer('gopro_state', self.goproManager.state_callback) self.vehicle.add_attribute_observer('gopro_get_response', self.goproManager.get_response_callback) self.vehicle.add_attribute_observer('gopro_set_response', self.goproManager.set_response_callback) self.initStreamRates()
def Start(self, api): logger.log("starting up shotManager 1.3.0") # get our vehicle - when running with mavproxy it only knows about one vehicle (for now) self.vehicle = api.get_vehicles()[0] logger.log("got api vehicle") # set up a socket to receive rc inputs from pixrc if os.path.exists("/tmp/shotManager_RCInputs_socket"): os.remove("/tmp/shotManager_RCInputs_socket") self.rcSock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) self.rcSock.bind("/tmp/shotManager_RCInputs_socket") self.rcSock.setblocking(0) self.remapper = RCRemapper.RCRemapper(self.rcSock, self) # set up a TCP server to receive commands from the app # Create a TCP/IP socket self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if platform.system() != 'Darwin': self.server.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # After 1 second, start KEEPALIVE self.server.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1) # 5 seconds in between keepalive pings self.server.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 5) # 5 max fails self.server.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5) # Bind the socket to the port server_address = ('', SERVER_PORT) while True: try: self.server.bind(server_address) except: # logger.log("address in use") time.sleep(1.0) pass else: break logger.log("ready for connections") # Listen for incoming connections self.server.listen(0) self.client = None self.inputs = [self.server, self.rcSock] self.outputs = [] self.currentPacket = "" self.currentPacketLength = 9999 self.enableManualGimbalControl() self.buttonManager = buttonManager.buttonManager(self) self.last_ekf_ok = False self.last_armed = False # Store off the last received set of RC channels # If we have short gaps where we aren't receiving RC, fill them in with this self.lastRCData = [ RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.CHANNEL6_MID, RCRemapper.DEFAULT_RC_MID, RCRemapper.CHANNEL8_MID ] # Try to maintain a constant tick rate self.timeOfLastTick = time.time() # how many ticks have we performed since an RC update? self.numTicksSinceRCUpdate = 0 logger.log("Going to wait for vehicle init") while True: try: self.vehicle.wait_init() except: exceptStr = traceback.format_exc() print exceptStr logger.log(exceptStr) logger.log("failed to init vehicle") else: break logger.log("vehicle inited") self.goproManager = GoProManager.GoProManager(self) self.xiaomiManager = XiaomiManager.XiaomiManager(self) #check if gimbal is present if self.vehicle.mount_status[0] is not None: logger.log("Gimbal detected.") else: logger.log("No gimbal detected.") self.vehicle.mode = VehicleMode("LOITER") self.lastMode = self.vehicle.mode.name # set callback for when modes change self.vehicle.add_attribute_observer('mode', self.mode_callback) # set callback for when ekf changes self.vehicle.add_attribute_observer('ekf_ok', self.ekf_callback) # set callback for when armed state changes self.vehicle.add_attribute_observer('armed', self.armed_callback) # set callback when camera is triggered through a mavlink message self.vehicle.add_attribute_observer('camera_trigger', self.camera_trigger_callback) # gopro manager callbacks self.vehicle.add_attribute_observer('gopro_state', self.goproManager.state_callback) self.vehicle.add_attribute_observer( 'gopro_get_response', self.goproManager.get_response_callback) self.vehicle.add_attribute_observer( 'gopro_set_response', self.goproManager.set_response_callback) self.initStreamRates()