Changeset 84


Ignore:
Timestamp:
07/02/10 03:17:56 (11 years ago)
Author:
sc
Message:

remote_control/puzzlebox_brainstorms_network_client.py:

  • power transmission settings added

remote_control/puzzlebox_brainstorms_remote_control.py:

  • custom power settings added

remote_control/puzzlebox_brainstorms_client_interface.py:

  • power transmission settings added
  • udpateSpeed method tracks and calculates power settings
  • power transmission settings added

remote_control/puzzlebox_brainstorms_configuration.ini:

  • DEFAULT_NXT_POWER_LEVEL added and set to 80

remote_control/interface/qt4_form.py:

  • font sizes tweaked

remote_control/puzzlebox_brainstorms_configuration.py:

  • DEFAULT_NXT_POWER_LEVEL added and set to 80

remote_control/puzzlebox_brainstorms_network_server.py

  • power transmission settings added
Location:
remote_control
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • remote_control/interface/qt4_form.py

    r78 r84  
    33# Form implementation generated from reading ui file 'qt4_form.ui' 
    44# 
    5 # Created: Tue Jun 29 22:50:51 2010 
     5# Created: Thu Jul  1 15:54:34 2010 
    66#      by: PyQt4 UI code generator 4.7.3 
    77# 
     
    10901090"p, li { white-space: pre-wrap; }\n" 
    10911091"</style></head><body style=\" font-family:\'Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" 
    1092 "<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><a href=\"http://brainstorms.puzzlebox.info\"><span style=\" font-size:12pt; text-decoration: none; color:#000000;\">Puzzlebox<br />Brainstorms</span></a></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
     1092"<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><a href=\"http://brainstorms.puzzlebox.info\"><span style=\" font-size:11pt; text-decoration: none; color:#000000;\">Puzzlebox<br />Brainstorms</span></a></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
    10931093                self.textLabelNXTStatus.setText(QtGui.QApplication.translate("Form", "<p align=\"center\">Status: Disconnected</p>", None, QtGui.QApplication.UnicodeUTF8)) 
    10941094                self.textLabelNXTPort.setText(QtGui.QApplication.translate("Form", "<p align=\"center\">Port</p>", None, QtGui.QApplication.UnicodeUTF8)) 
    10951095                self.pushButtonNXTConnect.setText(QtGui.QApplication.translate("Form", "Connect", None, QtGui.QApplication.UnicodeUTF8)) 
    1096                 self.textLabelConcentration.setText(QtGui.QApplication.translate("Form", "<p align=\"center\">Concentration</p>", None, QtGui.QApplication.UnicodeUTF8)) 
    1097                 self.textLabelRelaxation.setText(QtGui.QApplication.translate("Form", "<p align=\"center\">Relaxation</p>", None, QtGui.QApplication.UnicodeUTF8)) 
     1096                self.textLabelConcentration.setText(QtGui.QApplication.translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" 
     1097"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" 
     1098"p, li { white-space: pre-wrap; }\n" 
     1099"</style></head><body style=\" font-family:\'Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" 
     1100"<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;\">Concentration</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
     1101                self.textLabelRelaxation.setText(QtGui.QApplication.translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" 
     1102"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" 
     1103"p, li { white-space: pre-wrap; }\n" 
     1104"</style></head><body style=\" font-family:\'Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" 
     1105"<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)) 
    10981106                self.pushButtonForward.setShortcut(QtGui.QApplication.translate("Form", "W, Up", None, QtGui.QApplication.UnicodeUTF8)) 
    10991107                self.pushButtonTurnRight.setShortcut(QtGui.QApplication.translate("Form", "D, Right", None, QtGui.QApplication.UnicodeUTF8)) 
     
    11251133"p, li { white-space: pre-wrap; }\n" 
    11261134"</style></head><body style=\" font-family:\'Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" 
    1127 "<p align=\"center\" style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Speed</p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
     1135"<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;\">Speed</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 
    11281136                self.pushButtonConcentrationEnable.setText(QtGui.QApplication.translate("Form", "Enabled", None, QtGui.QApplication.UnicodeUTF8)) 
    1129                 self.pushButtonRelaxationEnable.setText(QtGui.QApplication.translate("Form", "Disabled", None, QtGui.QApplication.UnicodeUTF8)) 
     1137                self.pushButtonRelaxationEnable.setText(QtGui.QApplication.translate("Form", "Enabled", None, QtGui.QApplication.UnicodeUTF8)) 
    11301138                self.pushButtonSpeedEnable.setText(QtGui.QApplication.translate("Form", "Enabled", None, QtGui.QApplication.UnicodeUTF8)) 
    11311139 
  • remote_control/interface/qt4_form.ui

    r78 r84  
    4545p, li { white-space: pre-wrap; } 
    4646&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt; 
    47 &lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://brainstorms.puzzlebox.info&quot;&gt;&lt;span style=&quot; font-size:12pt; text-decoration: none; color:#000000;&quot;&gt;Puzzlebox&lt;br /&gt;Brainstorms&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
     47&lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://brainstorms.puzzlebox.info&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: none; color:#000000;&quot;&gt;Puzzlebox&lt;br /&gt;Brainstorms&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
    4848   </property> 
    4949   <property name="textFormat"> 
     
    147147   </property> 
    148148   <property name="text"> 
    149     <string>&lt;p align=&quot;center&quot;&gt;Concentration&lt;/p&gt;</string> 
     149    <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt; 
     150&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; 
     151p, li { white-space: pre-wrap; } 
     152&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt; 
     153&lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;Concentration&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
    150154   </property> 
    151155   <property name="wordWrap"> 
     
    163167   </property> 
    164168   <property name="text"> 
    165     <string>&lt;p align=&quot;center&quot;&gt;Relaxation&lt;/p&gt;</string> 
     169    <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt; 
     170&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; 
     171p, li { white-space: pre-wrap; } 
     172&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt; 
     173&lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;Relaxation&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
    166174   </property> 
    167175   <property name="wordWrap"> 
     
    33033311p, li { white-space: pre-wrap; } 
    33043312&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt; 
    3305 &lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Speed&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
     3313&lt;p align=&quot;center&quot; style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;Speed&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
    33063314   </property> 
    33073315   <property name="wordWrap"> 
     
    33383346   </property> 
    33393347   <property name="text"> 
    3340     <string>Disabled</string> 
     3348    <string>Enabled</string> 
    33413349   </property> 
    33423350  </widget> 
  • remote_control/puzzlebox_brainstorms_client_interface.py

    r82 r84  
    4646NXT_BLUETOOTH_DEVICE = configuration.NXT_BLUETOOTH_DEVICE 
    4747 
     48DEFAULT_NXT_POWER_LEVEL = configuration.DEFAULT_NXT_POWER_LEVEL 
     49 
    4850THINKGEAR_SERVER_HOST = configuration.THINKGEAR_SERVER_HOST 
    4951THINKGEAR_SERVER_PORT = configuration.THINKGEAR_SERVER_PORT 
     
    6668                self.configureNetworkBrainstorms() 
    6769                self.connectWidgets() 
     70                 
     71                self.drive_state = 'stop_motors' 
     72                self.current_speed = 0 
    6873         
    6974         
     
    9499                self.lineEditThinkGearPort.setText('%i' % THINKGEAR_SERVER_PORT) 
    95100                self.lineEditThinkGearPort.setEnabled(False) 
    96                  
    97                  
    98                 # Thresholds Removed 
    99                  
    100                 # Set concentration threshold value 
    101                 #concentration_threshold = \ 
    102                         #self.getMinimumThreshold(THINKGEAR_POWER_THRESHOLDS['concentration']) 
    103                 #self.spinBoxConcentrationThreshold.setValue(concentration_threshold) 
    104                 #self.spinBoxConcentrationThreshold.update() 
    105                  
    106                 # Concentration threshold value not modifiable 
    107                 #self.spinBoxConcentrationThreshold.setEnabled(False) 
    108                  
    109                 # Set relaxation threshold value 
    110                 #relaxation_threshold = \ 
    111                         #self.getMinimumThreshold(THINKGEAR_POWER_THRESHOLDS['relaxation']) 
    112                 #self.spinBoxRelaxationThreshold.setValue(relaxation_threshold) 
    113                 #self.spinBoxRelaxationThreshold.update() 
    114                  
    115                 # Relaxation threshold value not modifiable 
    116                 #self.spinBoxRelaxationThreshold.setEnabled(False) 
    117101         
    118102         
     
    156140                 
    157141                self.thinkgearClient = \ 
    158                    thinkgear_client.puzzlebox_brainstorms_network_client_thinkgear(self.log, parent=self) 
     142                   thinkgear_client.puzzlebox_brainstorms_network_client_thinkgear( \ 
     143                           self.log, \ 
     144                           DEBUG=0, \ 
     145                           parent=self) 
    159146                 
    160147                self.disconnect(self.pushButtonThinkGearConnect, \ 
     
    187174                 
    188175                self.pushButtonThinkGearConnect.setText('Connect') 
     176                 
     177                self.progressBarConcentration.setValue(0) 
     178                self.progressBarRelaxation.setValue(0) 
     179                self.progressBarSpeed.setValue(0) 
    189180         
    190181         
     
    233224        def turnLeft(self): 
    234225                self.brainstormsClient.sendCommand('turn_left') 
     226                self.drive_state = 'turn_left' 
    235227         
    236228        def driveForward(self): 
    237                 self.brainstormsClient.sendCommand('drive_forward') 
     229                self.updateSpeed(new_speed=DEFAULT_NXT_POWER_LEVEL) 
     230                self.brainstormsClient.sendCommand('drive_forward', power=self.current_speed) 
     231                self.drive_state = 'drive_forward' 
    238232         
    239233        def turnRight(self): 
    240234                self.brainstormsClient.sendCommand('turn_right') 
     235                self.drive_state = 'turn_right' 
    241236         
    242237        def turnLeftInReverse(self): 
    243238                self.brainstormsClient.sendCommand('turn_left_in_reverse') 
     239                self.drive_state = 'turn_left_in_reverse' 
    244240         
    245241        def driveReverse(self): 
    246242                self.brainstormsClient.sendCommand('drive_reverse') 
     243                self.drive_state = 'drive_reverse' 
    247244         
    248245        def turnRightInReverse(self): 
    249246                self.brainstormsClient.sendCommand('turn_right_in_reverse') 
     247                self.drive_state = 'turn_right_in_reverse' 
    250248         
    251249        def stopMotors(self): 
     250                self.updateSpeed(new_speed=0) 
    252251                self.brainstormsClient.sendCommand('stop_motors') 
     252                self.drive_state = 'stop_motors' 
    253253         
    254254         
     
    264264                        if ('meditation' in packet['eSense'].keys()): 
    265265                                self.progressBarRelaxation.setValue(packet['eSense']['meditation']) 
    266                          
    267                         if (('attention' in packet['eSense'].keys()) and \ 
    268                                  ('meditation' in packet['eSense'].keys())): 
    269                                  
    270                                 self.calculateSpeed(packet['eSense']['attention'], \ 
    271                                                     packet['eSense']['meditation']) 
     266                 
     267                 
     268                self.updateSpeed() 
     269         
     270         
     271        ################################################################## 
     272         
     273        def updateSpeed(self, new_speed=None): 
     274                 
     275                if new_speed == None: 
     276                 
     277                        concentration=self.progressBarConcentration.value() 
     278                        relaxation=self.progressBarRelaxation.value() 
     279                         
     280                        new_speed = self.calculateSpeed(concentration, relaxation) 
     281                 
     282                 
     283                # Update GUI 
     284                self.progressBarSpeed.setValue(new_speed) 
     285                 
     286                # GUI button under "Speed" progress bar set to Enabled 
     287                speed_control = (self.pushButtonSpeedEnable.text() == 'Enabled') 
     288                 
     289                if ((self.current_speed != new_speed) and \ 
     290                         ((self.drive_state == 'drive_forward') or \ 
     291                          (speed_control))): 
     292                         
     293                        self.current_speed = new_speed 
     294                        self.brainstormsClient.sendCommand('drive_forward', new_speed) 
     295                 
     296                else: 
     297                        self.current_speed = new_speed 
    272298         
    273299         
     
    301327                 
    302328                 
    303                 self.progressBarSpeed.setValue(speed) 
     329                return(speed) 
    304330 
    305331 
  • remote_control/puzzlebox_brainstorms_configuration.ini

    r83 r84  
    2525##################################################################### 
    2626 
     27DEFAULT_NXT_POWER_LEVEL = 80 
     28 
    2729NXT_MOTORS_MOUNTED_BACKWARDS = True 
    2830NXT_MOTOR_PORT_RIGHT = 'a' 
  • remote_control/puzzlebox_brainstorms_configuration.py

    r78 r84  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.06.28 
     11# Last Update: 2010.07.01 
    1212# 
    1313##################################################################### 
     
    2323 
    2424BRAINSTORMS_CONFIGURATION_FILE_PATH = 'puzzlebox_brainstorms_configuration.ini' 
    25  
    26 BRAINSTORMS_DISCRETE_CONTROL_COMMANDS = True 
    27  
    2825 
    2926##################################################################### 
     
    6461# Remote Control configuration 
    6562##################################################################### 
     63 
     64BRAINSTORMS_DISCRETE_CONTROL_COMMANDS = True 
     65DEFAULT_NXT_POWER_LEVEL = 80 
    6666 
    6767DEFAULT_NXT_BLUETOOTH_DEVICE_WINDOWS = 'COM1' 
  • remote_control/puzzlebox_brainstorms_network_client.py

    r75 r84  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.06.28 
     11# Last Update: 2010.07.01 
    1212# 
    1313##################################################################### 
     
    3636DELIMITER = configuration.BRAINSTORMS_DELIMITER 
    3737 
     38DEFAULT_NXT_POWER_LEVEL = configuration.DEFAULT_NXT_POWER_LEVEL 
    3839NXT_DEFAULT_RC_COMMAND = configuration.NXT_DEFAULT_RC_COMMAND 
    3940 
     
    6667                #self.blockSize = 0 
    6768                self.socket = QtNetwork.QTcpSocket() 
    68                 self.socket.name = 'Puzzlebox Brainstorms Client' 
     69                self.socket.name = 'Brainstorms Client' 
    6970                 
    7071                self.socket.readyRead.connect(self.printReply) 
     
    129130        ################################################################## 
    130131         
    131         def sendCommand(self, command): 
     132        def sendCommand(self, command, power=DEFAULT_NXT_POWER_LEVEL): 
     133                 
     134                packet = {} 
     135                packet['command'] = command 
     136                packet['power'] = power 
    132137                 
    133138                if self.DEBUG: 
    134139                        print "--> [%s] Sending:" % self.socket.name, 
    135                         print command 
     140                        print packet 
    136141                 
    137142                self.socket.abort() 
    138143                self.socket.connectToHost(self.server_host, self.server_port) 
    139144                 
    140                 data = json.dumps(command) 
     145                data = json.dumps(packet) 
    141146                 
    142147                if self.socket.waitForConnected(CLIENT_NO_REPLY_WAIT): 
  • remote_control/puzzlebox_brainstorms_network_server.py

    r83 r84  
    7272                #self.blockSize = 0 
    7373                self.socket = QtNetwork.QTcpServer() 
    74                 self.socket.name = 'Puzzlebox Brainstorms Server' 
     74                self.socket.name = 'Brainstorms Server' 
    7575                 
    7676                if self.DEBUG: 
     
    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 "ERROR [%s] Timeout waiting for client to transmit data" % \ 
     109                                   self.socket.name 
    109110                        return 
    110111                 
     
    126127                                response = self.processCommand(data) 
    127128                                 
    128                                 data = json.dumps(response) 
    129                                  
    130                                  
    131                                 if clientConnection.waitForConnected(CLIENT_NO_REPLY_WAIT): 
    132                                         clientConnection.write(data) 
     129                                if response != None: 
     130                                 
     131                                        data = json.dumps(response) 
     132                                         
     133                                         
     134                                        if clientConnection.waitForConnected(CLIENT_NO_REPLY_WAIT): 
     135                                                clientConnection.write(data) 
     136                                 
    133137                                 
    134138                                clientConnection.disconnectFromHost() 
     
    137141        ################################################################## 
    138142         
    139         def processCommand(self, command): 
    140                  
    141                 response = '%s command received' % command 
     143        def processCommand(self, data): 
     144                 
     145                #response = '%s command received' % command 
     146                response = None 
    142147                 
    143148                if DISCRETE_CONTROL_COMMANDS: 
    144149                         
    145                         self.executeCommand(command) 
     150                        self.executeCommand(data['command'], data['power']) 
    146151                         
    147152                         
    148153                elif self.rc.connection != None: 
    149154                         
    150                         self.rc.run(command) 
     155                        self.rc.run(data['command'], data['power']) 
    151156                 
    152157                 
  • remote_control/puzzlebox_brainstorms_remote_control.py

    r73 r84  
    99# For more information please refer to http://www.gnu.org/copyleft/gpl.html 
    1010# 
    11 # Last Update: 2010.06.28 
     11# Last Update: 2010.07.01 
    1212# 
    1313##################################################################### 
     
    2929DISCRETE_CONTROL_COMMANDS = configuration.BRAINSTORMS_DISCRETE_CONTROL_COMMANDS 
    3030 
     31DEFAULT_NXT_POWER_LEVEL = configuration.DEFAULT_NXT_POWER_LEVEL 
     32 
    3133BLUETOOTH_DEVICE = configuration.NXT_BLUETOOTH_DEVICE 
     34 
    3235MOTORS_MOUNTED_BACKWARDS = configuration.NXT_MOTORS_MOUNTED_BACKWARDS 
    3336MOTOR_PORT_RIGHT = configuration.NXT_MOTOR_PORT_RIGHT 
     
    181184        ################################################################## 
    182185         
    183         def drive_forward(self, connection, power=80, duration=2): 
     186        def drive_forward(self, connection, power=DEFAULT_NXT_POWER_LEVEL, duration=2): 
    184187                 
    185188                "Drive the robot forward at a certain speed for a certain duration" 
     
    190193        ################################################################## 
    191194         
    192         def drive_reverse(self, connection, power=80, duration=2): 
     195        def drive_reverse(self, connection, power=DEFAULT_NXT_POWER_LEVEL, duration=2): 
    193196                 
    194197                "Drive the robot reverse at a certain speed for a certain duration" 
     
    201204        ################################################################## 
    202205         
    203         def turn_left_in_reverse(self, connection, power=80, duration=3): 
     206        def turn_left_in_reverse(self, connection, power=DEFAULT_NXT_POWER_LEVEL, duration=3): 
    204207                 
    205208                "Turn the robot counter-clockwise while backing up at a" 
     
    214217        ################################################################## 
    215218         
    216         def turn_right_in_reverse(self, connection, power=80, duration=3): 
     219        def turn_right_in_reverse(self, connection, power=DEFAULT_NXT_POWER_LEVEL, duration=3): 
    217220                 
    218221                "Turn the robot clockwise while backing up at a" 
     
    227230        ################################################################## 
    228231         
    229         def turn_left(self, connection, power=80, duration=2): 
     232        def turn_left(self, connection, power=DEFAULT_NXT_POWER_LEVEL, duration=2): 
    230233                 
    231234                "Turn the robot counter-clockwise at a" 
     
    240243        ################################################################## 
    241244         
    242         def turn_right(self, connection, power=80, duration=2): 
     245        def turn_right(self, connection, power=DEFAULT_NXT_POWER_LEVEL, duration=2): 
    243246                 
    244247                "Turn the robot counter-clockwise at a" 
     
    279282        ################################################################## 
    280283         
    281         def run(self, command): 
     284        def run(self, command, power=DEFAULT_NXT_POWER_LEVEL): 
     285                 
     286                # If the LEGO Mindstorms NXT is instructed to drive with  
     287                # power less than 50% performance is so poor that we'd be 
     288                # better off simply stopping the motors. 
     289                if power < 50: 
     290                        command = 'stop_motors' 
    282291                 
    283292                if (command == 'drive_forward'): 
    284                         self.drive_forward(self.connection, duration=3) 
     293                        self.drive_forward(self.connection, power=power, duration=3) 
    285294                 
    286295                elif (command == 'drive_reverse'): 
    287                         self.drive_reverse(self.connection) 
     296                        self.drive_reverse(self.connection, power=power) 
    288297                 
    289298                elif (command == 'turn_left'): 
    290                         self.turn_left(self.connection) 
     299                        self.turn_left(self.connection, power=power) 
    291300                 
    292301                elif (command == 'turn_right'): 
    293                         self.turn_right(self.connection) 
     302                        self.turn_right(self.connection, power=power) 
    294303                 
    295304                elif (command == 'turn_left_in_reverse'): 
    296                         self.turn_left_in_reverse(self.connection) 
     305                        self.turn_left_in_reverse(self.connection, power=power) 
    297306                 
    298307                elif (command == 'turn_right_in_reverse'): 
    299                         self.turn_right_in_reverse(self.connection) 
     308                        self.turn_right_in_reverse(self.connection, power=power) 
    300309                 
    301310                elif (command == 'stop_motors'): 
Note: See TracChangeset for help on using the changeset viewer.