Exemple #1
0
    def __init__(self, copter, settings, widget_3d, plotter, graphics_widget):
        self.graphics_widget = graphics_widget
        if not settings:
            self.settings = json_serializer.readfile(__settings_file__)
            self.settings.graphics_enabled = False
        else:
            self.settings = settings
        if not isinstance(copter, Copter):
            self.copter = json_serializer.readfile(self.settings.current_copter)
        else:
            self.copter = copter

        self._set_start_state_to_copter()

        self.stop_event = multiprocessing.Event()
        self.running_event = multiprocessing.Event()
        self.graphics_event = multiprocessing.Event()
        self.em_stopped_event = multiprocessing.Event()
        self.contr_stopped_event = multiprocessing.Event()
        emulator_out, emulator_in = multiprocessing.Pipe(duplex=False)
        controller_out, controller_in = multiprocessing.Pipe(duplex=False)
        logger_out, logger_in = multiprocessing.Pipe(duplex=False)
        graphics_out, graphics_in = multiprocessing.Pipe(duplex=False)
        self.emulator_in = emulator_in
        self.controller_in = controller_in
        self.logger_in = logger_in
        self.controller_proc = multiprocessing.Process(
            target=controller_process,
            args=(copter, settings, controller_out, emulator_in,
                  self.stop_event, self.running_event,
                  self.em_stopped_event, self.contr_stopped_event, )
        )
        self.emulator_proc = multiprocessing.Process(
            target=emulator_process,
            args=(copter, settings, emulator_out, controller_in, logger_in, graphics_in,
                  self.stop_event, self.running_event, self.graphics_event,
                  self.em_stopped_event, self.contr_stopped_event, )
        )
        self.logger_proc = multiprocessing.Process(
            target=logger_process,
            args=(copter, settings, logger_out, self.stop_event, self.running_event, self.em_stopped_event, )
        )
        if self.settings.graphics_enabled:
            self.update_event = multiprocessing.Event()
            widget_3d.update_event = self.update_event
            self.graphics_thread = threading.Thread(
                target=graphics_thread,
                args=(widget_3d, plotter, settings, graphics_out,
                      self.stop_event, self.running_event, self.graphics_event,
                      self.update_event, self.em_stopped_event, )
            )
        self.stop_signal = threading.Thread(
            target=stop_signal,
            args=(self, self.stop_event, )
        )
        self.simulation_running = False
        self.simulation_paused = False
        return
Exemple #2
0
 def load_log(log_name, window):
     log_file = open(log_name, 'r')
     header = log_file.readline()
     header = json.loads(header)
     window.copter_name = header[0]
     window.num_of_engines = header[1]
     current_copter = header[2]
     window.settings.current_copter = current_copter
     window.copter = json_serializer.readfile(current_copter)
     window.dest_pos = numpy.array(header[3])
     window.dest_q = Quaternion(header[4])
     window.settings.ground_level = header[5]
     info_start = log_file.tell()
     num_of_states = 0
     for line in log_file:
         num_of_states += 1
     states = numpy.ndarray([7 + header[1], num_of_states], dtype=object)
     log_file.seek(info_start, 0)
     state_counter = 0
     for line in log_file:
         state_list = json.loads(line)
         states[0, state_counter] = state_list[0]
         states[1, state_counter] = state_list[1]
         states[2, state_counter] = state_list[2]
         states[3, state_counter] = state_list[3]
         states[4, state_counter] = state_list[4]
         states[5, state_counter] = state_list[5]
         states[6, state_counter] = state_list[6]
         counter = 7
         for i in range(header[1]):
             states[counter, state_counter] = state_list[counter]
             counter += 1
         state_counter += 1
     log_file.close()
     return states
 def _init_gui(self):
     self.setWindowTitle('Copter flight simulator')
     self._init_size()
     self._center_window()
     self.setWindowIcon(QIcon(__icon_dir__ + 'icon.png'))
     self._init_mainmenu()
     self._init_toolbar()
     try:
         self.settings = Settings.load()
     except FileNotFoundError:
         self.settings = Settings()
         self.settings.save()
     finally:
         if os.path.isfile(self.settings.current_copter):
             self.copter = json_serializer.readfile(
                 self.settings.current_copter)
             self._init_copter_settings()
             save_as_act = self.findChild(QAction, "save_as_menu")
             save_as_act.setEnabled(True)
         else:
             self.copter_settings = None
             self.sim_settings = None
             self.simulation = None
             self._disable_toolbar()
         self.statusBar().showMessage('Ready')
         self.show()
     return
Exemple #4
0
 def current_copter(self, value):
     self._current_copter = value
     if os.path.isfile(self._current_copter):
         copter = json_serializer.readfile(self._current_copter)
         self.start_state = CopterState(copter)
         self.log_file = main_window.__logs_dir__ + copter.name + '_log.log'
         for i in range(copter.num_of_engines):
             self.start_state.engines_state[
                 i].rotation_dir = copter.engines[i].rotation_dir
     return
 def _open_copter(self):
     dialog = QFileDialog()
     dialog.setNameFilters(["JSON files (*.json)", "All Files (*)"])
     dialog.selectNameFilter("JSON files (*.json)")
     dialog.setDirectory(os.path.dirname(__copter_dir__))
     _open = dialog.exec_()
     if _open:
         copter_file = dialog.selectedFiles()
         self.copter = json_serializer.readfile(copter_file[0])
         self.settings.current_copter = copter_file[0]
         self.settings.hover_mod_on_start = False
         self.settings.save()
         self._init_copter_settings()
         self._enable_toolbar()
         save_as_act = self.findChild(QAction, "save_as_menu")
         save_as_act.setEnabled(True)
     return
 def _unsaved_changes(self):
     save_btn = self.findChild(QAction, "save_copter_tlb")
     if save_btn.isEnabled():
         save_msg = "You have unsaved changes in '{0}'.\n" \
                    "Leaving this window will reduce them.\n" \
                    "Save '{0}' now?".format(self.copter.name)
         reply = QMessageBox.question(self, 'Message', save_msg,
                                      QMessageBox.Yes, QMessageBox.No)
         if reply == QMessageBox.Yes:
             self._save_copter()
         else:
             self.copter = json_serializer.readfile(
                 self.settings.current_copter)
             self._init_copter_settings()
         save_btn = self.findChild(QAction, "save_copter_tlb")
         save_btn.setEnabled(False)
         save_menu = self.findChild(QAction, "save_act_menu")
         save_menu.setEnabled(False)
     return
Exemple #7
0
 def load():
     return json_serializer.readfile(main_window.__settings_path__)