ControllWidget.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. def Update(self):
  58. if self.robot_.timedPose_.timeout()==False:
  59. x=self.robot_.timedPose_.statu.x
  60. y=self.robot_.timedPose_.statu.y
  61. yaw=self.robot_.timedPose_.statu.theta
  62. self.posestatic.setText("x : %.3f\ny : %.3f\nΘ : %.2f"%(x,y,yaw*180/math.pi))
  63. '''djks_map=mp.DijikstraMap()
  64. [label,pt]=djks_map.findNeastNode([x,y])
  65. if self.nodes_.index(label)>=0:
  66. self.begQc.setCurrentText(label)'''
  67. statu="min-width: 32px; min-height: 32px;max-width:32px;\
  68. max-height: 32px;border-radius: 16px; border:1px solid black;background:green"
  69. if self.robot_.Connected()==False:
  70. statu="min-width: 32px; min-height: 32px;max-width:32px;\
  71. max-height: 32px;border-radius: 16px; border:1px solid black;background:gray"
  72. #self.endQc.setEnabled(False)
  73. elif self.robot_.IsNavigating()==True:
  74. statu="min-width: 32px; min-height: 32px;max-width:32px;\
  75. max-height: 32px;border-radius: 16px; border:1px solid black;background:yellow"
  76. self.endQc.setEnabled(False)
  77. self.btnModelCheck.setEnabled(False)
  78. else:
  79. self.endQc.setEnabled(True)
  80. self.btnModelCheck.setEnabled(True)
  81. self.LedLabel.setStyleSheet(statu)
  82. self.wheelbasestatic.setVisible(self.robot_.IsMainAgv())
  83. self.WheelBaseEdit.setVisible(self.robot_.IsMainAgv())
  84. self.btnModelCheck.setVisible(self.robot_.IsMainAgv())
  85. def MainAgvchangecb(self):
  86. if self.btnModelCheck.checkState() == Qt.Checked:
  87. leng=float(self.WheelBaseEdit.text())
  88. self.robot_.SwitchMoveMode(2,leng)
  89. if self.btnModelCheck.checkState() == Qt.Unchecked:
  90. self.robot_.SwitchMoveMode(1,0)
  91. def endQCChanged(self):
  92. id1=self.begQc.currentText()
  93. id2=self.endQc.currentText()
  94. self.robot_.GeneratePath(id1,id2)
  95. def btnSendClick(self):
  96. self.robot_.wheelbase_=3
  97. self.robot_.ExecNavtask()
  98. def btnCancelClick(self):
  99. self.robot_.CancelNavTask()