imitator tab

This commit is contained in:
Kseninia Mikhaylova 2024-10-15 16:55:07 +03:00
parent a35ef4a153
commit ccc97c6529
4 changed files with 96 additions and 14 deletions

48
gui/imitator.py Normal file
View File

@ -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()}')

View File

@ -4,6 +4,8 @@ from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QPalette from PyQt5.QtGui import QColor, QPalette
from gui.robot import ChangeRobot from gui.robot import ChangeRobot
from gui.status import Status from gui.status import Status
from gui.imitator import Imitator
class RightPanel(QWidget): class RightPanel(QWidget):
def __init__(self, panels): def __init__(self, panels):
@ -21,6 +23,7 @@ class RightPanel(QWidget):
self.setAutoFillBackground(True) self.setAutoFillBackground(True)
self.setPalette(palette) self.setPalette(palette)
class MainPanel(QWidget): class MainPanel(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
@ -32,6 +35,7 @@ class MainPanel(QWidget):
self.setAutoFillBackground(True) self.setAutoFillBackground(True)
self.setPalette(palette) self.setPalette(palette)
class MainContentComponent(QWidget): class MainContentComponent(QWidget):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__() super().__init__()
@ -40,7 +44,15 @@ class MainContentComponent(QWidget):
robotPanel = ChangeRobot(**robotArgs) robotPanel = ChangeRobot(**robotArgs)
statusArgs = kwargs.get("statusPanel", {}) statusArgs = kwargs.get("statusPanel", {})
statusPanel = Status(**statusArgs) 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() self.mainPanel = MainPanel()
layout = QHBoxLayout() layout = QHBoxLayout()
@ -62,11 +74,11 @@ class MainContentComponent(QWidget):
self.rightPanel.setFixedWidth(rightPanelWidth) self.rightPanel.setFixedWidth(rightPanelWidth)
super().resizeEvent(event) super().resizeEvent(event)
if __name__ == '__main__':
if __name__ == "__main__":
app = QApplication(sys.argv) app = QApplication(sys.argv)
mainWindow = MainContentComponent( mainWindow = MainContentComponent(
robotPanel={'arg1': 'value1'}, robotPanel={"arg1": "value1"}, statusPanel={"arg1": "value1"}
statusPanel={'arg1': 'value1'}
) )
mainWindow.show() mainWindow.show()
sys.exit(app.exec_()) sys.exit(app.exec_())

13
main.py
View File

@ -6,6 +6,7 @@ from PyQt5.QtWidgets import QApplication
from robot.client_socket import SocketRobotArm from robot.client_socket import SocketRobotArm
from gui.init import MainContentComponent from gui.init import MainContentComponent
class MyApp: class MyApp:
with open("./robots.json", "r") as file: with open("./robots.json", "r") as file:
robots = json.load(file) robots = json.load(file)
@ -33,7 +34,13 @@ class MyApp:
}, },
statusPanel={ statusPanel={
"status": self.get_status, "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.setWindowTitle("ROBOT GUI")
mainWindow.show() mainWindow.show()
@ -52,7 +59,9 @@ class MyApp:
self.robot_app.close() self.robot_app.close()
time.sleep(0.3) time.sleep(0.3)
else: 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__": if __name__ == "__main__":

View File

@ -29,6 +29,10 @@ class SocketRobotArm:
pass_size = 4 pass_size = 4
Status = Literal["connected", "not_connected", "error"] Status = Literal["connected", "not_connected", "error"]
start_axis_coordinates = []
start_world_coordinates = []
remote_command_count = []
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.socket = None self.socket = None
self.host = None self.host = None
@ -85,13 +89,13 @@ class SocketRobotArm:
time.sleep(0.5) time.sleep(0.5)
self.set_joint(self.convert_to_joint(self.start_world_coordinates[0:3])) self.set_joint(self.convert_to_joint(self.start_world_coordinates[0:3]))
def cycle_base(self): self._get_command_count()
self.upd_model()
self.get_command_count()
self.set_text(text=f"Команд в очереди {self.remote_command_count}") self.set_text(text=f"Команд в очереди {self.remote_command_count}")
time.sleep(0.5) time.sleep(0.5)
def cycle_base(self):
self.upd_model()
self.send_data(self.set_global_speed()) self.send_data(self.set_global_speed())
self.set_text(text=f"Установили глобальную скорость {self.global_speed}") self.set_text(text=f"Установили глобальную скорость {self.global_speed}")
time.sleep(0.5) time.sleep(0.5)
@ -184,6 +188,9 @@ class SocketRobotArm:
self.start_axis_coordinates = [float(i) for i in axis_coord_raw] self.start_axis_coordinates = [float(i) for i in axis_coord_raw]
print("start_axis_coordinates", self.start_axis_coordinates) print("start_axis_coordinates", self.start_axis_coordinates)
def get_axis_coordinates(self):
return self.start_axis_coordinates
def get_world(self): def get_world(self):
world_coord_raw = self.send_data( world_coord_raw = self.send_data(
make_query_data( make_query_data(
@ -193,11 +200,17 @@ class SocketRobotArm:
self.start_world_coordinates = [float(i) for i in world_coord_raw] self.start_world_coordinates = [float(i) for i in world_coord_raw]
print("start_world_coordinates", self.start_world_coordinates) 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"])) res = self.send_data(make_query_data(["RemoteCmdLen"]))
self.remote_command_count = res self.remote_command_count = res
print(res) print(res)
def get_command_count(self):
return self.remote_command_count
def set_global_speed(self): def set_global_speed(self):
# Изменили глобальную скорость на global_speed% # Изменили глобальную скорость на global_speed%
return make_command_data(["modifyGSPD", str(self.global_speed * 10)]) return make_command_data(["modifyGSPD", str(self.global_speed * 10)])