from copy import deepcopy import threading import time import numpy as np import pandas as pd import wx from gui.config import * # Tvoje wxFormBuilder a grafové komponenty from gui.design_autogenerated import MainWindow from gui.event_handlers.measuring_window import MeasuringDialogFinal from gui.fig_components.imu_series import ImuSeries from gui.fig_components.position_3d import Position3D # Tvoje NBus importy import traceback from modules.parsers.nbus_frame_parser import NbusFrameParser class MainFormFinal(MainWindow): def __init__(self, parent): super().__init__(parent) self._df = pd.DataFrame() # Inicializácia grafov self._figComponent_pos = Position3D(self.m_panel_pos) self._figComponent_imu = ImuSeries(self.m_panel_imu) # Predvolené/ukážkové dáta pri štarte (môžeš vymazať, ak nechceš) dev_x, dev_y, dev_z = ( np.array([10.0, 12.0, 11.0]), np.array([20.0, 21.0, 18.2]), np.array([30.0, 29.8, 32.2]), ) self._figComponent_pos.plot(dev_x, dev_y, dev_z) t = np.linspace(0, 10, 1000) a = np.sin(t) w = np.cos(t) self._figComponent_imu.plot_acc(t, a) self._figComponent_imu.plot_gyr(t, w) # Predpokladám, že v wxFormBuilderi máš tlačidlo napr. s ID self.m_button_start # Ak sa volá inak, uprav si názov tohto bindu: if hasattr(self, "m_button_start"): self.m_button_start.Bind(wx.EVT_BUTTON, self.on_start_streaming) def m_panel_posOnUpdateUI(self, event): self._figComponent_pos.on_resize_cb(event) self._figComponent_imu.on_resize_cb(event) def m_bpButton_newMeasurementOnButtonClick(self, event): self.m_bpButton_newMeasurement.Disable() dialog = MeasuringDialogFinal(self) dialog.ShowModal() self._df = dialog.GetDataFrame() parser = NbusFrameParser(self._df) ref_x, ref_y, ref_z = parser.get_pos_ref(1) pos1_x, pos1_y, pos1_z = parser.get_pos_end(1) acc_time, acc_x, acc_y, acc_z = parser.get_acc(1) gyr_time, gyr_x, gyr_y, gyr_z = parser.get_gyr(1) acc_time -= acc_time[0] gyr_time -= gyr_time[0] acc_mag_enmo = np.sqrt(acc_x**2 + acc_y**2 + acc_z**2) gyr_mag = np.sqrt(gyr_x**2 + gyr_y**2 + gyr_z**2) dev_x = np.mean(pos1_x - ref_x) dev_y = np.mean(pos1_y - ref_y) dev_z = np.mean(pos1_z - ref_z) self._figComponent_pos.clear() self._figComponent_pos.plot(dev_x, dev_y, dev_z) print(pos1_x - ref_x, pos1_y - ref_y, pos1_z - ref_z) self._figComponent_pos.update() self._figComponent_imu.clear() self._figComponent_imu.plot_acc(acc_time, acc_mag_enmo) self._figComponent_imu.plot_gyr(gyr_time, gyr_mag) self._figComponent_imu.update() wx.CallAfter(self.m_bpButton_newMeasurement.Enable)