Rose-Hulman Robotics Team

Changeset 422

Show
Ignore:
Timestamp:
02/20/09 19:11:05 (3 years ago)
Author:
spenceal
Message:

fixing bugs in the python motor code

Location:
trunk/software/rb
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/software/rb/drive.py

    r421 r422  
    4747 
    4848messages = { 
    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)                          
    5252        '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)  
    5454        '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)                         
    5656        'getspeed': [{'op':14, 'fmt':''    }, {'op':15, 'fmt':'>h'  }], # (int16_t speed)                        
    5757        '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)                                 
    5959} 
    6060 
     
    7575                self.left  = Motor(ldev) 
    7676                self.right = Motor(rdev) 
    77                 self.setspeed(0.0, 0.0) 
     77                #self.setspeed(0.0, 0.0) 
    7878         
    7979        def _get_running(self): 
     
    111111                for each, respectively. 
    112112                ''' 
    113                 print "Drive.setspeed: %f, %f" % (left, right) 
     113                #print "Drive.setspeed: %f, %f" % (left, right) 
    114114                self.left.target  = clip(left,  -1.0, 1.0)*MAX 
    115115                self.right.target = clip(right, -1.0, 1.0)*MAX 
     
    135135         
    136136        def __init__(self, port): 
     137                self._port_name = port 
    137138                self.running    = True 
    138139                self.target     = 0 # Speed the motor coltrollers should be at 
    139140                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)) 
    141144                self._port_lock = Lock() 
    142145                start_new_thread(self._main, ()) 
    143146 
    144147        def _main(self): 
     148                print "Motor._main: starting" 
    145149                while self.running: 
     150                        #print "Motor._main: stepping" 
    146151                        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" 
    155163                        sleep(.1) 
     164                print "Motor._main: exiting" 
    156165                self._send("setspeed", 0) 
    157166         
     
    163172                # Transmit query 
    164173                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'])) 
    166177                self._port.write(chr(len(t_st))) 
    167178                self._port.write(t_st) 
     
    172183                        print "Motor._send: Timeout reading `r_type' from motor controller" 
    173184                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) 
    175186 
    176187                r_length = self._port.read(1) 
    177188                if len(r_length) != 1: 
    178189                        print "Motor._send: Timeout reading `r_length' from motor controller" 
     190                        self._port_lock.release() 
    179191                        return 
    180192                r_length = ord(r_length) 
    181193                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 
    183195 
    184196                if r_length == 0: 
    185197                        # No need to recieve/unpack structure 
     198                        self._port_lock.release() 
    186199                        return 
     200 
    187201                 
    188202                r_st = self._port.read(r_length) 
     
    193207                if (len(r_data) == 1): 
    194208                        # struct's return format is annoying 
    195                         return r_data(0) 
     209                        self._port_lock.release() 
     210                        return r_data[0] 
    196211 
    197212                self._port_lock.release() 
  • trunk/software/rb/gui/analog.py

    r404 r422  
    5757 
    5858                # 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) 
    6162                x =  ( x/4+0.5) * w 
    6263                y =  (-y/4+0.5) * h 
  • trunk/software/rb/gui/gui.py

    r404 r422  
    8080        def set_speed(self, lspeed, rspeed): 
    8181                # Constrain l and r 
    82                 self.drive.set_speeds(lspeed, rspeed) 
     82                self.drive.setspeed(lspeed, rspeed) 
    8383                self.analog.redraw(None) 
    8484