def __init__(self, master): self.master = master # root tk window self.master.protocol("WM_DELETE_WINDOW", self.closeWin) # control what happens when a window is closed externally (e.g. by the 'x') self.master.wm_title("Aerospace Robotics LIDAR Viewer") # name window self.master.geometry('+100+50') # position window 100,100 pixels from top-left corner # physical objects self.robot = DaguRover5() self.laser = RPLIDAR(DIST_MIN, DIST_MAX) # initialize serial object, prompting user for input if required self.statusQueue = Queue() # status of serial thread # FIFO queue by default self.RXQueue = Queue() # data from serial to root # FIFO queue by default self.TXQueue = Queue() # data from root to serial # FIFO queue by default self.serThread = SerialThread(self.laser, self.statusQueue, self.RXQueue, self.TXQueue) # initialize thread object # initialize root variables self.statusStr = StringVar() # status of serThread self.restarting = False # are we in the process of soft restarting? self.paused = False # should the loops be doing nothing right now? # helper objects self.data = DataMatrix(**KWARGS) # handle map data self.slam = Slam(self.robot, self.laser, **KWARGS) # do slam processing if FAST_MAPPING: # create the OpenCV window self.regionFrame = SlamShow(CV_IMG_SIZE, CV_IMG_RES_PIX_PER_MM, 'SLAM Rover: Hit ESC to quit') # create Tkinter control frames self.statusFrame = EntryFrame(self.master, self.robot, self.closeWin, self.restartAll, self.saveImage, \ self.serThread.getACK, self.serThread.resetACK, self.TXQueue, self.statusStr, twoLines=True, setDisplayMode=self.setDisplayMode, **KWARGS) self.insetFrame = InsetFrame(self.master, self.data.getInsetMatrix(), sendCommand=self.statusFrame.sendCommand, setRelDestination=self.setRelDestination, **KWARGS) # pack frame self.statusFrame.pack(side='bottom', fill='x') self.insetFrame.pack(side='left', fill='both', expand=True) else: # create all the pretty stuff in the Tkinter window self.statusFrame = EntryFrame(self.master, self.robot, self.closeWin, self.restartAll, self.saveImage, \ self.serThread.getACK, self.serThread.resetACK, self.TXQueue, self.statusStr, setDisplayMode=self.setDisplayMode, **KWARGS) self.regionFrame = RegionFrame(self.master, self.data.getMapMatrix(), **KWARGS) self.insetFrame = InsetFrame(self.master, self.data.getInsetMatrix(), sendCommand=self.statusFrame.sendCommand, setRelDestination=self.setRelDestination, **KWARGS) # pack frames self.statusFrame.pack(side='bottom', fill='x') self.regionFrame.pack(side='left', fill='both', expand=True) self.insetFrame.pack(side='right', fill='both', expand=True) # Start loops self.serThread.start() # begin fetching data from serial port and processing it self.updateData() # pull data from queue, put into data matrix self.updateMap() # draw new data matrix self.statusFrame.autosendCommand() # check for user input and automatically send it
def restartAll(self, funcStep=0): # two-part initialization to be re-done at soft reset if funcStep == 0: self.restarting = True # stop currently running loops self.master.after(1000, lambda: self.restartAll(funcStep=1)) # let processor wrap things up elsewhere # should be smarter return elif funcStep == 1: self.logFileIndex = 0 # read from beginning of log file self.data = DataMatrix(**KWARGS) self.slam = Slam(self.robot, self.laser, **KWARGS) self.restarting = False self.updateData() # pull data from queue, put into data matrix self.updateMap() # draw new data matrix
def restartAll(self, funcStep=0): # two-part initialization to be re-done at soft reset if funcStep == 0: self.restarting = True # stop currently running loops self.master.after(2000, lambda: self.restartAll(funcStep=1)) # let processor wrap things up elsewhere # should be smarter return elif funcStep == 1: with self.RXQueue.mutex: self.RXQueue.queue.clear() # empty incoming data queue self.data = DataMatrix(**KWARGS) self.slam = Slam(self.robot, self.laser, **KWARGS) self.restarting = False self.updateData() # pull data from queue, put into data matrix self.updateMap() # draw new data matrix
def __init__(self, master): self.master = master # root tk window self.master.protocol("WM_DELETE_WINDOW", self.closeWin) # control what happens when a window is closed externally (e.g. by the 'x') self.master.wm_title("Aerospace Robotics LIDAR Viewer") # name window self.master.geometry('+100+50') # position window 100,100 pixels from top-left corner # physical objects self.robot = DaguRover5() self.laser = RPLIDAR(DIST_MIN, DIST_MAX) # get data from log file self.logFileIndex = 0 self.logFileContents = [[int(el) for el in rawline.split(' ')] for rawline in logFile.read().strip().split('\n')] # initialize root variables self.statusStr = StringVar() # status of serThread self.restarting = False # are we in the process of soft restarting? self.paused = False # should the loops be doing nothing right now? # helper objects self.data = DataMatrix(**KWARGS) # handle map data self.slam = Slam(self.robot, self.laser, **KWARGS) # do slam processing if FAST_MAPPING: # create the OpenCV window self.regionFrame = SlamShow(CV_IMG_SIZE, CV_IMG_RES_PIX_PER_MM, 'SLAM Rover: Hit ESC to quit') # create Tkinter control frames self.statusFrame = StatusFrame(self.master, self.closeWin, self.restartAll, self.saveImage, self.statusStr, twoLines=True) self.insetFrame = InsetFrame(self.master, self.data.getInsetMatrix(), **KWARGS) # pack frame self.statusFrame.pack(side='bottom', fill='x') self.insetFrame.pack(side='left', fill='both', expand=True) else: # create all the pretty stuff in the Tkinter window self.statusFrame = StatusFrame(self.master, self.closeWin, self.restartAll, self.saveImage, self.statusStr) self.regionFrame = RegionFrame(self.master, self.data.getMapMatrix(), setDisplayMode=self.setDisplayMode, **KWARGS) self.insetFrame = InsetFrame(self.master, self.data.getInsetMatrix(), **KWARGS) # pack frames self.statusFrame.pack(side='bottom', fill='x') self.regionFrame.pack(side='left', fill='both', expand=True) self.insetFrame.pack(side='right', fill='both', expand=True) # Start loops self.updateData() # pull data from queue, put into data matrix self.updateMap() # draw new data matrix