diff --git a/main.py b/main.py new file mode 100644 index 0000000..776e817 --- /dev/null +++ b/main.py @@ -0,0 +1,87 @@ +# This is a sample Python script. + +# Press Shift+F10 to execute it or replace it with your code. +# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings. + + +import logging +import time +import cv2 +from djitellopy import tello +import KeyPressMoudle as kp # 用于获取键盘按键 +from time import sleep + +def getKeyboardInput(drone, speed, image): + lr, fb, ud, yv = 0, 0, 0, 0 + key_pressed = 0 + if kp.getKey("e"): + cv2.imwrite('D:/snap-{}.jpg'.format(time.strftime("%H%M%S", time.localtime())), image) + if kp.getKey("UP"): + Drone.takeoff() + elif kp.getKey("DOWN"): + Drone.land() + + if kp.getKey("j"): + key_pressed = 1 + lr = -speed + elif kp.getKey("l"): + key_pressed = 1 + lr = speed + + if kp.getKey("i"): + key_pressed = 1 + fb = speed + elif kp.getKey("k"): + key_pressed = 1 + fb = -speed + + if kp.getKey("w"): + key_pressed = 1 + ud = speed + elif kp.getKey("s"): + key_pressed = 1 + ud = -speed + + if kp.getKey("a"): + key_pressed = 1 + yv = -speed + elif kp.getKey("d"): + key_pressed = 1 + yv = speed + InfoText = "battery : {0}% height: {1}cm time: {2}".format(drone.get_battery(), drone.get_height(), time.strftime("%H:%M:%S",time.localtime())) + cv2.putText(image, InfoText, (10, 20), font, fontScale, (0, 0, 255), lineThickness) + if key_pressed == 1: + InfoText = "Command : lr:{0}% fb:{1} ud:{2} yv:{3}".format(lr, fb, ud, yv) + cv2.putText(image, InfoText, (10, 40), font, fontScale, (0, 0, 255), lineThickness) + + drone.send_rc_control(lr, fb, ud, yv) + +# 主程序 +# 摄像头设置 +Camera_Width = 720 +Camera_Height = 480 +DetectRange = [6000, 11000] # DetectRange[0] 是保持静止的检测人脸面积阈值下限,DetectRange[0] 是保持静止的检测人脸面积阈值上限 +PID_Parameter = [0.5, 0.0004, 0.4] +pErrorRotate, pErrorUp = 0, 0 + +# 字体设置 +font = cv2.FONT_HERSHEY_SIMPLEX +fontScale = 0.5 +fontColor = (255, 0, 0) +lineThickness = 1 + +# Tello初始化设置 +Drone = tello.Tello() # 创建飞行器对象 +Drone.connect() # 连接到飞行器 +Drone.streamon() # 开启视频传输 +Drone.LOGGER.setLevel(logging.ERROR) # 只显示错误信息 +sleep(5) # 等待视频初始化 +kp.init() # 初始化按键处理模块 + + +while True: + OriginalImage = Drone.get_frame_read().frame + Image = cv2.resize(OriginalImage, (Camera_Width, Camera_Height)) + getKeyboardInput(drone=Drone, speed=70, image=Image) # 按键控制 + cv2.imshow("Drone Control Centre", Image) + cv2.waitKey(1) \ No newline at end of file