def find_balloon(self, color): if not self.balloonmode.alive: return False self.balloonmode.logger.logevent(SearchState.LOGGER_NAME, "Zoeken naar ballon " + color, Logger.MESSAGE) img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img) while not search[0] and self.balloonmode.alive: if self.moveTo: #Beweeg naar links self.balloonmode.movementHandler.move_one_turn(True) #self.balloonmode.movementHandler.move(0, 0, 180, 100) #time.sleep(self.balloonmode.movementHandler.TIME_TURN * 5) #self.balloonmode.movementHandler.move(0, 0, 0, 0) elif not self.moveTo: #Beweeg naar rechts self.balloonmode.movementHandler.move_one_turn(False) # self.balloonmode.movementHandler.move(0, 0, 181, 100) # time.sleep(self.balloonmode.movementHandler.TIME_TURN * 5) # self.balloonmode.movementHandler.move(0, 0, 0, 0) img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img) if not self.balloonmode.alive: return False return search[1]
def move_balloon_to_center(self, blob, center, color): self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, "Ballon " + color + " naar het midden bewegen", Logger.MESSAGE) verschil = self.diff_to_center(blob, center) while abs(verschil) > 100 and self.balloonmode.alive: #100 px marge voor het midden print "Blob nog niet in het midden" if verschil > 0: #naar links draaien self.balloonmode.movementHandler.move_one_turn(True) #self.balloonmode.movementHandler.move(0, 0, 181, 100) #time.sleep(self.balloonmode.movementHandler.TIME_TURN) #self.balloonmode.movementHandler.move(0, 0, 0, 0) else: #naar rechts draaien self.balloonmode.movementHandler.move_one_turn(False) #self.balloonmode.movementHandler.move(0, 0, 180, 100) #time.sleep(self.balloonmode.movementHandler.TIME_TURN) #self.balloonmode.movementHandler.move(0, 0, 0, 0) img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img) blob = search[1] if search[0]: verschil = self.diff_to_center(blob, center) if not self.balloonmode.alive: return False return True
def move_to_balloon(self, color, blob): self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, "Naar ballon " + color + " lopen", Logger.MESSAGE) #Midden van het beeld center = 640 / 2 #Draaien zodat de ballon in het midden van de camera staat move = self.move_balloon_to_center(blob, center, color) if not move: return False #loop naar de ballon self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, "Vooruit lopen", Logger.MESSAGE) #Max area = 640*480 = 307200 area = 0 not_found_count = 0 #vooruit lopen for i in xrange(0, 5): self.balloonmode.movementHandler.move_one_step() #self.balloonmode.movementHandler.move(0, 100, 0, 0) #time.sleep(self.balloonmode.movementHandler.TIME_MOVE_ONE_STEP * 5) #self.balloonmode.movementHandler.move(0, 0, 0, 0) while area < 300000 and self.balloonmode.alive: if not_found_count >= 5: self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, color + " ballon kwijt, wat nu?!", Logger.MESSAGE) return False img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img, True) if search[0]: #Ballon als nodig naar het midden krijgen. move = self.move_balloon_to_center(search[1], center, color) if not move: return False area = search[1].area() for i in xrange(0,5): self.balloonmode.movementHandler.move_one_step() #self.balloonmode.movementHandler.move(0, 100, 0, 0) #time.sleep(self.balloonmode.movementHandler.TIME_MOVE_ONE_STEP * 5) #self.balloonmode.movementHandler.move(0, 0, 0, 0) else: not_found_count += 1 if not self.balloonmode.alive: return False return True
def balloon_alive(self, color): #Afbeelding ophalen img = BalloonVision.get_image() #Blob vinden return BalloonVision.find_balloon(color, img, True)[0]