37,743
社区成员




class MonitorMainWin(QMainWindow, Ui_MainWindow):
def __init__(self, host):
# setup gui
super(MonitorMainWin, self).__init__()
self.setupUi(self)
# setup socket
self.moveClter = MoveCtl.MoverClter(HOST, PORT_ROS_BRIDGE)
# setup control event
self.control_speed = 0.
self.control_turn = 0.
self.setupMoveBtnEvent()
self.moveCmdTimer = QTimer(self)
def setupMoveBtnEvent(self):
# send messages tp cmd_vel topic if the key is long pressed
self.btn_front_left.pressed.connect(lambda: self.sendMoveCmdLoop(0))
self.btn_front.pressed.connect(lambda: self.sendMoveCmdLoop(1))
self.btn_front_right.pressed.connect(lambda: self.sendMoveCmdLoop(2))
self.btn_left.pressed.connect(lambda: self.sendMoveCmdLoop(3))
self.btn_stop.pressed.connect(lambda: self.sendMoveCmdLoop(4))
self.btn_right.pressed.connect(lambda: self.sendMoveCmdLoop(5))
self.btn_behind_left.pressed.connect(lambda: self.sendMoveCmdLoop(6))
self.btn_behind.pressed.connect(lambda: self.sendMoveCmdLoop(7))
self.btn_behind_right.pressed.connect(lambda: self.sendMoveCmdLoop(8))
self.btn_front_left.released.connect(self.timerResetCmd)
self.btn_front.released.connect(self.timerResetCmd)
self.btn_front_right.released.connect(self.timerResetCmd)
self.btn_left.released.connect(self.timerResetCmd)
self.btn_stop.released.connect(self.timerResetCmd)
self.btn_right.released.connect(self.timerResetCmd)
self.btn_behind_left.released.connect(self.timerResetCmd)
self.btn_behind.released.connect(self.timerResetCmd)
self.btn_behind_right.released.connect(self.timerResetCmd)
self.btn_stop.setupMoveConfig(self.moveClter)
def sendMoveCmdLoop(self, cmd):
self.moveCmdTimer.start(200)
self.moveCmdTimer.timeout.connect(lambda: self.moveClter.sendMoveCmd(cmd))
# self.sendMoveCmd(cmd)
def timerResetCmd(self):
self.moveCmdTimer.stop()
self.moveCmdTimer.timeout.disconnect()
self.moveClter.resetMoveCmd()
class QMoveCltButton(QPushButton):
def __init__(self, parent=None):
super(QMoveCltButton, self).__init__(parent)
self.setFocusPolicy(Qt.StrongFocus)
self.keyPressedFlag = False
def _getCmd(self, enterKey):
if enterKey == Qt.Key_U:
cmd = 0
elif enterKey == Qt.Key_I:
cmd = 1
elif enterKey == Qt.Key_O:
cmd = 2
elif enterKey == Qt.Key_J:
cmd = 3
elif enterKey == Qt.Key_K:
cmd = 4
elif enterKey == Qt.Key_L:
cmd = 5
elif enterKey == Qt.Key_M:
cmd = 6
elif enterKey == Qt.Key_Comma:
cmd = 7
elif enterKey == Qt.Key_Period:
cmd = 8
else:
cmd = -1
return cmd
def setupMoveConfig(self, moveClter):
self.moveClter = moveClter
def keyPressEvent(self, event):
if event.isAutoRepeat():
if not self.keyPressedFlag:
self.keyPressedFlag = True
cmd = self._getCmd(event.key())
if not cmd == -1:
self.moveClter.sendMoveCmd(cmd)
def keyReleaseEvent(self, event):
if self.keyPressedFlag and not event.isAutoRepeat():
self.keyPressedFlag = False
cmd = self._getCmd(event.key())
if not cmd == -1:
self.moveClter.resetMoveCmd()