DJITelloPy 控制无人机飞行

python 复制代码
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()

改进 将监听之后对无人机的操作指令 和 键盘监听分为两个进程,不在同一个进程里执行,避免键盘监听进程阻塞

python 复制代码
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 调用是仍为进程阻断,无法实现连续移动

相关推荐
An独行者2 小时前
基于无人机观测的高光谱 BRDF 可表征平坦沙漠地表的光学特性:与实验室和卫星数据的综合对比研究
无人机
Dymc5 小时前
【论文解析】DUCPP —— 当路不知道能不能走,让无人机先去探路
人工智能·无人机·视觉定位·低空经济·无人集群
YOLO数据集集合5 小时前
智慧道路病害分割识别|公路裂缝坑洞智能检测 无人机巡检深度学习数据集
人工智能·深度学习·无人机
Multipath71210 小时前
多链路聚合路由与宽带自组网、卫星便携站结合的传输应用
网络·5g·安全·无人机·实时音视频
YOLO数据集集合11 小时前
无人机航拍河道垂钓检测数据集|水域禁钓智能识别|YOLO目标检测实战 河道垂钓识别数据集|无人机水域巡检|非法垂钓检测|深度学习目标检测
yolo·目标检测·无人机
weixin_4526006911 小时前
D1307-RTC时钟芯片简介
机器人·无人机·实时音视频·摄像头·充电桩·电动工具·光伏逆变器
无人机长了一个脑袋14 小时前
无人机的带宽
无人机
Dymc14 小时前
【论文解析】CoPCS — 让无人机与无人车“心有灵犀“的协同规划框架
人工智能·无人机·视觉定位·低空经济·无人集群
LONGZETECH14 小时前
Unity 3D+C/S架构无人机数字孪生实训室:破解实训“三高”难题的底层技术实现
c语言·开发语言·3d·unity·架构·无人机
YOLO数据集集合15 小时前
滑坡智能识别|遥感卫星无人机多源影像数据集|深度学习语义分割开源基准
人工智能·深度学习·yolo·目标检测·视觉检测·无人机