ParamManager.py
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')


ric_board
Author(s): RoboTiCan
autogenerated on Fri Oct 27 2017 03:02:30