예제 #1
0
    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()
예제 #2
0
 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
예제 #3
0
 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)
예제 #4
0
 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()
예제 #6
0
    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()
예제 #7
0
    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()