Changeset 87


Ignore:
Timestamp:
07/07/10 16:20:24 (11 years ago)
Author:
sc
Message:

remote_control/puzzlebox_brainstorms_network_client_thinkgear.py:

  • adjustment to debug output for clarity

remote_control/puzzlebox_brainstorms_network_client.py:

  • warning output on timeout waiting for server connections
  • adjustment to debug output for clarity

remote_control/puzzlebox_brainstorms_remote_control.py:

  • adjustment to debug output for clarity

remote_control/puzzlebox_brainstorms_client_interface.py:

  • forward driving halted when disconnected from ThinkGear? server
  • keyboard shortcuts added to direction buttons
  • virtual button presses drawn when driving activated by direction
  • better handling of speed changes in updateSpeed
  • speed dropped to 100 if NXT power threshold exceeded

remote_control/puzzlebox_brainstorms_configuration.ini:

  • ThinkGear? Connect Server Emulator configuration added
  • default Relaxation speed boosts tweaked

remote_control/interface/qt4_form.py:

  • faulty keyboard shortcuts removed

remote_control/puzzlebox_brainstorms_configuration.py:

  • ThinkGear? Connect Server Emulator configuration
  • default Relaxation speed boosts tweaked

remote_control/puzzlebox_brainstorms_client_interface_network.py:

  • initial checkin

remote_control/puzzlebox_brainstorms_client_interface_local.py:

  • initial checking
  • not properly establishing client/server communications

remote_control/puzzlebox_brainstorms_network_server_thinkgear.py

  • adjustment to debug output for clarity
  • some configuration settings moved to configuration module

remote_control/puzzlebox_brainstorms_network_server.py:

  • adjustment to debug output for clarity
Location:
remote_control
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • remote_control/interface/qt4_form.py

    r84 r87  
    33# Form implementation generated from reading ui file 'qt4_form.ui' 
    44# 
    5 # Created: Thu Jul  1 15:54:34 2010 
     5# Created: Wed Jul  7 05:05:51 2010 
    66#      by: PyQt4 UI code generator 4.7.3 
    77# 
     
    11041104"</style></head><body style=\" font-family:\'Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" 
    11051105"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:9pt;\">Relaxation</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
    1106                 self.pushButtonForward.setShortcut(QtGui.QApplication.translate("Form", "W, Up", None, QtGui.QApplication.UnicodeUTF8)) 
    1107                 self.pushButtonTurnRight.setShortcut(QtGui.QApplication.translate("Form", "D, Right", None, QtGui.QApplication.UnicodeUTF8)) 
    1108                 self.pushButtonTurnLeftReverse.setShortcut(QtGui.QApplication.translate("Form", "Z", None, QtGui.QApplication.UnicodeUTF8)) 
    1109                 self.pushButtonReverse.setShortcut(QtGui.QApplication.translate("Form", "S, Down", None, QtGui.QApplication.UnicodeUTF8)) 
    1110                 self.pushButtonTurnRightReverse.setShortcut(QtGui.QApplication.translate("Form", "C", None, QtGui.QApplication.UnicodeUTF8)) 
    11111106                self.lineEditNXTPort.setText(QtGui.QApplication.translate("Form", "N/A", None, QtGui.QApplication.UnicodeUTF8)) 
    1112                 self.pushButtonTurnLeft.setShortcut(QtGui.QApplication.translate("Form", "A, Left", None, QtGui.QApplication.UnicodeUTF8)) 
    11131107                self.label.setText(QtGui.QApplication.translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" 
    11141108"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" 
  • remote_control/interface/qt4_form.ui

    r84 r87  
    673673    </size> 
    674674   </property> 
    675    <property name="shortcut"> 
    676     <string>W, Up</string> 
    677    </property> 
    678675  </widget> 
    679676  <widget class="QPushButton" name="pushButtonTurnRight"> 
     
    11411138    </size> 
    11421139   </property> 
    1143    <property name="shortcut"> 
    1144     <string>D, Right</string> 
    1145    </property> 
    11461140  </widget> 
    11471141  <widget class="QPushButton" name="pushButtonTurnLeftReverse"> 
     
    16091603    </size> 
    16101604   </property> 
    1611    <property name="shortcut"> 
    1612     <string>Z</string> 
    1613    </property> 
    16141605  </widget> 
    16151606  <widget class="QPushButton" name="pushButtonReverse"> 
     
    20772068    </size> 
    20782069   </property> 
    2079    <property name="shortcut"> 
    2080     <string>S, Down</string> 
    2081    </property> 
    20822070  </widget> 
    20832071  <widget class="QPushButton" name="pushButtonTurnRightReverse"> 
     
    25452533    </size> 
    25462534   </property> 
    2547    <property name="shortcut"> 
    2548     <string>C</string> 
    2549    </property> 
    25502535  </widget> 
    25512536  <widget class="QLineEdit" name="lineEditNXTPort"> 
     
    30283013     <height>220</height> 
    30293014    </size> 
    3030    </property> 
    3031    <property name="shortcut"> 
    3032     <string>A, Left</string> 
    30333015   </property> 
    30343016  </widget> 
  • remote_control/puzzlebox_brainstorms_client_interface.py

    r86 r87  
    1212# 
    1313##################################################################### 
     14# To Do 
     15# - server reporting timeout on sendCommand calls from updateEvent 
     16# - disable autorepeating on shortcut keys 
     17##################################################################### 
    1418 
    1519import os, sys 
     
    191195                                  self.connectToThinkGearHost) 
    192196                 
     197                self.pushButtonForward.emit(QtCore.SIGNAL("released()")) 
     198                 
    193199                self.pushButtonThinkGearConnect.setText('Connect') 
    194200                 
     
    241247         
    242248         
     249                #shortcut = QtGui.QShortcut(self) 
     250                #shortcut.setKey(tr("Down")) 
     251                #self.connect(shortcut, QtCore.SIGNAL("pressed()"), self.driveReverse) 
     252                 
     253                action = QtGui.QAction(self) 
     254                action.setShortcut(QtGui.QKeySequence("W")) 
     255                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonForward, QtCore.SLOT("animateClick()")) 
     256                self.addAction(action) 
     257                 
     258                action = QtGui.QAction(self) 
     259                action.setShortcut(QtGui.QKeySequence("Up")) 
     260                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonForward, QtCore.SLOT("animateClick()")) 
     261                self.addAction(action) 
     262                 
     263                 
     264                action = QtGui.QAction(self) 
     265                action.setShortcut(QtGui.QKeySequence("Left")) 
     266                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonTurnLeft, QtCore.SLOT("animateClick()")) 
     267                self.addAction(action) 
     268                 
     269                action = QtGui.QAction(self) 
     270                action.setShortcut(QtGui.QKeySequence("A")) 
     271                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonTurnLeft, QtCore.SLOT("animateClick()")) 
     272                self.addAction(action) 
     273                 
     274                 
     275                action = QtGui.QAction(self) 
     276                action.setShortcut(QtGui.QKeySequence("S")) 
     277                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonReverse, QtCore.SLOT("animateClick()")) 
     278                self.addAction(action) 
     279                 
     280                action = QtGui.QAction(self) 
     281                action.setShortcut(QtGui.QKeySequence("Down")) 
     282                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonReverse, QtCore.SLOT("animateClick()")) 
     283                self.addAction(action) 
     284                 
     285                 
     286                action = QtGui.QAction(self) 
     287                action.setShortcut(QtGui.QKeySequence("D")) 
     288                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonTurnRight, QtCore.SLOT("animateClick()")) 
     289                self.addAction(action) 
     290                 
     291                action = QtGui.QAction(self) 
     292                action.setShortcut(QtGui.QKeySequence("Right")) 
     293                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonTurnRight, QtCore.SLOT("animateClick()")) 
     294                self.addAction(action) 
     295                 
     296                 
     297                action = QtGui.QAction(self) 
     298                action.setShortcut(QtGui.QKeySequence("Z")) 
     299                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonTurnLeftReverse, QtCore.SLOT("animateClick()")) 
     300                self.addAction(action) 
     301                 
     302                 
     303                action = QtGui.QAction(self) 
     304                action.setShortcut(QtGui.QKeySequence("C")) 
     305                self.connect(action, QtCore.SIGNAL("activated()"), self.pushButtonTurnRightReverse, QtCore.SLOT("animateClick()")) 
     306                self.addAction(action) 
     307                 
     308                 
     309                self.pushButtonForward.setAutoRepeat(False) 
     310                self.pushButtonForward.setAutoRepeatDelay(0) 
     311                self.pushButtonForward.setAutoRepeatInterval(0) 
     312 
     313         
    243314        ################################################################## 
    244315         
     
    248319         
    249320        def driveForward(self): 
     321                if self.DEBUG: 
     322                        print "driveForward" 
     323                self.pushButtonForward.setDown(True) 
    250324                if (self.drive_state != 'drive_forward'): 
    251325                        self.updateSpeed(new_speed=DEFAULT_NXT_POWER_LEVEL) 
     
    270344         
    271345        def stopMotors(self): 
    272                 self.updateSpeed(new_speed=0) 
     346                self.pushButtonForward.setDown(False) 
     347                if (self.current_speed != 0): 
     348                        self.updateSpeed(new_speed=0) 
    273349                self.brainstormsClient.sendCommand('stop_motors') 
    274350                self.drive_state = 'stop_motors' 
     
    277353        ################################################################## 
    278354         
    279         def processPacketThinkGear(self, packet): 
    280                  
    281                 if ('eSense' in packet.keys()): 
    282                          
    283                         if ('attention' in packet['eSense'].keys()): 
    284                                 self.progressBarConcentration.setValue(packet['eSense']['attention']) 
    285                          
    286                         if ('meditation' in packet['eSense'].keys()): 
    287                                 self.progressBarRelaxation.setValue(packet['eSense']['meditation']) 
    288                  
    289                  
    290                 self.updateSpeed() 
    291          
    292          
    293         ################################################################## 
    294          
    295355        def updateSpeed(self, new_speed=None): 
    296356                 
     
    309369                speed_control = (self.pushButtonSpeedEnable.text() == 'Enabled') 
    310370                 
     371                # If there is a change between the new and current speeds 
     372                # and either the robot is currently driving forward 
     373                # or the "speed control" button is enabled, 
     374                # then send the updated speed to the robot 
    311375                if ((self.current_speed != new_speed) and \ 
    312376                         ((self.drive_state == 'drive_forward') or \ 
    313377                          (speed_control))): 
    314378                         
    315                         self.current_speed = new_speed 
    316                         self.brainstormsClient.sendCommand('drive_forward', new_speed) 
    317                  
    318                 else: 
    319                         self.current_speed = new_speed 
     379                        if (new_speed == 0): 
     380                                self.current_speed = new_speed 
     381                                self.stopMotors() 
     382                        else: 
     383                                self.pushButtonForward.setDown(True) 
     384                                self.brainstormsClient.sendCommand('drive_forward', power=new_speed) 
     385                 
     386                 
     387                self.current_speed = new_speed 
    320388         
    321389         
     
    349417                 
    350418                 
     419                if (speed > 100): 
     420                        speed = 100 
     421                 
     422                 
    351423                return(speed) 
     424         
     425         
     426        ################################################################## 
     427         
     428        def processPacketThinkGear(self, packet): 
     429                 
     430                if ('eSense' in packet.keys()): 
     431                         
     432                        if ('attention' in packet['eSense'].keys()): 
     433                                self.progressBarConcentration.setValue(packet['eSense']['attention']) 
     434                         
     435                        if ('meditation' in packet['eSense'].keys()): 
     436                                self.progressBarRelaxation.setValue(packet['eSense']['meditation']) 
     437                 
     438                 
     439                self.updateSpeed() 
    352440 
    353441 
     
    362450if __name__ == '__main__': 
    363451         
     452        #log = puzzlebox_logger.puzzlebox_logger(logfile='client_interface') 
    364453        log = None 
    365454         
  • remote_control/puzzlebox_brainstorms_configuration.ini

    r84 r87  
    33##################################################################### 
    44 
    5 NXT_BLUETOOTH_DEVICE = 'COM1' 
     5#NXT_BLUETOOTH_DEVICE = 'COM1' 
     6NXT_BLUETOOTH_DEVICE = '/dev/rfcomm0' 
    67 
     8# Discrete control drives the robot for a set time period per detection 
     9# Setting this to "False" will drive the robot in a particular 
     10# direction for as long as the detection occurs 
    711BRAINSTORMS_DISCRETE_CONTROL_COMMANDS = False 
    812 
     
    1317BRAINSTORMS_SERVER_INTERFACE = '' # listen on all network interfaces 
    1418BRAINSTORMS_SERVER_HOST = '127.0.0.1' # localhost 
    15 #BRAINSTORMS_SERVER_HOST = '172.16.1.1' 
    1619BRAINSTORMS_SERVER_PORT = 8194 
    1720 
     
    4245 
    4346##################################################################### 
     47# ThinkGear Connect Server Emulator configuration 
     48##################################################################### 
     49 
     50THINKGEAR_ENABLE_SIMULATE_HEADSET_DATA = True 
     51 
     52THINKGEAR_BLINK_FREQUENCY_TIMER = 6 # blink every 6 seconds 
     53                                    # (6 seconds is listed by Wikipedia 
     54                                    # as being the average number of times 
     55                                    # an adult blinks in a laboratory setting) 
     56 
     57THINKGEAR_DEFAULT_SAMPLE_WAVELENGTH = 30 # number of seconds from 0 to max 
     58                                         # and back to 0 for any given 
     59                                         # detection value below 
     60 
     61 
     62##################################################################### 
    4463# Client Interface configuration 
    4564##################################################################### 
     
    4968THINKGEAR_POWER_THRESHOLDS['concentration'] = { 0: 0, 10: 0, 20: 0, 30: 0, 40: 0, 50: 0, 60: 60, 70: 70, 75: 75, 80: 80, 90: 85, 100: 90 } 
    5069 
    51 THINKGEAR_POWER_THRESHOLDS['relaxation'] = { 0: 0, 10: 0, 20: 0, 30: 0, 40: 0, 50: 0, 60: 0, 70: 0, 80: 10, 90: 15, 100: 20 } 
     70THINKGEAR_POWER_THRESHOLDS['relaxation'] = { 0: 0, 10: 0, 20: 0, 30: 0, 40: 0, 50: 0, 60: 10, 70: 10, 80: 15, 90: 20, 100: 20 } 
    5271 
  • remote_control/puzzlebox_brainstorms_configuration.py

    r85 r87  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.07.01 
     11# Last Update: 2010.07.06 
    1212# 
    1313##################################################################### 
     
    111111        "appKey": "2e285d7bd5565c0ea73e7e265c73f0691d932408" 
    112112} 
     113 
     114 
     115##################################################################### 
     116# ThinkGear Connect Server Emulator configuration 
     117##################################################################### 
     118 
     119THINKGEAR_ENABLE_SIMULATE_HEADSET_DATA = True 
     120 
     121THINKGEAR_BLINK_FREQUENCY_TIMER = 6 # blink every 6 seconds 
     122                                    # (6 seconds is listed by Wikipedia 
     123                                    # as being the average number of times 
     124                                    # an adult blinks in a laboratory setting) 
     125 
     126THINKGEAR_DEFAULT_SAMPLE_WAVELENGTH = 30 # number of seconds from 0 to max 
     127                                         # and back to 0 for any given 
     128                                         # detection value below 
    113129 
    114130 
     
    141157                40: 0, \ 
    142158                50: 0, \ 
    143                 60: 0, \ 
    144                 70: 0, \ 
    145                 80: 10, \ 
    146                 90: 15, \ 
     159                60: 10, \ 
     160                70: 10, \ 
     161                80: 15, \ 
     162                90: 20, \ 
    147163                100: 20, \ 
    148164                }, \ 
  • remote_control/puzzlebox_brainstorms_network_client.py

    r84 r87  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.07.01 
     11# Last Update: 2010.07.06 
    1212# 
    1313##################################################################### 
     
    8989                                 
    9090                                if self.DEBUG: 
    91                                         print "<-- [%s] Received:" % self.socket.name, 
     91                                        print "--> [%s] Received:" % self.socket.name, 
    9292                                        print data 
    9393         
     
    137137                 
    138138                if self.DEBUG: 
    139                         print "--> [%s] Sending:" % self.socket.name, 
     139                        print "<-- [%s] Sending:" % self.socket.name, 
    140140                        print packet 
    141141                 
     
    146146                 
    147147                if self.socket.waitForConnected(CLIENT_NO_REPLY_WAIT): 
     148                        print "[Client] writing data" 
    148149                        self.socket.write(data) 
     150                else: 
     151                        if self.DEBUG: 
     152                                print "WARNING [%s] Timeout waiting for connection to server" % \ 
     153                                   self.socket.name 
    149154 
    150155 
  • remote_control/puzzlebox_brainstorms_network_client_thinkgear.py

    r82 r87  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.07.01 
     11# Last Update: 2010.07.06 
    1212# 
    1313##################################################################### 
     
    114114                                         
    115115                                        if self.DEBUG: 
    116                                                 print "<-- [%s] Received:" % self.socket.name, 
     116                                                print "--> [%s] Received:" % self.socket.name, 
    117117                                                print data 
    118118                                         
     
    162162                 
    163163                if self.DEBUG: 
    164                         print "--> [%s] Sending:" % self.socket.name, 
     164                        print "<-- [%s] Sending:" % self.socket.name, 
    165165                        print command 
    166166                 
  • remote_control/puzzlebox_brainstorms_network_server.py

    r84 r87  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.07.01 
     11# Last Update: 2010.07.06 
    1212# 
    1313##################################################################### 
     
    7575                 
    7676                if self.DEBUG: 
    77                         print "----> [%s] Initializing server on %s:%i" % \ 
     77                        print "<---- [%s] Initializing server on %s:%i" % \ 
    7878                                (self.socket.name, self.server_interface, self.server_port) 
    7979         
     
    106106                if not clientConnection.waitForReadyRead(CLIENT_NO_REPLY_WAIT): 
    107107                        if self.DEBUG: 
    108                                 print "ERROR [%s] Timeout waiting for client to transmit data" % \ 
     108                                print "WARNING [%s] Timeout waiting for client to transmit data" % \ 
    109109                                   self.socket.name 
    110                         return 
     110                                print "Status:", 
     111                                print clientConnection.state() 
     112                        #return 
    111113                 
    112114                socket_buffer = clientConnection.readAll() 
     
    122124                                 
    123125                                if self.DEBUG: 
    124                                         print "<-- [%s] Received:" % self.socket.name, 
     126                                        print "--> [%s] Received:" % self.socket.name, 
    125127                                        print data 
    126128                                 
     
    134136                                        if clientConnection.waitForConnected(CLIENT_NO_REPLY_WAIT): 
    135137                                                clientConnection.write(data) 
    136                                  
    137                                  
    138                                 clientConnection.disconnectFromHost() 
     138                 
     139                 
     140                clientConnection.disconnectFromHost() 
    139141         
    140142         
  • remote_control/puzzlebox_brainstorms_network_server_thinkgear.py

    r82 r87  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.07.01 
     11# Last Update: 2010.07.06 
    1212# 
    1313##################################################################### 
     
    4242MESSAGE_FREQUENCY_TIMER = 1 * 1000 # 1 Hz (1000 ms) 
    4343 
    44 ENABLE_SIMULATE_HEADSET_DATA = True 
    45  
    46 BLINK_FREQUENCY_TIMER = 6 # blink every 6 seconds 
    47                           # (6 seconds is listed by Wikipedia 
    48                           # as being the average number of times 
    49                           # an adult blinks in a laboratory setting) 
    50  
    51 DEFAULT_SAMPLE_WAVELENGTH = 30 # number of seconds from 0 to max to 0 for 
    52                                # any given detection value below 
     44ENABLE_SIMULATE_HEADSET_DATA = configuration.THINKGEAR_ENABLE_SIMULATE_HEADSET_DATA 
     45 
     46BLINK_FREQUENCY_TIMER = configuration.THINKGEAR_BLINK_FREQUENCY_TIMER 
     47 
     48DEFAULT_SAMPLE_WAVELENGTH = configuration.THINKGEAR_DEFAULT_SAMPLE_WAVELENGTH 
    5349 
    5450DEFAULT_AUTHORIZATION_MESSAGE = \ 
     
    158154                 
    159155                if self.DEBUG: 
    160                         print "----> [%s] Initializing server on %s:%i" % \ 
     156                        print "<---- [%s] Initializing server on %s:%i" % \ 
    161157                           (self.socket.name, self.server_interface, self.server_port) 
    162158                         
     
    188184                for connection in self.connections: 
    189185                         
    190                         #if self.DEBUG: 
    191                                 #print "Connection state:", 
    192                                 #print connection.state() 
    193                          
    194186                        if ((connection.state() != QtNetwork.QAbstractSocket.ConnectingState) and \ 
    195187                                 (connection.state() != QtNetwork.QAbstractSocket.ConnectedState)): 
     
    237229                                                 
    238230                                                if self.DEBUG: 
    239                                                         print "<-- [%s] Flash policy file requested" % self.socket.name 
     231                                                        print "--> [%s] Flash policy file requested" % self.socket.name 
    240232                                                 
    241233                                                data_to_process = packet.data() 
     
    245237                                                 
    246238                                                if self.DEBUG: 
    247                                                         print "<-- [ThinkGear Emulator] Partial data received (or error:", 
     239                                                        print "--> [ThinkGear Emulator] Partial data received (or error:", 
    248240                                                        print e 
    249241                                                        print ")." 
     
    256248                                         
    257249                                        if self.DEBUG: 
    258                                                 print "<-- [%s] Received:" % self.socket.name, 
     250                                                print "--> [%s] Received:" % self.socket.name, 
    259251                                                print data_to_process 
    260252                                 
  • remote_control/puzzlebox_brainstorms_remote_control.py

    r84 r87  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.07.01 
     11# Last Update: 2010.07.06 
    1212# 
    1313##################################################################### 
     
    5858                try: 
    5959                        self.connection = self.connect_to_nxt(self.device) 
    60                 except: 
     60                except Exception, e: 
    6161                        if self.DEBUG: 
    62                                 print "--> [RC] Connection failed to NXT device [%s]" % self.device 
     62                                print "<-- [RC] Connection failed to NXT device [%s]" % self.device 
     63                                print "ERROR [RC]:", 
     64                                print e 
    6365         
    6466         
Note: See TracChangeset for help on using the changeset viewer.