|
|
# @Time : 2022/4/20 12:27
|
|
|
# @Author : 2890199310@qq.com
|
|
|
# @File : KeyboardControl.py.py
|
|
|
# @Software: PyCharm
|
|
|
# @Function:
|
|
|
import os
|
|
|
import sys
|
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../PaddleClas-release-2.3")
|
|
|
import logging
|
|
|
import time
|
|
|
import cv2
|
|
|
from djitellopy import tello
|
|
|
# import Tello.KeyPressModule as kp # 用于获取键盘按键
|
|
|
from time import sleep
|
|
|
|
|
|
# Tello初始化设置
|
|
|
Drone = tello.Tello() # 创建飞行器对象
|
|
|
Drone.connect() # 连接到飞行器
|
|
|
Drone.streamon() # 开启视频传输
|
|
|
Drone.LOGGER.setLevel(logging.ERROR) # 只显示错误信息
|
|
|
sleep(5) # 等待视频初始化
|
|
|
# kp.init() # 初始化按键处理模块
|
|
|
|
|
|
def getKeyboardInput(key):
|
|
|
image = cv2.resize(OriginalImage, (Camera_Width, Camera_Height))
|
|
|
speed = 70
|
|
|
drone = Drone
|
|
|
lr, fb, ud, yv = 0, 0, 0, 0
|
|
|
key_pressed = 0
|
|
|
# if kp.getKey("e"): #
|
|
|
if key == "e":
|
|
|
cv2.imwrite('D:/snap-{}.jpg'.format(time.strftime("%H%M%S", time.localtime())), image)
|
|
|
# if kp.getKey("UP"):# 上升
|
|
|
if key == "UP":
|
|
|
Drone.takeoff()
|
|
|
# elif kp.getKey("DOWN"):#下降
|
|
|
if key == "DOWN":
|
|
|
Drone.land()
|
|
|
|
|
|
# if kp.getKey("j"):# 向左飞行
|
|
|
if key == "j":
|
|
|
key_pressed = 1
|
|
|
lr = -speed
|
|
|
# elif kp.getKey("l"): #向右飞行
|
|
|
if key == "l":
|
|
|
key_pressed = 1
|
|
|
lr = speed
|
|
|
|
|
|
# if kp.getKey("i"): #向前飞行
|
|
|
if key == "i":
|
|
|
key_pressed = 1
|
|
|
fb = speed
|
|
|
# elif kp.getKey("k"):# 向后飞行
|
|
|
if key == "k":
|
|
|
key_pressed = 1
|
|
|
fb = -speed
|
|
|
|
|
|
# if kp.getKey("w"):# 向上飞行
|
|
|
if key == "w":
|
|
|
key_pressed = 1
|
|
|
ud = speed
|
|
|
# elif kp.getKey("s"): #向下飞行
|
|
|
if key == "s":
|
|
|
key_pressed = 1
|
|
|
ud = -speed
|
|
|
|
|
|
# if kp.getKey("a"): # 向左旋转
|
|
|
if key == "a":
|
|
|
key_pressed = 1
|
|
|
yv = -speed
|
|
|
# elif kp.getKey("d"): #向右旋转
|
|
|
if key == "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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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) |