Exemple #1
0
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget, self.tr('Open graph from file'), None,
                self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fh = open(file_name, 'rb')
            dotcode = fh.read()
            fh.close()
        except IOError:
            return

        # disable controls customizing fetched ROS graph
        self._widget.depth_combo_box.setEnabled(False)
        self._widget.directions_combo_box.setEnabled(False)
        self._widget.package_type_combo_box.setEnabled(False)
        self._widget.filter_line_edit.setEnabled(False)
        self._widget.with_stacks_check_box.setEnabled(False)
        self._widget.mark_check_box.setEnabled(False)
        self._widget.colorize_check_box.setEnabled(False)
        self._widget.hide_transitives_check_box.setEnabled(False)
        self._widget.show_system_check_box.setEnabled(False)

        self._update_graph(dotcode)
        self._redraw_graph_scene()
Exemple #2
0
    def _load_bag(self, file_name=None):
        self._topic_list = []
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget, self.tr('Open bag file'), None,
                self.tr('ROSbag file (*.bag)'))
            if file_name is None or file_name == '':
                return
        try:
            self._bag_filename = file_name
            bag = rosbag.Bag(file_name)
            topics = bag.get_type_and_topic_info()[1].keys()
            types = []
            for i in range(0, len(bag.get_type_and_topic_info()[1].values())):
                types.append(
                    list(bag.get_type_and_topic_info()[1].values())[i][0])

            for topic_name, topic_type in zip(topics, types):
                topic_item = self._recursive_create_widget_items(
                    self._widget.topics_tree_widget, topic_name, topic_type,
                    roslib.message.get_message_class(topic_type), False)

            self._widget.topics_tree_widget.header().setSectionResizeMode(
                QHeaderView.ResizeToContents)
            self._widget.topics_tree_widget.header().setStretchLastSection(
                True)

        except IOError:
            return
    def open(self):
        '''
        Deletes all current frames and instead loads an animation from a json file
        '''
        if len(self._widget.frameList) > 1:
            message = "This will discard your current Animation. Continue?"
            sure = QMessageBox.question(self._widget, 'Sure?', message, QMessageBox.Yes | QMessageBox.No)
            if sure == QMessageBox.No:
                return
        my_file = QFileDialog.getOpenFileName()[0]
        if my_file:
            status = self._recorder.load_animation(my_file)
            if status == "":
                status = "Load successful."
            self._widget.statusBar.showMessage(status)

        animstate = self._recorder.get_animation_state()
        for i in animstate:
            try:
                self._checkBoxesPower[i['name']] = i['torque']
            except KeyError:
                self._checkBoxesPower[i['name']] = {}
                for key in self.ids:
                    self._checkBoxesPower[i['name']][key] = 2



        self.update_frames()

        metadata = self._recorder.get_meta_data()

        self._widget.lineAnimationName.setText(metadata[0])
        self._widget.lineAuthor.setText(metadata[2])
        self._widget.lineVersion.setText(str(metadata[1]))
        self._widget.fieldDescription.setPlainText(metadata[3])
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fh = open(file_name, 'rb')
            dotcode = fh.read()
            fh.close()
        except IOError:
            return

        # disable controls customizing fetched ROS graph
        self._widget.depth_combo_box.setEnabled(False)
        self._widget.directions_combo_box.setEnabled(False)
        self._widget.package_type_combo_box.setEnabled(False)
        self._widget.filter_line_edit.setEnabled(False)
        self._widget.with_stacks_check_box.setEnabled(False)
        self._widget.mark_check_box.setEnabled(False)
        self._widget.colorize_check_box.setEnabled(False)
        self._widget.hide_transitives_check_box.setEnabled(False)

        self._update_graph(dotcode)
        self._redraw_graph_scene()
Exemple #5
0
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget, self.tr('Open graph from file'), None,
                self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fh = open(file_name, 'rb')
            dotcode = fh.read()
            fh.close()
        except IOError:
            return

        # disable controls customizing fetched ROS graph
        self._widget.graph_type_combo_box.setEnabled(False)
        self._widget.filter_line_edit.setEnabled(False)
        self._widget.topic_filter_line_edit.setEnabled(False)
        self._widget.namespace_cluster_spin_box.setEnabled(False)
        self._widget.actionlib_check_box.setEnabled(False)
        self._widget.dead_sinks_check_box.setEnabled(False)
        self._widget.leaf_topics_check_box.setEnabled(False)
        self._widget.quiet_check_box.setEnabled(False)
        self._widget.unreachable_check_box.setEnabled(False)
        self._widget.group_tf_check_box.setEnabled(False)
        self._widget.hide_tf_nodes_check_box.setEnabled(False)
        self._widget.group_image_check_box.setEnabled(False)
        self._widget.hide_dynamic_reconfigure_check_box.setEnabled(False)

        self._update_graph_view(dotcode)
 def btnClicked(self):
     '''
         a slot which is called when the button is clicked
     '''
     cwd = os.getcwd()  # current working directory
     fileTupel = QFileDialog.getOpenFileName(self, 'Select file', cwd,
                                             "Bag files (*.bag)")
     self.fileName = fileTupel[0]
     self.bagEdit.setText(self.fileName)  # print filename to lineEdit
 def btnClicked(self):
     tmp_path = os.path.join(os.path.expanduser('~'), "Documents",
                             "hg_rosbag", "test_files")
     filename = QFileDialog.getOpenFileName(self._annotator_widget,
                                            "Open File", tmp_path)
     bag = rosbag.Bag(filename[0])
     self._timeline.add_bag(bag)
     #self.OpenFile()
     print self._message_stamp
Exemple #8
0
    def _handle_load_clicked(self):
        filename = QFileDialog.getOpenFileName(
            self, self.tr('Load from File'), '.',
            self.tr('Bag files {.bag} (*.bag)'))

        if filename[0] != '':
            self.filename = filename[0]
            self.load_bag(filename[0])
            self._timeline.set_publishing_state(True)
Exemple #9
0
 def open_file_dialogue(self, path_to_open: os.path = None):
     if path_to_open is None:
         path_to_open = os.path.join(self.march_path, "ros2", "src",
                                     "gaits", "march_gait_files")
     return QFileDialog.getOpenFileName(
         self,
         "Select a subgait to import.",
         path_to_open,
         "March Subgait (*.subgait)",
     )
Exemple #10
0
    def load_FTS(self):
        # Start file dialog
        directory = os.path.join(rospkg.RosPack().get_path('rqt_simulation'),
                                 'config', 'FTS')
        File_dialog = QFileDialog(directory=directory, filter='.yaml')
        FTS_file = File_dialog.getOpenFileName()
        stream = file(FTS_file[0], 'r')
        data = yaml.load(stream)
        stream.close()

        # Load FTS
        self.region_of_interest = {}
        self.region_of_interest = data['FTS']
    def _import(self):
        file_path, _ = QFileDialog.getOpenFileName(self, self.tr('Import custom graph'),
                                                   None, self.tr('DOT graph (*.dot)'))

        if file_path is None or file_path == '':
            return

        custom_graph = Graph(self._dot_processor, file_path, file_path)
        self.decision_graphs[custom_graph.source] = custom_graph
        self._current_graph = custom_graph

        self.decision_graphs_combo_box.addItem(custom_graph.source)
        self.decision_graphs_combo_box.setCurrentIndex(self.decision_graphs_combo_box.findText(custom_graph.source))
Exemple #12
0
	def button_load_pressed(self):
		(name,filt) = QFileDialog.getOpenFileName(caption='Open Movement')

		if name:
			stream = open(name, 'r')

			try:
				with stream:
					self.loaded_movement = Movement(filename=name, movement=yaml.safe_load(stream))
			except yaml.YAMLError as e:
				rospy.logerr(e)

		self.update_display()
Exemple #13
0
 def load_graph(self):
     """Load a dot graph from a file."""
     ret = QFileDialog.getOpenFileName(self._widget, "Load graph",
                                       "untitled.dot",
                                       "Dot files (*.dot *.xdot)")
     if ret[0]:
         with open(ret[0], "r", encoding="utf8") as dotfile:
             self.filename = ret[0]
             self.graph = dotfile.read()
             self.refresh_graph(True)
             if self.subscription is not None:
                 self.subscription.destroy()
                 self.subscription = None
Exemple #14
0
    def _import(self):
        file_path, _ = QFileDialog.getOpenFileName(
            self, self.tr('Import custom graph'), None,
            self.tr('DOT graph (*.dot)'))

        if file_path is None or file_path == '':
            return

        custom_graph = Graph(self._dot_processor, file_path, file_path)
        self.decision_graphs[custom_graph.source] = custom_graph
        self._current_graph = custom_graph

        self.decision_graphs_combo_box.addItem(custom_graph.source)
        self.decision_graphs_combo_box.setCurrentIndex(
            self.decision_graphs_combo_box.findText(custom_graph.source))
Exemple #15
0
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget, self.tr('Open graph from file'), None,
                self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fhandle = open(file_name, 'rb')
            dotcode = fhandle.read()
            fhandle.close()
        except IOError:
            return

        self._update_graph_view(dotcode)
 def OpenFile(self, filename=None):
     """Open a media file in a MediaPlayer
       """
     if filename is None:
         tmp_path = os.path.join(os.path.expanduser('~'), "Documents",
                                 "hg_rosbag", "audios")
         filename = QFileDialog.getOpenFileName(self._annotator_widget,
                                                "Open File", tmp_path)
     if not filename:
         return
     # create the media
     print filename
     self.media = self.instance.media_new(filename[0])
     # put the media in the media player
     self.mediaplayer.set_media(self.media)
     self.mediaplayer.play()
Exemple #17
0
 def handle_select(self):
     # TODO(lucasw) have a parameter define which kind of dialog to use
     file_dir = self.current_line_edit.text()
     new_file_dir = None
     if self.mode == "file_save":
         new_file_dir, tmp = QFileDialog.getSaveFileName(caption="Select a save file",
                                                         directory=os.path.dirname(file_dir))
     elif self.mode == "file_open":
         new_file_dir, tmp = QFileDialog.getOpenFileName(caption="Select a file",
                                                         directory=os.path.dirname(file_dir))
     else:  # elif mode == "dir":
         new_file_dir = QFileDialog.getExistingDirectory(caption="Select a directory",
                                                         directory=os.path.dirname(file_dir))
     if new_file_dir is not None and new_file_dir != "":
         self.current_line_edit.setText(new_file_dir)
         self.publish()
Exemple #18
0
    def _on_import_perspective(self):
        file_name, _ = QFileDialog.getOpenFileName(
            self._menu_manager.menu, self.tr('Import perspective from file'),
            None, self.tr('Perspectives (*.perspective)'))
        if file_name is None or file_name == '':
            return

        perspective_name = os.path.basename(file_name)
        suffix = '.perspective'
        if perspective_name.endswith(suffix):
            perspective_name = perspective_name[:-len(suffix)]
        if perspective_name in self.perspectives:
            perspective_name = self._choose_new_perspective_name(False)
            if perspective_name is None:
                return

        self.import_perspective_from_file(file_name, perspective_name)
Exemple #19
0
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget,
                self.tr('Open graph from file'),
                None,
                self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fhandle = open(file_name, 'rb')
            dotcode = fhandle.read()
            fhandle.close()
        except IOError:
            return

        self._update_graph_view(dotcode)
 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_()
Exemple #21
0
    def import_gait(self):
        file_name, f = QFileDialog.getOpenFileName(
            self._widget, 'Open Image',
            os.getenv('HOME') + '/march_ws/src/gait-files/march_gait_files',
            'March Subgait (*.subgait)')

        gait = ModifiableSubgait.from_file(self, self.robot, file_name)
        if gait is None:
            rospy.logwarn('Could not load gait %s', file_name)
            return
        self.gait = gait
        self.load_gait_into_ui()

        self.gait_directory = '/'.join(file_name.split('/')[:-3])
        rospy.loginfo('Setting gait directory to %s', str(self.gait_directory))
        self.change_gait_directory_button.setText(self.gait_directory)

        # Clear undo and redo history
        self.joint_changed_history = RingBuffer(capacity=100, dtype=list)
        self.joint_changed_redo_list = RingBuffer(capacity=100, dtype=list)
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fh = open(file_name, 'rb')
            dotcode = fh.read()
            fh.close()
        except IOError:
            return

        # disable controls customizing fetched ROS graph
        self._widget.graph_type_combo_box.setEnabled(False)
        self._widget.filter_line_edit.setEnabled(False)
        self._widget.topic_filter_line_edit.setEnabled(False)
        self._widget.namespace_cluster_check_box.setEnabled(False)
        self._widget.actionlib_check_box.setEnabled(False)
        self._widget.dead_sinks_check_box.setEnabled(False)
        self._widget.leaf_topics_check_box.setEnabled(False)
        self._widget.quiet_check_box.setEnabled(False)

        self._update_graph_view(dotcode)
 def _handle_config_ref_button_clicked(self):
     rospack = rospkg.RosPack()
     fname = QFileDialog.getOpenFileName(self._widget, 'Open file', rospack.get_path('lgsvl_simulator_bridge')+'/config')
     self._widget.configpath_box.setText(fname[0])
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(
         self, self.tr('Load from File'), '.',
         self.tr('YAML file {.yaml} (*.yaml)'))
     if filename[0] != '':
         self.load_param(filename[0])
Exemple #25
0
    def _handle_load_clicked(self, checked):
        filename = QFileDialog.getOpenFileName(
            self, self.tr('Load from File'), '.',
            self.tr('rqt_console message file {.csv} (*.csv)'))
        if filename[0] != '':
            try:
                with open(filename[0], 'r') as h:
                    lines = h.read().splitlines()
            except IOError as e:
                qWarning(str(e))
                return False

            # extract column header
            columns = lines[0].split(';')
            if len(lines) < 2:
                return True

            # join wrapped lines
            rows = []
            last_wrapped = False
            for line in lines[1:]:
                # ignore empty lines
                if not line:
                    continue
                # check for quotes and remove them
                if line == '"':
                    has_prefix = not last_wrapped
                    has_suffix = last_wrapped
                    line = ''
                else:
                    has_prefix = line[0] == '"'
                    if has_prefix:
                        line = line[1:]
                    has_suffix = line[-1] == '"'
                    if has_suffix:
                        line = line[:-1]

                # ignore line without prefix if previous line was not wrapped
                if not has_prefix and not last_wrapped:
                    continue
                # remove wrapped line which is not continued on the next line
                if last_wrapped and has_prefix:
                    rows.pop()

                # add/append lines
                if last_wrapped:
                    rows[-1] += line
                else:
                    # add line without quote prefix
                    rows.append(line)

                last_wrapped = not has_suffix

            # generate message for each row
            messages = []
            skipped = []
            for row in rows:
                data = row.split('";"')
                msg = Message()
                msg.set_stamp_format('hh:mm:ss.ZZZ (yyyy-MM-dd)')
                for i, column in enumerate(columns):
                    value = data[i]
                    if column == 'message':
                        msg.message = value.replace('\\"', '"')
                    elif column == 'severity':
                        msg.severity = int(value)
                        if msg.severity not in Message.SEVERITY_LABELS:
                            skipped.append('Unknown severity value: %s' %
                                           value)
                            msg = None
                            break
                    elif column == 'stamp':
                        parts = value.split('.')
                        if len(parts) != 2:
                            skipped.append('Unknown timestamp format: %s' %
                                           value)
                            msg = None
                            break
                        msg.stamp = (int(parts[0]), int(parts[1]))
                    elif column == 'topics':
                        msg.topics = value.split(',')
                    elif column == 'node':
                        msg.node = value
                    elif column == 'location':
                        msg.location = value
                    else:
                        skipped.append('Unknown column: %s' % column)
                        msg = None
                        break
                if msg:
                    messages.append(msg)
            if skipped:
                qWarning(
                    'Skipped %d rows since they do not appear to be in rqt_console message file format:\n- %s'
                    % (len(skipped), '\n- '.join(skipped)))

            if messages:
                self._model.insert_rows(messages)

                self._handle_pause_clicked(True)

            return True

        else:
            qWarning(
                'File does not appear to be a rqt_console message file: missing file header.'
            )
            return False
 def _handle_config_ref_button_clicked(self):
     rospack = rospkg.RosPack()
     fname = QFileDialog.getOpenFileName(
         self._widget, 'Open file',
         rospack.get_path('lgsvl_simulator_bridge') + '/config')
     self._widget.configpath_box.setText(fname[0])
Exemple #27
0
class JointStatePublisherGui(QWidget):
    def __init__(self, title, jsp, num_rows=0):
        super(JointStatePublisherGui, self).__init__()
        font = QFont("Helvetica", 9, QFont.Bold)
        self.hlayout = QHBoxLayout(self)
        vlayout = QVBoxLayout()
        glayout = QGridLayout()
        right_l_lauout = QVBoxLayout()
        self.listVeiw = QListWidget()
        self.checkbox = []
        self.value_line_edit = []
        self.sliders = []
        self.positions = []
        self.progressbars = []

        self.value_last = []

        speed_max = enviromnt_conf['joint_speed']
        slider_max = speed_max * 1000

        position_max = enviromnt_conf['joint_max_position']
        progress_max = position_max * 1000

        #create joints widget
        for i in range(0, num_rows):
            if config[i][0]:
                g_in_g = QGridLayout()
                checkbox = QCheckBox(config[i][1])
                checkbox.setFont(font)

                self.checkbox.append(checkbox)

                value_line_edit = QLineEdit()
                value_line_edit.setFont(font)
                value_line_edit.setText("0.0")

                self.value_line_edit.append(value_line_edit)

                display_lable = QLabel()
                display_lable.setFont(font)
                display_lable.setText("Position:")

                position_label = QLabel()
                position_label.setFont(font)
                position_label.setText("0.0")

                self.positions.append(position_label)

                position_progress_bar = QProgressBar()
                position_progress_bar.setMaximum(progress_max)
                position_progress_bar.setMinimum(-progress_max)
                position_progress_bar.setValue(0)

                self.progressbars.append(position_progress_bar)

                slider = QSlider()
                slider.setMaximum(slider_max)
                slider.setMinimum(-slider_max)
                slider.setOrientation(Qt.Horizontal)
                slider.valueChanged.connect(self.slider_value_changed)
                self.sliders.append(slider)

                g_in_g.addWidget(checkbox, 0, 0)
                g_in_g.addWidget(value_line_edit, 0, 1)
                g_in_g.addWidget(display_lable, 0, 2)
                g_in_g.addWidget(position_label, 0, 3)
                g_in_g.addWidget(slider, 1, 0, 1, 2)
                g_in_g.addWidget(position_progress_bar, 1, 2, 1, 2)

                glayout.addLayout(g_in_g, i, 0)

        #create v layout
        self.import_Btn = QPushButton('Import')
        self.import_Btn.setFont(font)
        self.import_Btn.clicked.connect(self.import_Btn_clecked)

        self.export_Btn = QPushButton('Export')
        self.export_Btn.setFont(font)
        self.export_Btn.clicked.connect(self.export_Btn_clicked)

        self.start_Btn = QPushButton("Start")
        self.start_Btn.setFont(font)
        self.start_Btn.clicked.connect(self.start_Btn_clicked)

        self.reset_Btn = QPushButton('Reset')
        self.reset_Btn.setFont(font)
        self.reset_Btn.clicked.connect(self.reset_Btn_clicked)

        self.record_Btn = QPushButton('Record')
        self.record_Btn.setFont(font)
        self.record_Btn.clicked.connect(self.record_Btn_clicked)

        self.replay_Btn = QPushButton('Repaly')
        self.replay_Btn.setFont(font)
        self.replay_Btn.clicked.connect(self.replay_Btn_clicked)

        self.delete_Btn = QPushButton("Delete")
        self.delete_Btn.setFont(font)
        self.delete_Btn.clicked.connect(self.delete_Btn_clicked)

        self.debug_Btn = QPushButton("Debug")
        self.debug_Btn.setFont(font)
        self.debug_Btn.clicked.connect(self.debug_Btn_clicked)

        vlayout.addWidget(self.import_Btn)
        vlayout.addWidget(self.export_Btn)
        vlayout.addWidget(self.start_Btn)
        vlayout.addWidget(self.reset_Btn)
        vlayout.addWidget(self.record_Btn)
        vlayout.addWidget(self.delete_Btn)
        vlayout.addWidget(self.replay_Btn)
        vlayout.addWidget(self.debug_Btn)

        self.master_url = QLineEdit("http://192.168.0.91:11311")
        self.master_url.setFont(font)

        self.master_ip = QLineEdit("192.168.0.91")
        self.master_ip.setFont(font)

        self.listVeiw.clicked.connect(self.listVeiw_clicked)
        self.listVeiw.currentRowChanged.connect(
            self.listVeiw_itemSelectionChanged)

        self.description = QTextEdit("")
        self.description.setFont(font)

        #self.description.setGeometry(0,100,100,500)

        right_l_lauout.addWidget(self.master_url)
        right_l_lauout.addWidget(self.master_ip)
        right_l_lauout.addWidget(self.listVeiw)
        right_l_lauout.addWidget(self.description)

        right_l_lauout.setStretch(0, 1)
        right_l_lauout.setStretch(1, 1)
        right_l_lauout.setStretch(2, 3)
        right_l_lauout.setStretch(3, 1)

        self.num_rows = len(self.checkbox)
        self.hlayout.addLayout(glayout)
        self.hlayout.addLayout(vlayout)
        self.hlayout.addLayout(right_l_lauout)
        self.setLayout(self.hlayout)

        self.callback_start = None
        self.callback_pause = None
        self.callback_record = None
        self.callback_reset = None
        self.callback_replay = None
        self.callback_replay_stop = None
        self.callback_delete = None
        self.callback_debug = None
        self.callback_import = None
        self.callback_export = None
        self.callback_list_clicked = None

        self.listVeiw_isClicked = False
        self.listVeiw_current_item = 0
        self.listVeiw_len = 0
        self.f = QFileDialog()

    def who_data_changed(self):
        for i in range(0, self.num_rows):
            value_last = self.value_line_edit[i].text()
            value_last = float(value_last) * 1000
            value = self.sliders[i].value()
            if value != value_last:
                return i

    def change_line_edit(self, change_index):
        value = self.sliders[change_index].value()
        value = float(value) / 1000
        value = str(value)
        self.value_line_edit[change_index].setText(value)

    def change_position_edit(self, change_index):
        value = self.progressbars[change_index].value()
        value += self.sliders[change_index].value()
        self.progressbars[change_index].setValue(value)

        self.positions[change_index].setText(str(float(value) / 1000))

    def reset_speed(self, change_index):
        self.sliders[change_index].setValue(0)

    def reset_speed_all(self):
        for i in range(0, self.num_rows):
            self.reset_speed(i)

    def set_speed(self, index, data):
        self.sliders[index].setValue(data)

    def import_Btn_clecked(self):
        self.file_path = self.f.getOpenFileName(caption='Import excel data',
                                                directory='',
                                                filter='*.xlsx',
                                                initialFilter='')
        self.file_path = self.file_path[0]
        if self.callback_import:
            self.callback_import()
        pass

    def export_Btn_clicked(self):
        self.file_path = self.f.getSaveFileName(caption='Save as excel data',
                                                directory='',
                                                filter='*.xlsx',
                                                initialFilter='')
        self.file_path = self.file_path[0]
        if self.callback_export:
            self.callback_export()
        pass

    def set_callback_start(self, func):
        self.callback_start = func

    def start_Btn_clicked(self):
        if self.start_Btn.text() == "Start":
            if self.callback_start:
                self.callback_start()
            self.start_Btn.setText("Pause")
        else:
            if self.callback_pause:
                self.callback_pause()
            self.start_Btn.setText("Start")

    def reset_Btn_clicked(self):
        self.reset_speed_all()
        self.reset_postion_all()

        if self.callback_reset:
            self.callback_reset()

    def replay_Btn_clicked(self):
        if self.replay_Btn.text() == "Replay":
            self.replay_Btn.setText("Stop")
            if self.callback_replay:
                self.callback_replay()
        else:
            self.replay_Btn.setText("Replay")
            if self.callback_replay_stop:
                self.callback_replay_stop()

    def debug_Btn_clicked(self):
        if self.callback_debug:
            self.callback_debug()

    def record_Btn_clicked(self):
        self.set_postion()
        self.listVeiw_len += 1
        if self.callback_record:
            self.callback_record()
        self.reset_speed_all()

    def listVeiw_itemSelectionChanged(self, index):
        self.listVeiw_isClicked = True
        self.listVeiw_current_item = index
        if self.callback_list_clicked:
            self.callback_list_clicked()

    def listVeiw_clicked(self, index):
        #print "index", index.row()
        if self.listVeiw_current_item != index.row():
            description_text = self.description.toPlainText()
            #self.listVeiw.item(self.listVeiw_current_item).setData(1,"123")
            #print self.listVeiw.item(self.listVeiw_current_item).data
        self.listVeiw_isClicked = True
        self.listVeiw_current_item = index.row()
        if self.callback_list_clicked:
            self.callback_list_clicked()

    def update_listView(self):
        print "update", self.listVeiw_len
        for i in range(0, self.listVeiw_len):
            view = self.listVeiw.item(i)
            view.setText(str(i))

    def get_listVeiw_current_item(self):
        return self.listVeiw_current_item

    def delete_Btn_clicked(self):
        if self.listVeiw_isClicked:
            print self.listVeiw_current_item
            self.listVeiw.removeItemWidget(
                self.listVeiw.takeItem(self.listVeiw_current_item))
            self.listVeiw_len -= 1
            if self.listVeiw_current_item != self.listVeiw_len:
                self.update_listView()
            if self.callback_delete:
                self.callback_delete()
            if self.listVeiw_current_item == 0:
                self.listVeiw_current_item = 0
            else:
                self.listVeiw_current_item -= 1

            self.listVeiw.setCurrentRow(self.listVeiw_current_item)
            if self.listVeiw_len == 0:
                self.listVeiw_isClicked = False

    def listView_add_item(self, index):
        self.listVeiw.addItem(str(index))

    def listView_inset_item(self, index, label):
        self.listVeiw.insertItem(index, str(label))

    def slider_value_changed(self, data):
        change_index = self.who_data_changed()
        self.change_line_edit(change_index)

    def get_speed(self):
        speed = []
        for i in range(0, self.num_rows):
            value = self.sliders[i].value()
            value = float(value) / 1000
            speed.append(value)
        return speed

    def get_position(self):
        position = []
        for i in range(0, self.num_rows):
            value = self.progressbars[i].value()
            value += self.sliders[i].value()
            value = float(value) / 1000
            position.append(value)
        return position

    def set_postion(self):
        for i in range(0, self.num_rows):
            self.change_position_edit(i)

    def set_positions(self, data):
        print len(data)
        for i in range(0, len(data)):
            self.progressbars[i].setValue(data[i] * 1000)
            self.positions[i].setText(str(data[i]))

    def reset_position(self, change_index):
        value = 0
        self.progressbars[change_index].setValue(value)

        self.positions[change_index].setText(str(float(value) / 1000))

    def reset_postion_all(self):
        for i in range(0, self.num_rows):
            self.reset_position(i)
 def open_file_dialogue(self):
     return QFileDialog.getOpenFileName(self,
                                        'Open Image',
                                        os.getenv('HOME') + '/march_ws/src/gait-files/march_gait_files',
                                        'March Subgait (*.subgait)')
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)'))
     if filename[0] != '':
         self.load_bag(filename[0])
Exemple #30
0
 def loadDatabase(self, unused=None):
     # Load database
     filename = QFileDialog.getOpenFileName(self.widget, caption="Load track database", filter="*.tracks", directory=self.defaultDatabaseDirectory)[0]
     self.loadGivenDatabase(filename)
    def _handle_load_clicked(self, checked):
        filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('rqt_console message file {.csv} (*.csv)'))
        if filename[0] != '':
            try:
                with open(filename[0], 'r') as h:
                    lines = h.read().splitlines()
            except IOError as e:
                qWarning(str(e))
                return False

            # extract column header
            columns = lines[0].split(';')
            if len(lines) < 2:
                return True

            # join wrapped lines
            rows = []
            last_wrapped = False
            for line in lines[1:]:
                # ignore empty lines
                if not line:
                    continue
                # check for quotes and remove them
                if line == '"':
                    has_prefix = not last_wrapped
                    has_suffix = last_wrapped
                    line = ''
                else:
                    has_prefix = line[0] == '"'
                    if has_prefix:
                        line = line[1:]
                    has_suffix = line[-1] == '"'
                    if has_suffix:
                        line = line[:-1]

                # ignore line without prefix if previous line was not wrapped
                if not has_prefix and not last_wrapped:
                    continue
                # remove wrapped line which is not continued on the next line
                if last_wrapped and has_prefix:
                    rows.pop()

                # add/append lines
                if last_wrapped:
                    rows[-1] += line
                else:
                    # add line without quote prefix
                    rows.append(line)

                last_wrapped = not has_suffix

            # generate message for each row
            messages = []
            skipped = []
            for row in rows:
                data = row.split('";"')
                msg = Message()
                msg.set_stamp_format('hh:mm:ss.ZZZ (yyyy-MM-dd)')
                for i, column in enumerate(columns):
                    value = data[i]
                    if column == 'message':
                        msg.message = value.replace('\\"', '"')
                    elif column == 'severity':
                        msg.severity = int(value)
                        if msg.severity not in Message.SEVERITY_LABELS:
                            skipped.append('Unknown severity value: %s' % value)
                            msg = None
                            break
                    elif column == 'stamp':
                        parts = value.split('.')
                        if len(parts) != 2:
                            skipped.append('Unknown timestamp format: %s' % value)
                            msg = None
                            break
                        msg.stamp = (int(parts[0]), int(parts[1]))
                    elif column == 'topics':
                        msg.topics = value.split(',')
                    elif column == 'node':
                        msg.node = value
                    elif column == 'location':
                        msg.location = value
                    else:
                        skipped.append('Unknown column: %s' % column)
                        msg = None
                        break
                if msg:
                    messages.append(msg)
            if skipped:
                qWarning('Skipped %d rows since they do not appear to be in rqt_console message file format:\n- %s' % (len(skipped), '\n- '.join(skipped)))

            if messages:
                self._model.insert_rows(messages)

                self._handle_pause_clicked(True)

            return True

        else:
            qWarning('File does not appear to be a rqt_console message file: missing file header.')
            return False
Exemple #32
0
    def load_scenario(self):
        # Start file dialog GUI
        directory = os.path.join(rospkg.RosPack().get_path('rqt_simulation'),
                                 'config', 'FTS')
        File_dialog = QFileDialog(directory=directory, filter='.yaml')
        scenario_file = File_dialog.getOpenFileName()
        try:
            stream = file(scenario_file[0], 'r')
        except:
            print('In file ' + self.filename + ' at line ' +
                  str(self.cf.f_lineno) + ': Error no valid scenario file')
            return False

        data = yaml.load(stream)

        # Remove all robots
        for i in range(0, len(self.tab_list) - 1):
            self.remove_robot()

        # Reset map
        self.reset()

        # Load map
        self.world_comboBox.setCurrentIndex(
            self.world_comboBox.findText(data['Map']))

        # Load FTS
        # Sort the keys is needed for the edge matrix in the map_dialog
        self.FTS.region_of_interest = data['FTS']
        sorted_keys = self.FTS.region_of_interest.keys()
        sorted_keys.sort()
        stream.close()

        self.scenario_file = scenario_file[0]

        self.current_graphicsScene.load_graphic_from_FTS(self.FTS)

        # Load robot tabs
        robot_tabs = data['Tasks']

        for i in range(0, len(self.FTS.region_of_interest)):
            self.tab_list[self.num_robots - 1].robot_comboBox_init.addItem(
                self.FTS.region_of_interest.keys()[i])
        self.tab_list[self.num_robots - 1].robot_comboBox_init.model().sort(0)

        for i in range(0, len(robot_tabs)):
            if i > 0:
                self.add_robot()
            self.tab_list[i].robot_name_input.setText(robot_tabs.keys()[i])
            self.tab_list[i].robot_comboBox.setCurrentIndex(
                self.tab_list[i].robot_comboBox.findText(
                    robot_tabs[robot_tabs.keys()[i]]['robot_model']))
            self.tab_list[i].robot_comboBox_init.setCurrentIndex(
                self.tab_list[i].robot_comboBox_init.findText(
                    robot_tabs[robot_tabs.keys()[i]]['initial_pose']))
            self.tab_list[i].initial_pose[
                'start_' +
                str(i + 1).zfill(2)]['pose'] = self.FTS.region_of_interest[
                    self.tab_list[i].robot_comboBox_init.currentText()]['pose']
            self.tab_list[i].initial_pose['start_' + str(i + 1).zfill(2)][
                'label'] = self.tab_list[i].robot_comboBox_init.currentText()
            if robot_tabs[robot_tabs.keys()[i]]['use_qualisys']:
                self.tab_list[i].robot_localization_checkBox.setCheckState(
                    Qt.Checked)
            self.tab_list[i].robot_hard_task_input.setText(
                robot_tabs[robot_tabs.keys()[i]]['tasks']['hard_task'])
            self.tab_list[i].robot_soft_task_input.setText(
                robot_tabs[robot_tabs.keys()[i]]['tasks']['soft_task'])

        self.button_execute_task.setEnabled(True)
Exemple #33
0
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(
         self, self.tr('Load from File'), '.',
         self.tr('Bag files {.bag} (*.bag)'))
     if filename[0] != '':
         self.load_bag(filename[0])
Exemple #34
0
 def _openfile_clicked(self, checked):
     (fname,
      ffilter) = QFileDialog.getOpenFileName(self, "Open roboasm", "/tmp",
                                             "roboasm Files (*.roboasm.l)")
     print fname
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(
             self, self.tr('Load from File'), '.',
             self.tr('YAML file {.yaml} (*.yaml)'))
     if filename[0] != '':
         self.load_param(filename[0])