コード例 #1
0
    def updateData(self, init=True):
        self.dataInit = init
        if not self.paused and self.logFileIndex < len(self.logFileContents):
            self.statusStr.set('Scan number {0:4d} from {1:s}'.format(
                self.logFileIndex, logFileName))

            # pull data from log file
            self.getScanData()

            # update robot position
            if init:
                self.slam.prevEncPos = self.slam.currEncPos  # set both values the first time through
            self.data.getRobotPos(
                self.slam.updateSlam(self.points),
                init=init)  # send data to slam to do stuff # 15ms

            self.data.drawPointMap(self.points)  # draw map using scan points

            if init: init = False  # initial data gathered successfully

        elif self.logFileIndex >= len(self.logFileContents):
            self.statusStr.set(
                paddedStr("End of data.", len(self.statusStr.get())))

        if not self.restarting:
            self.master.after(DATA_RATE, lambda: self.updateData(init=init))
        else:
            self.statusStr.set(
                paddedStr("Restarting...", len(
                    self.statusStr.get())))  # if loop ends, we're restarting
コード例 #2
0
    def updateData(self, init=True):
        self.dataInit = init
        if not self.paused:
            try:
                status = self.statusQueue.get_nowait(
                )  # do this before anything else
            except QueueEmpty:
                pass
            else:
                self.statusStr.set(paddedStr(status,
                                             len(self.statusStr.get())))

            if self.RXQueue.qsize(
            ) > (2 if init else 1) * NUM_SAMP:  # ready to pull new scan data
                # pull data from serial thread via RXQueue, ignoring the first scan, which is incomplete
                self.getScanData(repeat=init)  # 2ms

                # update robot position
                if init:
                    self.slam.prevEncPos = self.slam.currEncPos  # set both values the first time through
                self.data.getRobotPos(
                    self.slam.updateSlam(self.points),
                    init=init)  # send data to slam to do stuff # 15ms

                self.data.drawPointMap(
                    self.points)  # draw map using scan points

                if init: init = False  # initial data gathered successfully

        if not self.restarting:
            self.master.after(DATA_RATE, lambda: self.updateData(init=init))
        else:
            self.statusStr.set(
                paddedStr("Restarting...", len(
                    self.statusStr.get())))  # if loop ends, we're restarting
コード例 #3
0
 def closeWin(self):
   self.paused = True
   self.statusStr.set(paddedStr("Paused.", len(self.statusStr.get())))
   if askokcancel("Quit?", "Are you sure you want to quit?"):
     self.statusStr.set(paddedStr("Stopping",len(self.statusStr.get()))) # keep length of label constant
     print("Closing program")
     self.master.quit() # kills interpreter (necessary for some reason)
   else: self.paused = False
コード例 #4
0
 def closeWin(self):
   self.paused = True
   self.statusStr.set(paddedStr("Paused.", len(self.statusStr.get())))
   if askokcancel("Quit?", "Are you sure you want to quit?"):
     self.statusStr.set(paddedStr("Stopping.", len(self.statusStr.get())))
     print("Shutting down LIDAR")
     self.serThread.stop() # tell serial thread to stop running
     print("Closing program")
     self.master.quit() # kills interpreter (necessary for some reason)
   else: self.paused = False
コード例 #5
0
 def closeWin(self):
   self.paused = True
   self.statusStr.set(paddedStr("Paused.", len(self.statusStr.get())))
   if askokcancel("Quit?", "Are you sure you want to quit?"):
     self.statusStr.set(paddedStr("Stopping.", len(self.statusStr.get())))
     print("Shutting down LIDAR")
     self.serThread.stop() # tell serial thread to stop running
     print("Closing program")
     self.master.quit() # kills interpreter (necessary for some reason)
   else: self.paused = False
コード例 #6
0
 def saveImage(self, step=0): # function prototype until data is initialized
   self.paused = True
   self.statusStr.set(paddedStr("Saving image. Close to resume.", len(self.statusStr.get()))) # keep length of label constant
   self.master.update() # force statusStr update
   self.updateMap(loop=False) # make sure we save the newest map
   self.data.saveImage()
   self.paused = False
コード例 #7
0
  def updateData(self, init=True):
    self.dataInit = init
    if not self.paused and self.logFileIndex < len(self.logFileContents):
      self.statusStr.set('Scan number {0:4d} from {1:s}'.format(self.logFileIndex, logFileName))

      # pull data from log file
      self.getScanData()

      # update robot position
      if init: self.slam.prevEncPos = self.slam.currEncPos # set both values the first time through
      self.data.getRobotPos(self.slam.updateSlam(self.points), init=init) # send data to slam to do stuff # 15ms

      self.data.drawPointMap(self.points) # draw map using scan points

      if init: init = False # initial data gathered successfully

    elif self.logFileIndex >= len(self.logFileContents):
      self.statusStr.set(paddedStr("End of data.", len(self.statusStr.get())))

    if not self.restarting: self.master.after(DATA_RATE, lambda: self.updateData(init=init))
    else: self.statusStr.set(paddedStr("Restarting...", len(self.statusStr.get()))) # if loop ends, we're restarting
コード例 #8
0
  def updateData(self, init=True):
    self.dataInit = init
    if not self.paused:
      try: status = self.statusQueue.get_nowait() # do this before anything else
      except QueueEmpty: pass
      else: self.statusStr.set(paddedStr(status, len(self.statusStr.get())))

      if self.RXQueue.qsize() > (2 if init else 1)*NUM_SAMP: # ready to pull new scan data
        # pull data from serial thread via RXQueue, ignoring the first scan, which is incomplete
        self.getScanData(repeat=init) # 2ms

        # update robot position
        if init: self.slam.prevEncPos = self.slam.currEncPos # set both values the first time through
        self.data.getRobotPos(self.slam.updateSlam(self.points), init=init) # send data to slam to do stuff # 15ms

        self.data.drawPointMap(self.points) # draw map using scan points

        if init: init = False # initial data gathered successfully

    if not self.restarting: self.master.after(DATA_RATE, lambda: self.updateData(init=init))
    else: self.statusStr.set(paddedStr("Restarting...", len(self.statusStr.get()))) # if loop ends, we're restarting
コード例 #9
0
 def getScanData(self, repeat=False):
   self.points = [] # wipe old data before writing new data
   while True:
     # Make sure there's actually data to get
     try: queueItem = self.RXQueue.get_nowait()
     except QueueEmpty: # something's wrong
       self.statusStr.set(paddedStr("RXQueue empty. Send 'l' iff LIDAR stopped.", len(self.statusStr.get())))
       return # stop because no data to read
     else:
       if isinstance(queueItem[0], float): # scan data
         self.points.append(queueItem)
       elif isinstance(queueItem[1], int): # encoder data
         self.slam.currEncPos = queueItem
         break # encoder data signals new scan
       else:
         print("RXQueue broken (something weird happened...)")
   if repeat: self.getScanData()
コード例 #10
0
 def getScanData(self, repeat=False):
   self.points = [] # wipe old data before writing new data
   while True:
     # Make sure there's actually data to get
     try: queueItem = self.RXQueue.get_nowait()
     except QueueEmpty: # something's wrong
       self.statusStr.set(paddedStr("RXQueue empty. Send 'l' iff LIDAR stopped.", len(self.statusStr.get())))
       return # stop because no data to read
     else:
       if isinstance(queueItem[0], float): # scan data
         self.points.append(queueItem)
       elif isinstance(queueItem[1], int): # encoder data
         self.slam.currEncPos = queueItem
         break # encoder data signals new scan
       else:
         print("RXQueue broken (something weird happened...)")
   if repeat: self.getScanData()