键盘控制无人机
在无人机仿真或者控制实验中,很多时候我们需要通过键盘来实时操控无人机的飞行方向、速度和姿态。本文将介绍如何使用 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 接口,我们实现了一个简单直观的无人机控制方式。
这种方式适合:
-
进行飞控算法测试
-
做可视化演示
-
快速调试无人机运动学效果
如果需要更复杂的控制逻辑,还可以在此基础上扩展,例如添加 姿态角度控制 、航点自动飞行 等功能。