Changeset 424
- Timestamp:
- 02/25/09 16:16:59 (3 years ago)
- Location:
- trunk/software/rb
- Files:
-
- 2 modified
-
drive.py (modified) (8 diffs)
-
gui/gui.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/software/rb/drive.py
r422 r424 91 91 corresponding data. If data is None, it will not be set 92 92 ''' 93 if lt_data ==None:93 if lt_data is None: 94 94 l = None 95 95 else: 96 96 l = self.left._send(type, *lt_data) 97 if rt_data ==None:97 if rt_data is None: 98 98 r = None 99 99 else: … … 112 112 ''' 113 113 #print "Drive.setspeed: %f, %f" % (left, right) 114 self.left.target = clip(left, -1.0, 1.0) *MAX115 self.right.target = clip(right, -1.0, 1.0) *MAX114 self.left.target = clip(left, -1.0, 1.0) * MAX 115 self.right.target = clip(right, -1.0, 1.0) * MAX 116 116 117 117 def getspeed(self): 118 return (float(self.left._send( "getspeed")*50*60/256) / MAX, 119 float(self.right._send("getspeed")*50*60/256) / MAX) 118 return (self.left.current, self.right.current) 120 119 121 120 def disable(self): return self._split("disable", (), ()) … … 137 136 self._port_name = port 138 137 self.running = True 139 self.target = 0 # Speed the motor coltrollers should be at 138 self.target = 0 # Speed the motor controllers should be at 139 self.current = 0 # Latest reported speed of the motors 140 140 self._port = Serial(port, 19200, timeout=.5) 141 141 sleep(1) 142 #print "wrote: ", self._port.write(chr(14) + chr(0))143 #print "read: ", len(self._port.read(4))144 142 self._port_lock = Lock() 145 143 start_new_thread(self._main, ()) … … 150 148 #print "Motor._main: stepping" 151 149 cur = self._send("getspeed") 152 if cur !=None:150 if cur is not None: 153 151 #print "updating speed, cur=%d target=%d" % (cur, self.target) 154 152 #inc = min(0.05*MAX, abs(self.target - cur)) … … 158 156 # self._send("setspeed", cur - inc) 159 157 #else: 158 self.current = (cur*50*60 / 256.0) / MAX 160 159 self._send("setspeed", self.target) # Ping! 161 160 else: 162 161 print "Motor._main: timeout getting speed" 163 sleep(. 1)162 sleep(.05) 164 163 print "Motor._main: exiting" 165 164 self._send("setspeed", 0) … … 167 166 def _send(self, type, *t_data): 168 167 self._port_lock.acquire() 169 170 t, r = messages[type] 171 172 # Transmit query 173 t_st = struct.pack(t['fmt'], *t_data) 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'])) 177 self._port.write(chr(len(t_st))) 178 self._port.write(t_st) 179 180 # Recieve response 181 r_op = self._port.read(1) 182 if len(r_op) != 1: 183 print "Motor._send: Timeout reading `r_type' from motor controller" 184 elif r_op != chr(r['op']): 185 print "Motor._send: Recieved incorrect `r_type' (%d) from motor controller" % ord(r_op) 186 187 r_length = self._port.read(1) 188 if len(r_length) != 1: 189 print "Motor._send: Timeout reading `r_length' from motor controller" 168 try: 169 t, r = messages[type] 170 171 # Transmit query 172 t_st = struct.pack(t['fmt'], *t_data) 173 #print "Motor(%s)._send: %s (%d) - %d bytes" % \ 174 # (self._port_name, type, t['op'], len(t_st)) 175 ln = self._port.write(chr(t['op'])) 176 self._port.write(chr(len(t_st))) 177 self._port.write(t_st) 178 179 # Recieve response 180 r_op = self._port.read(1) 181 if len(r_op) != 1: 182 print "Motor._send: Timeout reading `r_type' from motor controller" 183 elif r_op != chr(r['op']): 184 print "Motor._send: Recieved incorrect `r_type' (%d) from motor controller" % ord(r_op) 185 186 r_length = self._port.read(1) 187 if len(r_length) != 1: 188 print "Motor._send: Timeout reading `r_length' from motor controller" 189 return None 190 r_length = ord(r_length) 191 if r_length != struct.calcsize(r['fmt']): 192 print "Motor._send: Recieved incorrect `r_length' (%d) from motor controller" % r_length 193 194 if r_length == 0: 195 return None 196 197 r_st = self._port.read(r_length) 198 if len(r_st) != r_length: 199 print "Motor._send: Timeout reading `r_data' from motor controller" 200 r_data = struct.unpack(r['fmt'], r_st) 201 202 if len(r_data) == 1: 203 # struct's return format is annoying 204 return r_data[0] 205 return r_data 206 finally: 190 207 self._port_lock.release() 191 return192 r_length = ord(r_length)193 if r_length != struct.calcsize(r['fmt']):194 print "Motor._send: Recieved incorrect `r_length' (%d) from motor controller" % r_length195 196 if r_length == 0:197 # No need to recieve/unpack structure198 self._port_lock.release()199 return200 201 202 r_st = self._port.read(r_length)203 if len(r_st) != r_length:204 print "Motor._send: Timeout reading `r_data' from motor controller"205 r_data = struct.unpack(r['fmt'], r_st)206 207 if (len(r_data) == 1):208 # struct's return format is annoying209 self._port_lock.release()210 return r_data[0]211 212 self._port_lock.release()213 return r_data214 208 215 209 … … 229 223 self.left.target = left 230 224 self.right.target = right 225 226 def getspeed(self): 227 return (self.left.target, self.right.target) 231 228 232 229 … … 234 231 def __init__(self, *args, **kwargs): 235 232 self.target = 0 233 236 234 def _send(type, *t_data): 237 print "sending %s - %s" % (type, repr(t_data)) 235 print "FakeMotor sending %s - %s" % (type, repr(t_data)) 236 237 current = property(lambda s: s.target) -
trunk/software/rb/gui/gui.py
r422 r424 9 9 from rb.gui.analog import AnalogWidget 10 10 11 import os.path 12 11 13 # Full path to the GUI definition file 12 import os.path13 14 GTKBUILDER_FILE = os.path.join(os.path.dirname(__file__), 'gui.xml') 14 15 … … 19 20 20 21 def __init__(self): 21 # TODO: move analog/digital to other files22 22 Controller.__init__(self) 23 23 … … 61 61 # Switch tabs 62 62 elif event.keyval == gtk.keysyms.Tab: 63 nb.set_current_page(not tab) 64 63 nb.set_current_page(not tab) # FIXME: make this robust 65 64 66 65 # Set motor speeds … … 68 67 lo, ro = self.arrow_keys_map[event.keyval] 69 68 self.set_speed(self.drive.left.target+lo, 70 self.drive.right.target+ro)69 self.drive.right.target+ro) 71 70 72 71 # Key not found … … 74 73 return False 75 74 76 # Stop event prop igation75 # Stop event propagation 77 76 return True 78 77

