Go to the documentation of this file.00001 from _socket import SHUT_WR
00002 import rospkg
00003 import pickle
00004 from BAL.Interface.DeviceFrame import CLOSE_LOP_ONE, CLOSE_LOP_TWO
00005
00006 __author__ = 'tom1231'
00007 from PyQt4.QtGui import *
00008 from GUI.Schemes.SetParams import Ui_main
00009 from socket import socket, AF_INET, SOCK_STREAM, gethostname, error
00010
00011 BUF_SIZE = 1024
00012 PORT = 1900
00013
00014 class ParamManager(QDialog, Ui_main):
00015
00016 def __init__(self, parent=None):
00017 super(ParamManager, self).__init__(parent)
00018 self.setupUi(self)
00019 self.status.setText('connected')
00020 self._client = socket(AF_INET, SOCK_STREAM)
00021 self._client.connect((gethostname(), PORT))
00022 self._motors = []
00023 self.devList.itemSelectionChanged.connect(self.listChange)
00024 self._selected = False
00025
00026 fileName = self._client.recv(BUF_SIZE)
00027 pkg = rospkg.RosPack().get_path('ric_board')
00028 dump = open("%s/DATA/%s.RIC" % (pkg, fileName))
00029 devs = pickle.load(dump)[2]
00030 for dev in devs:
00031 if (dev['type'] == CLOSE_LOP_ONE) or (dev['type'] == CLOSE_LOP_TWO):
00032 self._motors.append(dev)
00033 self.devList.addItem(QListWidgetItem(dev['name']))
00034
00035 self.setB.clicked.connect(self.sendParam)
00036 self.finished.connect(self.closeWin)
00037
00038 def listChange(self):
00039 motor = self._motors[self.devList.currentRow()]
00040 self.removeAllFields()
00041
00042 self.devFrame.layout().addRow(QLabel('Kp: '), QLineEdit(motor['kp']))
00043 self.devFrame.layout().addRow(QLabel('Ki: '), QLineEdit(motor['ki']))
00044 self.devFrame.layout().addRow(QLabel('Kd: '), QLineEdit(motor['kd']))
00045
00046 self._selected = True
00047
00048 def closeWin(self):
00049 try:
00050 self._client.send('dis')
00051 if self._client.recv(BUF_SIZE) == 'by':
00052 self._client.shutdown(SHUT_WR)
00053 self._client.close()
00054 except error: pass
00055
00056 def removeAllFields(self):
00057 for i in xrange(self.devFrame.layout().count()):
00058 self.devFrame.layout().itemAt(i).widget().deleteLater()
00059
00060 def sendParam(self):
00061 try:
00062 if not self._selected: return
00063 motorNum = self.devList.currentRow()
00064 motor = self._motors[motorNum]
00065
00066 kp = str(self.devFrame.layout().itemAt(1).widget().text())
00067 ki = str(self.devFrame.layout().itemAt(3).widget().text())
00068 kd = str(self.devFrame.layout().itemAt(5).widget().text())
00069
00070 if kp != motor['kp']:
00071 self._client.send("motor|%d|1|%s" % (motorNum, kp))
00072 if ki != motor['ki']:
00073 self._client.send("motor|%d|2|%s" % (motorNum, ki))
00074 if kd != motor['kd']:
00075 self._client.send("motor|%d|3|%s" % (motorNum, kd))
00076 except error:
00077 QMessageBox.critical(self,'Error', 'RiCBoard not connected')