Esempio n. 1
0
    def startPressed(self):
        '''
            is called when the start button is clicked
            calls the function to get the data to plot
            dependent on what tab is selected            
        '''
        currentTab = self.tabWidget.currentIndex()
        try:

            if currentTab == 0:  # rawDataTab is active
                plotData, plotInfo = self.rawDataTab.getPlotData()
            elif currentTab == 1:  #
                plotData, plotInfo = self.compareTab.getPlotData()
            elif currentTab == 2:
                plotData, plotInfo = self.diffTab.getPlotData()

            # emit signal with data
            self.newPlotData.emit(plotData, plotInfo)

            # close dialog
            self.close()

        except Exception as e:
            msg_box = QMessageBox(QMessageBox.Critical, 'Error', str(e))
            msg_box.exec_()
Esempio n. 2
0
 def resetSDV(self):
     indexes = self._widget.EstadosDeConexion.selectedIndexes()
     # SI no se ha seleccionado ningun robot SDV arrojar error
     if not indexes:
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Warning)
         msg.setText(u"Error de Asignación de Comando:")
         msg.setInformativeText(
             "Seleccione al menos un robot de la lista de conexiones")
         msg.setWindowTitle("Error")
         ret = msg.exec_()
     else:
         for index in indexes:
             sdv = index.data()
             if sdv == inc.SERVER_USERNAME[0]:
                 self.sdvs[0].sender.publishResetGoal()
             elif sdv == inc.SERVER_USERNAME[1]:
                 self.sdvs[1].sender.publishResetGoal()
             elif sdv == inc.SERVER_USERNAME[2]:
                 self.sdvs[2].sender.publishResetGoal()
             else:
                 msg = QMessageBox()
                 msg.setIcon(QMessageBox.Warning)
                 msg.setText(u"Error de Asignación de Comando:")
                 msg.setInformativeText("No se ha reconocido el robot SDV")
                 msg.setWindowTitle("Error")
                 ret = msg.exec_()
                 return
Esempio n. 3
0
    def sendCommand(self):
        try:  # Todas las columnas de la fila seleccionadas
            name, instr, place = sorted(
                self._widget.TablaInstrucciones.selectedIndexes())
        except:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText(u"Error de Ejecución de Instrucción:")
            msg.setInformativeText(
                "No se ha seleccionado toda la fila. Seleccione el índice de la instrucción"
            )
            msg.setWindowTitle("Error")
            ret = msg.exec_()
            return
        # Selección correcta
        name, place = str(name.data()), str(place.data())

        i = 0
        if name == inc.SERVER_USERNAME[0]:
            i = 0  #SDVUN_LAST_COMMAND[0] = self.sender.pose
        elif name == inc.SERVER_USERNAME[1]:
            i = 1  #SDVUN_LAST_COMMAND[1] = self.sender.pose
        elif name == inc.SERVER_USERNAME[2]:
            i = 2  #SDVUN_LAST_COMMAND[2] = self.sender.pose

        # HOME
        if inc.PLACES[place] == 0:
            self.sdvs[i].sender.sendSDVtoHome()
            # MALLA
        elif inc.PLACES[place] == 1:
            self.sdvs[i].sender.sendSDVtoCeldaExperimental()
            # INDUSTRIAL
        elif inc.PLACES[place] == 2:
            self.sdvs[i].sender.sendSDVtoCeldaIndustrial()
            # MANUFACTURA
        elif inc.PLACES[place] == 3:
            self.sdvs[i].sender.sendSDVtoCeldaManufactura()
        else:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText(u"Error de Asignación de Comando:")
            msg.setInformativeText("No se ha reconocido el destino del SDV")
            msg.setWindowTitle("Error")
            ret = msg.exec_()
            return

        if name == inc.SERVER_USERNAME[0]:
            self.sdvs[i].sender.publishPoseStamped()
        elif name == inc.SERVER_USERNAME[1]:
            self.sdvs[i].sender.publishPoseStamped()
        elif name == inc.SERVER_USERNAME[2]:
            self.sdvs[i].sender.publishPoseStamped()
        else:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText(u"Error de Asignación de Comando:")
            msg.setInformativeText("No se ha reconocido el robot SDV")
            msg.setWindowTitle("Error")
            ret = msg.exec_()
            return
Esempio n. 4
0
    def show(self):
        try:
            # append folder of 'qt_gui_cpp/lib' to module search path
            qt_gui_cpp_path = os.path.realpath(get_package_path('qt_gui_cpp'))
        except Exception:
            qt_gui_cpp = None
        else:
            sys.path.append(os.path.join(qt_gui_cpp_path, 'lib'))
            sys.path.append(os.path.join(qt_gui_cpp_path, 'src'))
            from qt_gui_cpp.cpp_binding_helper import qt_gui_cpp

        logo = os.path.join(self._qtgui_path, 'share', 'qt_gui', 'resource',
                            'ros_org_vertical.png')
        text = '<img src="%s" width="56" height="200" style="float: left;"/>' % logo

        text += '<h3 style="margin-top: 1px;">%s</h3>' % self.tr('rqt')

        text += '<p>%s %s</p>' % (
            self.tr('rqt is a framework for graphical user interfaces.'),
            self.
            tr('It is extensible with plugins which can be written in either Python or C++.'
               ))
        text += '<p>%s</p>' % (self.tr(
            'Please see the <a href="%s">Wiki</a> for more information on rqt and available '
            'plugins.' % 'http://wiki.ros.org/rqt'))

        text += '<p>%s: ' % self.tr('Utilized libraries:')

        text += 'Python %s, ' % platform.python_version()

        if QT_BINDING == 'pyside':
            text += 'PySide'
        elif QT_BINDING == 'pyqt':
            text += 'PyQt'
        text += ' %s (%s), ' % (QT_BINDING_VERSION, ', '.join(
            sorted(QT_BINDING_MODULES)))

        text += 'Qt %s, ' % qVersion()

        if qt_gui_cpp is not None:
            if QT_BINDING == 'pyside':
                text += '%s' % (self.tr('%s C++ bindings available') %
                                'Shiboken')
            elif QT_BINDING == 'pyqt':
                text += '%s' % (self.tr('%s C++ bindings available') % 'SIP')
            else:
                text += '%s' % self.tr('C++ bindings available')
        else:
            text += '%s' % self.tr(
                'no C++ bindings found - no C++ plugins available')

        text += '.</p>'

        mb = QMessageBox(QMessageBox.NoIcon, self.tr('About rqt'), text,
                         QMessageBox.Ok, self.parent())
        mb.exec_()
Esempio n. 5
0
    def loginView(self):
        # Login correcto
        if self.login.user:
            print 'Autenticado usuario: %s' % (self.login.user.display_name)
            self.sdvoice = SDVoice(self.mainwindow_file, self.login.user)
            # Show _widget.windowTitle on left-top of each plugin (when
            # it's set in _widget). This is useful when you open multiple
            # plugins at once. Also if you open multiple instances of your
            # plugin at once, these lines add number to make it easy to
            # tell from pane to pane.
            if self.context.serial_number() > 1:
                self.login._widget.setWindowTitle(
                    self.login._widget.windowTitle() +
                    (' (%d)' % self.context.serial_number()))
                self.sdvoice._widget.setWindowTitle(
                    self.sdvoice._widget.windowTitle() +
                    (' (%d)' % self.context.serial_number()))
            # Agregar widget al panel de rqt
            self.context.add_widget(self.sdvoice._widget)
            # TODO: CERRAR WIDGET LOGIN
            self.login._widget.close()

        # Error de datos de usuario
        else:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText(u"Error de Verificación de Usuario:")
            msg.setInformativeText(u"Usuario o contraseña no válidos!")
            msg.setWindowTitle("Error")
            ret = msg.exec_()
Esempio n. 6
0
    def show_pop_up(self):
        msg = QMessageBox()
        msg.setWindowTitle('Alternative flight plan received')
        msg.setText('Accept alternative flight plan?')
        msg.setIcon(QMessageBox.Question)
        msg.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
        msg.setDefaultButton(QMessageBox.No)
        # msg.setInformativeText('Accept new plan?')
        msg.setDetailedText('{}'.format(self.alternative_flight_plan))
        # msg.buttonClicked.connect(self.handle_message_box)  # TODO: do handling here?
        pop_up_response = msg.exec_()
        ros_response = RPSFlightPlanAccept()
        ros_response.icao = self.alternative_flight_plan.icao
        ros_response.flight_plan_id = self.alternative_flight_plan.flight_plan_id

        if pop_up_response == QMessageBox.Yes:
            ros_response.accept = True
            # Try to call light_sim service to change flight plan
            try:
                light_sim_change_flight_plan = rospy.ServiceProxy('/gauss_light_sim/change_flight_plan', ChangeFlightPlan)
                light_sim_change_flight_plan(ChangeFlightPlanRequest(alternative=copy.deepcopy(self.alternative_flight_plan)))
            except rospy.ServiceException as e:
                print("[RQt] Service call failed: %s"%e)

        if pop_up_response == QMessageBox.No:
            ros_response.accept = False
        self.acceptance_pub.publish(ros_response)
        self.alternative_flight_plan = None
Esempio n. 7
0
    def connectSSH(self):
        i = self._widget.ListaConexiones.currentIndex()
        # Let the user know we're connecting to the server
        self._widget.statusBar.showMessage("Connecting to server.")
        self.sdvs[i].ssh = ssh(inc.SERVER_IP[i], inc.SERVER_USERNAME[i],
                               inc.SERVER_PASSWORD[i])
        # Agregar a EstadosDeConexion lista de hosts conectados
        if self.sdvs[i].ssh.client != None:
            # Actualizar GUI
            item = QtGui.QStandardItem(
                self._widget.ListaConexiones.currentText())
            self.EstadosDeConexion_model.appendRow(item)

            # TODO: Lanzar el proyecto de sdvoice en el robot SDV
            #node = roslaunch.core.Node('sdvoice', 'agv_nav.launch')
            #launch = roslaunch.scriptapi.ROSLaunch()
            #launch.start()
            #process = launch.launch(node)
            #print process.is_alive()
            #self.ssh_clients[i].sendCommand("roslaunch sdvoice agv_nav.launch")
            #self.ssh_clients[i].sendCommand("ls")

        else:
            # QDialog de Warning por error de conexión
            # TODO: Cambiar tamaño de la ventana del mensaje
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText("Error de Conexión:")
            msg.setInformativeText(
                "No se pudo conectar a %s!" %
                (self._widget.ListaConexiones.currentText()))
            msg.setWindowTitle("Error")
            ret = msg.exec_()
        self._widget.statusBar.showMessage("")
Esempio n. 8
0
 def on_qt_delete_btn_clicked(self):
     msgbox = QMessageBox(
         QMessageBox.Warning, 'Do you want to delete this?',
         'Name: {0}\nPath: {1}'.format(self._path_model.cur_bagfilename,
                                       self._path_model.cur_bagpath))
     msgbox.addButton('DELETE', QMessageBox.AcceptRole)
     msgbox.addButton('cancel', QMessageBox.RejectRole)
     if msgbox.exec_() == 0:
         self._path_model.delete_file()
class RosPyPluginProvider(CompositePluginProvider):

    _master_found_signal = Signal(int)

    def __init__(self):
        super(RosPyPluginProvider, self).__init__([RospkgPluginProvider('rqt_gui', 'rqt_gui_py::Plugin')])
        self.setObjectName('RosPyPluginProvider')
        self._node_initialized = False
        self._wait_for_master_dialog = None
        self._wait_for_master_thread = None

    def load(self, plugin_id, plugin_context):
        self._check_for_master()
        self._init_node()
        return super(RosPyPluginProvider, self).load(plugin_id, plugin_context)

    def _check_for_master(self):
        # check if master is available
        try:
            rospy.get_master().getSystemState()
            return
        except Exception:
            pass
        # spawn thread to detect when master becomes available
        self._wait_for_master_thread = threading.Thread(target=self._wait_for_master)
        self._wait_for_master_thread.start()
        self._wait_for_master_dialog = QMessageBox(QMessageBox.Question, self.tr('Waiting for ROS master'), self.tr("Could not find ROS master. Either start a 'roscore' or abort loading the plugin."), QMessageBox.Abort)
        self._master_found_signal.connect(self._wait_for_master_dialog.done, Qt.QueuedConnection)
        button = self._wait_for_master_dialog.exec_()
        # check if master existence was not detected by background thread
        no_master = button != QMessageBox.Ok
        self._wait_for_master_dialog.deleteLater()
        self._wait_for_master_dialog = None
        if no_master:
            raise PluginLoadError('RosPyPluginProvider._init_node() could not find ROS master')

    def _wait_for_master(self):
        while True:
            time.sleep(0.1)
            if not self._wait_for_master_dialog:
                break
            try:
                rospy.get_master().getSystemState()
            except Exception:
                continue
            self._master_found_signal.emit(QMessageBox.Ok)
            break

    def _init_node(self):
        # initialize node once
        if not self._node_initialized:
            name = 'rqt_gui_py_node_%d' % os.getpid()
            qDebug('RosPyPluginProvider._init_node() initialize ROS node "%s"' % name)
            rospy.init_node(name, disable_signals=True)
            self._node_initialized = True
Esempio n. 10
0
 def check_client_set_up(self):
   '''Checks to see if the client is initialized, if not we check if the server is running before initializing the client.
   If server is not yet running we send a popup informing the user and return False.'''
   #checks to see if we have connected to service yet
   if self.plan_select_client == None:
     #we get list of services and see if any match plexil_plan_selection
     services = rosservice.get_service_list()
     service_running = [i for i in services if "plexil_plan_selection" in i]
     #if none exist we send a popup and return
     if len(service_running) == 0:
       popup = QMessageBox()
       popup.setWindowTitle("ow_plexil service not yet connected")
       popup.setText("ow_plexil plan selection service not connected yet, please make sure the ow_plexil launch file is running.")
       popup.exec_()
       return False
     else:
       #client setup
       rospy.wait_for_service('plexil_plan_selection')
       self.plan_select_client = rospy.ServiceProxy('plexil_plan_selection', PlanSelection)
       return True
   else:
     return True
Esempio n. 11
0
    def _start_experiment(self):
        for i, rb in enumerate(self.radiobuttons):
            if rb.isChecked():
                self.experiment_type = i
        
        for i, rb in enumerate(self.skipradio):
            if rb.isChecked():
                self.skip = i
        
        if self.skip != -1:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText("Are you sure you want to skip phases?")
            msg.setWindowTitle("Careful")
            msg.exec_()
            if self.skip_check:
                self.skip_check = False
                return
        
        if self.experiment_type == None:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setText("Select which experiment to run!")
            msg.setWindowTitle("Careful")
            msg.exec_()
            return

        rospy.loginfo('Starting the experiment ' + str(self.experiment_type))
        
        # Create the message
        message = ExperimentTrigger()
        message.type = self.experiment_type
        message.finnish = self._widget.finnish_box.isChecked()
        message.skip = self.skip
        message.name = self._widget.name_text.text()
        
        self.start_publisher.publish(message)
        self._widget.startButton.setEnabled(False)
Esempio n. 12
0
 def registro(self):
     email = self._widget.email.text()
     user_name = self._widget.userName.text()
     phone = self._widget.phone.text()
     passw = self._widget.passw.text()
     repassw = self._widget.repass.text()
     # Error de contraseñas
     if passw != repassw:
         self.user = None
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Warning)
         msg.setText(u"Error de Contraseña:")
         msg.setInformativeText(u"Las contraseñas no coinciden")
         msg.setWindowTitle("Error")
         ret = msg.exec_()
     else:
         try:
             self.user = firebase.addUser(email, passw, phone, user_name)
             firebase.newDataBase(self.user.display_name)
         # Error de registro
         except:
             self.user = None
             msg = QMessageBox()
             msg.setIcon(QMessageBox.Warning)
             msg.setText(u"Error de Registro:")
             msg.setInformativeText(
                 u"No se ha podido registrar usuario: \n Datos erroneos, revisar:\n - Contraseña debe tener más de 6 digitos.\n - Verifique símbolos de los datos personales."
             )
             msg.setWindowTitle("Error")
             ret = msg.exec_()
         # Registro exitoso
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Information)
         msg.setText(u"Bienvenido:")
         msg.setInformativeText(u"Usuario creado exitosamente!")
         msg.setWindowTitle(u"Información")
         ret = msg.exec_()
Esempio n. 13
0
 def addManualCommand(self):
     indexes = self._widget.EstadosDeConexion.selectedIndexes()
     # SI no se ha seleccionado ningun robot SDV arrojar error
     if not indexes:
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Warning)
         msg.setText(u"Error de Asignación de Comando:")
         msg.setInformativeText(
             "Seleccione al menos un robot de la lista de conexiones")
         msg.setWindowTitle("Error")
         ret = msg.exec_()
     else:
         for index in indexes:
             sdv = index.data()
             self._comm = [
                 QtGui.QStandardItem(str(sdv)),
                 QtGui.QStandardItem(
                     str(self._widget.ListaInstrucciones.currentText())),
                 QtGui.QStandardItem(
                     str(self._widget.ListaMaquinas.currentText()))
             ]
             self.TablaInstrucciones_model.appendRow(self._comm)
Esempio n. 14
0
    def _import(self):
        print "import"
        array = pd.read_excel(self.gui.file_path,
                              index_col=[0]).values.tolist()

        if len(self.data_replay) > 0:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)
            msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
            msg.setText("Data is not empty!\n Force clear")
            retval = msg.exec_()
            if retval == QMessageBox.Cancel:
                return
            else:
                self.data_replay = []
                self.gui.listVeiw.clear()

        if isinstance(array, list):
            self.data_replay = array
            for i in range(0, len(self.data_replay)):
                self.gui.listView_add_item(i)

        pass
Esempio n. 15
0
 def errorPopup(self, title, e):
     msg_box = QMessageBox()
     msg_box.setWindowTitle(title)
     msg_box.setIcon(QMessageBox.Warning)
     msg_box.setText("%s"%e)
     msg_box.exec_()
Esempio n. 16
0
class RosPyPluginProvider(CompositePluginProvider):

    _master_found_signal = Signal(int)

    def __init__(self):
        super(RosPyPluginProvider, self).__init__(
            [RospkgPluginProvider('rqt_gui', 'rqt_gui_py::Plugin')])
        self.setObjectName('RosPyPluginProvider')
        self._node_initialized = False
        self._wait_for_master_dialog = None
        self._wait_for_master_thread = None

    def load(self, plugin_id, plugin_context):
        self._check_for_master()
        self._init_node()
        return super(RosPyPluginProvider, self).load(plugin_id, plugin_context)

    def _check_for_master(self):
        # check if master is available
        try:
            rospy.get_master().getSystemState()
            return
        except Exception:
            pass
        # spawn thread to detect when master becomes available
        self._wait_for_master_thread = threading.Thread(
            target=self._wait_for_master)
        self._wait_for_master_thread.start()
        self._wait_for_master_dialog = QMessageBox(
            QMessageBox.Question, self.tr('Waiting for ROS master'),
            self.
            tr("Could not find ROS master. Either start a 'roscore' or abort loading the plugin."
               ), QMessageBox.Abort)
        self._master_found_signal.connect(self._wait_for_master_dialog.done,
                                          Qt.QueuedConnection)
        button = self._wait_for_master_dialog.exec_()
        # check if master existence was not detected by background thread
        no_master = button != QMessageBox.Ok
        self._wait_for_master_dialog.deleteLater()
        self._wait_for_master_dialog = None
        if no_master:
            raise PluginLoadError(
                'RosPyPluginProvider._init_node() could not find ROS master')

    def _wait_for_master(self):
        while True:
            time.sleep(0.1)
            if not self._wait_for_master_dialog:
                break
            try:
                rospy.get_master().getSystemState()
            except Exception:
                continue
            self._master_found_signal.emit(QMessageBox.Ok)
            break

    def _init_node(self):
        # initialize node once
        if not self._node_initialized:
            name = 'rqt_gui_py_node_%d' % os.getpid()
            qDebug(
                'RosPyPluginProvider._init_node() initialize ROS node "%s"' %
                name)
            rospy.init_node(name, disable_signals=True)
            self._node_initialized = True
Esempio n. 17
0
def showMessage(msgText):
    msgBox = QMessageBox()
    msgBox.setText(msgText)
    msgBox.exec_()
class AnnotatorWidget(QWidget):
    """
    Annotator tool viewer
    """
    #name = 'Annotator'
    set_status_text = Signal(str)

    def __init__(self, context, bag_widget, publish_clock):
        super(AnnotatorWidget, self).__init__()
        rp = rospkg.RosPack()
        ui_file = os.path.join(rp.get_path('rqt_bag_meri_annotator'),
                               'resource', 'MeriPlugin.ui')
        loadUi(ui_file, self, {'AnnotatorGraphicsView': AnnotatorGraphicsView})
        self.setObjectName('AnnotatorWidget')
        self.setMouseTracking(True)
        self.annotation_data = list()
        self.interaction_time = 120.0

        self.bag_widget = bag_widget
        self.bagtimeline = self.bag_widget._timeline
        self._child_index = 0
        self.settings = QSettings("UFES", "MERI Annotator Widget")
        #self.settings.setValue("Last_child_index",self._child_index)

        self.instance = vlc.Instance()
        self.mediaplayer = self.instance.media_player_new()
        self.isPaused = False
        self.msgBox = QMessageBox()
        self.msgBox.setIcon(QMessageBox.Information)
        self.msgBox.setWindowTitle('Annotator Interface Information')
        self.msgBox.setStandardButtons(QMessageBox.Ok)

        self.BtnSaveJson.clicked.connect(self.BtnSaveJsonClicked)
        self.BtnLoadJson.clicked.connect(self.BtnLoadJsonClicked)
        self.BtnNext.clicked.connect(self.BtnNextClicked)
        self.BtnSetupBag.clicked.connect(self.BtnSetupBagClicked)
        self.BtnPrevious.clicked.connect(self.BtnPreviousClicked)
        self.BtnZero.clicked.connect(self.BtnZeroClicked)
        self.BtnOne.clicked.connect(self.BtnOneClicked)
        self.BtnTwo.clicked.connect(self.BtnTwoClicked)
        self.BtnAimLess.clicked.connect(self.BtnAimLessClicked)
        self.BtnGoalOriented.clicked.connect(self.BtnGoalOrientedClicked)
        self.BtnRobotStarted.clicked.connect(self.BtnRobotStartedClicked)
        self.BtnPointing.clicked.connect(self.BtnPointingClicked)
        self.BtnFollowLor.clicked.connect(self.BtnFollowLorClicked)
        self.BtnAdultSeek.clicked.connect(self.BtnAdultSeekClicked)
        self.BtnECTwC.clicked.connect(self.BtnECTwCClicked)
        self.BtnECTwR.clicked.connect(self.BtnECTwRClicked)
        self.BtnECTwT.clicked.connect(self.BtnECTwTClicked)
        self.BtnPlay.clicked.connect(self.BtnPlayClicked)
        self.BtnPause.clicked.connect(self.BtnPauseClicked)
        self.BtnStop.clicked.connect(self.BtnStopClicked)

        self.BtnPlay.setIcon(QIcon.fromTheme('media-playback-start'))
        self.BtnPause.setIcon(QIcon.fromTheme('media-playback-pause'))
        self.BtnLoadJson.setIcon(QIcon.fromTheme('document-open'))
        self.BtnSaveJson.setIcon(QIcon.fromTheme('document-save'))
        self.BtnStop.setIcon(QIcon.fromTheme('media-playback-stop'))
        self.BtnNext.setIcon(QIcon.fromTheme('go-next'))
        self.BtnSetupBag.setIcon(QIcon.fromTheme('document-properties'))
        self.BtnPrevious.setIcon(QIcon.fromTheme('go-previous'))

    def BtnSaveJsonClicked(self):
        if self.SpecialistName.text() == "":
            self.msgBox.setText(
                'Please register your name in the <html><b> Specialist_Name </b></html> box'
            )
            retval = self.msgBox.exec_()
        else:
            if len(self.annotation_data) == 0:
                self.msgBox.setText('No annotation has been recorded')
                retval = self.msgBox.exec_()
            else:
                annotationfile = [
                    self.SpecialistName.text() + "_annotation_" +
                    self._child_data[self._child_index]['ID'] + ".json"
                ]
                annotationfile_path = os.path.join(os.path.expanduser('~'),
                                                   'Documents',
                                                   'Annotation_files',
                                                   annotationfile[0])
                if os.path.exists(annotationfile_path):
                    self.msgBox.setText(
                        '<html><b>' + self.SpecialistName.text() +
                        '</b></html> already recorder annotations for child: <html><b>'
                        + self._child_data[self._child_index]['ID'] +
                        '</b></html>')
                    retval = self.msgBox.exec_()
                else:
                    with open(annotationfile_path, "w") as write_file:
                        json.dump(self.annotation_data, write_file)
                    self.msgBox.setText('Annotation File:  <html><b>' +
                                        annotationfile[0] +
                                        '</b></html> Saved!')
                    retval = self.msgBox.exec_()

    def BtnLoadJsonClicked(self):
        self._child_data = None
        json_path = self.settings.value("Last_path")
        if json_path == "":
            json_path = os.path.join(os.path.expanduser('~'), 'Documents')
        json_file = QFileDialog.getOpenFileName(self, "Open JSON File",
                                                json_path)
        self.settings.setValue("Last_path", json_file[0])
        with open(json_file[0]) as f:
            self._child_data = json.load(f)
        if self.settings.value("Last_child_index") is not None:
            self._child_index = int(self.settings.value("Last_child_index"))
        if self._child_index > len(self._child_data) - 1:
            self._child_index = 0
        self.LineChildId.setText(self._child_data[self._child_index]['ID'])
        self.msgBox.setText('Json Data of <html><b>' +
                            str(len(self._child_data)) +
                            '</b></html> Children were loaded')
        retval = self.msgBox.exec_()

    def BtnNextClicked(self):
        if self._child_index < len(self._child_data) - 1:
            self._child_index = self._child_index + 1
            self.LineChildId.setText(self._child_data[self._child_index]['ID'])
            self.settings.setValue("Last_child_index", self._child_index)

    def BtnPreviousClicked(self):
        if self._child_index > 0:
            self._child_index = self._child_index - 1
            self.LineChildId.setText(self._child_data[self._child_index]['ID'])
            self.settings.setValue("Last_child_index", self._child_index)

    def BtnSetupBagClicked(self):
        kinect2_a_bag_name = 'image_kinect2_a_' + self._child_data[
            self._child_index]['Kinect_a']
        kinect2_b_bag_name = 'image_kinect2_b_' + self._child_data[
            self._child_index]['Kinect_b']
        focus_bag_name = 'focus_data_' + self._child_data[
            self._child_index]['Focus']

        k2a_bag_file = os.path.join(os.path.expanduser('~'), "Documents",
                                    "hg_rosbag", "test_files",
                                    kinect2_a_bag_name)
        k2b_bag_file = os.path.join(os.path.expanduser('~'), "Documents",
                                    "hg_rosbag", "test_files",
                                    kinect2_b_bag_name)
        focus_bag_file = os.path.join(os.path.expanduser('~'), "Documents",
                                      "hg_rosbag", "test_files",
                                      focus_bag_name)

        self.bag_widget.load_bag(k2a_bag_file)
        self.bag_widget.load_bag(k2b_bag_file)
        #self.bag_widget.load_bag(focus_bag_file)

        audio_file_name = self._child_data[
            self._child_index]['Picture(jpg)/Audio(mp3)'] + '.mp3'
        audio_media_file = os.path.join(os.path.expanduser('~'), "Documents",
                                        "hg_rosbag", "audios", audio_file_name)
        self.OpenAudioMedia(audio_media_file)

        if self.checkCutBag.isChecked() == True:
            last_path = self.settings.value("Last_path")
            acronym_file = last_path[len(last_path) - 9:len(last_path) - 5]
            if acronym_file[0] == "s":
                config_name = ["cwa" + acronym_file + "_rs.json"]
            elif acronym_file[0] == "o":
                config_name = ["cw" + acronym_file + "_rs.json"]
            config_path = os.path.join(os.path.expanduser('~'), 'Documents',
                                       config_name[0])
            with open(config_path) as f:
                bag_config = json.load(f)

            if float(bag_config[self._child_index]
                     ['Sec']) > self.interaction_time:
                self.bagtimeline._timeline_frame._start_stamp = self.bagtimeline._timeline_frame._start_stamp + rospy.Duration.from_sec(
                    float(bag_config[self._child_index]['Sec']) -
                    self.interaction_time)
                self.annotation_data.append({
                    'key': 'Robot Started',
                    'time_stamp': 0,
                    'Sec': self.interaction_time
                })
            else:
                self.annotation_data.append({
                    'key':
                    'Robot Started',
                    'time_stamp':
                    0,
                    'Sec':
                    float(bag_config[self._child_index]['Sec'])
                })
            if (self.bagtimeline._timeline_frame._end_stamp -
                    self.bagtimeline._timeline_frame._start_stamp
                ) > rospy.Duration.from_sec(self.interaction_time * 2):
                self.bagtimeline._timeline_frame._end_stamp = self.bagtimeline._timeline_frame._start_stamp + rospy.Duration.from_sec(
                    self.interaction_time * 2)

    def BtnZeroClicked(self):
        task = self.ComBoxTask.currentText() + " 0 pts"
        self.AnnotationYamlCreator(task)

    def BtnOneClicked(self):
        task = self.ComBoxTask.currentText() + " 1 pts"
        self.AnnotationYamlCreator(task)

    def BtnTwoClicked(self):
        task = self.ComBoxTask.currentText() + " 2 pts"
        self.AnnotationYamlCreator(task)

    def BtnAimLessClicked(self):
        self.AnnotationYamlCreator('AimLess')

    def BtnGoalOrientedClicked(self):
        self.AnnotationYamlCreator('Goal Oriented')

    def BtnRobotStartedClicked(self):
        self.AnnotationYamlCreator('Robot Started')

    def BtnPointingClicked(self):
        self.AnnotationYamlCreator('Pointing')

    def BtnFollowLorClicked(self):
        self.AnnotationYamlCreator('Following LoR')

    def BtnAdultSeekClicked(self):
        self.AnnotationYamlCreator('AdultSeek')

    def BtnECTwCClicked(self):
        self.AnnotationYamlCreator('Eye Contact TwC')

    def BtnECTwRClicked(self):
        self.AnnotationYamlCreator('Eye Contact TwR')

    def BtnECTwTClicked(self):
        self.AnnotationYamlCreator('Eye Contact TwT')

    def BtnPlayClicked(self):
        self.bag_widget.play_button.setChecked(True)
        self.bag_widget.play_button.setIcon(self.bag_widget.pause_icon)
        self.bagtimeline.navigate_play()
        self.mediaplayer.play()

    def BtnPauseClicked(self):
        self.bag_widget.play_button.setChecked(False)
        self.bag_widget.play_button.setIcon(self.bag_widget.play_icon)
        self.bagtimeline.navigate_stop()
        self.mediaplayer.pause()

    def BtnStopClicked(self):
        self.bag_widget.play_button.setChecked(False)
        self.bag_widget.play_button.setIcon(self.bag_widget.play_icon)
        self.bagtimeline.navigate_stop()
        self.bagtimeline.navigate_start()
        self.mediaplayer.stop()

    def AnnotationYamlCreator(self, Annotation):
        playhead_time = self.bagtimeline._timeline_frame.playhead
        self.annotation_data.append({
            'key':
            Annotation,
            'time_stamp':
            playhead_time.to_nsec(),
            'Sec': (playhead_time -
                    self.bagtimeline._timeline_frame.start_stamp).to_sec()
        })

    def OpenAudioMedia(self, filename=None):
        """Open a media file in a MediaPlayer
          """
        self.media = self.instance.media_new(filename)
        # put the media in the media player
        self.mediaplayer.set_media(self.media)

    def shutdown_all(self):
        self.bagtimeline.handle_close()
        self.mediaplayer.stop()
        pass
Esempio n. 19
0
 def create_alert(alert_msg):
     alert = QMessageBox()
     alert.setText(alert_msg)
     alert.exec_()
Esempio n. 20
0
 def _no_support_warning(self):
     msg = QMessageBox()
     msg.setWindowTitle("Saving dataset...")
     msg.setIcon(QMessageBox.Critical)
     msg.setText("This format is not yet supported.")
     x = msg.exec_()