コード例 #1
0
    def get_true_values(self):
        true_values = []
        in_front = peak.isWallInFront(self.state['x'], self.state['y'],
                                      self.state['yaw'], self.grid_world)

        true_values.append([in_front])

        on_left = peak.isWallOnLeft(self.state['x'], self.state['y'],
                                    self.state['yaw'], self.grid_world)
        on_right = peak.isWallOnRight(self.state['x'], self.state['y'],
                                      self.state['yaw'], self.grid_world)

        true_values.append([on_left, on_right])

        is_behind = peak.isWallBehind(self.state['x'], self.state['y'],
                                      self.state['yaw'], self.grid_world)
        wall_adjacent = peak.isWallAdjacent(self.state['x'], self.state['y'],
                                            self.state['yaw'], self.grid_world)
        distance_to_adjacent = peak.distanceToAdjacent(self.state['x'],
                                                       self.state['y'],
                                                       self.state['yaw'],
                                                       self.grid_world)
        distance_left = peak.distanceLeftToAdjacent(self.state['x'],
                                                    self.state['y'],
                                                    self.state['yaw'],
                                                    self.grid_world)
        distance_right = peak.distanceRightToAdjacent(self.state['x'],
                                                      self.state['y'],
                                                      self.state['yaw'],
                                                      self.grid_world)
        distance_back = peak.distanceBehindToAdjacent(self.state['x'],
                                                      self.state['y'],
                                                      self.state['yaw'],
                                                      self.grid_world)
        wall_left_forward = peak.wallLeftForward(self.state['x'],
                                                 self.state['y'],
                                                 self.state['yaw'],
                                                 self.grid_world)
        return true_values
コード例 #2
0
    def update_ui(self, action):
        """Re-draws the UI
        Args:
            action (int): the action taken this time-step.

        """
        # Create a voronoi image
        if self.state:
            frame = self.state['visionData']
            if self.show_display:
                voronoi = voronoi_from_pixels(
                    pixels=frame,
                    dimensions=(WIDTH, HEIGHT),
                    pixelsOfInterest=self.network.layers[0].
                    function_approximation.pointsOfInterest)
            # cv2.imshow('My Image', voronoi)
            # cv2.waitKey(0)

            if self.state is False:  # todo: should be None for first val, not bool.
                did_touch = False
            else:
                did_touch = self.state['touchData']

            # find the ground truth of the predictions.
            in_front = peak.isWallInFront(self.state['x'], self.state['y'],
                                          self.state['yaw'], self.grid_world)
            on_left = peak.isWallOnLeft(self.state['x'], self.state['y'],
                                        self.state['yaw'], self.grid_world)
            on_right = peak.isWallOnRight(self.state['x'], self.state['y'],
                                          self.state['yaw'], self.grid_world)
            is_behind = peak.isWallBehind(self.state['x'], self.state['y'],
                                          self.state['yaw'], self.grid_world)
            wall_adjacent = peak.isWallAdjacent(self.state['x'],
                                                self.state['y'],
                                                self.state['yaw'],
                                                self.grid_world)
            distance_to_adjacent = peak.distanceToAdjacent(
                self.state['x'], self.state['y'], self.state['yaw'],
                self.grid_world)
            distance_left = peak.distanceLeftToAdjacent(
                self.state['x'], self.state['y'], self.state['yaw'],
                self.grid_world)
            distance_right = peak.distanceRightToAdjacent(
                self.state['x'], self.state['y'], self.state['yaw'],
                self.grid_world)
            distance_back = peak.distanceBehindToAdjacent(
                self.state['x'], self.state['y'], self.state['yaw'],
                self.grid_world)
            wall_left_forward = peak.wallLeftForward(self.state['x'],
                                                     self.state['y'],
                                                     self.state['yaw'],
                                                     self.grid_world)

            # get the most recent predictions
            touch_prediction = self.network.layers[0].last_prediction[0]
            turn_left_and_touch_prediction = self.network.layers[
                1].last_prediction[0]
            # turn_left_and_touch_prediction = 0
            turn_right_and_touch_prediction = self.network.layers[
                1].last_prediction[1]
            # turn_right_and_touch_prediction = 0
            # unimplemented, so zero...
            touch_behind_prediction = 0
            is_wall_adjacent_prediction = 0
            distance_to_adjacent_prediction = 0
            distance_left_prediction = 0
            distance_right_prediction = 0
            distance_back_prediction = 0
            wall_left_forward_prediction = 0

            game_image = Image.frombytes('RGB', (WIDTH, HEIGHT), bytes(frame))

            if self.show_display:
                if self.action_count > self.steps_before_updating_display:
                    self.display.update(
                        voronoiImage=voronoi,
                        gameImage=game_image,
                        numberOfSteps=self.action_count,
                        currentTouchPrediction=touch_prediction,
                        wallInFront=in_front,
                        didTouch=did_touch,
                        turnLeftAndTouchPrediction=
                        turn_left_and_touch_prediction,
                        wallOnLeft=on_left,
                        turnRightAndTouchPrediction=
                        turn_right_and_touch_prediction,
                        touchBehindPrediction=touch_behind_prediction,
                        wallBehind=is_behind,
                        touchAdjacentPrediction=is_wall_adjacent_prediction,
                        wallAdjacent=wall_adjacent,
                        wallOnRight=on_right,
                        distanceToAdjacent=distance_to_adjacent,
                        distanceToAdjacentPrediction=
                        distance_to_adjacent_prediction,
                        distanceToLeft=distance_left,
                        distanceToLeftPrediction=distance_left_prediction,
                        distanceToRight=distance_right,
                        distanceToRightPrediction=distance_right_prediction,
                        distanceBack=distance_back,
                        distanceBackPrediction=distance_back_prediction,
                        wallLeftForward=wall_left_forward,
                        wallLeftForwardPrediction=wall_left_forward_prediction,
                        action=action)
コード例 #3
0
  def updateUI(self):
    # Create a voronoi image

    frameError = False
    try:
      frame = self.state['visionData']
    except:
      frameError = True
      print("Error gettnig frame")

    if not frameError:
      # rgb = self.s
      if self.showDisplay:
        voronoi = voronoi_from_pixels(pixels=frame, dimensions=(WIDTH, HEIGHT),
                                      pixelsOfInterest=self.stateRepresentation.pointsOfInterest)
      # cv2.imshow('My Image', voronoi)
      # cv2.waitKey(0)

      if self.state == False:
        didTouch = False
      else:
        didTouch = self.state['touchData']

      inFront = peak.isWallInFront(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      touchPrediction = self.gvfs['T'].prediction(self.phi)

      gameImage = Image.frombytes('RGB', (WIDTH, HEIGHT), bytes(frame))

      '''
      #For debugging
      previousInFront = peak.isWallInFront(self.oldState['x'], self.oldState['y'], self.oldState['yaw'], self.gridWorld)
      previousTouchPrediction = self.gvfs['T'].prediction(self.oldPhi)

      if not previousInFront and previousTouchPrediction > 0.0:
        print("Bad first learning. ")
        print("Last action: " + self.action)
        msg = self.oldState.observations[0].text
        observations = json.loads(msg)  # and parse the JSON

        yaw = observations.get(u'Yaw', 0)
        x = observations.get(u'XPos', 0)
        z = observations.get(u'ZPos', 0)
        print("From: " + str(yaw) + ", " + str(x) + ", " + str(z))

        msg = self.state.observations[0].text
        observations = json.loads(msg)  # and parse the JSON
        yaw = observations.get(u'Yaw', 0)
        x = observations.get(u'XPos', 0)
        z = observations.get(u'ZPos', 0)
        print("To: " + str(yaw) + ", " + str(x) + ", " + str(z))
        ph = self.stateRepresentation.getPhi(previousPhi = self.oldPhi, state=self.state, previousAction=self.action, simplePhi = USE_SIMPLE_PHI)
        idx = np.nonzero(ph)[0][0]
        numNonZeros = len(np.nonzero(ph)[0])
        print("idx: " + str(idx) + ", nonZeros: " + str(numNonZeros))
        print("Observations since last:" + str(self.state.number_of_observations_since_last_state))
        print("")
      '''
      onLeft = peak.isWallOnLeft(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      turnLeftAndTouchPrediction = self.gvfs['TL'].prediction(self.phi)

      onRight = peak.isWallOnRight(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      turnRightAndtouchPrediction = self.gvfs['TR'].prediction(self.phi)

      isBehind = peak.isWallBehind(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      touchBehindPrediction = self.gvfs['TB'].prediction(self.phi)

      wallAdjacent = peak.isWallAdjacent(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      isWallAdjacentPrediction = self.gvfs['TA'].prediction(self.phi)

      distanceToAdjacent = peak.distanceToAdjacent(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      distanceToAdjacentPrediction = self.gvfs['DTA'].prediction(self.phi)

      distanceLeft = peak.distanceLeftToAdjacent(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      distanceLeftPrediction = self.gvfs['DTL'].prediction(self.phi)

      distanceRight = peak.distanceRightToAdjacent(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      distanceRightPrediction = self.gvfs['DTR'].prediction(self.phi)

      distanceBack = peak.distanceBehindToAdjacent(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      distanceBackPrediction = self.gvfs['DTB'].prediction(self.phi)

      wallLeftForward =peak.wallLeftForward(self.state['x'], self.state['y'], self.state['yaw'], self.gridWorld)
      wallLeftForwardPrediction = self.gvfs['WLF'].prediction(self.phi)

      if self.showDisplay:
        if self.actionCount > self.stepsBeforeUpdatingDisplay:
          self.display.update(voronoiImage=voronoi,
                              gameImage = gameImage,
                              numberOfSteps=self.actionCount,
                              currentTouchPrediction=touchPrediction,
                              wallInFront=inFront,
                              didTouch=didTouch,
                              turnLeftAndTouchPrediction=turnLeftAndTouchPrediction,
                              wallOnLeft=onLeft,
                              turnRightAndTouchPrediction=turnRightAndtouchPrediction,
                              touchBehindPrediction = touchBehindPrediction,
                              wallBehind = isBehind,
                              touchAdjacentPrediction=isWallAdjacentPrediction,
                              wallAdjacent=wallAdjacent,
                              wallOnRight=onRight,
                              distanceToAdjacent = distanceToAdjacent,
                              distanceToAdjacentPrediction = distanceToAdjacentPrediction,
                              distanceToLeft = distanceLeft,
                              distanceToLeftPrediction = distanceLeftPrediction,
                              distanceToRight = distanceRight,
                              distanceToRightPrediction = distanceRightPrediction,
                              distanceBack = distanceBack,
                              distanceBackPrediction = distanceBackPrediction,
                              wallLeftForward = wallLeftForward,
                              wallLeftForwardPrediction = wallLeftForwardPrediction
                              )