Go to the documentation of this file.00001 __author__ = 'tom1231'
00002 from PyQt4.QtGui import *
00003 from BAL.Interface.DeviceFrame import DeviceFrame, DIFF_CLOSE
00004
00005
00006 class DiffClose(DeviceFrame):
00007 def __init__(self, frame, data, motors):
00008 DeviceFrame.__init__(self, DIFF_CLOSE, frame, data)
00009 self.motors = motors
00010 self._pubHz = '50'
00011 self._name = 'diff_driver'
00012 self._rWheel = '0.065'
00013 self._width = '0.255'
00014 self._base = 'base_link'
00015 self._odom = 'odom_link'
00016 self._slip = '0.85'
00017 self._maxAg = '16.0'
00018 self._maxLn = '16.0'
00019 self._motorL = '0'
00020 self._motorR = '1'
00021
00022 def fromDict(self, data):
00023 self._pubHz = data['pubHz']
00024 self._name = data['name']
00025 self._rWheel = data['rWheel']
00026 self._width = data['width']
00027 self._base = data['base']
00028 self._odom = data['odom']
00029 self._slip = data['slip']
00030 self._maxAg = data['maxAg']
00031 self._maxLn = data['maxLn']
00032 self._motorL = data['motorL']
00033 self._motorR = data['motorR']
00034
00035 def toDict(self):
00036 data = dict()
00037
00038 data['type'] = DIFF_CLOSE
00039 data['pubHz'] = self._pubHz
00040 data['name'] = self._name
00041 data['rWheel'] = self._rWheel
00042 data['width'] = self._width
00043 data['base'] = self._base
00044 data['odom'] = self._odom
00045 data['slip'] = self._slip
00046 data['maxAg'] = self._maxAg
00047 data['maxLn'] = self._maxLn
00048 data['motorL'] = self._motorL
00049 data['motorR'] = self._motorR
00050
00051 return data
00052
00053 def printDetails(self):
00054 self._frame.layout().addRow(QLabel('Publish Hz: '), QLabel(self._pubHz))
00055 self._frame.layout().addRow(QLabel('Name: '), QLabel(self._name))
00056 self._frame.layout().addRow(QLabel('Radius of the wheel (in meters): '), QLabel(self._rWheel))
00057 self._frame.layout().addRow(QLabel('Width of the robot (in meters): '), QLabel(self._width))
00058 self._frame.layout().addRow(QLabel('Base Link name: '), QLabel(self._base))
00059 self._frame.layout().addRow(QLabel('Odometry name: '), QLabel(self._odom))
00060 self._frame.layout().addRow(QLabel('Slip factor: '), QLabel(self._slip))
00061 self._frame.layout().addRow(QLabel('Max angular: '), QLabel(self._maxAg))
00062 self._frame.layout().addRow(QLabel('Max linear: '), QLabel(self._maxLn))
00063 self._frame.layout().addRow(QLabel('MotorL: '), QLabel(self.motors[int(self._motorL)]))
00064 self._frame.layout().addRow(QLabel('MotorR: '), QLabel(self.motors[int(self._motorR)]))
00065
00066 def getName(self):
00067 return self._name
00068
00069 def showDetails(self, items=None):
00070 self.motorsL = QComboBox()
00071 self.motorsR = QComboBox()
00072
00073 for i in xrange(len(self.motors)):
00074 self.motorsL.addItem(self.motors[i], str(i))
00075 self.motorsR.addItem(self.motors[i], str(i))
00076 self.motorsL.setCurrentIndex(int(self._motorL))
00077 self.motorsR.setCurrentIndex(int(self._motorR))
00078 self.pubHz = QLineEdit(self._pubHz)
00079 self.name = QLineEdit(self._name)
00080 self.rWheel = QLineEdit(self._rWheel)
00081 self.width = QLineEdit(self._width)
00082 self.base = QLineEdit(self._base)
00083 self.odom = QLineEdit(self._odom)
00084 self.slip = QLineEdit(self._slip)
00085 self.maxAg = QLineEdit(self._maxAg)
00086 self.maxLn = QLineEdit(self._maxLn)
00087
00088 self._frame.layout().addRow(QLabel('Publish Hz: '), self.pubHz)
00089 self._frame.layout().addRow(QLabel('Name: '), self.name)
00090 self._frame.layout().addRow(QLabel('Radius of the wheel (in meters): '), self.rWheel)
00091 self._frame.layout().addRow(QLabel('Width of the robot (in meters): '), self.width)
00092 self._frame.layout().addRow(QLabel('Base Link name: '), self.base)
00093 self._frame.layout().addRow(QLabel('Odometry name: '), self.odom)
00094 self._frame.layout().addRow(QLabel('Slip factor: '), self.slip)
00095 self._frame.layout().addRow(QLabel('Max angular: '), self.maxAg)
00096 self._frame.layout().addRow(QLabel('Max linear: '), self.maxLn)
00097 self._frame.layout().addRow(self.motorsL, self.motorsR)
00098
00099 def add(self):
00100 old = self._name
00101 self._name = str(self.name.text())
00102 self._motorL = str(self.motorsL.itemData(self.motorsL.currentIndex()).toString())
00103 self._motorR = str(self.motorsR.itemData(self.motorsR.currentIndex()).toString())
00104
00105 if not self.nameIsValid():
00106 error = QErrorMessage()
00107 error.setWindowTitle("Same name error")
00108 error.showMessage("Name already taken.")
00109 error.exec_()
00110 self._name = old
00111 self._isValid = False
00112 return
00113
00114 if self._motorL == self._motorR:
00115 error = QErrorMessage()
00116 error.setWindowTitle(" Error")
00117 error.showMessage("Can not have the same motor in the right and left fields.")
00118 error.exec_()
00119 self._isValid = False
00120 return
00121
00122 self._isValid = True
00123 self._pubHz = str(self.pubHz.text())
00124 self._name = str(self.name.text())
00125 self._rWheel = str(self.rWheel.text())
00126 self._width = str(self.width.text())
00127 self._base = str(self.base.text())
00128 self._odom = str(self.odom.text())
00129 self._slip = str(self.slip.text())
00130 self._maxAg = str(self.maxAg.text())
00131 self._maxLn = str(self.maxLn.text())
00132
00133 def saveToFile(self, file):
00134 file.write('Diff/publishHz: ' + self._pubHz + '\n')
00135 file.write('Diff/name: ' + self._name + '\n')
00136 file.write('Diff/rWheel: ' + self._rWheel + '\n')
00137 file.write('Diff/width: ' + self._width + '\n')
00138 file.write('Diff/baseLink: ' + self._base + '\n')
00139 file.write('Diff/odom: ' + self._odom + '\n')
00140 file.write('Diff/slip: ' + self._slip + '\n')
00141 file.write('Diff/maxAng: ' + self._maxAg + '\n')
00142 file.write('Diff/maxLin: ' + self._maxLn + '\n')
00143 file.write('Diff/motorL: ' + self._motorL + '\n')
00144 file.write('Diff/motorR: ' + self._motorR + '\n')