首页 > 其他分享 >AirSim键盘飞行控制

AirSim键盘飞行控制

时间:2024-01-30 23:11:26浏览次数:26  
标签:sys keys AirSim 键盘 飞行 pygame print import event

鼠标事件检测

import sys
import pygame

pygame.init()										# 初始化所有导入的pygame模块
screen = pygame.display.set_mode((640, 480))		# 创建一个大小为 640x480 像素的窗口
pygame.display.set_caption('mouse ctrl')			# 设置窗口的标题
screen.fill((0, 0, 0))								# 设置窗口的背景颜色为黑色(RGB: (0, 0, 0))

while True:
    for event in pygame.event.get():				# 无限循环用于不断地检查和处理事件
        if event.type == pygame.QUIT:
            sys.exit()					# 点击窗口的关闭按钮时,触发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)

键盘按键检测

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]:			# Esc退出
        pygame.quit()
        sys.exit()

字母及方向按键检测

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))		# a+ACSII码,在强制类型转换为字符

    # 检测上下左右键
    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()

键盘飞控

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)
AirSim_client.armDisarm(True)
AirSim_client.takeoffAsync().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)									# 检测时间间隔为0.02s

    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						# 加速倍率,若按空格则为10倍,否则是1倍
    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		# d-a为1顺时针偏航,否则逆时针

    # 根据 '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))

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

卡顿现象:编辑——编辑器偏好设置——搜索CPU——取消勾选处于背景中时占用较少CPU

或者通过一台电脑运行airsim,一台电脑运行python的通信方式来运行

标签:sys,keys,AirSim,键盘,飞行,pygame,print,import,event
From: https://www.cnblogs.com/xushengxiang/p/17998195

相关文章

  • 初中英语优秀范文100篇-074I want to invent a flying car-我想发明一辆飞行汽车
    PDF格式公众号回复关键字:SHCZFW074记忆树1Nevercanwedenythathigh-technologyhasafar-reachinginfluenceonourlife.翻译我们不能否认高科技对我们的生活产生了深远的影响简化记忆影响句子结构Nevercanwedeny是倒装句,正常语序是“Wecanneverdenyt......
  • AirSim航路点飞行
    航路点飞行API​ AirSim提供的轨迹跟踪API是基于位置控制的,所以严格意义上并不能算是轨迹跟踪,而应该称之为连续航路点飞行。无人机会依次飞过多个航路点,形成特定的飞行轨迹,其调用格式如下。#航路点轨迹飞行控制client.moveOnPathAsync(path,velocity,driv......
  • AirSim多无人机协同集群编队
    首先要修改settings.json文件,来设置多无人机的初始位置{"SeeDocsAt":"https://github.com/Microsoft/AirSim/blob/main/docs/settings.md","SettingsVersion":1.2,"SimMode":"Multirotor","Vehicles":{&qu......
  • AirSim常用API
    本文总结一下AirSim中无人机相关常用的最基本的API函数接口。1.无人机起飞降落建立通信client=airsim.MultirotorClient()获得API控制权client.enableApiControl(True)释放API控制权client.enableApiControl(False)解锁旋翼client.armDisarm(True)关闭旋翼clien......
  • FlightGear对键盘、鼠标输入无响应
    软件版本FlightGear2020.3.19故障简述下载安装FlightGear2020.3.19后,运行软件进入主界面,点击“开始飞行!”,等待加载完毕进入飞行模拟界面后,可以使用鼠标点击飞机仪表上的按钮。尝试按下一次键盘上的按键都毫无响应,随之鼠标在窗口内消失,也无法点击和进行任何操作。飞行模拟器能......
  • AirSim安装与项目初始化
    AirSim与UnrealEngine的安装见https://zhuanlan.zhihu.com/p/618440744在安装的时候版本选择UE4.27与Visualstudio2022。在每个UEproject中,都存在一个.project文件,通过vscode打开则在里面可以设置打开方式,通过修改EngineAssociation可以设置用哪个版本的UE引擎打开该文件。......
  • AirSim飞控介绍与观察视角
    飞控介绍​ 四旋翼无人机有四个呈十字交叉的螺旋桨,四个螺旋桨高速旋转可以产生升力,从而带动整个飞机在空中飞行。四旋翼无人机能够垂直起飞和降落,可以自由悬停,如果操作得当还可以进行高速高机动飞行,自由轻便、易操作是其突出的优点。四旋翼无人机主要是通过电机调节4个螺旋桨的转......
  • 飞行控制
    ​ AirSim封装了一些API接口,使用这些API接口,可以用程序跟仿真进行交互。例如可以使用API来获取图片、无人机状态、控制无人机/车辆的运动等。​ AirSim的API非常丰富,有很多可以调用的功能,可以将这些功能分成以下几类:图像类API:获取各种类型的图像、控制云台等;控制仿真运行:可......
  • Vue模板语法——键盘事件修饰符
    一、键盘修饰符在JavaScript事件中除了前面所说的事件,还有键盘事件,也经常需要监测常见的键值。在Vue中允许v-on在监听键盘事件时添加关键修饰符。记住所有的keyCode比较困难,所以Vue为最常用的键盘事件提供了别名:enter:回车键tab:制表键delete:含delete和backspace键esc:返回键......
  • 4.矩阵键盘
    include<REGX52.H>sbitC1=P1^3;sbitC2=P1^2;sbitC3=P1^1;sbitC4=P1^0;sbitL1=P1^7;sbitL2=P1^6;sbitL3=P1^5;sbitL4=P1^4;voiddelay(inttime)//????{unsignedinti,j,y;for(y=0;y<time;y++){for(i=0;i<19601;i++){for(j=5;j>0;j--......