def __init__(self): super(DriverWindow, self).__init__() #uic.loadUi('ui/driverGUI.ui', self) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.tabWidget.setCurrentIndex(0) self.resetInfo() self.ui.labelTest = {"MS5611": self.ui.label_baroTest, "MPU6050": self.ui.label_MPUTest, "HMC5883L": self.ui.label_magTest} self.state = STATE.DISCONNECTED # ROS self.ros = ROSNode() # FLIE self.flie = FlieControl() self.ui.checkBox_pktHZ.toggled.connect(lambda on: self.flie.setPacketUpdateSpeed(self.ui.spinBox_pktHZ.value() if on else 0 )) self.ui.spinBox_pktHZ.valueChanged.connect(self.flie.inKBPS.setHZ) self.ui.spinBox_pktHZ.valueChanged.connect(self.flie.outKBPS.setHZ) self.ui.spinBox_pktHZ.valueChanged.emit(self.ui.spinBox_pktHZ.value()) # force update self.ui.checkBox_kill.toggled.connect(self.flie.setKillswitch) self.flie.setKillswitch(self.ui.checkBox_kill.isChecked()) self.ui.checkBox_xmode.toggled.connect(self.flie.crazyflie.commander.set_client_xmode) self.flie.crazyflie.commander.set_client_xmode( self.ui.checkBox_xmode.isChecked()) # Set up ParamManager self.paramManager = ParamManager(self.flie.crazyflie, self) self.ui.tab_param.layout().addWidget(self.paramManager) # Set up LogManager self.logManager = LogManager(self.flie.crazyflie, self) self.ui.tab_log.layout().addWidget(self.logManager) self.ui.checkBox_logHZ.toggled.connect(self.logManager.setEstimateHzOn) self.ui.spinBox_logHZ.valueChanged.connect(self.logManager.setFreqMonitorFreq) self.logManager.sig_rosData.connect(self.ros.receiveCrazyflieLog) self.autoRetryTimer = QTimer() self.autoRetryTimer.setInterval(1500) self.autoRetryTimer.timeout.connect(lambda : self.connectPressed(self.ui.comboBox_connect.currentText(), auto=True)) self.autoRetryTimer.setSingleShot(True) # init previous settings self.readSettings() # Updateing the GUI (if we didnt do this, every change would result in an update...) self.guiUpdateQueue = {} self.guiUpdateQueueSave = 0 self.guiUpdateTimer = QTimer() self.guiUpdateTimer.setInterval(1000/self.ui.spinBox_guiHZ.value()) self.ui.spinBox_guiHZ.valueChanged.connect(lambda x: self.guiUpdateTimer.setInterval(1000/x)) self.guiUpdateTimer.timeout.connect(self.updateGui) self.guiUpdateTimer.start() # Defaults according to settings within GUI self.beepOn = self.ui.checkBox_beep.isChecked() self.killOn = self.ui.checkBox_kill.isChecked() self.autoReconnectOn = self.ui.checkBox_reconnect.isChecked() self.startupConnectOn = self.ui.checkBox_startupConnect.isChecked() self.ui.groupBox_input.toggled.connect(lambda x: self.ros.sig_joydata.connect(self.setInputJoy) if x else self.ros.sig_joydata.disconnect(self.setInputJoy)) if self.ui.groupBox_input.isChecked(): self.ros.sig_joydata.connect(self.setInputJoy) # Set up URI scanner self.scanner = ScannerThread() self.scanner.start() # Connections from GUI self.ui.pushButton_connect.clicked.connect(lambda : self.connectPressed(self.ui.comboBox_connect.currentText(), auto=False)) # Start button -> connect self.ui.comboBox_connect.currentIndexChanged.connect(self.uriSelected) self.ui.checkBox_beep.toggled.connect(self.setBeep) self.ui.checkBox_kill.toggled.connect(self.setKill) self.ui.checkBox_reconnect.toggled.connect(self.setAutoReconnect) self.ui.checkBox_startupConnect.toggled.connect(self.setStartupConnect) self.ui.pushButton_genRosMsg.clicked.connect(self.genRosMsg) # Connections to GUI self.flie.sig_packetSpeed.connect(self.updatePacketRate) self.flie.sig_flieLink.connect(self.ui.progressbar_link.setValue) self.paramManager.sig_baroFound.connect(lambda found: self.ui.label_baroFound.setText("Yes" if found else "No")) self.paramManager.sig_magFound.connect(lambda found: self.ui.label_magFound.setText("Yes" if found else "No")) self.paramManager.sig_test.connect(lambda name, p: self.ui.labelTest[str(name)].setText("Pass" if p else "FAIL")) self.paramManager.sig_firmware.connect(lambda fw, mod: self.ui.label_fw.setText(fw)) self.paramManager.sig_firmware.connect(lambda fw, mod: self.ui.label_fwMod.setText(mod)) self.logManager.sig_batteryUpdated.connect( lambda v : self.setToUpdate("vbat",self.ui.progressbar_bat.setValue, v)) self.flie.inKBPS.sig_KBPS.connect(lambda hz: self.updatePacketRate(self.ui.progressBar_pktIn,hz)) self.flie.outKBPS.sig_KBPS.connect(lambda hz: self.updatePacketRate(self.ui.progressBar_pktOut,hz)) # Connections GUI to GUI # Connections Within self.scanner.sig_foundURI.connect(self.receiveScanURI) self.sig_requestScan.connect(self.scanner.scan) self.sig_requestConnect.connect(self.flie.requestConnect) self.sig_requestDisconnect.connect(self.flie.requestDisconnect) self.flie.sig_stateUpdate.connect(self.updateFlieState) self.flie.sig_console.connect(self.ui.console.insertPlainText) # Show window self.show() # Initiate an initial Scan init_drivers(enable_debug_driver=False) self.startScanURI()
def __init__(self, options): super(DriverWindow, self).__init__() #uic.loadUi('ui/driverGUI.ui', self) self.options = options self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.tabWidget.setCurrentIndex(0) self.resetInfo(initial=True) self.ui.labelTest = { "MS5611": self.ui.label_baroTest, "MPU6050": self.ui.label_MPUTest, "HMC5883L": self.ui.label_magTest } self.state = STATE.DISCONNECTED # ROS self.d = Dialog(options) self.ros = ROSNode(options, self) # FLIE self.flie = FlieControl(self) self.ui.checkBox_pktHZ.toggled.connect( lambda on: self.flie.setPacketUpdateSpeed(self.ui.spinBox_pktHZ. value() if on else 0)) self.ui.spinBox_pktHZ.valueChanged.connect(self.flie.inKBPS.setHZ) self.ui.spinBox_pktHZ.valueChanged.connect(self.flie.outKBPS.setHZ) self.ui.spinBox_pktHZ.valueChanged.emit( self.ui.spinBox_pktHZ.value()) # force update self.ui.checkBox_kill.toggled.connect(self.flie.setKillswitch) self.flie.setKillswitch(self.ui.checkBox_kill.isChecked()) self.ui.checkBox_xmode.toggled.connect( self.flie.crazyflie.commander.set_client_xmode) self.flie.crazyflie.commander.set_client_xmode( self.ui.checkBox_xmode.isChecked()) # Set up ParamManager self.paramManager = ParamManager(self.flie.crazyflie, self) self.ui.tab_param.layout().addWidget(self.paramManager) # Set up LogManager self.logManager = LogManager(self.flie.crazyflie, self) self.ui.tab_log.layout().addWidget(self.logManager) self.ui.checkBox_logHZ.toggled.connect(self.logManager.setEstimateHzOn) self.ui.spinBox_logHZ.valueChanged.connect( self.logManager.setFreqMonitorFreq) self.logManager.sig_rosData.connect(self.ros.receiveCrazyflieLog) self.autoRetryTimer = QTimer() self.autoRetryTimer.setInterval(1500) self.autoRetryTimer.timeout.connect(lambda: self.connectPressed( self.ui.comboBox_connect.currentText(), auto=True)) self.autoRetryTimer.setSingleShot(True) # Set up TrackManager self.trackManager = TrackManager(self.ros.sub_tf, self.ros.pub_tf, self) self.ui.tab_tracking.layout().addWidget(self.trackManager) # AI self.ai = AttitudeIndicator(self.ui.tab_hud) self.logManager.sig_rpy.connect(self.ai.setRollPitchYaw) self.ui.tab_hud.layout().addWidget(self.ai) self.ui.checkBox_AI.stateChanged.connect(self.ai.setUpdatesEnabled) self.ui.spinBox_AIHZ.valueChanged.connect(self.ai.setUpdateSpeed) self.logManager.sig_hoverTarget.connect(self.ai.setHover) self.logManager.sig_baroASL.connect(self.ai.setBaro) self.logManager.sig_accZ.connect(self.ai.setAccZ) self.logManager.sig_motors.connect(self.ai.setMotors) self.logManager.sig_batteryUpdated.connect(self.ai.setBattery) self.logManager.sig_batteryState.connect(self.ai.setPower) self.logManager.sig_temp.connect(self.ai.setTemp) self.logManager.sig_cpuUpdated.connect(self.ai.setCPU) self.logManager.sig_pressure.connect(self.ai.setPressure) self.logManager.sig_aslLong.connect(self.ai.setAslLong) self.paramManager.sig_gyroCalib.connect(self.ai.setCalib) self.flie.inKBPS.sig_KBPS.connect(self.ai.setPktsIn) self.flie.outKBPS.sig_KBPS.connect(self.ai.setPktsOut) self.flie.sig_flieLink.connect(self.ai.setLinkQuality) self.flie.sig_stateUpdate.connect(self.ai.setFlieState) self.ui.checkBox_reconnect.stateChanged.connect( self.ai.setAutoReconnect) self.logManager.sig_hzMeasure.connect(self.ai.updateHz) self.logManager.sig_logStatus.connect(self.ai.updateHzTarget) # Yaw offset self.ui.doubleSpinBox_yaw.valueChanged.connect( lambda yaw: self.ui.horizontalSlider_yaw.setValue(yaw * 10)) self.ui.horizontalSlider_yaw.valueChanged.connect( lambda yaw: self.ui.doubleSpinBox_yaw.setValue(yaw / 10)) self.ui.doubleSpinBox_yaw.valueChanged.connect( self.logManager.setYawOffset) self.ui.checkBox_yaw.stateChanged.connect( lambda x: self.logManager.setYawOffset(self.ui.doubleSpinBox_yaw. value() if x else 0)) self.ui.checkBox_yaw.stateChanged.emit( self.ui.checkBox_yaw.checkState()) # force update self.ui.pushButton_north.clicked.connect( lambda: self.ui.doubleSpinBox_yaw.setValue(self.logManager.getYaw( ))) # ASL offset self.ui.doubleSpinBox_ground.valueChanged.connect( self.logManager.setGroundLevel) self.ui.checkBox_ground.stateChanged.connect( lambda x: self.logManager.setGroundLevel( self.ui.doubleSpinBox_ground.value() if x else 0)) self.ui.checkBox_ground.stateChanged.emit( self.ui.checkBox_ground.checkState()) self.ui.pushButton_ground.clicked.connect( lambda: self.ui.doubleSpinBox_ground.setValue(self.logManager. getASL())) self.ros.sig_baro.connect(self.logManager.setAslOffset) # init previous settings self.readSettings() # Sync self.sync = Sync(self.flie.crazyflie) self.sync.sig_delayUp.connect( lambda x: self.ui.label_up.setText(str(round(x, 2)) + "ms")) self.sync.sig_delayDown.connect( lambda x: self.ui.label_down.setText(str(round(x, 2)) + "ms")) self.ui.groupBox_sync.toggled.connect(self.sync.enable) self.ui.spinBox_syncHz.valueChanged.connect(self.sync.setSyncRate) self.ui.spinBox_syncHz.valueChanged.emit( self.ui.spinBox_syncHz.value()) self.ui.groupBox_sync.toggled.emit(self.ui.groupBox_sync.isChecked()) self.sync.sig_cpuTime.connect( lambda x: self.ui.label_cputime.setText("%08.03fs" % x)) self.sync.sig_flieTime.connect( lambda x: self.ui.label_flietime.setText("%08.03fs" % x)) self.sync.sig_diffTime.connect( lambda x: self.ui.label_difftime.setText("%08.03fs" % x)) self.ui.checkBox_rosLog.stateChanged.connect( self.logManager.setPubToRos) self.ui.groupBox_ros.clicked.connect( lambda x: self.logManager.setPubToRos( min(self.ui.groupBox_ros.isChecked(), self.ui.checkBox_rosLog.checkState()))) # # Updating the GUI (if we didnt do this, every change would result in an update...) self.guiUpdateQueue = {} self.guiUpdateQueueSave = 0 self.guiUpdateTimer = QTimer() self.guiUpdateTimer.setInterval(1000 / self.ui.spinBox_guiHZ.value()) self.ui.spinBox_guiHZ.valueChanged.connect( lambda x: self.guiUpdateTimer.setInterval(1000 / x)) self.guiUpdateTimer.timeout.connect(self.updateGui) self.guiUpdateTimer.start() # Defaults according to settings within GUI self.beepOn = self.ui.checkBox_beep.isChecked() self.killOn = self.ui.checkBox_kill.isChecked() self.autoReconnectOn = self.ui.checkBox_reconnect.isChecked() self.startupConnectOn = self.ui.checkBox_startupConnect.isChecked() self.ui.groupBox_input.toggled.connect( lambda x: self.ros.sig_joydata.connect(self.setInputJoy) if x else self.ros.sig_joydata.disconnect(self.setInputJoy)) if self.ui.groupBox_input.isChecked(): self.ros.sig_joydata.connect(self.setInputJoy) # Set up URI scanner self.scanner = ScannerThread(radio=options.radio) self.scanner.start() # Connections from GUI self.ui.pushButton_connect.clicked.connect( lambda: self.connectPressed(self.ui.comboBox_connect.currentText(), auto=False)) # Start button -> connect self.ui.comboBox_connect.currentIndexChanged.connect(self.uriSelected) self.ui.checkBox_beep.toggled.connect(self.setBeep) self.ui.checkBox_kill.toggled.connect(self.setKill) self.ui.checkBox_kill.toggled.connect(self.ai.setKillSwitch) self.ui.checkBox_kill.toggled.emit( self.ui.checkBox_kill.checkState()) # force update self.ui.checkBox_hover.toggled.connect(self.flie.setHoverDisabled) self.ui.checkBox_hover.toggled.emit( self.ui.checkBox_hover.checkState()) # force update self.ui.checkBox_reconnect.toggled.connect(self.setAutoReconnect) self.ui.checkBox_startupConnect.toggled.connect(self.setStartupConnect) self.ui.pushButton_genRosMsg.clicked.connect(self.genRosMsg) self.ui.pushButton_baro.clicked.connect(self.updateBaroTopics) self.ui.groupBox_baro.toggled.connect( lambda x: self.updateBaroTopics(not x)) # Connections to GUI self.flie.sig_packetSpeed.connect(self.updatePacketRate) self.flie.sig_flieLink.connect(self.ui.progressbar_link.setValue) self.paramManager.sig_baroFound.connect( lambda found: self.ui.label_baroFound.setText("Yes" if found else "No")) self.paramManager.sig_magFound.connect( lambda found: self.ui.label_magFound.setText("Yes" if found else "No")) self.paramManager.sig_test.connect(lambda name, p: self.ui.labelTest[ str(name)].setText("Pass" if p else "FAIL")) self.paramManager.sig_firmware.connect( lambda fw, mod: self.ui.label_fw.setText(fw)) self.paramManager.sig_firmware.connect( lambda fw, mod: self.ui.label_fwMod.setText(mod)) self.logManager.sig_batteryUpdated.connect(lambda v: self.setToUpdate( "vbat", self.ui.progressbar_bat.setValue, v)) self.logManager.sig_cpuUpdated.connect(lambda v: self.setToUpdate( "cpu", self.ui.progressbar_cpu.setValue, v)) self.flie.inKBPS.sig_KBPS.connect( lambda hz: self.updatePacketRate(self.ui.progressBar_pktIn, hz)) self.flie.outKBPS.sig_KBPS.connect( lambda hz: self.updatePacketRate(self.ui.progressBar_pktOut, hz)) # Connections GUI to GUI # Connections Within self.scanner.sig_foundURI.connect(self.receiveScanURI) self.sig_requestScan.connect(self.scanner.scan) self.sig_requestConnect.connect(self.flie.requestConnect) self.sig_requestDisconnect.connect(self.flie.requestDisconnect) self.flie.sig_stateUpdate.connect(self.updateFlieState) self.flie.sig_console.connect(self.ui.console.insertPlainText) # Show window self.show() # Initiate an initial Scan init_drivers(enable_debug_driver=False) self.startScanURI()