ControllWidget.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import math
  2. from PyQt5.QtWidgets import QWidget,QFrame,QLabel,QLineEdit,QPushButton,QComboBox
  3. from PyQt5.QtGui import QPixmap,QPainter,QResizeEvent,QCloseEvent,QPaintEvent,QFont
  4. from PyQt5.QtCore import QSize,QTimer
  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(280, 120, 50, 50)
  47. def Update(self):
  48. if self.robot_.timedPose_.timeout()==False:
  49. x=self.robot_.timedPose_.statu.x
  50. y=self.robot_.timedPose_.statu.y
  51. yaw=self.robot_.timedPose_.statu.theta
  52. self.posestatic.setText("x : %.3f\ny : %.3f\nΘ : %.2f"%(x,y,yaw*180/math.pi))
  53. if self.robot_.IsNavigating():
  54. djks_map=mp.DijikstraMap()
  55. [label,pt]=djks_map.findNeastNode([x,y])
  56. if self.nodes_.index(label)>=0:
  57. self.begQc.setCurrentText(label)
  58. statu="min-width: 32px; min-height: 32px;max-width:32px;\
  59. max-height: 32px;border-radius: 16px; border:1px solid black;background:green"
  60. if self.robot_.Connected()==False:
  61. statu="min-width: 32px; min-height: 32px;max-width:32px;\
  62. max-height: 32px;border-radius: 16px; border:1px solid black;background:gray"
  63. self.endQc.setEnabled(False)
  64. elif self.robot_.IsNavigating()==True:
  65. statu="min-width: 32px; min-height: 32px;max-width:32px;\
  66. max-height: 32px;border-radius: 16px; border:1px solid black;background:yellow"
  67. self.endQc.setEnabled(False)
  68. else:
  69. self.endQc.setEnabled(True)
  70. self.LedLabel.setStyleSheet(statu)
  71. def endQCChanged(self):
  72. id1=self.begQc.currentText()
  73. id2=self.endQc.currentText()
  74. self.robot_.GeneratePath(id1,id2)
  75. def btnSendClick(self):
  76. self.robot_.ExecNavtask()
  77. def btnCancelClick(self):
  78. self.robot_.CancelNavTask()