AirSim无人机键盘控制

2023-05-16

AirSim仿真中实现多键盘按键控制

  • 前言
  • 本文实现效果
  • 一、环境依赖
  • 二、多按键检测
    • 1.Pygame中的常用的键盘鼠标事件
    • 2.利用Pygame实现的多按键检测
  • AirSim中键盘控制实现
  • 下期预告


前言

有时候为了方便在AirSim调试无人机,验证一些视觉模块,使用键盘来控制无人机移动显得十分必要,或者,有时候我们想手动控制验证一下自己实现的底层飞控性能,这时,我们特别希望能够通过自写程序全方位手动控制无人机。鉴于AirSim官方提供的键盘控制Demo程序比较简单,每个时刻只能根据一个按键状态来控制无人机进行简单飞行,也就是说一个时刻无法提供多个控制度(前进&上升&自旋&平移),我将分享一下自己在AirSim仿真中项目中实现的多按键控制。


本文实现效果

键盘控制

一、环境依赖

Pygame。它是一个Python的扩展库,它囊括了SDL库以及这个库的一些依赖库,它是极度轻便的并且可以运行在几乎所有的平台和操作系统上,在本案例中我们使用Pygame来可视化以及捕捉键盘鼠标事件。

pip3 install pygame

二、多按键检测

1.Pygame中的常用的键盘鼠标事件

代码如下:

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()
            
        # >------>>>  处理鼠标事件   <<<------< #
        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)

2.利用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()


AirSim中键盘控制实现

为了充分彰显程序键盘控制的开放性,这里添加了加速按键(按下空格键进行10倍加速):

import sys
import time
import airsim
import pygame

# >------>>>  pygame settings   <<<------< #
pygame.init()
screen = pygame.display.set_mode((640, 480))
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)
base_velocity = 2.0
# 设置临时加速比例
speedup_ratio = 10.0
# 用来设置临时加速
speedup_flag = False

# 基础的偏航速率
base_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 * base_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)

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

下期预告

增加键盘控制第一视角图像实时显示,以及进行代码封装,方便移植。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AirSim无人机键盘控制 的相关文章

  • AirSim学习(1)-介绍,安装,unity测试

    home AirSim是一款基于虚幻引擎的无人机 汽车等模拟器 我们现在也有一个实验性的Unity版本 它是开源的 xff0c 跨平台的 xff0c 支持使用流行的飞行控制器 如PX4和ArduPilot 进行软件在环模拟 xff0c 并支
  • AirSim无人机仿真(Ubuntu18.04)

    安装过程 xff1a xff11 xff0e 先要安装Unreal Engine 需要在官网 xff08 https www unrealengine com xff09 注册账号 xff0c 并用github拉取代码 xff0c 最后在终
  • Airsim_API

    AirSim API 参考自知乎大佬https www zhihu com column multiUAV 讲的非常好 xff01 无人机姿态角 pitch是俯仰角 xff0c 是 点头 yaw是偏航角 xff0c 是 摇头 roll是旋转
  • pip install airsim问题

    直接使用pip install airsim安装airsim包会失败 airsim C Users DELL gt pip install airsim Collecting airsim Using cached airsim 1 8 1
  • PX4和Airsim通信操作流程

    坑真几把多 先在Windows上安装UE4和Airsim不再赘述 xff0c 官网都有 虚拟机或其他计算机安装好ubuntu并安装PX4 1 安装PX4的ROS相关包 xff08 mavros xff09 1 第一种 xff1a 进入官网安
  • Airsim仿真

    Airsim设计的目的 xff1a 1 现实世界开发测试自动驾驶车辆算法费时费力 2 迎合AI的发展 xff0c 需要在各种条件下和环境下收集大量带注释训练数据 模块化设计 xff0c 强调可扩展性 提供很多API xff0c 核心组件包括
  • Airsim中运行OpenVINS和VINS_Fusion

    Airsim中运行OpenVINS和VINS Fusion 1 简介2 参考3 步骤3 1 编译3 2 运行3 3 运行结果3 4 相机和IMU参数配置 1 简介 本文简介在Airsim中运行OpenVINS和VINS Fusion 2 参
  • QGC、PX4和AirSim的安装

    本教程视频地址 xff1a https www bilibili com video BV1dv411K71E 本教程将讲解QGC地面站的安装 PX4控制系统 xff08 包括jMAVSim ROS和Gazebo xff09 的安装 Air
  • AirSim中获取视觉、惯性数据方法研究

    AirSim中获取视觉 惯性数据方法研究 文章目录 AirSim中获取视觉 惯性数据方法研究1 获取ROS bag格式数据2 获取文件形式 EuRoc数据集格式 3 其他方案 最近在做AirSim中部署V SLAM xff0c 抽空将之前尝
  • AirSim无人机键盘控制

    AirSim仿真中实现多键盘按键控制 前言本文实现效果一 环境依赖二 多按键检测1 Pygame中的常用的键盘鼠标事件2 利用Pygame实现的多按键检测 AirSim中键盘控制实现下期预告 前言 有时候为了方便在AirSim调试无人机 x
  • 自动驾驶仿真工具之AirSim简介

    简介 开源 xff0c 跨平台 xff0c 支持Linux Windows PX4 xff0c 基于Unreal Engine xff0c 有Unity版本 xff08 实验版 xff09 Github链接 多种语言API xff0c 包括
  • 技术分享 | Airsim和PX4远程配置连接教程

    前言 xff1a 远程配置是指一台计算机上安装windows版airsim xff0c 作为服务器 xff0c 另一台计算机上安装ubuntu的px4 xff0c 作为客户端 没有采用ubuntu的airsim是因为windows版的air
  • AirSim无人机仿真平台(windows)

    1 环境 xff1a UE4 26 43 AirSim 43 VS2019 2 安装步骤 xff1a 1 xff09 先下载Epic Games安装启动器 xff0c 然后再安装UE4 26 xff1b 2 xff09 安装VS2019社区
  • Windows10下Airsim+PX4(WSL2)+MAVROS仿真环境搭建

    一 Windows10下WSL2安装 1 1 WSL2的安装与配置 首先在Windows10下启用WSL xff0c 以管理员身份打开 PowerShell 工具并运行以下命令 dism span class token punctuati
  • Ubuntu18.04搭建AirSim+ROS仿真环境

    AIRSIM在UBuntu 18 04上构建的官网文档 一 安装UE4引擎 AIRSIM是依赖于UE4引擎实现的 因此在安装AIRSIM之前要安装UE4引擎 1 获取UE4的github许可 在Ubuntu上安装UE4引擎需要从源文件进行编
  • Airsim_API

    AirSim API 参考自知乎大佬https www zhihu com column multiUAV 讲的非常好 xff01 无人机姿态角 pitch是俯仰角 xff0c 是 点头 yaw是偏航角 xff0c 是 摇头 roll是旋转
  • win10 WSL2 AirSim 仿真环境搭建

    win10 WSL2 AirSim 仿真环境搭建 wsl2AirSim安装教程基本环境安装WSL2安装PX4 编译环境配置好默认的工具链下载编译PX4 安装AirSim环境安装虚幻引擎下载AirSimLandscapeMountains下载
  • Airsim和ROS直连(自带飞控)

    安装Airsim git clone https github com Microsoft AirSim git cd AirSim setup sh build sh 安装好了之后编译ROS包 cd AirSim ros catkin b
  • Airsim在ubuntu下的使用(一)

    大前提 首先在ubuntu下配置好Unreal Engine和Airsim的环境 可以参考Airsim 43 UnrealEngine 搭建自动驾驶虚拟环境 注意一下几点 xff1a UE4 对显卡驱动有要求 xff0c 不能太高也不能太低
  • 基于Airsim的sitl模拟环境配置(ubuntu 16.04)

    基于Airsim的sitl模拟环境配置 xff08 ubuntu 16 04 xff09 sitl仿真 xff0c 软件在环仿真可以不使用任何硬件就可以进行模拟飞行或驾驶 xff0c 实验室获取数据非常有用 基于Airsim的sitl模拟需

随机推荐

  • 非对称加密详解

    非对称加密 1 非对称加密1 1 什么是非对称加密1 2 非对称加密通信流程1 3 RSA1 3 1 RSA加密1 3 2 RSA解密1 3 3 总结 1 4 ECC椭圆曲线 1 非对称加密 1 1 什么是非对称加密 非对称加密也叫公钥密码
  • PHP函数usort()解释

    定义和用法 usort 函数使用用户自定义的函数对数组排序 注释 xff1a 如果两个元素比较结果相同 xff0c 则它们在排序后的数组中的顺序未经定义 到 PHP 4 0 6 之前 xff0c 用户自定义函数将保留这些元素的原有顺序 但是
  • strchr()、strrchr()、strchrnul()…

    头文件 xff1a include 函数原型 xff1a char strchr char str int c char strrchr char str int c define GNU SOURCE 头文件 xff1a include
  • freertos- 任务调度器-vTaskStartScheduler()解析(笔记)

    1 全局状态量 系统时钟节拍计数器tick static volatile TickType t xTickCount 61 TickType t 0U 全局下一任务调度需要的阻塞时间 xff0c 用于及其唤醒任务static volati
  • freertos- 重要管理数据结构-列表List及其操作API (笔记)

    1 xff0c 源码中的位置 list h xff0c list c 2 xff0c 列表和列表项结构 列表项分为2种 xff1a struct xLIST ITEM listFIRST LIST ITEM INTEGRITY CHECK
  • 技术分享 | Javaer 如何做单元测试?

    前言 xff1a 本文适用于 javaer xff0c 其他开发者或许可以借鉴 写本文的主旨有两个 xff0c 一是简单的给大家介绍下单元测试 xff0c 二是通过一个简单的示例来介绍一些单元测试的技巧 xff0c 希望以此来降低大家写单元
  • 扩展卡尔曼滤波【转】

    1 重点看 SLAM中的EKF xff0c UKF xff0c PF原理简介 半闲居士 博客园 2 机器人重点看 定位 xff08 一 xff09 xff1a 扩展卡尔曼滤波 windSeS的博客 3 重点实例 扩展卡尔曼滤波 xff08
  • AGV - Background(1)- Company

    Company 米克力美 DZ 80无轨导航AGV小车采用windows10智能交互系统 xff0c xff08 米克力美工业AGV小车机器人采用安卓交互系统 xff09 可自动编程和程序化 xff0c 实现自主学习 使用人员无需培训即可轻
  • 无线路由器CPU浅析 MT7621A、 BCM47189 到底谁强?

    转自 xff1a http bbs 360 cn thread 14459037 1 1 html 在第一讲中 xff0c 已经粗略介绍过了目前路由芯片的四大厂 xff1a Broadcom xff08 博通 xff09 Qualcomm
  • STM32F4_串口通信详解

    目录 1 串口相关介绍及使用 1 1 串口设置的一般步骤 xff1a 1 1 1 串口时钟和GPIO时钟使能 1 1 2 设置引脚复用器映射 1 1 3 GPIO端口模式设置 1 1 4 串口参数初始化 1 1 5 开启中断并且初始化NVI
  • 嵌入式Linux设备驱动开发笔记(二)

    一 内核的时间 xff08 1 xff09 Tick xff08 滴答 xff09 内核采用了一个新的时间单位来进行计时 该时间单位称为tick 滴答 xff0c 一个tick对应硬件定时器两次中断之间的时间间隔 当前内核每秒钟硬件定时器会
  • Docker实现原理/容器原理(LXC,Cgroups,Docker)

    Docker实现原理 容器原理 Docker实现原理 容器原理什么是容器 Container 容器传统架构问题容器是什么容器如何实现 CgroupsCgroups是什么Cgroups解决什么问题Cgroups如何工作Cgroups层级结构
  • ros 编译 Python 文件

    参考自 xff1a http wiki ros org rospy tutorials Tutorials Makefile 系统 xff1a Ubuntu14 04 ros indigo py并不是可编译的脚本文件 xff0c 但是为了适
  • [Emuelec]在gamelist.xml中,为中文游戏名生成拼音字母

    1 通过python脚本将汉字拼音首字母查询出来 usr bin python3 coding UTF 8 filename transPinying py 功能 xff1a 获取传入中文的每个汉字的拼音首字母 pydic 61 34 吖a
  • 51单片机-宏晶STC程序调试、烧录、硬仿真

    内容包括STC单片机内部硬件介绍 xff08 寄存器 xff09 与程序的调试 硬仿真 xff0c STC15F硬仿真及其错误处理 xff0c MCS 51仿真介绍 xff0c 全自动下载介绍等 紫色文字是超链接 xff0c 点击自动跳转至
  • STM32单片机-汇编指令2

    目录 xff1a 11 STMFD和LDMFD指令 1 xff09 STMFD SP R0 R7 xff0c LR 2 xff09 LDMFD SP R0 R7 xff0c LR 99 伪指令 1 xff09 PROC伪指令 2 xff09
  • 多个switch case如何优化

    这段时间一直在整改代码圈复杂度 xff0c 我们的要求是每个函数方法圈复杂度不得大于5 xff0c 以下是整改的部分截图 希望对整改代码的你有所提示或帮助 xff0c 如果有更好的整改方法 xff0c 还望您不吝赐教哦 xff01
  • OPENCV检测矩形并计算其中心

    include 34 cv h 34 include 34 highgui h 34 include lt stdio h gt include lt math h gt include lt string h gt pragma comm
  • Jetson Xavier NX/AGX快速安装Intel Realsense SDK并使用D455

    Jetson Xavier NX AGX快速安装Intel Realsense SDK并使用D455 环境搭建及测试 1 安装脚本下载 xff1a github链接 xff1a https github com jetsonhacks in
  • AirSim无人机键盘控制

    AirSim仿真中实现多键盘按键控制 前言本文实现效果一 环境依赖二 多按键检测1 Pygame中的常用的键盘鼠标事件2 利用Pygame实现的多按键检测 AirSim中键盘控制实现下期预告 前言 有时候为了方便在AirSim调试无人机 x