Changeset 422
- Timestamp:
- 02/20/09 19:11:05 (3 years ago)
- Location:
- trunk/software/rb
- Files:
-
- 3 modified
-
drive.py (modified) (7 diffs)
-
gui/analog.py (modified) (1 diff)
-
gui/gui.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/software/rb/drive.py
r421 r422 47 47 48 48 messages = { 49 'disable' : [{'op':0 , 'fmt':'' }, {'op':1 , 'fmt':' '}], # (nil)50 'enable' : [{'op':2 , 'fmt':'' }, {'op':3 , 'fmt':' '}], # (nil)51 'setdc' : [{'op':4 , 'fmt':'>h' }, {'op':5 , 'fmt':' '}], # (int16_t dc)49 'disable' : [{'op':0 , 'fmt':'' }, {'op':1 , 'fmt':'>B' }], # (nil) 50 'enable' : [{'op':2 , 'fmt':'' }, {'op':3 , 'fmt':'>B' }], # (nil) 51 'setdc' : [{'op':4 , 'fmt':'>h' }, {'op':5 , 'fmt':'>B' }], # (int16_t dc) 52 52 'getdc' : [{'op':6 , 'fmt':'' }, {'op':7 , 'fmt':'>h' }], # (int16_t dc) 53 'setgain' : [{'op':8 , 'fmt':'>hhh'}, {'op':9 , 'fmt':' '}], # (int16_t Kp, int16_t Ki, int16_t Kd)53 'setgain' : [{'op':8 , 'fmt':'>hhh'}, {'op':9 , 'fmt':'>B' }], # (int16_t Kp, int16_t Ki, int16_t Kd) 54 54 'getgain' : [{'op':10, 'fmt':'' }, {'op':11, 'fmt':'>hhh'}], # (int16_t Kp, int16_t Ki, int16_t Kd) 55 'setspeed': [{'op':12, 'fmt':'>h' }, {'op':13, 'fmt':' '}], # (int16_t rpm)55 'setspeed': [{'op':12, 'fmt':'>h' }, {'op':13, 'fmt':'>B' }], # (int16_t rpm) 56 56 'getspeed': [{'op':14, 'fmt':'' }, {'op':15, 'fmt':'>h' }], # (int16_t speed) 57 57 'getstat' : [{'op':16, 'fmt':'' }, {'op':17, 'fmt':'>hhh'}], # (int16_t p, int16_t i, int16_t d) 58 'eewrite' : [{'op':18, 'fmt':'' }, {'op':19, 'fmt':' '}], # (nil)58 'eewrite' : [{'op':18, 'fmt':'' }, {'op':19, 'fmt':'>B' }], # (nil) 59 59 } 60 60 … … 75 75 self.left = Motor(ldev) 76 76 self.right = Motor(rdev) 77 self.setspeed(0.0, 0.0)77 #self.setspeed(0.0, 0.0) 78 78 79 79 def _get_running(self): … … 111 111 for each, respectively. 112 112 ''' 113 print "Drive.setspeed: %f, %f" % (left, right)113 #print "Drive.setspeed: %f, %f" % (left, right) 114 114 self.left.target = clip(left, -1.0, 1.0)*MAX 115 115 self.right.target = clip(right, -1.0, 1.0)*MAX … … 135 135 136 136 def __init__(self, port): 137 self._port_name = port 137 138 self.running = True 138 139 self.target = 0 # Speed the motor coltrollers should be at 139 140 self._port = Serial(port, 19200, timeout=.5) 140 #self._port = open("/tmp/fake", "w+") 141 sleep(1) 142 #print "wrote: ", self._port.write(chr(14) + chr(0)) 143 #print "read: ", len(self._port.read(4)) 141 144 self._port_lock = Lock() 142 145 start_new_thread(self._main, ()) 143 146 144 147 def _main(self): 148 print "Motor._main: starting" 145 149 while self.running: 150 #print "Motor._main: stepping" 146 151 cur = self._send("getspeed") 147 if cur: 148 inc = min(0.05*MAX, abs(self.target - cur)) 149 if cur < self.target: 150 self._send("setspeed", cur + inc) 151 elif cur > self.target: 152 self._send("setspeed", cur - inc) 153 else: 154 self._send("setspeed", cur) # Ping! 152 if cur != None: 153 #print "updating speed, cur=%d target=%d" % (cur, self.target) 154 #inc = min(0.05*MAX, abs(self.target - cur)) 155 #if cur < self.target: 156 # self._send("setspeed", cur + inc) 157 #elif cur > self.target: 158 # self._send("setspeed", cur - inc) 159 #else: 160 self._send("setspeed", self.target) # Ping! 161 else: 162 print "Motor._main: timeout getting speed" 155 163 sleep(.1) 164 print "Motor._main: exiting" 156 165 self._send("setspeed", 0) 157 166 … … 163 172 # Transmit query 164 173 t_st = struct.pack(t['fmt'], *t_data) 165 self._port.write(chr(t['op'])) 174 #print "Motor(%s)._send: %s (%d) - %d bytes" % \ 175 # (self._port_name, type, t['op'], len(t_st)) 176 ln = self._port.write(chr(t['op'])) 166 177 self._port.write(chr(len(t_st))) 167 178 self._port.write(t_st) … … 172 183 print "Motor._send: Timeout reading `r_type' from motor controller" 173 184 elif r_op != chr(r['op']): 174 print "Motor._send: Recieved incorrect `r_type' from motor controller"185 print "Motor._send: Recieved incorrect `r_type' (%d) from motor controller" % ord(r_op) 175 186 176 187 r_length = self._port.read(1) 177 188 if len(r_length) != 1: 178 189 print "Motor._send: Timeout reading `r_length' from motor controller" 190 self._port_lock.release() 179 191 return 180 192 r_length = ord(r_length) 181 193 if r_length != struct.calcsize(r['fmt']): 182 print "Motor._send: Recieved incorrect `r_length' from motor controller"194 print "Motor._send: Recieved incorrect `r_length' (%d) from motor controller" % r_length 183 195 184 196 if r_length == 0: 185 197 # No need to recieve/unpack structure 198 self._port_lock.release() 186 199 return 200 187 201 188 202 r_st = self._port.read(r_length) … … 193 207 if (len(r_data) == 1): 194 208 # struct's return format is annoying 195 return r_data(0) 209 self._port_lock.release() 210 return r_data[0] 196 211 197 212 self._port_lock.release() -
trunk/software/rb/gui/analog.py
r404 r422 57 57 58 58 # Draw Current Speed 59 x = float(self.controller.drive.left.current - self.controller.drive.right.current) 60 y = float(self.controller.drive.left.current + self.controller.drive.right.current) 59 lcur, rcur = self.controller.drive.getspeed() 60 x = float(lcur - rcur) 61 y = float(lcur + rcur) 61 62 x = ( x/4+0.5) * w 62 63 y = (-y/4+0.5) * h -
trunk/software/rb/gui/gui.py
r404 r422 80 80 def set_speed(self, lspeed, rspeed): 81 81 # Constrain l and r 82 self.drive.set _speeds(lspeed, rspeed)82 self.drive.setspeed(lspeed, rspeed) 83 83 self.analog.redraw(None) 84 84

