ControllWidget.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import math
  2. from PyQt5.QtWidgets import QWidget, QFrame, QLabel, QLineEdit, QPushButton, QComboBox, QCheckBox
  3. from PyQt5.QtGui import QPixmap, QPainter, QResizeEvent, QCloseEvent, QPaintEvent, QFont
  4. from PyQt5.QtCore import QSize, QTimer, Qt
  5. from RobotData import Robot
  6. import dijkstra.Map as mp
  7. class ControlFrame(QFrame):
  8. def __init__(self, UI_data):
  9. QFrame.__init__(self)
  10. [self.name_, self.nodes_] = UI_data
  11. self.robot_ = Robot(self.name_)
  12. self.setGeometry(0, 0, 500, 500)
  13. self.InitUI()
  14. self.setFrameShape(self.StyledPanel)
  15. self.timer_ = QTimer()
  16. self.timer_.timeout.connect(self.Update)
  17. self.timer_.start(100)
  18. def InitUI(self):
  19. self.basestatic = QLabel(self)
  20. self.basestatic.setText(self.name_)
  21. self.basestatic.setGeometry(20, 20, 80, 30)
  22. self.begstatic = QLabel(self)
  23. self.begstatic.setText(" 起点")
  24. self.begstatic.setGeometry(100, 5, 50, 30)
  25. self.begQc = QComboBox(self)
  26. self.begQc.setGeometry(160, 5, 80, 30)
  27. self.endstatic = QLabel(self)
  28. self.endstatic.setText(" 终点")
  29. self.endstatic.setGeometry(100, 50, 50, 30)
  30. self.endQc = QComboBox(self)
  31. self.endQc.setGeometry(160, 50, 80, 30)
  32. self.btnSend = QPushButton(self)
  33. self.btnSend.setGeometry(150, 100, 100, 40)
  34. self.btnSend.setText(" 启动导航")
  35. self.btnSend.clicked.connect(self.btnSendClick)
  36. self.btnCancel = QPushButton(self)
  37. self.btnCancel.setGeometry(150, 150, 100, 40)
  38. self.btnCancel.setText(" 取消导航")
  39. self.btnCancel.clicked.connect(self.btnCancelClick)
  40. self.begQc.addItems(self.nodes_)
  41. self.endQc.addItems(self.nodes_)
  42. self.endQc.activated.connect(self.endQCChanged)
  43. self.posestatic = QLabel(self)
  44. self.posestatic.setGeometry(260, 5, 100, 90)
  45. self.LedLabel = QLabel(self)
  46. self.LedLabel.setGeometry(80, 120, 50, 50)
  47. # 发送轴距
  48. self.wheelbasestatic = QLabel(self)
  49. self.wheelbasestatic.setText("轴距:")
  50. self.wheelbasestatic.setGeometry(260, 100, 40, 30)
  51. self.WheelBaseEdit = QLineEdit(self)
  52. self.WheelBaseEdit.setText("3.0")
  53. self.WheelBaseEdit.setGeometry(300, 100, 50, 30)
  54. self.btnModelCheck = QCheckBox("双车模式", self)
  55. self.btnModelCheck.setGeometry(260, 150, 100, 40)
  56. self.btnModelCheck.stateChanged.connect(self.MainAgvchangecb)
  57. self.btnPark = QPushButton(self)
  58. self.btnPark.setGeometry(150, 200, 100, 40)
  59. self.btnPark.setText(" 存车")
  60. self.btnPark.clicked.connect(self.btnParkClick)
  61. self.btnPick = QPushButton(self)
  62. self.btnPick.setGeometry(150, 250, 100, 40)
  63. self.btnPick.setText(" 取车")
  64. self.btnPick.clicked.connect(self.btnPickClick)
  65. def Update(self):
  66. if self.robot_.timedPose_.timeout() == False:
  67. x = self.robot_.timedPose_.statu.x
  68. y = self.robot_.timedPose_.statu.y
  69. yaw = self.robot_.timedPose_.statu.theta
  70. self.posestatic.setText("x : %.3f\ny : %.3f\nΘ : %.2f" % (x, y, yaw * 180 / math.pi))
  71. '''djks_map=mp.DijikstraMap()
  72. [label,pt]=djks_map.findNeastNode([x,y])
  73. if self.nodes_.index(label)>=0:
  74. self.begQc.setCurrentText(label)'''
  75. statu = "min-width: 32px; min-height: 32px;max-width:32px;\
  76. max-height: 32px;border-radius: 16px; border:1px solid black;background:green"
  77. if self.robot_.Connected() == False:
  78. statu = "min-width: 32px; min-height: 32px;max-width:32px;\
  79. max-height: 32px;border-radius: 16px; border:1px solid black;background:gray"
  80. # self.endQc.setEnabled(False)
  81. elif self.robot_.IsNavigating() == True:
  82. statu = "min-width: 32px; min-height: 32px;max-width:32px;\
  83. max-height: 32px;border-radius: 16px; border:1px solid black;background:yellow"
  84. self.endQc.setEnabled(False)
  85. self.btnModelCheck.setEnabled(False)
  86. else:
  87. self.endQc.setEnabled(True)
  88. self.btnModelCheck.setEnabled(True)
  89. self.LedLabel.setStyleSheet(statu)
  90. self.wheelbasestatic.setVisible(self.robot_.IsMainAgv())
  91. self.WheelBaseEdit.setVisible(self.robot_.IsMainAgv())
  92. self.btnModelCheck.setVisible(self.robot_.IsMainAgv())
  93. def MainAgvchangecb(self):
  94. if self.btnModelCheck.checkState() == Qt.Checked:
  95. leng = float(self.WheelBaseEdit.text())
  96. self.robot_.SwitchMoveMode(2, leng)
  97. if self.btnModelCheck.checkState() == Qt.Unchecked:
  98. self.robot_.SwitchMoveMode(1, 0)
  99. def endQCChanged(self):
  100. id1 = self.begQc.currentText()
  101. id2 = self.endQc.currentText()
  102. self.robot_.GeneratePath(id1, id2)
  103. def btnSendClick(self):
  104. self.robot_.wheelbase_ = 3
  105. self.robot_.ExecNavtask()
  106. def btnCancelClick(self):
  107. self.robot_.CancelNavTask()
  108. def btnParkClick(self):
  109. id1 = self.begQc.currentText()
  110. id2 = self.endQc.currentText()
  111. self.robot_.ParkTask(begID=id1, targetID=id2)
  112. def btnPickClick(self):
  113. id1 = self.begQc.currentText()
  114. id2 = self.endQc.currentText()
  115. self.robot_.PickTask(begID=id1, targetID=id2)