欢迎光临散文网 会员登陆 & 注册

AirSim自己操控无人机——pygame环境检测+具体代码实现

2023-06-07 15:37 作者:皮卡丘上大学啦  | 我要投稿

一、Pygame鼠标事件简单检测

import sys

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('mouse ctrl')
screen.fill((0, 0, 0))

while True:
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           sys.exit()

       # >------>>>  处理鼠标事件   <<<------< #
       if event.type == pygame.MOUSEBUTTONDOWN:
           print("Mouse Down: ", event)
       if event.type == pygame.MOUSEBUTTONUP:
           print("Mouse Up", event)
       if event.type == pygame.MOUSEMOTION:
           print("Mouse is moving now: ", event)

       # >------>>>  处理键盘事件   <<<------< #
       if event.type == pygame.KEYDOWN:
           if event.key == pygame.K_RETURN:
               print("keyboard event: ", event)

二、Pygame键盘全按键简单检测

import sys
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('keyboard ctrl')
screen.fill((0, 0, 0))

while True:

   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           sys.exit()

   scan_wrapper = pygame.key.get_pressed()
   print("pressed keys is ", scan_wrapper)

   # press 'Esc' to quit
   if scan_wrapper[pygame.K_ESCAPE]:
       pygame.quit()
       sys.exit()

三、Pygame核心26个字母及上下左右按键检测

import sys
import pygame

pygame.init()

screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('keyboard ctrl')
screen.fill((0, 0, 0))

while True:
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           sys.exit()

   keys = pygame.key.get_pressed()
   for i in range(26):
       if keys[pygame.K_a + i]:  # 检测从 A 到 Z 的按键
           print(chr(pygame.K_a + i))

   # 检测上下左右键
   if keys[pygame.K_UP]:
       print("Up arrow")
   if keys[pygame.K_DOWN]:
       print("Down arrow")
   if keys[pygame.K_LEFT]:
       print("Left arrow")
   if keys[pygame.K_RIGHT]:
       print("Right arrow")

   # 按下 'Esc' 退出程序
   if keys[pygame.K_ESCAPE]:
       pygame.quit()
       sys.exit()

四、AirSim使用Pygame在UE4中实现自己用键盘控制无人机飞行

import sys
import time
import airsim
import pygame
import CV2
import numpy as np

# >------>>>  pygame settings   <<<------< #
pygame.init()
screen = pygame.display.set_mode((320, 240))
pygame.display.set_caption('keyboard ctrl')
screen.fill((0, 0, 0))

# >------>>>  AirSim settings   <<<------< #
# 这里改为你要控制的无人机名称(settings文件里面设置的)
vehicle_name = "Drone"
AirSim_client = airsim.MultirotorClient()
AirSim_client.confirmConnection()
AirSim_client.enableApiControl(True, vehicle_name=vehicle_name)
AirSim_client.armDisarm(True, vehicle_name=vehicle_name)
AirSim_client.takeoffAsync(vehicle_name=vehicle_name).join()

# 基础的控制速度(m/s)
vehicle_velocity = 2.0
# 设置临时加速比例
speedup_ratio = 10.0
# 用来设置临时加速
speedup_flag = False

# 基础的偏航速率
vehicle_yaw_rate = 5.0

while True:
   yaw_rate = 0.0
   velocity_x = 0.0
   velocity_y = 0.0
   velocity_z = 0.0

   time.sleep(0.02)

   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           sys.exit()

   scan_wrapper = pygame.key.get_pressed()

   # 按下空格键加速10倍
   if scan_wrapper[pygame.K_SPACE]:
       scale_ratio = speedup_ratio
   else:
       scale_ratio = speedup_ratio / speedup_ratio

   # 根据 'A' 和 'D' 按键来设置偏航速率变量
   if scan_wrapper[pygame.K_a] or scan_wrapper[pygame.K_d]:
       yaw_rate = (scan_wrapper[pygame.K_d] - scan_wrapper[pygame.K_a]) * scale_ratio * vehicle_yaw_rate

   # 根据 'UP' 和 'DOWN' 按键来设置pitch轴速度变量(NED坐标系,x为机头向前)
   if scan_wrapper[pygame.K_UP] or scan_wrapper[pygame.K_DOWN]:
       velocity_x = (scan_wrapper[pygame.K_UP] - scan_wrapper[pygame.K_DOWN]) * scale_ratio

   # 根据 'LEFT' 和 'RIGHT' 按键来设置roll轴速度变量(NED坐标系,y为正右方)
   if scan_wrapper[pygame.K_LEFT] or scan_wrapper[pygame.K_RIGHT]:
       velocity_y = -(scan_wrapper[pygame.K_LEFT] - scan_wrapper[pygame.K_RIGHT]) * scale_ratio

   # 根据 'W' 和 'S' 按键来设置z轴速度变量(NED坐标系,z轴向上为负)
   if scan_wrapper[pygame.K_w] or scan_wrapper[pygame.K_s]:
       velocity_z = -(scan_wrapper[pygame.K_w] - scan_wrapper[pygame.K_s]) * scale_ratio

   # print(f": Expectation gesture: {velocity_x}, {velocity_y}, {velocity_z}, {yaw_rate}")

   # 设置速度控制以及设置偏航控制
   AirSim_client.moveByVelocityBodyFrameAsync(vx=velocity_x, vy=velocity_y, vz=velocity_z, duration=0.02,
                                              yaw_mode=airsim.YawMode(True, yaw_or_rate=yaw_rate), vehicle_name=vehicle_name)

   if scan_wrapper[pygame.K_ESCAPE]:
       pygame.quit()
       sys.exit()


AirSim自己操控无人机——pygame环境检测+具体代码实现的评论 (共 条)

分享到微博请遵守国家法律