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