Project

General

Profile

Revision ab8736ac

IDab8736ac5c902cb3672ce97a116759a3d06c463c

Added by Yuyang Guo about 11 years ago

added teleop to GUI, should be able to choose which scout to control now

View differences:

scout/scoutsim/GUI.py
132 132
                            (self.name, Behaviors.getNumber(self.behavior)))
133 133
        self.process = subprocess.Popen(roscommand, shell=False)
134 134

  
135
    def teleop(self):
136
        # teleop involved only one command \
137
        self.terminateOldBehavior()
138
        self.process = None
139
        cmd = "rosservice call /set_teleop %s"%self.name
140
        try:
141
            subprocess.Popen(shlex.split(cmd), shell=False)
142
        except:
143
            #not sure why this is happening....
144
            # seems to be a ros thing
145
            print "warning, socket error, ignored"
146

  
135 147
    def killSelf(self):
136 148
        # terminate its current behavior
137 149
        self.terminateOldBehavior()
......
144 156
            Scout.numOfScouts -= 1
145 157
            self.valid = False
146 158
        except rospy.ServiceException, e:
147
            print "warning: kill scout unsuccessful" # TODO: change to alert
159
            print "warning: kill scout unsuccessful" 
148 160
            self.valid = True
149 161
        # remove from the class
150 162

  
......
236 248
            self.window.Update()
237 249
        else:
238 250
            raise Exception
239

  
251
    
252
    # runPressed
240 253
    # change UI display and invoke change Behavior in scout
241 254
    def changeBehavior(self, name, currBehaviorLabel, 
242 255
                        pauseButton, newBehavior):
243 256
        
244 257
        # to handle user pressing "Run" during pause
245 258
        if (newBehavior != "Pause" and self.scouts[name].paused == True):
246
            print "trying to do stuff!!!"
247 259
            self.correctPauseButton(name, 
248 260
                                        pauseButton, pauseToResume=True)
249 261
        
250 262
        currBehaviorLabel.SetLabel(" | Current Behavior: %s"%newBehavior)
251 263
        scout = self.scouts[name]
252 264
        scout.changeBehavior(newBehavior)
265
        self.correctTeleopButton(None)
253 266

  
254 267

  
255
    def correctPauseButton(self, name, pauseButton, pauseToResume):
256
        if (pauseToResume):
257
            print "correcting button!"
258
            self.scouts[name].paused = False
259
            pauseButton.SetValue(False) # unpress it
260
            pauseButton.SetLabel("Pause")
261
        else:
262
            self.scouts[name].paused = True
263
            pauseButton.SetValue(True) # press it
264
            pauseButton.SetLabel("Resume")
265

  
266 268
    def buttonDown(button):
267 269
        return button.GetValue()
268 270

  
......
281 283
                        dropMenu.GetStringSelection())
282 284
            self.correctPauseButton(name, 
283 285
                                        pauseButton, pauseToResume=True)
284
            
286

  
287
    def teleop(self, name):
288
        self.correctTeleopButton(name)
289
        self.scouts[name].teleop()
285 290

  
286 291
    ############################ UI stuff here ###########################
287 292
    
288 293
    def initUI(self):
294
        self.allTeleopButtons = {}
289 295
        self.initAddScoutArea()
296
    
297
    def correctTeleopButton(self, teleopingName):
298
        for name in self.allTeleopButtons:
299
            if name == teleopingName:
300
                self.allTeleopButtons[name].SetValue(True)
301
            else:
302
                self.allTeleopButtons[name].SetValue(False)
303
                
304

  
305
    def correctPauseButton(self, name, pauseButton, pauseToResume):
306
        if (pauseToResume):
307
            print "correcting button!"
308
            self.scouts[name].paused = False
309
            pauseButton.SetValue(False) # unpress it
310
            pauseButton.SetLabel("Pause")
311
        else:
312
            self.scouts[name].paused = True
313
            pauseButton.SetValue(True) # press it
314
            pauseButton.SetLabel("Resume")
290 315

  
291 316
    # the labels and input boxes for adding a scout through GUI
292 317
    def initAddScoutArea(self):
......
360 385
        runButton = wx.Button(self.window, label="Run")
361 386
        killButton = wx.Button(self.window, label="Kill")
362 387
        teleopButton = wx.ToggleButton(self.window, label="Teleop")
363

  
388
        self.allTeleopButtons[name] = teleopButton
364 389
        # row 0
365 390
        self.sizer[name].Add(scoutName)
366 391
        self.sizer[name].Add(currBehaviorLabel, wx.EXPAND | wx.ALIGN_RIGHT)
......
383 408
        pauseButton.Bind(wx.EVT_TOGGLEBUTTON, 
384 409
            lambda event: self.pauseResumeScout(name, pauseButton,
385 410
                                        currBehaviorLabel, scoutChoices))
411
        teleopButton.Bind(wx.EVT_TOGGLEBUTTON, 
412
                                lambda event: self.teleop(name))
386 413

  
387 414
        self.mainArea.Add(self.sizer[name], proportion=1,
388 415
            flag=wx.ALL | wx.EXPAND, border=10)

Also available in: Unified diff