使用 Python + Pygame 键盘控制无人机(AirSim)

键盘控制无人机

在无人机仿真或者控制实验中,很多时候我们需要通过键盘来实时操控无人机的飞行方向、速度和姿态。本文将介绍如何使用 Python + Pygame 来实现键盘监听,并通过 AirSim 接口发送速度与偏航控制指令。

环境准备

需要的依赖:python3.x pygame airsim

初始化

首先导入依赖并初始化 pygame

python 复制代码
import airsim
import pygame
import sys

pygame.init()
screen = pygame.display.set_mode((400, 300))  # 创建一个窗口用于监听按键
pygame.display.set_caption("Drone Keyboard Controller")

设置无人机的基础速度参数和偏航速率:

python 复制代码
# 基础速度 (m/s)
vehicle_velocity = 2.0  

# 临时加速比例
speedup_ratio = 10.0  

# 基础偏航速率 (deg/s)
vehicle_yaw_rate = 5.0

键盘控制逻辑

通过键盘来改变无人机的速度和偏航速率:

  • 方向键 ↑ ↓ ← → → 控制无人机前进 / 后退 / 左移 / 右移

  • W / S → 上升 / 下降

  • A / D → 左旋转 / 右旋转

  • 空格 → 临时加速

  • ESC → 退出

代码示例:

python 复制代码
while True:
    pygame.event.pump()  # 刷新事件队列
    keys = pygame.key.get_pressed()

    # 是否加速
    if keys[pygame.K_SPACE]:
        scale_ratio = speedup_ratio
    else:
        scale_ratio = 1.0

    # 偏航控制(A / D)
    yaw_rate = (keys[pygame.K_d] - keys[pygame.K_a]) * scale_ratio * vehicle_yaw_rate

    # 前后移动(↑ / ↓)
    velocity_x = (keys[pygame.K_UP] - keys[pygame.K_DOWN]) * scale_ratio * vehicle_velocity

    # 左右移动(← / →)
    velocity_y = -(keys[pygame.K_LEFT] - keys[pygame.K_RIGHT]) * scale_ratio * vehicle_velocity

    # 上下移动(W / S)
    velocity_z = -(keys[pygame.K_w] - keys[pygame.K_s]) * scale_ratio * vehicle_velocity

    # 发送控制指令
    AirSim_client.moveByVelocityAsync(
        vx=velocity_x,
        vy=velocity_y,
        vz=velocity_z,
        duration=0.02,
        yaw_mode=airsim.YawMode(is_rate=True, yaw_or_rate=yaw_rate),
        vehicle_name="Drone1"
    )

    # 按 ESC 退出
    if keys[pygame.K_ESCAPE]:
        pygame.quit()
        sys.exit()

效果演示

运行后,你可以直接通过键盘操控无人机:

  • 按住方向键让无人机前后左右平移

  • 按住 W / S 让无人机上升或下降

  • 按住 A / D 控制无人机旋转偏航

  • 空格 进入加速模式,更方便观察飞行动作

  • ESC 结束程序


总结

通过 pygame 键盘监听 + AirSim 接口,我们实现了一个简单直观的无人机控制方式。

这种方式适合:

  • 进行飞控算法测试

  • 做可视化演示

  • 快速调试无人机运动学效果

如果需要更复杂的控制逻辑,还可以在此基础上扩展,例如添加 姿态角度控制航点自动飞行 等功能。

相关推荐
小陈工19 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
A__tao1 天前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢1 天前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
迷藏4941 天前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
明日清晨1 天前
python扫码登录dy
开发语言·python
bazhange1 天前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
人工干智能1 天前
科普:python中你写的模块找不到了——`ModuleNotFoundError`
服务器·python
unicrom_深圳市由你创科技1 天前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
小敬爱吃饭1 天前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
宸津-代码粉碎机1 天前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python