mirror of
https://bitbucket.org/myhomie/mycorerepository.git
synced 2025-12-06 09:41:19 +00:00
98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
"""
|
|
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()
|