Changeset 9bf1fe2 in robotics


Ignore:
Timestamp:
08/11/13 17:19:34 (8 years ago)
Author:
Steve Castellotti <sc@…>
Branches:
master
Children:
16b98d5
Parents:
f85088d
Message:

python/udp:

  • Updated to match lilia controller.py
Location:
wheelchair
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • wheelchair/python/DoraRecieve.py

    • Property mode changed from 100644 to 100755
    r1b1715a r9bf1fe2  
    2626 
    2727SOCKET = 20320 
     28 
     29DEFAULT_SPEED = 5 
     30 
    2831currentTarget= 'i' 
    2932previousTarget= 'i' 
     33 
     34DIRECTION_CODES = { 
     35        '0': '', \ 
     36        '1': 'left', \ 
     37        '2': 'right', \ 
     38        '3': 'reverse', \ 
     39        '4': 'forward', \ 
     40        '5': 'stop' 
     41} 
     42 
     43#KEY_CODES = { 
     44        #'':        '', \ 
     45        #'left':    'j', \ 
     46        #'right':   'l', \ 
     47        #'reverse': 'k', \ 
     48        #'forward': 'i', \ 
     49        #'stop':    ' ' 
     50#} 
     51 
     52KEY_CODES = { 
     53        'left': 'left', \ 
     54        'right': 'right', \ 
     55        'reverse': 'rev', \ 
     56        'forward': 'fwd', \ 
     57        'stop': 'stop' 
     58} 
     59 
     60#CONTROLS = { 'fwd': 'F', 
     61             #'rev': 'B', 
     62             #'right': 'R', 
     63             #'left': 'L', 
     64#} 
     65 
     66CONTROLS = { 
     67        'forward': 'F', \ 
     68        'left': 'L', \ 
     69        'right': 'R', \ 
     70        'reverse': 'B' 
     71} 
    3072 
    3173 
     
    92134 
    93135 
    94                         try: 
    95                                 self.wheelchair.sendCommand('1','i') 
    96                         #except TypeError: 
    97                                 #print "Wheelchair does not blah."  
    98                         except Exception, e: 
    99                                 if DEBUG: 
    100                                         print "ERROR: Exception:", 
    101                                         print e 
     136                        #if DEBUG: 
     137                                #print "Datagram: %s" % datagram 
     138                                #print datagram 
     139                                #print 
     140                                #print type(datagram) 
     141                                #print 
     142 
     143 
     144 
     145                        #try: 
     146                                 
     147                        if True: 
     148                                #self.wheelchair.sendCommand('1','i') 
     149                                 
     150                                datagram = str(datagram) 
     151                                 
     152                                #if DEBUG: 
     153                                        #print "Datagram str():", 
     154                                        #print datagram 
     155                                        #print 
     156                                        #print type(datagram) 
     157                                        #print 
     158                                 
     159                                #DIRECTION_CODES = { 
     160                                        #'0': '', \ 
     161                                        #'1': 'left', \ 
     162                                        #'2': 'right', \ 
     163                                        #'3': 'reverse', \ 
     164                                        #'4': 'forward', \ 
     165                                        #'5': 'stop' 
     166                                #} 
     167                                 
     168                                #KEY_CODES = { 
     169                                        #'':        '', \ 
     170                                        #'left':    'j', \ 
     171                                        #'right':   'l', \ 
     172                                        #'reverse': 'k', \ 
     173                                        #'forward': 'i', \ 
     174                                        #'stop':    ' ' 
     175                                #} 
     176                                 
     177                                 
     178                                if (datagram in DIRECTION_CODES.keys()): 
     179                                         
     180                                        direction = DIRECTION_CODES[datagram] 
     181                                         
     182                                        #print direction 
     183                                         
     184                                        if ((direction in KEY_CODES.keys()) and \ 
     185                                            (KEY_CODES[direction] != '')): 
     186                                         
     187                                                key_code = KEY_CODES[direction] 
     188                                                 
     189                                                 
     190                                                if DEBUG: 
     191                                                        print "[Dora] Direction: %s Sending: %s" % \ 
     192                                                                (direction, key_code) 
     193                                                 
     194                                                 
     195                                                self.wheelchair.sendCommand('%i' % DEFAULT_SPEED, key_code) 
     196                         
     197                                else: 
     198                                         
     199                                        print DIRECTION_CODES.keys() 
     200                         
     201                        #except Exception, e: 
     202                                #if DEBUG: 
     203                                        #print "ERROR: Exception:", 
     204                                        #print e 
    102205                                 
    103206 
  • wheelchair/python/Wheelchair_Control.py

    r1b1715a r9bf1fe2  
    44# Puzzlebox - Brainstorms - Wheelchair Control 
    55# 
    6 # Copyright Puzzlebox Productions, LLC (2010-2012) 
     6# Copyright Puzzlebox Productions, LLC (2010-2013) 
    77# 
    88# This code is released under the GNU Pulic License (GPL) version 2 
     
    1010 
    1111__changelog__ = """ 
    12 Last Update: 2012.08.05 
     12Last Update: 2013.08.11 
    1313 
    1414""" 
     
    1919import serial 
    2020import select 
     21import termios, select, sys, tty 
    2122 
    2223#import Configuration as configuration 
     
    101102} 
    102103 
     104# 2013.08.11 
     105#MOVE_COMMANDS ={ 
     106                #' ' : 'stop', 
     107                #'i' : 'fwd', 
     108                #'m' : 'rev', 
     109                #'j' : 'left', 
     110                #'k' : 'right', 
     111                #} 
     112 
     113 
    103114MOVE_COMMANDS ={ 
    104                 ' ' : 'stop', 
    105                 'i' : 'fwd', 
    106                 'm' : 'rev', 
    107                 'j' : 'left', 
    108                 'k' : 'right', 
    109                 } 
     115        ' ' : 'stop', 
     116        'i' : 'fwd', 
     117        'k' : 'rev', 
     118        'j' : 'left', 
     119        'l' : 'right', 
     120} 
     121 
    110122 
    111123#SPEED_COMMANDS = { 
     
    122134 
    123135DIGITS = map(str,range(10)) 
     136 
     137#PORT = serial.Serial("/dev/arduino1",baudrate=57600,bytesize=serial.EIGHTBITS) 
     138PORT = None 
    124139 
    125140STOP_TIME = 0 
     
    252267        def sendCommand(self, speed, command): 
    253268                 
    254                 output = '%s%s' % (COMMAND_CHARACTER, \ 
    255                         WHEELCHAIR_COMMANDS[speed][command]) 
    256                  
    257                 self.device.write(output) 
     269                #output = '%s%s' % (COMMAND_CHARACTER, \ 
     270                        #WHEELCHAIR_COMMANDS[speed][command]) 
     271                 
     272                 
     273                if speed != self.wheelchair_speed: 
     274                        self.setSpeed(speed) 
     275                 
     276                 
     277                self.moveBot(command) 
     278                 
     279                #self.device.write(output) 
     280                 
     281                #if self.DEBUG: 
     282                        #print "--> Wheelchair Command: %s (Speed %i) [%s]" % \ 
     283                           #(command, speed, output) 
    258284                 
    259285                if self.DEBUG: 
    260                         print "--> Wheelchair Command: %s (Speed %i) [%s]" % \ 
    261                            (command, speed, output) 
    262                  
    263                 self.wheelchair_speed = speed 
     286                        print "--> Wheelchair Command: %s (Speed %i)" % \ 
     287                           (command, self.speed) 
     288                 
     289                #self.wheelchair_speed = speed 
     290                self.wheelchair_speed = self.speed 
     291                 
    264292                self.wheelchair_command = command 
     293         
     294         
     295        ################################################################## 
     296         
     297        #def writeOutput(self, output): 
     298                 
     299                #self.device.write(output) 
    265300         
    266301         
     
    318353                        self.device.write(data) 
    319354                        self.device.write("Pz") 
    320                          
     355                 
    321356                except: 
    322357                        if self.DEBUG: 
     
    335370         
    336371         
    337         #def moveBot(self, dir, speed): 
     372        # 2013.08.11 
     373        ##def moveBot(self, dir, speed): 
     374        #def moveBot(self, dir): 
     375                #if (dir in ['left','right']): 
     376                        ##output = CONTROLS[dir] + chr(int(speed * steeringsensitivity)) 
     377                        #output = CONTROLS[dir] + chr(int(self.speed * STEERING_SENSITIVITY)) 
     378                #else: 
     379                        #output = CONTROLS[dir] + chr(self.speed) 
     380                #self.setOutput(output) 
     381         
     382         
    338383        def moveBot(self, dir): 
    339                 if (dir in ['left','right']): 
    340                         #output = CONTROLS[dir] + chr(int(speed * steeringsensitivity)) 
    341                         output = CONTROLS[dir] + chr(int(self.speed * STEERING_SENSITIVITY)) 
     384                 
     385                if (dir == 'stop'): 
     386                        output = 'SS' 
     387                 
    342388                else: 
    343389                        output = CONTROLS[dir] + chr(self.speed) 
     390                 
     391                if self.DEBUG: 
     392                        print "moveBot: Output:", 
     393                        print output 
     394                 
    344395                self.setOutput(output) 
    345396         
     
    398449        def isData(self): 
    399450                return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []) 
     451         
     452         
     453        def main(): 
     454                while True: 
     455                        PORT.write("Pz") 
     456                        cmd = "" #cmd = MYGETCH() 
     457                        if isData(): 
     458                                cmd = sys.stdin.read(1) 
     459                                if cmd == 'x': 
     460                                        break 
     461                                if len(cmd) > 0: 
     462                                        handleCommand(cmd) 
     463                                        #if cmd == '?': 
     464                                        printHelp() 
     465                        #if PORT.inWaiting() > 0: 
     466                        #       print PORT.readline() 
    400467         
    401468         
     
    565632##################################################################### 
    566633 
    567  
     634def setOutput(data): 
     635        PORT.write(data) 
     636        PORT.write("Pz") 
     637#       print 'Output set to:', data[0], ord(data[1]) 
     638#       printHelp() 
     639 
     640 
     641def setDrive(value): 
     642        if value == 'A': 
     643                setOutput('DA') 
     644        if value == 'B': 
     645                setOutput('DB') 
     646 
     647 
     648def moveBot(dir, speed): 
     649        output = CONTROLS[dir] + chr(speed) 
     650        setOutput(output) 
     651 
     652 
     653def stopBot(): 
     654        setOutput('SS') 
     655 
     656 
     657def setSpeed(value): 
     658        global speed 
     659        speed = value 
     660        if speed > 255: 
     661                speed = 255 
     662        if speed < 0: 
     663                speed = 0 
     664        print 'speed:', speed, '/ 255' 
     665 
     666 
     667def handleCommand(cmd): 
     668        global speed 
     669        if cmd in DIGITS: # 0-9 
     670                setSpeed(int(cmd)*255/9) 
     671        if cmd in SPEED_COMMANDS.keys(): 
     672                setSpeed(speed + SPEED_COMMANDS[cmd]) 
     673        elif cmd in MOVE_COMMANDS.keys(): 
     674                if MOVE_COMMANDS[cmd] == 'stop': 
     675                        stopBot() 
     676                else: 
     677                        print MOVE_COMMANDS[cmd] 
     678                        moveBot(MOVE_COMMANDS[cmd], speed) 
     679        elif cmd == 'w': 
     680                rockets.up() 
     681        elif cmd == 'e': 
     682                rockets.down() 
     683        elif cmd == 'q': 
     684                rockets.left() 
     685        elif cmd == 'r': 
     686                rockets.right()  
     687        elif cmd == 't': 
     688                rockets.laser() 
     689        elif cmd == 'y': 
     690                rockets.fire() 
     691        elif cmd == 'a': 
     692                setDrive('A') 
     693        elif cmd == 'b': 
     694                setDrive('B') 
     695  
     696def printHelp(): 
     697        print 'commands: ' 
     698        print 'i j k l to move, SPACE = stop, x = quit' 
     699        print 's d f g or 0-9 to adjust speed between 0 and 255.' 
     700 
     701 
     702def isData(): 
     703        return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []) 
     704 
     705def main(): 
     706        while True: 
     707                PORT.write("Pz") 
     708                cmd = "" #cmd = MYGETCH() 
     709                if isData(): 
     710                        cmd = sys.stdin.read(1) 
     711                        if cmd == 'x': 
     712                                break 
     713                        if len(cmd) > 0: 
     714                                handleCommand(cmd) 
     715                                #if cmd == '?': 
     716                                printHelp() 
     717                #if PORT.inWaiting() > 0: 
     718                #       print PORT.readline() 
     719 
     720 
     721##################################################################### 
     722# Main 
     723##################################################################### 
     724 
     725if __name__ == "__main__": 
     726         
     727        PORT = serial.Serial("/dev/arduino1",baudrate=57600,bytesize=serial.EIGHTBITS) 
     728         
     729        old_settings = termios.tcgetattr(sys.stdin) 
     730        stopBot() 
     731        speed = 0 
     732         
     733        try: 
     734                tty.setcbreak(sys.stdin.fileno()) 
     735                main() 
     736        finally: 
     737                termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings) 
     738 
  • wheelchair/python/broadcast_simulate.py

    rc018147 r9bf1fe2  
    5757                self.statusLabel.setText(self.tr("Now broadcasting %s" % self.messageNo)) 
    5858                 
    59                 datagram = "Broadcast message %s" % self.messageNo 
     59                #datagram = "Broadcast message %s" % self.messageNo 
     60                datagram = "%s" % self.messageNo 
    6061                 
    6162                self.udpSocket.writeDatagram(datagram, QtNetwork.QHostAddress(QtNetwork.QHostAddress.Broadcast), SOCKET) 
  • wheelchair/udp/broadcastreceiver.py

    • Property mode changed from 100644 to 100755
    r6a76f6a r9bf1fe2  
    3232        def processPendingDatagrams(self): 
    3333                while self.udpSocket.hasPendingDatagrams(): 
    34                                 datagram, host, port = self.udpSocket.readDatagram(self.udpSocket.pendingDatagramSize()) 
     34                         
     35                        datagram, host, port = self.udpSocket.readDatagram(self.udpSocket.pendingDatagramSize()) 
    3536 
    36                                 try: 
    37                                         # Python v3. 
    38                                         datagram = str(datagram, encoding='ascii') 
    39                                 except TypeError: 
    40                                         # Python v2. 
    41                                         pass 
     37                        try: 
     38                                # Python v3. 
     39                                datagram = str(datagram, encoding='ascii') 
     40                        except TypeError: 
     41                                # Python v2. 
     42                                pass 
    4243 
    43                                 self.statusLabel.setText("Received datagram: \"%s\"" % datagram) 
     44                        self.statusLabel.setText("Received datagram: \"%s\"" % datagram) 
    4445 
    4546 
  • wheelchair/udp/broadcastsender.py

    • Property mode changed from 100644 to 100755
    r6a76f6a r9bf1fe2  
    1010                QtGui.QDialog.__init__(self, parent) 
    1111                 
    12                 self.statusLabel = QtGui.QLabel(self.tr("Ready to broadcast datagramms on port 45454")) 
     12                self.statusLabel = QtGui.QLabel(self.tr("Ready to broadcast datagramms on port %i" %SOCKET)) 
    1313                self.startButton = QtGui.QPushButton(self.tr("&Start")) 
    1414                self.quitButton = QtGui.QPushButton(self.tr("&Quit")) 
Note: See TracChangeset for help on using the changeset viewer.