Go to the documentation of this file.00001 __author__ = 'tom1231'
00002 from PyQt4.QtGui import *
00003 from GUI.Scheme.SetParams import Ui_main
00004 import rospy.exceptions
00005 from ric_board.srv._get_devs import get_devs, get_devsRequest
00006 from ric_board.srv._setParam import setParam, setParamRequest
00007
00008
00009 class MainWindow(QDialog, Ui_main):
00010
00011 def __init__(self, parent=None):
00012 super(MainWindow, self).__init__(parent)
00013 self.setupUi(self)
00014 self._devs = []
00015
00016 self.refresh()
00017
00018 self.refreshB.clicked.connect(self.refresh)
00019 self.setB.clicked.connect(self.sendNewParams)
00020 self.devList.itemSelectionChanged.connect(self.listChange)
00021
00022 self._selected = False
00023
00024 def refresh(self):
00025 try:
00026 rospy.wait_for_service('/devsOnline', timeout=0.2)
00027
00028 self.status.setText('Connected')
00029
00030 getDevsOnline = rospy.ServiceProxy('/devsOnline', get_devs)
00031 request = get_devsRequest()
00032 request.req = True
00033 responds = getDevsOnline(request)
00034 self._devs = responds.devs.devs
00035
00036 except rospy.ROSException:
00037 self.status.setText('Not connected')
00038 finally:
00039 self.buildList()
00040
00041 def buildList(self):
00042 self.devList.clear()
00043 self.removeAllFields()
00044
00045 for device in self._devs:
00046 self.devList.addItem(QListWidgetItem(device.devName))
00047
00048 def removeAllFields(self):
00049 for i in xrange(self.devFrame.layout().count()):
00050 self.devFrame.layout().itemAt(i).widget().deleteLater()
00051
00052 def sendNewParams(self):
00053 try:
00054 if not self._selected: return
00055 rospy.wait_for_service('/devsSetParam', timeout=0.2)
00056 motor = self._devs[self.devList.currentRow()]
00057
00058 kp = float(self.devFrame.layout().itemAt(1).widget().text())
00059 ki = float(self.devFrame.layout().itemAt(3).widget().text())
00060 kd = float(self.devFrame.layout().itemAt(5).widget().text())
00061
00062 motor.values = [kp, ki, kd]
00063
00064 request = setParamRequest()
00065
00066 request.dev.devName = motor.devName
00067 request.dev.type = motor.type
00068 request.dev.values = [kp, ki, kd]
00069
00070 setNewParam = rospy.ServiceProxy('/devsSetParam', setParam)
00071
00072 setNewParam(request)
00073
00074 except rospy.ROSException:
00075 self.status.setText('Not connected')
00076
00077 def listChange(self):
00078 motor = self._devs[self.devList.currentRow()]
00079 self.removeAllFields()
00080
00081 self.devFrame.layout().addRow(QLabel('Kp: '), QLineEdit(str(motor.values[0])))
00082 self.devFrame.layout().addRow(QLabel('Ki: '), QLineEdit(str(motor.values[1])))
00083 self.devFrame.layout().addRow(QLabel('Kd: '), QLineEdit(str(motor.values[2])))
00084
00085 self._selected = True