main_form.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from copy import deepcopy
  2. import threading
  3. import time
  4. import numpy as np
  5. import pandas as pd
  6. import wx
  7. from gui.config import *
  8. # Tvoje wxFormBuilder a grafové komponenty
  9. from gui.design_autogenerated import MainWindow
  10. from gui.event_handlers.measuring_window import MeasuringDialogFinal
  11. from gui.fig_components.imu_series import ImuSeries
  12. from gui.fig_components.position_3d import Position3D
  13. # Tvoje NBus importy
  14. import traceback
  15. from modules.parsers.nbus_frame_parser import NbusFrameParser
  16. class MainFormFinal(MainWindow):
  17. def __init__(self, parent):
  18. super().__init__(parent)
  19. self._df = pd.DataFrame()
  20. # Inicializácia grafov
  21. self._figComponent_pos = Position3D(self.m_panel_pos)
  22. self._figComponent_imu = ImuSeries(self.m_panel_imu)
  23. # Predvolené/ukážkové dáta pri štarte (môžeš vymazať, ak nechceš)
  24. dev_x, dev_y, dev_z = (
  25. np.array([10.0, 12.0, 11.0]),
  26. np.array([20.0, 21.0, 18.2]),
  27. np.array([30.0, 29.8, 32.2]),
  28. )
  29. self._figComponent_pos.plot(dev_x, dev_y, dev_z)
  30. t = np.linspace(0, 10, 1000)
  31. a = np.sin(t)
  32. w = np.cos(t)
  33. self._figComponent_imu.plot_acc(t, a)
  34. self._figComponent_imu.plot_gyr(t, w)
  35. # Predpokladám, že v wxFormBuilderi máš tlačidlo napr. s ID self.m_button_start
  36. # Ak sa volá inak, uprav si názov tohto bindu:
  37. if hasattr(self, "m_button_start"):
  38. self.m_button_start.Bind(wx.EVT_BUTTON, self.on_start_streaming)
  39. def m_panel_posOnUpdateUI(self, event):
  40. self._figComponent_pos.on_resize_cb(event)
  41. self._figComponent_imu.on_resize_cb(event)
  42. def m_bpButton_newMeasurementOnButtonClick(self, event):
  43. self.m_bpButton_newMeasurement.Disable()
  44. dialog = MeasuringDialogFinal(self)
  45. dialog.ShowModal()
  46. self._df = dialog.GetDataFrame()
  47. parser = NbusFrameParser(self._df)
  48. ref_x, ref_y, ref_z = parser.get_pos_ref(1)
  49. pos1_x, pos1_y, pos1_z = parser.get_pos_end(1)
  50. acc_time, acc_x, acc_y, acc_z = parser.get_acc(1)
  51. gyr_time, gyr_x, gyr_y, gyr_z = parser.get_gyr(1)
  52. acc_time -= acc_time[0]
  53. gyr_time -= gyr_time[0]
  54. acc_mag_enmo = np.sqrt(acc_x**2 + acc_y**2 + acc_z**2)
  55. gyr_mag = np.sqrt(gyr_x**2 + gyr_y**2 + gyr_z**2)
  56. dev_x = np.mean(pos1_x - ref_x)
  57. dev_y = np.mean(pos1_y - ref_y)
  58. dev_z = np.mean(pos1_z - ref_z)
  59. self._figComponent_pos.clear()
  60. self._figComponent_pos.plot(dev_x, dev_y, dev_z)
  61. print(pos1_x - ref_x, pos1_y - ref_y, pos1_z - ref_z)
  62. self._figComponent_pos.update()
  63. self._figComponent_imu.clear()
  64. self._figComponent_imu.plot_acc(acc_time, acc_mag_enmo)
  65. self._figComponent_imu.plot_gyr(gyr_time, gyr_mag)
  66. self._figComponent_imu.update()
  67. wx.CallAfter(self.m_bpButton_newMeasurement.Enable)