Changeset 487
- Timestamp:
- 05/12/09 20:37:14 (3 years ago)
- Location:
- trunk/software/rb
- Files:
-
- 3 modified
-
controller.py (modified) (1 diff)
-
drive.py (modified) (7 diffs)
-
gui/speedgraph.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/software/rb/controller.py
r485 r487 43 43 self.data_queue = Queue() 44 44 self.init_drive() 45 self.init_camera()45 #self.init_camera() 46 46 #self.init_gps() 47 47 #self.init_microstrain() -
trunk/software/rb/drive.py
r482 r487 63 63 64 64 65 # TODO:66 # - Make motors public so they can be accessed directly67 # - Rename: TestPlatformDrive -> Drive68 # legacy2008.py -> Drive.py69 # - Remove helper methods from DiffDrive70 71 65 class Drive(object): 72 66 ''' … … 78 72 self.controller = controller 79 73 self.running = True 74 self._stats = ((0, 0, 0), (0, 0, 0)) 80 75 self.left = Motor(self, ldev) 81 76 self.right = Motor(self, rdev) … … 84 79 def _main(self): 85 80 while self.running: 81 # Get the current speed 86 82 lcur, rcur = self._split('getspeed', (), ()) 87 83 if lcur is not None: … … 95 91 if lcur is not None and rcur is not None: 96 92 self.controller.send('drive_speeds', self.getspeed()) 93 94 # Get the PID numbers 95 try: 96 (lp, li, ld), (rp, ri, rd) = self._split('getstat', (), ()) 97 except ValueError: # Failed to get so unpacking failed 98 print "Drive._main: timeout getting stats" 99 else: 100 self._stats = ((lp, li, ld), (rp, ri, rd)) 101 self.controller.sent('drive_stats', (lp, li, ld), (rp, ri, rd)) 102 97 103 time.sleep(.05) 98 104 … … 128 134 def getspeed(self): 129 135 return (self.left.current, self.right.current) 130 136 137 def getstat(self): 138 return self._stats 139 131 140 def disable(self): return self._split("disable", (), ()) 132 141 def enable (self): return self._split("enable" , (), ()) … … 218 227 self.left = FakeMotor() 219 228 self.right = FakeMotor() 229 self._stat_counter = 0 220 230 start_new_thread(self._main, ()) 221 231 … … 234 244 def gettarget(self): 235 245 return (self.left.target, self.right.target) 246 247 def getstat(self): 248 s = (self._stat_counter % 0xffff) 249 self._stat_counter += 300 250 return (((s + 1000) % 0xffff - 32767, 251 (s + 3000) % 0xffff - 32767, 252 (s + 6000) % 0xffff - 32767), 253 ((s + 8000) % 0xffff - 32767, 254 (s + 10000) % 0xffff - 32767, 255 (s + 14000) % 0xffff - 32767)) 236 256 237 257 def getspeed(self): -
trunk/software/rb/gui/speedgraph.py
r461 r487 29 29 super(SpeedGraph, self).__init__() 30 30 self.drive = drive 31 self.ldata = [] 32 self.ltargets = [] 33 self.rdata = [] 34 self.rtargets = [] 31 self.colors = [ 32 ( 0, .5, 0), # Left speeds 33 ( 0, 1, 0), # Left targets 34 (.5, 0, 0), # Right speeds 35 ( 1, 0, 0), # Right targets 36 ( 0, 0, 0), # Left p 37 ( 0, 0, 0), # Left i 38 ( 0, 0, 0), # Left d 39 ( 0, 0, 0), # Right p 40 ( 0, 0, 0), # Right i 41 ( 0, 0, 0), # Right d 42 ] 43 self.data = [[] for color in self.colors] 35 44 self.connect("expose_event", self.expose) 36 45 gobject.timeout_add(150, self.graph_tick) … … 54 63 context.fill() 55 64 56 if len(self. ldata) < DATA_WINDOW:57 start_x = a.width * (1 - len(self. ldata) / float(DATA_WINDOW))65 if len(self.data[0]) < DATA_WINDOW: 66 start_x = a.width * (1 - len(self.data[0]) / float(DATA_WINDOW)) 58 67 else: 59 68 start_x = 0 60 69 step_x = a.width / float(DATA_WINDOW) 61 self.draw_line(context, center_y, start_x, step_x, ( 0, .5, 0), self.ldata[-DATA_WINDOW:]) 62 self.draw_line(context, center_y, start_x, step_x, ( 0, 1, 0), self.ltargets[-DATA_WINDOW:]) 63 self.draw_line(context, center_y, start_x, step_x, (.5, 0, 0), self.rdata[-DATA_WINDOW:]) 64 self.draw_line(context, center_y, start_x, step_x, ( 1, 0, 0), self.rtargets[-DATA_WINDOW:]) 70 for color, data in zip(self.colors, self.data): 71 self.draw_line(context, center_y, start_x, step_x, color, data[-DATA_WINDOW:]) 65 72 66 73 return False … … 78 85 79 86 def graph_tick(self): 80 ltarget, rtarget = self.drive.gettarget() 81 lspeed, rspeed = self.drive.getspeed() 82 self.ldata.append(lspeed) 83 self.ltargets.append(ltarget) 84 self.rdata.append(rspeed) 85 self.rtargets.append(rtarget) 87 lt, rt = self.drive.gettarget() 88 ls, rs = self.drive.getspeed() 89 lst, rst = self.drive.getstat() 90 new_data = [lt, rt, ls, rs] 91 new_data += [s / 32767.0 for s in (lst + rst)] 92 93 for datum, list in zip(new_data, self.data): 94 list.append(datum) 86 95 self.queue_draw() 87 96 return True

