""" Demo of the Bebop vision using DroneVisionGUI that relies on libVLC. It is a different multi-threaded approach than DroneVision Author: Amy McGovern """ from pyparrot.Minidrone import Mambo from pyparrot.DroneVisionGUI import DroneVisionGUI import cv2 # set this to true if you want to fly for the demo testFlying = True class UserVision: def __init__(self, vision): self.index = 0 self.vision = vision def save_pictures(self, args): # print("in save pictures on image %d " % self.index) img = self.vision.get_latest_valid_picture() if (img is not None): filename = "test_image_%06d.png" % self.index # uncomment this if you want to write out images every time you get a new one #cv2.imwrite(filename, img) self.index +=1 #print(self.index) def demo_mambo_user_vision_function(mamboVision, args): """ Demo the user code to run with the run button for a mambo :param args: :return: """ mambo = args[0] if (testFlying): print("taking off!") mambo.safe_takeoff(5) if (mambo.sensors.flying_state != "emergency"): print("flying state is %s" % mambo.sensors.flying_state) print("Flying direct: going up") mambo.fly_direct(roll=0, pitch=0, yaw=0, vertical_movement=15, duration=2) print("flip left") print("flying state is %s" % mambo.sensors.flying_state) success = mambo.flip(direction="left") print("mambo flip result %s" % success) mambo.smart_sleep(5) print("landing") print("flying state is %s" % mambo.sensors.flying_state) mambo.safe_land(5) else: print("Sleeeping for 15 seconds - move the mambo around") mambo.smart_sleep(15) # done doing vision demo print("Ending the sleep and vision") mamboVision.close_video() mambo.smart_sleep(5) print("disconnecting") mambo.disconnect() if __name__ == "__main__": # you will need to change this to the address of YOUR mambo mamboAddr = "e0:14:d0:63:3d:d0" # make my mambo object # remember to set True/False for the wifi depending on if you are using the wifi or the BLE to connect mambo = Mambo(mamboAddr, use_wifi=True) print("trying to connect to mambo now") success = mambo.connect(num_retries=3) print("connected: %s" % success) if (success): # get the state information print("sleeping") mambo.smart_sleep(1) mambo.ask_for_state_update() mambo.smart_sleep(1) print("Preparing to open vision") mamboVision = DroneVisionGUI(mambo, is_bebop=False, buffer_size=200, user_code_to_run=demo_mambo_user_vision_function, user_args=(mambo, )) userVision = UserVision(mamboVision) mamboVision.set_user_callback_function(userVision.save_pictures, user_callback_args=None) mamboVision.open_video()