From 16c829d8d3c0b59e1d715c35895108a86e26df73 Mon Sep 17 00:00:00 2001 From: Diego Jimenez Bravo Date: Mon, 13 Mar 2017 23:12:27 +0100 Subject: [PATCH 1/2] [issue #702 #719] Change in uav_viewer_py --- src/tools/uav_viewer_py/gui/GUI.py | 34 ++++----- src/tools/uav_viewer_py/gui/teleopWidget.py | 83 +++++++++++---------- src/tools/uav_viewer_py/gui/ui_gui.py | 80 ++++++++++++-------- 3 files changed, 107 insertions(+), 90 deletions(-) diff --git a/src/tools/uav_viewer_py/gui/GUI.py b/src/tools/uav_viewer_py/gui/GUI.py index 9e234979c..e9871710e 100644 --- a/src/tools/uav_viewer_py/gui/GUI.py +++ b/src/tools/uav_viewer_py/gui/GUI.py @@ -34,8 +34,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) - self.teleop = TeleopWidget(self) + self.teleop=TeleopWidget(self,0) + self.teleop1=TeleopWidget(self,1) self.tlLayout.addWidget(self.teleop) + self.tlLayout_1.addWidget(self.teleop1) self.teleop.setVisible(True) self.record = False @@ -45,9 +47,6 @@ def __init__(self, parent=None): self.cameraCheck.stateChanged.connect(self.showCameraWidget) self.sensorsCheck.stateChanged.connect(self.showSensorsWidget) - self.rotationDial.valueChanged.connect(self.rotationChange) - self.altdSlider.valueChanged.connect(self.altitudeChange) - self.cameraWidget = CameraWidget(self) self.sensorsWidget = SensorsWidget(self) @@ -98,10 +97,9 @@ def updateGUI(self): def stopClicked(self): if self.record == True: self.extra.record(False) - self.rotationDial.setValue(self.altdSlider.maximum() / 2) - self.altdSlider.setValue(self.altdSlider.maximum() / 2) self.cmdvel.sendCMDVel(0, 0, 0, 0, 0, 0) self.teleop.stopSIG.emit() + self.teleop1.stopSIG.emit() def takeOffClicked(self): if (self.takeoff == True): @@ -141,28 +139,22 @@ def showSensorsWidget(self, state): def closeSensorsWidget(self): self.sensorsCheck.setChecked(False) - def rotationChange(self, value): - value = (1.0 / (self.rotationDial.maximum() / 2)) * (value - (self.rotationDial.maximum() / 2)) - self.rotValue.setText('%.2f' % value) - self.cmdvel.setYaw(value) - self.cmdvel.sendVelocities() - - def altitudeChange(self, value): - value = (1.0 / (self.altdSlider.maximum() / 2)) * (value - (self.altdSlider.maximum() / 2)) - self.altdValue.setText('%.2f' % value) - self.cmdvel.setVZ(value) - self.cmdvel.sendVelocities() - - def setXYValues(self, newX, newY): + def setXYValues(self,newX,newY): self.XValue.setText('%.2f' % newX) - self.YValue.setText('%.2f' % newY) + self.YValue.setText('%.2f' % -newY) self.cmdvel.setVX(-newY) self.cmdvel.setVY(-newX) self.cmdvel.sendVelocities() + def setZYawValues(self,newZ,newYaw): + self.altdValue.setText('%.2f' % -newZ) + self.rotValue.setText('%.2f' % newYaw) + self.cmdvel.setVZ(-newZ) + self.cmdvel.setYaw(newYaw) + self.cmdvel.sendVelocities() + def closeEvent(self, event): self.camera.stop() self.navdata.stop() self.pose.stop() event.accept() - diff --git a/src/tools/uav_viewer_py/gui/teleopWidget.py b/src/tools/uav_viewer_py/gui/teleopWidget.py index 93c7ea405..8ca68f808 100644 --- a/src/tools/uav_viewer_py/gui/teleopWidget.py +++ b/src/tools/uav_viewer_py/gui/teleopWidget.py @@ -17,97 +17,102 @@ # Alberto Martin Florido # import resources_rc +import math from PyQt5.QtGui import QImage, QPainter, QPen from PyQt5.QtCore import pyqtSignal, QPointF, Qt, QPoint from PyQt5.QtWidgets import QWidget, QGridLayout - class TeleopWidget(QWidget): - stopSIG = pyqtSignal() - def __init__(self, winParent): + stopSIG=pyqtSignal() + + def __init__(self,winParent,num): super(TeleopWidget, self).__init__() - self.winParent = winParent + self.winParent=winParent self.line = QPointF(0, 0); - self.qimage = QImage() + self.qimage=QImage() self.qimage.load(':images/ball.png') self.stopSIG.connect(self.stop) self.initUI() + self.id = num def initUI(self): - layout = QGridLayout() + layout=QGridLayout() self.setLayout(layout) self.setAutoFillBackground(True) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) - self.resize(300, 300) - self.setMinimumSize(300, 300) + self.resize(300,300) + self.setMinimumSize(300,300) def stop(self): self.line = QPointF(0, 0); self.repaint(); - def mouseMoveEvent(self, e): + def mouseMoveEvent(self,e): if e.buttons() == Qt.LeftButton: - x = e.x() - self.width() / 2 - y = e.y() - self.height() / 2 + x = e.x()-self.width()/2 + y = e.y()-self.height()/2 self.line = QPointF(x, y) self.repaint() def paintEvent(self, e): + _width = self.width() _height = self.height() + width = 2 - painter = QPainter(self) + painter=QPainter(self) pen = QPen(Qt.blue, width) painter.setPen(pen) - # Centro del widget - painter.translate(QPoint(_width / 2, _height / 2)) + #Centro del widget + painter.translate(QPoint(_width/2, _height/2)) - # eje + #eje painter.drawLine(QPointF(-_width, 0), - QPointF(_width, 0)) + QPointF( _width, 0)) painter.drawLine(QPointF(0, -_height), - QPointF(0, _height)) + QPointF(0, _height)) - # con el raton + #con el raton pen = QPen(Qt.red, width) painter.setPen(pen) - # Comprobamos que el raton este dentro de los limites - if abs(self.line.x() * 2) >= self.size().width(): - if self.line.x() >= 0: - self.line.setX(self.size().width() / 2) - elif self.line.x() < 0: - self.line.setX((-self.size().width() / 2) + 1) + #Comprobamos que el raton este dentro de los limites + if abs(self.line.x()*2) >= self.size().width(): + if self.line.x()>=0: + self.line.setX(self.size().width()/2) + elif self.line.x()<0: + self.line.setX((-self.size().width()/2)+1) - if abs(self.line.y() * 2) >= self.size().height(): - if self.line.y() >= 0: - self.line.setY(self.size().height() / 2) - elif self.line.y() < 0: - self.line.setY((-self.size().height() / 2) + 1) + if abs(self.line.y()*2) >= self.size().height(): + if self.line.y()>=0: + self.line.setY(self.size().height()/2) + elif self.line.y()<0: + self.line.setY((-self.size().height()/2)+1) painter.drawLine(QPointF(self.line.x(), -_height), - QPointF(self.line.x(), _height)) + QPointF(self.line.x(), _height)) painter.drawLine(QPointF(-_width, self.line.y()), - QPointF(_width, self.line.y())) + QPointF( _width, self.line.y())) - # print "x: %f y: %f" % (self.line.x(), self.line.y()) + #print "x: %f y: %f" % (self.line.x(), self.line.y()) - v_normalized = (1.0 / (self.size().height() / 2)) * self.line.y() + v_normalized = (1.0/(self.size().height()/2)) * self.line.y() v_normalized = float("{0:.2f}".format(v_normalized)) - w_normalized = (1.0 / (self.size().width() / 2)) * self.line.x() + w_normalized = (1.0/(self.size().width()/2)) * self.line.x() w_normalized = float("{0:.2f}".format(w_normalized)) - # print "v: %f w: %f" % (v_normalized,w_normalized) - self.winParent.setXYValues(w_normalized, v_normalized) - painter.drawImage(self.line.x() - self.qimage.width() / 2, self.line.y() - self.qimage.height() / 2, - self.qimage); - + #print "v: %f w: %f" % (v_normalized,w_normalized) + if self.id == 0: + self.winParent.setZYawValues(v_normalized,w_normalized*math.pi) + elif self.id == 1: + self.winParent.setXYValues(w_normalized,v_normalized) + painter.drawImage(self.line.x()-self.qimage.width()/2, self.line.y()-self.qimage.height()/2, self.qimage); diff --git a/src/tools/uav_viewer_py/gui/ui_gui.py b/src/tools/uav_viewer_py/gui/ui_gui.py index e623fb963..7db34a543 100644 --- a/src/tools/uav_viewer_py/gui/ui_gui.py +++ b/src/tools/uav_viewer_py/gui/ui_gui.py @@ -11,51 +11,62 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(660, 370) - MainWindow.setMinimumSize(QtCore.QSize(660, 370)) - MainWindow.setMaximumSize(QtCore.QSize(660, 370)) + MainWindow.resize(790, 550) + MainWindow.setMinimumSize(QtCore.QSize(790, 550)) + MainWindow.setMaximumSize(QtCore.QSize(790, 550)) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.takeoffButton = QtWidgets.QPushButton(self.centralwidget) - self.takeoffButton.setGeometry(QtCore.QRect(470, 30, 161, 41)) + self.takeoffButton.setGeometry(QtCore.QRect(80, 380, 220, 41)) self.takeoffButton.setObjectName("takeoffButton") - self.altdSlider = QtWidgets.QSlider(self.centralwidget) - self.altdSlider.setGeometry(QtCore.QRect(400, 30, 19, 311)) - self.altdSlider.setMaximum(100) - self.altdSlider.setProperty("value", 49) - self.altdSlider.setOrientation(QtCore.Qt.Vertical) - self.altdSlider.setObjectName("altdSlider") - self.stopButton = QtWidgets.QPushButton(self.centralwidget) - self.stopButton.setGeometry(QtCore.QRect(470, 80, 161, 41)) + + self.playButton = QtWidgets.QPushButton(self.centralwidget) + self.playButton.setGeometry(QtCore.QRect(80, 425, 100, 51)) icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(":/images/stop.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.stopButton.setIcon(icon) + icon.addPixmap(QtGui.QPixmap(":/images/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.playButton.setIcon(icon) + self.playButton.setObjectName("playButton") + self.stopButton = QtWidgets.QPushButton(self.centralwidget) + self.stopButton.setGeometry(QtCore.QRect(200, 425, 100, 51)) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/images/stop.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.stopButton.setIcon(icon1) self.stopButton.setObjectName("stopButton") + self.windowsLabel = QtWidgets.QLabel(self.centralwidget) - self.windowsLabel.setGeometry(QtCore.QRect(540, 190, 71, 21)) + self.windowsLabel.setGeometry(QtCore.QRect(350, 380, 71, 21)) self.windowsLabel.setObjectName("windowsLabel") self.cameraCheck = QtWidgets.QCheckBox(self.centralwidget) - self.cameraCheck.setGeometry(QtCore.QRect(540, 220, 94, 26)) + self.cameraCheck.setGeometry(QtCore.QRect(350, 410, 94, 26)) self.cameraCheck.setObjectName("cameraCheck") self.sensorsCheck = QtWidgets.QCheckBox(self.centralwidget) - self.sensorsCheck.setGeometry(QtCore.QRect(540, 250, 94, 26)) + self.sensorsCheck.setGeometry(QtCore.QRect(350, 440, 94, 26)) self.sensorsCheck.setObjectName("sensorsCheck") + self.colorFilterCheck = QtWidgets.QCheckBox(self.centralwidget) + self.colorFilterCheck.setGeometry(QtCore.QRect(350, 470, 94, 26)) + self.colorFilterCheck.setObjectName("colorFilterCheck") + self.altdLabel = QtWidgets.QLabel(self.centralwidget) - self.altdLabel.setGeometry(QtCore.QRect(390, 340, 51, 21)) + self.altdLabel.setGeometry(QtCore.QRect(220, 340, 61, 21)) self.altdLabel.setObjectName("altdLabel") + self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget) self.verticalLayoutWidget.setGeometry(QtCore.QRect(20, 30, 361, 301)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.tlLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.tlLayout.setObjectName("tlLayout") - self.rotationDial = QtWidgets.QDial(self.centralwidget) - self.rotationDial.setGeometry(QtCore.QRect(440, 220, 50, 64)) - self.rotationDial.setMaximum(100) - self.rotationDial.setProperty("value", 49) - self.rotationDial.setObjectName("rotationDial") + ####################NUEVO#################### + self.verticalLayoutWidget_1 = QtWidgets.QWidget(self.centralwidget) + self.verticalLayoutWidget_1.setGeometry(QtCore.QRect(400, 30, 361, 301)) + self.verticalLayoutWidget_1.setObjectName("verticalLayoutWidget_1") + self.tlLayout_1 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_1) + self.tlLayout_1.setObjectName("tlLayout_1") + ####################### + self.rotationLabel = QtWidgets.QLabel(self.centralwidget) - self.rotationLabel.setGeometry(QtCore.QRect(440, 280, 65, 21)) + self.rotationLabel.setGeometry(QtCore.QRect(350, 340, 65, 21)) self.rotationLabel.setObjectName("rotationLabel") + self.XLabel = QtWidgets.QLabel(self.centralwidget) self.XLabel.setGeometry(QtCore.QRect(20, 340, 21, 21)) self.XLabel.setObjectName("XLabel") @@ -71,16 +82,23 @@ def setupUi(self, MainWindow): self.YValue.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.YValue.setObjectName("YValue") self.altdValue = QtWidgets.QLabel(self.centralwidget) - self.altdValue.setGeometry(QtCore.QRect(390, 10, 41, 21)) + self.altdValue.setGeometry(QtCore.QRect(280, 340, 41, 21)) self.altdValue.setAlignment(QtCore.Qt.AlignCenter) self.altdValue.setObjectName("altdValue") self.rotValue = QtWidgets.QLabel(self.centralwidget) - self.rotValue.setGeometry(QtCore.QRect(445, 200, 41, 21)) + self.rotValue.setGeometry(QtCore.QRect(430, 340, 41, 21)) self.rotValue.setAlignment(QtCore.Qt.AlignCenter) self.rotValue.setObjectName("rotValue") + self.resetButton = QtWidgets.QPushButton(self.centralwidget) - self.resetButton.setGeometry(QtCore.QRect(470, 130, 161, 41)) + self.resetButton.setGeometry(QtCore.QRect(80, 480, 220, 41)) self.resetButton.setObjectName("resetButton") + self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget) + self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(480, 380, 150, 150)) + self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2") + self.logoLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2) + self.logoLayout.setSpacing(0) + self.logoLayout.setObjectName("logoLayout") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) @@ -88,14 +106,16 @@ def setupUi(self, MainWindow): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "Uav Viewer")) + MainWindow.setWindowTitle(_translate("MainWindow", "UAV Viewer")) self.takeoffButton.setText(_translate("MainWindow", "Take off")) + self.playButton.setText(_translate("MainWindow", "Play")) self.stopButton.setText(_translate("MainWindow", "Stop")) self.windowsLabel.setText(_translate("MainWindow", "Windows:")) self.cameraCheck.setText(_translate("MainWindow", "Camera")) self.sensorsCheck.setText(_translate("MainWindow", "Sensors")) - self.altdLabel.setText(_translate("MainWindow", "Altitude")) - self.rotationLabel.setText(_translate("MainWindow", "Rotation")) + self.colorFilterCheck.setText(_translate("MainWindow", "Color filter")) + self.altdLabel.setText(_translate("MainWindow", "Altitude:")) + self.rotationLabel.setText(_translate("MainWindow", "Rotation:")) self.XLabel.setText(_translate("MainWindow", "X:")) self.YLabel.setText(_translate("MainWindow", "Y:")) self.XValue.setText(_translate("MainWindow", "0")) From 729c7b76528155a5578e0c02120465c89588be82 Mon Sep 17 00:00:00 2001 From: Diego Jimenez Bravo Date: Tue, 4 Apr 2017 20:02:14 +0200 Subject: [PATCH 2/2] [issue #702 #719] Deleted play button and colorFilter checkbox --- src/tools/uav_viewer_py/gui/ui_gui.py | 13 +------------ src/tools/uav_viewer_py/resources/play.png | Bin 5207 -> 0 bytes src/tools/uav_viewer_py/resources/resources.qrc | 1 - 3 files changed, 1 insertion(+), 13 deletions(-) delete mode 100644 src/tools/uav_viewer_py/resources/play.png diff --git a/src/tools/uav_viewer_py/gui/ui_gui.py b/src/tools/uav_viewer_py/gui/ui_gui.py index 7db34a543..ab6cafbef 100644 --- a/src/tools/uav_viewer_py/gui/ui_gui.py +++ b/src/tools/uav_viewer_py/gui/ui_gui.py @@ -20,14 +20,8 @@ def setupUi(self, MainWindow): self.takeoffButton.setGeometry(QtCore.QRect(80, 380, 220, 41)) self.takeoffButton.setObjectName("takeoffButton") - self.playButton = QtWidgets.QPushButton(self.centralwidget) - self.playButton.setGeometry(QtCore.QRect(80, 425, 100, 51)) - icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(":/images/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.playButton.setIcon(icon) - self.playButton.setObjectName("playButton") self.stopButton = QtWidgets.QPushButton(self.centralwidget) - self.stopButton.setGeometry(QtCore.QRect(200, 425, 100, 51)) + self.stopButton.setGeometry(QtCore.QRect(80, 425, 220, 51)) icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(":/images/stop.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.stopButton.setIcon(icon1) @@ -42,9 +36,6 @@ def setupUi(self, MainWindow): self.sensorsCheck = QtWidgets.QCheckBox(self.centralwidget) self.sensorsCheck.setGeometry(QtCore.QRect(350, 440, 94, 26)) self.sensorsCheck.setObjectName("sensorsCheck") - self.colorFilterCheck = QtWidgets.QCheckBox(self.centralwidget) - self.colorFilterCheck.setGeometry(QtCore.QRect(350, 470, 94, 26)) - self.colorFilterCheck.setObjectName("colorFilterCheck") self.altdLabel = QtWidgets.QLabel(self.centralwidget) self.altdLabel.setGeometry(QtCore.QRect(220, 340, 61, 21)) @@ -108,12 +99,10 @@ def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "UAV Viewer")) self.takeoffButton.setText(_translate("MainWindow", "Take off")) - self.playButton.setText(_translate("MainWindow", "Play")) self.stopButton.setText(_translate("MainWindow", "Stop")) self.windowsLabel.setText(_translate("MainWindow", "Windows:")) self.cameraCheck.setText(_translate("MainWindow", "Camera")) self.sensorsCheck.setText(_translate("MainWindow", "Sensors")) - self.colorFilterCheck.setText(_translate("MainWindow", "Color filter")) self.altdLabel.setText(_translate("MainWindow", "Altitude:")) self.rotationLabel.setText(_translate("MainWindow", "Rotation:")) self.XLabel.setText(_translate("MainWindow", "X:")) diff --git a/src/tools/uav_viewer_py/resources/play.png b/src/tools/uav_viewer_py/resources/play.png deleted file mode 100644 index 6c6ea84833b259203ef49945652ee7746ca40b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5207 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 QgZ~4K4J`EU>AFS#2gGzHq5uE@ diff --git a/src/tools/uav_viewer_py/resources/resources.qrc b/src/tools/uav_viewer_py/resources/resources.qrc index 5f475862c..09acc3d1c 100644 --- a/src/tools/uav_viewer_py/resources/resources.qrc +++ b/src/tools/uav_viewer_py/resources/resources.qrc @@ -1,7 +1,6 @@ ball.png - play.png stop.png