from pynput import keyboard
from djitellopy import Tello
import cv2, math, time
def on_press(key):
char = key.char
if char == 'w':
print(123)
tello.move_forward(20)
if char == 'a':
tello.move_left(20)
if char == 's':
tello.move_back(20)
if char == 'd':
tello.move_right(20)
if char == 'q':
tello.rotate_clockwise(-10)
if char == 'e':
tello.rotate_clockwise(10)
if char == 'r':
tello.move_up(20)
if char == 'f':
tello.move_down(20)
def on_release(key):
print('释放了:{}'.format(key) )
if key == keyboard.Key.esc:
tello.end()
return False
listener = keyboard.Listener(
on_press=on_press,
on_release=on_release,)
tello = Tello()
try:
tello.connect()
tello.takeoff()
print("无人机起飞完成")
# 开启一个键盘监听
listener.start()
time.sleep(50)
except Exception as e:
# 如果出现异常,打印错误信息
print(f"An error occurred: {e}")
finally:
# 不论是否发生异常,最后都断开连接
tello.end()
改进 将监听之后对无人机的操作指令 和 键盘监听分为两个进程,不在同一个进程里执行,避免键盘监听进程阻塞
from pynput import keyboard
from djitellopy import Tello
import cv2, math, time
from keyboardListener import KeyboardListener
tello = Tello()
try:
tello.connect()
tello.takeoff()
print("无人机起飞完成")
# 开启一个键盘监听
listener = KeyboardListener()
listener.start_listener()
while True:
pressSet = listener.get_pressKeySet()
if pressSet == {'w'}:
tello.move_forward(20)
if pressSet == {'a'}:
tello.move_left(20)
if pressSet == {'s'}:
tello.move_back(20)
if pressSet == {'d'}:
tello.move_right(20)
if pressSet == {'q'}:
tello.rotate_clockwise(-10)
if pressSet == {'e'}:
tello.rotate_clockwise(10)
if pressSet == {'r'}:
tello.move_up(20)
if pressSet == {'f'}:
tello.move_down(20)
if pressSet == {keyboard.Key.esc}:
listener.stop_listener()
tello.land()
break
except Exception as e:
# 如果出现异常,打印错误信息
print(f"An error occurred: {e}")
finally:
# 不论是否发生异常,最后都断开连接
tello.end()
仍然存在问题 tello.move api 调用是仍为进程阻断,无法实现连续移动