diff --git a/gui/imitator.py b/gui/imitator.py new file mode 100644 index 0000000..5547399 --- /dev/null +++ b/gui/imitator.py @@ -0,0 +1,48 @@ +from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QPushButton +from PyQt5.QtCore import QTimer, Qt +import time + +class Imitator(QWidget): + def __init__(self, updateData, world_coord, axis_coord, command_count): + super().__init__() + + self.world_coord = world_coord + self.axis_coord = axis_coord + self.command_count = command_count + + self.updateData = updateData + + # Инициализация пользовательского интерфейса + self.initUI() + + def initUI(self): + self.layout = QVBoxLayout() + self.setLayout(self.layout) + + self.wLabel = QLabel(f'Мировые координаты {self.world_coord()}') + self.aLabel = QLabel(f'Поворот осей {self.axis_coord()}') + self.cLabel = QLabel(f'Количество команд в стеке {self.command_count()}') + + for l in [self.wLabel, self.aLabel, self.cLabel]: + l.setWordWrap(True) + self.layout.addWidget(l) + + self.updButton = QPushButton('Обновить данные') + self.updButton.clicked.connect(self.updateState) + self.layout.addWidget(self.updButton) + + + + def paintEvent(self, event): + # Установка цвета фона + self.setAutoFillBackground(True) + p = self.palette() + p.setColor(self.backgroundRole(), Qt.lightGray) + self.setPalette(p) + + def updateState(self): + self.updateData() + time.sleep(1) + self.wLabel.setText(f'Мировые координаты {self.world_coord()}') + self.aLabel.setText(f'Поворот осей {self.axis_coord()}') + self.cLabel.setText(f'Количество команд в стеке {self.command_count()}') diff --git a/gui/init.py b/gui/init.py index 23e8288..695aaa5 100644 --- a/gui/init.py +++ b/gui/init.py @@ -4,6 +4,8 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor, QPalette from gui.robot import ChangeRobot from gui.status import Status +from gui.imitator import Imitator + class RightPanel(QWidget): def __init__(self, panels): @@ -21,6 +23,7 @@ class RightPanel(QWidget): self.setAutoFillBackground(True) self.setPalette(palette) + class MainPanel(QWidget): def __init__(self): super().__init__() @@ -32,6 +35,7 @@ class MainPanel(QWidget): self.setAutoFillBackground(True) self.setPalette(palette) + class MainContentComponent(QWidget): def __init__(self, **kwargs): super().__init__() @@ -40,7 +44,15 @@ class MainContentComponent(QWidget): robotPanel = ChangeRobot(**robotArgs) statusArgs = kwargs.get("statusPanel", {}) statusPanel = Status(**statusArgs) - self.rightPanel = RightPanel(panels=[robotPanel, statusPanel]) + imitatorArgs = kwargs.get("imitatorPanel", {}) + imitatorPanel = Imitator(**imitatorArgs) + self.rightPanel = RightPanel( + panels=[ + robotPanel, + statusPanel, + imitatorPanel + ] + ) self.mainPanel = MainPanel() layout = QHBoxLayout() @@ -62,11 +74,11 @@ class MainContentComponent(QWidget): self.rightPanel.setFixedWidth(rightPanelWidth) super().resizeEvent(event) -if __name__ == '__main__': + +if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainContentComponent( - robotPanel={'arg1': 'value1'}, - statusPanel={'arg1': 'value1'} + robotPanel={"arg1": "value1"}, statusPanel={"arg1": "value1"} ) mainWindow.show() sys.exit(app.exec_()) diff --git a/main.py b/main.py index acecd76..bc908b2 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,7 @@ from PyQt5.QtWidgets import QApplication from robot.client_socket import SocketRobotArm from gui.init import MainContentComponent + class MyApp: with open("./robots.json", "r") as file: robots = json.load(file) @@ -19,10 +20,10 @@ class MyApp: return self.robot_app.get_status() else: return self.def_robot_status() - + def def_robot_status(self): return SocketRobotArm.Status[1] - + def startGui(self): app = QApplication(sys.argv) mainWindow = MainContentComponent( @@ -33,7 +34,13 @@ class MyApp: }, statusPanel={ "status": self.get_status, - } + }, + imitatorPanel={ + "world_coord": self.robot_app.get_world_coordinates, + "axis_coord": self.robot_app.get_axis_coordinates, + "command_count": self.robot_app.get_command_count, + "updateData": self.robot_app.upd_model, + }, ) mainWindow.setWindowTitle("ROBOT GUI") mainWindow.show() @@ -47,12 +54,14 @@ class MyApp: if robot in self.robots: selected_robot = robot selected_robot = {"name": "test", "host": "127.0.0.1", "slave_id": 11} - + if self.robot_app.status == "connected": self.robot_app.close() time.sleep(0.3) else: - self.robot_app.connect(selected_robot["host"], selected_robot["slave_id"]) + self.robot_app.connect( + selected_robot["host"], selected_robot["slave_id"] + ) if __name__ == "__main__": diff --git a/robot/client_socket.py b/robot/client_socket.py index 25f7809..f8f836f 100644 --- a/robot/client_socket.py +++ b/robot/client_socket.py @@ -29,6 +29,10 @@ class SocketRobotArm: pass_size = 4 Status = Literal["connected", "not_connected", "error"] + start_axis_coordinates = [] + start_world_coordinates = [] + remote_command_count = [] + def __init__(self, *args, **kwargs): self.socket = None self.host = None @@ -85,13 +89,13 @@ class SocketRobotArm: time.sleep(0.5) self.set_joint(self.convert_to_joint(self.start_world_coordinates[0:3])) - def cycle_base(self): - self.upd_model() - - self.get_command_count() + self._get_command_count() self.set_text(text=f"Команд в очереди {self.remote_command_count}") time.sleep(0.5) + def cycle_base(self): + self.upd_model() + self.send_data(self.set_global_speed()) self.set_text(text=f"Установили глобальную скорость {self.global_speed}") time.sleep(0.5) @@ -184,6 +188,9 @@ class SocketRobotArm: self.start_axis_coordinates = [float(i) for i in axis_coord_raw] print("start_axis_coordinates", self.start_axis_coordinates) + def get_axis_coordinates(self): + return self.start_axis_coordinates + def get_world(self): world_coord_raw = self.send_data( make_query_data( @@ -193,11 +200,17 @@ class SocketRobotArm: self.start_world_coordinates = [float(i) for i in world_coord_raw] print("start_world_coordinates", self.start_world_coordinates) - def get_command_count(self): + def get_world_coordinates(self): + return self.start_world_coordinates + + def _get_command_count(self): res = self.send_data(make_query_data(["RemoteCmdLen"])) self.remote_command_count = res print(res) + def get_command_count(self): + return self.remote_command_count + def set_global_speed(self): # Изменили глобальную скорость на global_speed% return make_command_data(["modifyGSPD", str(self.global_speed * 10)])