123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import math
- from PyQt5.QtWidgets import QWidget, QFrame, QLabel, QLineEdit, QPushButton, QComboBox, QCheckBox
- from PyQt5.QtGui import QPixmap, QPainter, QResizeEvent, QCloseEvent, QPaintEvent, QFont
- from PyQt5.QtCore import QSize, QTimer, Qt
- from RobotData import Robot
- import dijkstra.Map as mp
- class ControlFrame(QFrame):
- def __init__(self, UI_data):
- QFrame.__init__(self)
- [self.name_, self.nodes_] = UI_data
- self.robot_ = Robot(self.name_)
- self.setGeometry(0, 0, 500, 500)
- self.InitUI()
- self.setFrameShape(self.StyledPanel)
- self.timer_ = QTimer()
- self.timer_.timeout.connect(self.Update)
- self.timer_.start(100)
- def InitUI(self):
- self.basestatic = QLabel(self)
- self.basestatic.setText(self.name_)
- self.basestatic.setGeometry(20, 20, 80, 30)
- self.begstatic = QLabel(self)
- self.begstatic.setText(" 起点")
- self.begstatic.setGeometry(100, 5, 50, 30)
- self.begQc = QComboBox(self)
- self.begQc.setGeometry(160, 5, 80, 30)
- self.endstatic = QLabel(self)
- self.endstatic.setText(" 终点")
- self.endstatic.setGeometry(100, 50, 50, 30)
- self.endQc = QComboBox(self)
- self.endQc.setGeometry(160, 50, 80, 30)
- self.btnSend = QPushButton(self)
- self.btnSend.setGeometry(150, 100, 100, 40)
- self.btnSend.setText(" 启动导航")
- self.btnSend.clicked.connect(self.btnSendClick)
- self.btnCancel = QPushButton(self)
- self.btnCancel.setGeometry(150, 150, 100, 40)
- self.btnCancel.setText(" 取消导航")
- self.btnCancel.clicked.connect(self.btnCancelClick)
- self.begQc.addItems(self.nodes_)
- self.endQc.addItems(self.nodes_)
- self.endQc.activated.connect(self.endQCChanged)
- self.posestatic = QLabel(self)
- self.posestatic.setGeometry(260, 5, 100, 90)
- self.LedLabel = QLabel(self)
- self.LedLabel.setGeometry(80, 120, 50, 50)
- # 发送轴距
- self.wheelbasestatic = QLabel(self)
- self.wheelbasestatic.setText("轴距:")
- self.wheelbasestatic.setGeometry(260, 100, 40, 30)
- self.WheelBaseEdit = QLineEdit(self)
- self.WheelBaseEdit.setText("3.0")
- self.WheelBaseEdit.setGeometry(300, 100, 50, 30)
- self.btnModelCheck = QCheckBox("双车模式", self)
- self.btnModelCheck.setGeometry(260, 150, 100, 40)
- self.btnModelCheck.stateChanged.connect(self.MainAgvchangecb)
- self.btnPark = QPushButton(self)
- self.btnPark.setGeometry(150, 200, 100, 40)
- self.btnPark.setText(" 存车")
- self.btnPark.clicked.connect(self.btnParkClick)
- self.btnPick = QPushButton(self)
- self.btnPick.setGeometry(150, 250, 100, 40)
- self.btnPick.setText(" 取车")
- self.btnPick.clicked.connect(self.btnPickClick)
- def Update(self):
- if self.robot_.timedPose_.timeout() == False:
- x = self.robot_.timedPose_.statu.x
- y = self.robot_.timedPose_.statu.y
- yaw = self.robot_.timedPose_.statu.theta
- self.posestatic.setText("x : %.3f\ny : %.3f\nΘ : %.2f" % (x, y, yaw * 180 / math.pi))
- '''djks_map=mp.DijikstraMap()
- [label,pt]=djks_map.findNeastNode([x,y])
- if self.nodes_.index(label)>=0:
- self.begQc.setCurrentText(label)'''
- statu = "min-width: 32px; min-height: 32px;max-width:32px;\
- max-height: 32px;border-radius: 16px; border:1px solid black;background:green"
- if self.robot_.Connected() == False:
- statu = "min-width: 32px; min-height: 32px;max-width:32px;\
- max-height: 32px;border-radius: 16px; border:1px solid black;background:gray"
- # self.endQc.setEnabled(False)
- elif self.robot_.IsNavigating() == True:
- statu = "min-width: 32px; min-height: 32px;max-width:32px;\
- max-height: 32px;border-radius: 16px; border:1px solid black;background:yellow"
- self.endQc.setEnabled(False)
- self.btnModelCheck.setEnabled(False)
- else:
- self.endQc.setEnabled(True)
- self.btnModelCheck.setEnabled(True)
- self.LedLabel.setStyleSheet(statu)
- self.wheelbasestatic.setVisible(self.robot_.IsMainAgv())
- self.WheelBaseEdit.setVisible(self.robot_.IsMainAgv())
- self.btnModelCheck.setVisible(self.robot_.IsMainAgv())
- def MainAgvchangecb(self):
- if self.btnModelCheck.checkState() == Qt.Checked:
- leng = float(self.WheelBaseEdit.text())
- self.robot_.SwitchMoveMode(2, leng)
- if self.btnModelCheck.checkState() == Qt.Unchecked:
- self.robot_.SwitchMoveMode(1, 0)
- def endQCChanged(self):
- id1 = self.begQc.currentText()
- id2 = self.endQc.currentText()
- self.robot_.GeneratePath(id1, id2)
- def btnSendClick(self):
- self.robot_.wheelbase_ = 3
- self.robot_.ExecNavtask()
- def btnCancelClick(self):
- self.robot_.CancelNavTask()
- def btnParkClick(self):
- id1 = self.begQc.currentText()
- id2 = self.endQc.currentText()
- self.robot_.ParkTask(begID=id1, targetID=id2)
- def btnPickClick(self):
- id1 = self.begQc.currentText()
- id2 = self.endQc.currentText()
- self.robot_.PickTask(begID=id1, targetID=id2)
|