def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)

        self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
        self.ui.plot_view.clear()
        self.ui.plot_view.setBackground(QtGui.QColor('white'))
        self.ui.tree_widget.clear()
        self._plot_index = 0

        self._plot_datas_arrays = []
        self._curves = []
        colors = [
            QtGui.QColor('blue'),
            QtGui.QColor('red'),
            QtGui.QColor('lime'),
            QtGui.QColor('cornflowerblue'),
            QtGui.QColor('greenyellow'),
            QtGui.QColor('violet'),
            QtGui.QColor('orange'),
            QtGui.QColor('deepskyblue'),
            QtGui.QColor('firebrick'),
            QtGui.QColor('aqua')
        ]

        self.gyro_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
        self.gyro_parent.setCheckState(0, 2)
        self.gyro_parent.setText(0, 'Gyro')
        self.gyro_parent.addChild(
            self.createPlotLine(0, colors[0], 'Gyro X Axis'))
        self.gyro_parent.addChild(
            self.createPlotLine(1, colors[1], 'Gyro Y Axis'))
        self.gyro_parent.addChild(
            self.createPlotLine(2, colors[2], 'Gyro Z Axis'))
        self.ui.tree_widget.expandItem(self.gyro_parent)

        self.accel_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
        self.accel_parent.setCheckState(0, 2)
        self.accel_parent.setText(0, 'Accel')
        self.accel_parent.addChild(
            self.createPlotLine(3, colors[3], 'Accel X Axis'))
        self.accel_parent.addChild(
            self.createPlotLine(4, colors[4], 'Accel Y Axis'))
        self.accel_parent.addChild(
            self.createPlotLine(5, colors[5], 'Accel Z Axis'))
        self.ui.tree_widget.expandItem(self.accel_parent)

        ui_event_dispatcher.register(self._protocol_handler_changed_event,
                                     UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
        vehicle_event_dispatcher.register(
            self._gyro_raw_data_receved,
            VehicleEventDispatcher.GYRO_DATA_EVENT)
        vehicle_event_dispatcher.register(
            self._accel_raw_data_receved,
            VehicleEventDispatcher.ACCEL_DATA_EVENT)
        vehicle_event_dispatcher.register(
            self._mag_raw_data_receved,
            VehicleEventDispatcher.MAGNETOMETER_DATA_EVENT)
예제 #2
0
    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)

        self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
        self.ui.plot_view.clear()
        self.ui.plot_view.setBackground(QtGui.QColor('white'))
        self.ui.tree_widget.clear()
        self._plot_index = 0

        self._plot_datas_arrays = []
        self._curves = []
        self._tree_nodes = []

        vehicle_event_dispatcher.register(
            self._receiver_nb_channels_received,
            VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)
        ui_event_dispatcher.register(self._protocol_handler_changed_event,
                                     UIEventDispatcher.PROTOCOL_HANDLER_EVENT)

        vehicle_event_dispatcher.register(
            self._receiver_roll_event,
            VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_pitch_event,
            VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_yaw_event,
            VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_throttle_event,
            VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_mode_event,
            VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux1_event,
            VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux2_event,
            VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux3_event,
            VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux4_event,
            VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux5_event,
            VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux6_event,
            VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux7_event,
            VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)
 def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
     QtGui.QWidget.__init__(self)
     BasePanelController.__init__(self)
     self.ui = Ui_DataPlotPanel()
     self.ui.setupUi(self)
     
     self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
     self.ui.plot_view.clear()
     self.ui.plot_view.setBackground(QtGui.QColor('white'))
     self.ui.tree_widget.clear()
     self._plot_index = 0
     
     self._plot_datas_arrays = [] 
     self._curves = []
     self._tree_nodes = []
     
     vehicle_event_dispatcher.register(self._receiver_nb_channels_received, VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)
     ui_event_dispatcher.register(self._protocol_handler_changed_event, UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
     
     vehicle_event_dispatcher.register(self._receiver_roll_event, VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_pitch_event, VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_yaw_event, VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_throttle_event, VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_mode_event, VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_aux1_event, VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_aux2_event, VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_aux3_event, VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_aux4_event, VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_aux5_event, VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_aux6_event, VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_aux7_event, VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)
    def __init__(self, vehicle_model, message_sender):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        
        self.vehicle_model = vehicle_model
        self.message_sender = message_sender

        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)
    def __init__(self, vehicle_model, protocol_handler):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        
        self._vehicle_model = vehicle_model
        self._protocol_handler = protocol_handler

        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)
예제 #6
0
 def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
     QtGui.QWidget.__init__(self)
     BasePanelController.__init__(self)
     self.ui = Ui_DataPlotPanel()
     self.ui.setupUi(self)
     
     self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
     self.ui.plot_view.clear()
     self.ui.plot_view.setBackground(QtGui.QColor('white'))
     self.ui.tree_widget.clear()
     self._plot_index = 0
     
     self._plot_datas_arrays = []
     self._curves = [] 
     self._colors = [
         QtGui.QColor('blue'),
         QtGui.QColor('red'),
         QtGui.QColor('lime'),
         QtGui.QColor('cornflowerblue'),
         QtGui.QColor('greenyellow'),
         QtGui.QColor('violet'),
         QtGui.QColor('orange'),
         QtGui.QColor('deepskyblue'),
         QtGui.QColor('firebrick'),
         QtGui.QColor('aqua')]
     
     self.gyro_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
     self.gyro_parent.setCheckState(0, 2)
     self.gyro_parent.setText(0, 'Gyro')
     self.gyro_parent.addChild (self.createPlotLine(0, self._colors[0], 'Gyro X Axis'))
     self.gyro_parent.addChild (self.createPlotLine(1, self._colors[1], 'Gyro Y Axis'))
     self.gyro_parent.addChild (self.createPlotLine(2, self._colors[2], 'Gyro Z Axis'))
     self.ui.tree_widget.expandItem(self.gyro_parent)
     
     self.accel_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
     self.accel_parent.setCheckState(0, 2)
     self.accel_parent.setText(0, 'Accel')
     self.accel_parent.addChild (self.createPlotLine(3, self._colors[3], 'Accel X Axis'))
     self.accel_parent.addChild (self.createPlotLine(4, self._colors[4], 'Accel Y Axis'))
     self.accel_parent.addChild (self.createPlotLine(5, self._colors[5], 'Accel Z Axis'))
     self.ui.tree_widget.expandItem(self.accel_parent)
     
     ui_event_dispatcher.register(self._protocol_handler_changed_event, UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
     vehicle_event_dispatcher.register(self._gyro_raw_data_receved, VehicleEventDispatcher.GYRO_DATA_EVENT)
     vehicle_event_dispatcher.register(self._accel_raw_data_receved, VehicleEventDispatcher.ACCEL_DATA_EVENT)
     vehicle_event_dispatcher.register(self._mag_raw_data_receved, VehicleEventDispatcher.MAGNETOMETER_DATA_EVENT)
     vehicle_event_dispatcher.register(self._is_magnetometer_detected_event, VehicleEventDispatcher.MAGNETOMETER_DETECTED_EVENT)
예제 #7
0
class ReceiverDataPlotContoller(QtGui.QWidget, BasePanelController):
    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)

        self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
        self.ui.plot_view.clear()
        self.ui.plot_view.setBackground(QtGui.QColor('white'))
        self.ui.tree_widget.clear()
        self._plot_index = 0

        self._plot_datas_arrays = []
        self._curves = []
        self._tree_nodes = []

        vehicle_event_dispatcher.register(
            self._receiver_nb_channels_received,
            VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)
        ui_event_dispatcher.register(self._protocol_handler_changed_event,
                                     UIEventDispatcher.PROTOCOL_HANDLER_EVENT)

        vehicle_event_dispatcher.register(
            self._receiver_roll_event,
            VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_pitch_event,
            VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_yaw_event,
            VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_throttle_event,
            VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_mode_event,
            VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux1_event,
            VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux2_event,
            VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux3_event,
            VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux4_event,
            VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux5_event,
            VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux6_event,
            VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_aux7_event,
            VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)

    def _receiver_nb_channels_received(self, header, nb_channel):

        channel_array_names = [
            'Roll', 'Pitch', 'Yaw', 'Throttle', 'Mode', 'AUX1', 'AUX2', 'AUX3',
            'AUX4', 'AUX5', 'AUX6', 'AUX7', 'AUX8'
        ]

        colors = [
            QtGui.QColor('blue'),
            QtGui.QColor('red'),
            QtGui.QColor('lime'),
            QtGui.QColor('cornflowerblue'),
            QtGui.QColor('greenyellow'),
            QtGui.QColor('violet'),
            QtGui.QColor('orange'),
            QtGui.QColor('deepskyblue'),
            QtGui.QColor('firebrick'),
            QtGui.QColor('aqua')
        ]

        for i in range(0, int(nb_channel)):
            self._tree_nodes.append(QtGui.QTreeWidgetItem(self.ui.tree_widget))
            self._tree_nodes[i].setCheckState(0, 2)
            self._tree_nodes[i].setText(1, channel_array_names[i])
            self._tree_nodes[i].setBackgroundColor(0, colors[i])
            self._tree_nodes[i].setText(2, '0.000')
            self._plot_datas_arrays.append([0.0] * 128)
            self._curves.append(
                PlotCurveItem(self._plot_datas_arrays[i],
                              pen={
                                  'color': colors[i],
                                  'width': 2
                              }))
            self.ui.plot_view.addItem(self._curves[i])

    def _protocol_handler_changed_event(self, event, protocol_handler):
        self._protocol_handler = protocol_handler

    def start(self):
        self._protocol_handler.subscribe_receiver_data()

    def stop(self):
        self._protocol_handler.unsubscribe_command()

    def _receiver_roll_event(self, event, roll):
        self._update_panel_data(0, roll)

    def _receiver_pitch_event(self, event, pitch):
        self._update_panel_data(1, pitch)

    def _receiver_yaw_event(self, event, yaw):
        self._update_panel_data(2, yaw)

    def _receiver_throttle_event(self, event, throttle):
        self._update_panel_data(3, throttle)

    def _receiver_mode_event(self, event, mode):
        self._update_panel_data(4, mode)

    def _receiver_aux1_event(self, event, aux1):
        self._update_panel_data(5, aux1)

    def _receiver_aux2_event(self, event, aux2):
        self._update_panel_data(6, aux2)

    def _receiver_aux3_event(self, event, aux3):
        self._update_panel_data(7, aux3)

    def _receiver_aux4_event(self, event, aux4):
        self._update_panel_data(8, aux4)

    def _receiver_aux5_event(self, event, aux5):
        self._update_panel_data(9, aux5)

    def _receiver_aux6_event(self, event, aux6):
        self._update_panel_data(10, aux6)

    def _receiver_aux7_event(self, event, aux7):
        self._update_panel_data(11, aux7)

    def _update_panel_data(self, index, value):
        if self._tree_nodes[index].checkState(0) == 2:
            self._plot_datas_arrays[index].insert(0, value)
            self._plot_datas_arrays[index].pop()
            self._tree_nodes[index].setText(2, str(value))
            self._curves[index].setData(self._plot_datas_arrays[index])
            if self._curves[index] not in self.ui.plot_view.items():
                self.ui.plot_view.addItem(self._curves[index])
        elif self._curves[index] in self.ui.plot_view.items():
            self.ui.plot_view.removeItem(self._curves[index])
class SensorsDataPlotContoller(QtGui.QWidget, BasePanelController):

    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)
        
        self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
        self.ui.plot_view.clear()
        self.ui.plot_view.setBackground(QtGui.QColor('white'))
        self.ui.tree_widget.clear()
        self._plot_index = 0
        
        self._plot_datas_arrays = []
        self._curves = [] 
        colors = [
            QtGui.QColor('blue'),
            QtGui.QColor('red'),
            QtGui.QColor('lime'),
            QtGui.QColor('cornflowerblue'),
            QtGui.QColor('greenyellow'),
            QtGui.QColor('violet'),
            QtGui.QColor('orange'),
            QtGui.QColor('deepskyblue'),
            QtGui.QColor('firebrick'),
            QtGui.QColor('aqua')]
        
        self.gyro_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
        self.gyro_parent.setCheckState(0, 2)
        self.gyro_parent.setText(0, 'Gyro')
        self.gyro_parent.addChild (self.createPlotLine(0, colors[0], 'Gyro X Axis'))
        self.gyro_parent.addChild (self.createPlotLine(1, colors[1], 'Gyro Y Axis'))
        self.gyro_parent.addChild (self.createPlotLine(2, colors[2], 'Gyro Z Axis'))
        self.ui.tree_widget.expandItem(self.gyro_parent)
        
        self.accel_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
        self.accel_parent.setCheckState(0, 2)
        self.accel_parent.setText(0, 'Accel')
        self.accel_parent.addChild (self.createPlotLine(3, colors[3], 'Accel X Axis'))
        self.accel_parent.addChild (self.createPlotLine(4, colors[4], 'Accel Y Axis'))
        self.accel_parent.addChild (self.createPlotLine(5, colors[5], 'Accel Z Axis'))
        self.ui.tree_widget.expandItem(self.accel_parent)
        
        ui_event_dispatcher.register(self._protocol_handler_changed_event, UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
        vehicle_event_dispatcher.register(self._gyro_raw_data_receved, VehicleEventDispatcher.GYRO_DATA_EVENT)
        vehicle_event_dispatcher.register(self._accel_raw_data_receved, VehicleEventDispatcher.ACCEL_DATA_EVENT)
        vehicle_event_dispatcher.register(self._mag_raw_data_receved, VehicleEventDispatcher.MAGNETOMETER_DATA_EVENT)

    def createPlotLine(self, idx, color, plotName):
        self._plot_datas_arrays.append([0.0] * 128)
        self._curves.append(
            PlotCurveItem(self._plot_datas_arrays[idx], pen={'color':color, 'width': 2})
        )
        self.ui.plot_view.addItem(self._curves[idx])

        newLine = QtGui.QTreeWidgetItem()
        newLine.setCheckState(0, 2)
        newLine.setBackgroundColor(0, color)
        newLine.setText(1, plotName + '   ')
        newLine.setText(2, '0.000')
        return newLine
        
    def _protocol_handler_changed_event(self, event, protocol_handler):
        self._protocol_handler = protocol_handler;
                
    def start(self):
        self._protocol_handler.subscribe_sensors_data();
        
    def stop(self):
        self._protocol_handler.unsubscribe_command()
        
    def _gyro_raw_data_receved(self, event, gyro_vector):
        if self.gyro_parent.checkState(0) != 2:
            for i in range(0, 3):
                if self._curves[i] in self.ui.plot_view.items():
                    self.ui.plot_view.removeItem(self._curves[i])
            return
        
        gyro_data_array = [gyro_vector.get_x(),gyro_vector.get_y(),gyro_vector.get_z()]
        for i in range(0, 3):
            gyro_child_node = self.gyro_parent.child(i)
            if gyro_child_node.checkState(0) == 2:
                self._plot_datas_arrays[i].insert(0, float(gyro_data_array[i]))
                self._plot_datas_arrays[i].pop()
                gyro_child_node.setText(2, gyro_data_array[i])
                self._curves[i].setData(self._plot_datas_arrays[i])
                if self._curves[i] not in self.ui.plot_view.items():
                    self.ui.plot_view.addItem(self._curves[i])
            elif self._curves[i] in self.ui.plot_view.items():
                self.ui.plot_view.removeItem(self._curves[i])
        
    def _accel_raw_data_receved(self, event, accel_vector):
        if self.accel_parent.checkState(0) != 2:
            for i in range(0, 3):
                if self._curves[i+3] in self.ui.plot_view.items():
                    self.ui.plot_view.removeItem(self._curves[i+3])
            return

        accel_data_array = [accel_vector.get_x(),accel_vector.get_y(),accel_vector.get_z()]
        for i in range(0, 3):
            accel_child_node = self.accel_parent.child(i)
            if accel_child_node.checkState(0) == 2:
                self._plot_datas_arrays[i+3].insert(0, float(accel_data_array[i]))
                self._plot_datas_arrays[i+3].pop()
                accel_child_node.setText(2, accel_data_array[i])
                self._curves[i+3].setData(self._plot_datas_arrays[i+3])
                if self._curves[i+3] not in self.ui.plot_view.items():
                    self.ui.plot_view.addItem(self._curves[i+3])
            elif self._curves[i+3] in self.ui.plot_view.items():
                self.ui.plot_view.removeItem(self._curves[i+3])
        
    def _mag_raw_data_receved(self, event, mag_vector):
        return
예제 #9
0
class SensorsDataPlotContoller(QtGui.QWidget, BasePanelController):

    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)
        
        self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
        self.ui.plot_view.clear()
        self.ui.plot_view.setBackground(QtGui.QColor('white'))
        self.ui.tree_widget.clear()
        self._plot_index = 0
        
        self._plot_datas_arrays = []
        self._curves = [] 
        self._colors = [
            QtGui.QColor('blue'),
            QtGui.QColor('red'),
            QtGui.QColor('lime'),
            QtGui.QColor('cornflowerblue'),
            QtGui.QColor('greenyellow'),
            QtGui.QColor('violet'),
            QtGui.QColor('orange'),
            QtGui.QColor('deepskyblue'),
            QtGui.QColor('firebrick'),
            QtGui.QColor('aqua')]
        
        self.gyro_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
        self.gyro_parent.setCheckState(0, 2)
        self.gyro_parent.setText(0, 'Gyro')
        self.gyro_parent.addChild (self.createPlotLine(0, self._colors[0], 'Gyro X Axis'))
        self.gyro_parent.addChild (self.createPlotLine(1, self._colors[1], 'Gyro Y Axis'))
        self.gyro_parent.addChild (self.createPlotLine(2, self._colors[2], 'Gyro Z Axis'))
        self.ui.tree_widget.expandItem(self.gyro_parent)
        
        self.accel_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
        self.accel_parent.setCheckState(0, 2)
        self.accel_parent.setText(0, 'Accel')
        self.accel_parent.addChild (self.createPlotLine(3, self._colors[3], 'Accel X Axis'))
        self.accel_parent.addChild (self.createPlotLine(4, self._colors[4], 'Accel Y Axis'))
        self.accel_parent.addChild (self.createPlotLine(5, self._colors[5], 'Accel Z Axis'))
        self.ui.tree_widget.expandItem(self.accel_parent)
        
        ui_event_dispatcher.register(self._protocol_handler_changed_event, UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
        vehicle_event_dispatcher.register(self._gyro_raw_data_receved, VehicleEventDispatcher.GYRO_DATA_EVENT)
        vehicle_event_dispatcher.register(self._accel_raw_data_receved, VehicleEventDispatcher.ACCEL_DATA_EVENT)
        vehicle_event_dispatcher.register(self._mag_raw_data_receved, VehicleEventDispatcher.MAGNETOMETER_DATA_EVENT)
        vehicle_event_dispatcher.register(self._is_magnetometer_detected_event, VehicleEventDispatcher.MAGNETOMETER_DETECTED_EVENT)

    def createPlotLine(self, idx, color, plotName):
        self._plot_datas_arrays.append([0.0] * 128)
        self._curves.append(
            PlotCurveItem(self._plot_datas_arrays[idx], pen={'color':color, 'width': 2})
        )
        self.ui.plot_view.addItem(self._curves[idx])

        newLine = QtGui.QTreeWidgetItem()
        newLine.setCheckState(0, 2)
        newLine.setBackgroundColor(0, color)
        newLine.setText(1, plotName + '   ')
        newLine.setText(2, '0.000')
        return newLine
        
    def _protocol_handler_changed_event(self, event, protocol_handler):
        self._protocol_handler = protocol_handler;
                
    def _is_magnetometer_detected_event(self, header, is_detected):
        if is_detected == 'Detected':
            self.mag_parent = QtGui.QTreeWidgetItem(self.ui.tree_widget)
            self.mag_parent.setCheckState(0, 2)
            self.mag_parent.setText(0, 'Magnetometer')
            self.mag_parent.addChild (self.createPlotLine(6, self._colors[6], 'Mag X Axis'))
            self.mag_parent.addChild (self.createPlotLine(7, self._colors[7], 'Mag Y Axis'))
            self.mag_parent.addChild (self.createPlotLine(8, self._colors[8], 'Mag Z Axis'))
            self.ui.tree_widget.expandItem(self.mag_parent)
                    
    def start(self):
        self._protocol_handler.subscribe_sensors_data();
        
    def stop(self):
        self._protocol_handler.unsubscribe_command();
        
    def _gyro_raw_data_receved(self, event, gyro_vector):
        if self.gyro_parent.checkState(0) != 2:
            for i in range(0, 3):
                if self._curves[i] in self.ui.plot_view.items():
                    self.ui.plot_view.removeItem(self._curves[i])
            return
        
        gyro_data_array = [gyro_vector.get_x(),gyro_vector.get_y(),gyro_vector.get_z()]
        for i in range(0, 3):
            gyro_child_node = self.gyro_parent.child(i)
            if gyro_child_node.checkState(0) == 2:
                self._plot_datas_arrays[i].insert(0, float(gyro_data_array[i]))
                self._plot_datas_arrays[i].pop()
                gyro_child_node.setText(2, gyro_data_array[i])
                self._curves[i].setData(self._plot_datas_arrays[i])
                if self._curves[i] not in self.ui.plot_view.items():
                    self.ui.plot_view.addItem(self._curves[i])
            elif self._curves[i] in self.ui.plot_view.items():
                self.ui.plot_view.removeItem(self._curves[i])
        
    def _accel_raw_data_receved(self, event, accel_vector):
        if self.accel_parent.checkState(0) != 2:
            for i in range(0, 3):
                if self._curves[i+3] in self.ui.plot_view.items():
                    self.ui.plot_view.removeItem(self._curves[i+3])
            return

        accel_data_array = [accel_vector.get_x(),accel_vector.get_y(),accel_vector.get_z()]
        for i in range(0, 3):
            accel_child_node = self.accel_parent.child(i)
            if accel_child_node.checkState(0) == 2:
                self._plot_datas_arrays[i+3].insert(0, float(accel_data_array[i]))
                self._plot_datas_arrays[i+3].pop()
                accel_child_node.setText(2, accel_data_array[i])
                self._curves[i+3].setData(self._plot_datas_arrays[i+3])
                if self._curves[i+3] not in self.ui.plot_view.items():
                    self.ui.plot_view.addItem(self._curves[i+3])
            elif self._curves[i+3] in self.ui.plot_view.items():
                self.ui.plot_view.removeItem(self._curves[i+3])
        
    def _mag_raw_data_receved(self, event, mag_vector):
        if self.mag_parent.checkState(0) != 2:
            for i in range(0, 3):
                if self._curves[i+6] in self.ui.plot_view.items():
                    self.ui.plot_view.removeItem(self._curves[i+6])
            return

        mag_data_array = [mag_vector.get_x(),mag_vector.get_y(),mag_vector.get_z()]
        for i in range(0, 3):
            mag_child_node = self.mag_parent.child(i)
            if mag_child_node.checkState(0) == 2:
                self._plot_datas_arrays[i+6].insert(0, float(mag_data_array[i]))
                self._plot_datas_arrays[i+6].pop()
                mag_child_node.setText(2, mag_data_array[i])
                self._curves[i+6].setData(self._plot_datas_arrays[i+6])
                if self._curves[i+6] not in self.ui.plot_view.items():
                    self.ui.plot_view.addItem(self._curves[i+6])
            elif self._curves[i+6] in self.ui.plot_view.items():
                self.ui.plot_view.removeItem(self._curves[i+6])
예제 #10
0
class ReceiverDataPlotContoller(QtGui.QWidget, BasePanelController):


    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)
        
        self.ui.plot_view.setRange(xRange=(0, 128), padding=0.0)
        self.ui.plot_view.clear()
        self.ui.plot_view.setBackground(QtGui.QColor('white'))
        self.ui.tree_widget.clear()
        self._plot_index = 0
        
        self._plot_datas_arrays = [] 
        self._curves = []
        self._tree_nodes = []
        
        vehicle_event_dispatcher.register(self._receiver_nb_channels_received, VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)
        ui_event_dispatcher.register(self._protocol_handler_changed_event, UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
        
        vehicle_event_dispatcher.register(self._receiver_roll_event, VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_pitch_event, VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_yaw_event, VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_throttle_event, VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_mode_event, VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_aux1_event, VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_aux2_event, VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_aux3_event, VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_aux4_event, VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_aux5_event, VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_aux6_event, VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_aux7_event, VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)
        
    def _receiver_nb_channels_received(self, header, nb_channel):
        
        channel_array_names = ['Roll','Pitch','Yaw','Throttle','Mode','AUX1','AUX2','AUX3','AUX4','AUX5','AUX6','AUX7','AUX8']
    
        colors = [QtGui.QColor('blue'),
                  QtGui.QColor('red'),
                  QtGui.QColor('lime'),
                  QtGui.QColor('cornflowerblue'),
                  QtGui.QColor('greenyellow'),
                  QtGui.QColor('violet'),
                  QtGui.QColor('orange'),
                  QtGui.QColor('deepskyblue'),
                  QtGui.QColor('firebrick'),
                  QtGui.QColor('aqua')]
    
        for i in range(0, int(nb_channel)) :
            self._tree_nodes.append(QtGui.QTreeWidgetItem(self.ui.tree_widget))
            self._tree_nodes[i].setCheckState(0, 2)
            self._tree_nodes[i].setText(1, channel_array_names[i])
            self._tree_nodes[i].setBackgroundColor(0, colors[i])
            self._tree_nodes[i].setText(2, '0.000')
            self._plot_datas_arrays.append([0.0] * 128)
            self._curves.append(
                   PlotCurveItem(self._plot_datas_arrays[i], pen={'color':colors[i], 'width': 2})
            )
            self.ui.plot_view.addItem(self._curves[i])
        
    def _protocol_handler_changed_event(self, event, protocol_handler):
        self._protocol_handler = protocol_handler;     
        
    def start(self):
        self._protocol_handler.subscribe_receiver_data();   
    
    def stop(self):
        self._protocol_handler.unsubscribe_command()
        
    def _receiver_roll_event(self, event, roll):
        self._update_panel_data(0, roll)
    
    def _receiver_pitch_event(self, event, pitch):
        self._update_panel_data(1, pitch)
    
    def _receiver_yaw_event(self, event, yaw):
        self._update_panel_data(2, yaw)
    
    def _receiver_throttle_event(self, event, throttle):
        self._update_panel_data(3, throttle)
    
    def _receiver_mode_event(self, event, mode):
        self._update_panel_data(4, mode)
    
    def _receiver_aux1_event(self, event, aux1):
        self._update_panel_data(5, aux1)
    
    def _receiver_aux2_event(self, event, aux2):
        self._update_panel_data(6, aux2)
    
    def _receiver_aux3_event(self, event, aux3):
        self._update_panel_data(7, aux3)
    
    def _receiver_aux4_event(self, event, aux4):
        self._update_panel_data(8, aux4)
    
    def _receiver_aux5_event(self, event, aux5):
        self._update_panel_data(9, aux5)
    
    def _receiver_aux6_event(self, event, aux6):
        self._update_panel_data(10, aux6)
    
    def _receiver_aux7_event(self, event, aux7):
        self._update_panel_data(11, aux7)
    
    def _update_panel_data(self, index, value):
        if self._tree_nodes[index].checkState(0) == 2:
            self._plot_datas_arrays[index].insert(0, value)
            self._plot_datas_arrays[index].pop()
            self._tree_nodes[index].setText(2, str(value))
            self._curves[index].setData(self._plot_datas_arrays[index])
            if self._curves[index] not in self.ui.plot_view.items():
                self.ui.plot_view.addItem(self._curves[index])
        elif self._curves[index] in self.ui.plot_view.items():
                self.ui.plot_view.removeItem(self._curves[index])
class DataPlotController(QtGui.QWidget, BasePanelController):
    
    def __init__(self, vehicle_model, message_sender):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        
        self.vehicle_model = vehicle_model
        self.message_sender = message_sender

        self.ui = Ui_DataPlotPanel()
        self.ui.setupUi(self)

    def start(self, xmlSubPanel, boardConfiguration):
        '''This method starts a timer used for any long running loops in a subpanel'''
        self.xmlSubPanel = xmlSubPanel
        self.boardConfiguration = boardConfiguration

        self.plotIndex = int(self.xml.find(self.xmlSubPanel + '/Index').text)
        plotSize = int(self.xml.find(self.xmlSubPanel + '/PlotSize').text)
        plotNames = self.xml.findall(self.xmlSubPanel + '/PlotName')
        self.plotCount = len(plotNames)

        self.ui.graphicsView.setRange(xRange=(0, plotSize), padding=0.0)
        self.ui.graphicsView.clear()
        self.ui.treeWidget.clear()

        self.data, self.curves, colors = [], [], [
            QtGui.QColor('blue'),
            QtGui.QColor('red'),
            QtGui.QColor('lime'),
            QtGui.QColor('cornflowerblue'),
            QtGui.QColor('greenyellow'),
            QtGui.QColor('violet'),
            QtGui.QColor('orange'),
            QtGui.QColor('deepskyblue'),
            QtGui.QColor('firebrick'),
            QtGui.QColor('aqua')
        ]
        
        for i in xrange(self.plotCount):
            self.data.append([0.0] * plotSize)
            self.curves.append(
                PlotCurveItem(self.data[i], pen={'color':colors[i], 'width': 2})
            )
            self.ui.graphicsView.addItem(self.curves[i])

            plotName = plotNames[i].text
            newLine = QtGui.QTreeWidgetItem(self.ui.treeWidget)
            newLine.setCheckState(0, 2)
            newLine.setBackgroundColor(0, colors[i])
            newLine.setText(1, plotName + '   ')
            newLine.setText(2, '0.000')
        
        self.ui.treeWidget.resizeColumnToContents(0)
        self.ui.treeWidget.resizeColumnToContents(1)
        self.legend = self.ui.treeWidget.invisibleRootItem()

        if self.comm.isConnected() == True:
            telemetry = self.xml.find(self.xmlSubPanel + '/Telemetry').text
            if telemetry != '':
                self.comm.write(telemetry)
            self.timer = QtCore.QTimer()
            self.timer.timeout.connect(self.readContinuousData)
            self.timer.start(50)
            self.startCommThread()

        self.plot_timer = QtCore.QTimer()
        self.plot_timer.timeout.connect(self.update_plot)
        self.plot_timer.start(100)

    def readContinuousData(self):
        '''This method continually reads telemetry from the AeroQuad'''
        if self.comm.isConnected() and not self.commData.empty():
            rawData = self.commData.get()
            data = rawData.split(',')

            for i in xrange(self.plotCount):
                legendRow = self.legend.child(i)
                if legendRow.checkState(0) == 2:
                    try:
                        dataValue = data[i + self.plotIndex]
                        self.data[i].insert(0, float(dataValue))
                        self.data[i].pop()
                        legendRow.setText(2, dataValue)
                    except:
                        pass # Do not update output data if invalid number detected from comm read

    def update_plot(self):
        for i in xrange(self.plotCount):
            legendRow = self.legend.child(i)
            if legendRow.checkState(0) == 2:
                self.curves[i].setData(self.data[i])
                if self.curves[i] not in self.ui.graphicsView.items():
                    self.ui.graphicsView.addItem(self.curves[i])
            else:
                if self.curves[i] in self.ui.graphicsView.items():
                    self.ui.graphicsView.removeItem(self.curves[i])
        self.ui.graphicsView.autoRange()