from pynput import keyboard
from djitellopy import Tello
import cv2, math, timedef on_press(key):char = key.charif 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 KeyboardListenertello = 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 调用是仍为进程阻断,无法实现连续移动