一、AirSim概述

1.1什么是AirSim

AirSim是一款基于虚幻引擎构建的无人机、汽车等模拟器(我们现在还有一个实验性的Unity版本)。它是开源的,跨平台的,并支持使用流行的飞行控制器(如PX4和ArduPilot)进行软件在环仿真,并使用PX4进行硬件在环模拟,以进行物理和视觉上逼真的模拟。它是作为虚幻插件开发的,可以简单地放入任何虚幻环境中。

AirSim 是作为虚幻游戏引擎的插件而存在的,适配基于虚幻引擎搭建的环境。目前AirSim也有一个实验版本的插件适用于Unity引擎。得益于游戏引擎优秀的视觉渲染效果,AirSim 仿真平台在具备物理仿真的同时也具备了逼真的视觉仿真效果,这是其一大亮点,非常适用于进行基于深度学习等视觉AI仿真验证。AirSim提供了很多API接口,用于读取数据、控制车辆、控制天气等,AirSim的开发者希望这个平台能够帮助研究人员用于深度学习、计算机视觉、强化学习等人工智能相关的研究,适用于无人机、无人驾驶、机器人等领域的应用。

AirSim的官方网站是:AirSim官网文档,在其官方网站中有更详细的介绍和说明文档。

二、AirSim安装

2.1 软件版本环境

  • AirSim版本:v1.8.1(截止2023年1月)
  • 虚幻引擎版本:4.27.2(依旧还是UE4)
  • Visual Studio版本:Visual Studio Community 2022
  • Python版本:Python3.7
  • Windows版本:Win10

2.2 安装Visual Studio集成开发环境

安装地址:VisualStudio2022安装地址
安装Visual Studio 2022确保在安装VS2022的时候选择C++和Windows10 SDK 10.0.19041的桌面开发,并在“单个组件”选项卡下选择最新的.NET Framework SDK。

为了保险起见,在这里我把最新的和官网要求的版本都下了。

因为这个是跟引擎有关的,我怕会引起问题,所以也一并下载了。(因为当时按照网上的另外一个教程:VS2019和UE4.26的时候一直编译不成功)

最新版的.NET Framework,因为需要用python做AirSim仿真,因此需要与AirSim建立通信。

2.3 安装UnrealEngine

官方地址:虚幻引擎安装地址
点开链接后,可以看到右上角有一个下载按钮(下载之前要先注册一个EpicGames的账号):

点击下载后,可以看见下载界面。

这里下载的是Epic Games启动程序的安装包。Epic Games启动程序是用来管理Epic旗下各个产品的启动器,里面包括了对Unreal Engine不同版本、虚幻商城、游戏库等的管理。
安装完程序打开后,如下图所示:

新版的AirSim要求的引擎需要>=4.27,但是我下载了UE5在验证block环境的时候就报错,生成不了sln,直接就进坑了。(5.0和5.1都是这样)所以我就下了4.27的引擎,结果蛮顺利的。

2.4 AirSim源码下载编译

AirSim源码目前仍在完善和丰富中,为了方便以后实时更新 AirSim 源码,建议使用 git 工具来下载。git工具可以在其官方网站中免费下载: git下载链接,选择下载 Windows 版本,下载完成后,双击安装,安装过程全部选择默认设置即可。

点开任务栏的放大镜,搜索Developer Command Prompt for VS 2022,如下图所示。

打开之后,切换到你期望下载AirSim的路径。然后输入

git clone https://github.com/Microsoft/AirSim.git

由于我已经安装过了,这里便不再演示下载。下载完成后,输入指令CD AirSim进入到AirSim的文件夹中,继续输入指令build.cmd。(编译的时间会有点久,耐心等待就就好。)

v1.8.1的AirSim编译完后会自动在“Airsim\Unreal\Environments\Blocks”文件夹中生成一个Block.sln的工程文件。(前面的版本需要CD 切换到Airsim\Unreal\Environments\Blocks目录下输入update_from_git.bat才会生成工程文件)。
PS:记得打开Epic Games,因为在编译最后会出现一个弹窗让你选择引擎版本的,这里我们选的是4.27。
如果没有出现弹窗并且没有出现Block.sln工程文件的,那么我们就手动Switch一下。

找到以下文件,右键点击Blocks.uproject ,点击下图红框中的命令


然后就会出现Blocks.sln工程文件了。

2.5 验证AirSim是否与Unreal引擎建立连接

双击Blocks.sln,打开如下图所示

选择DebugGame Editor和Win64,并且将Blocks设置为启动项目然后点击上方的本地Windows调试器按钮开始调试(F5)


block的环境非常简单,所以渲染也非常快。点击播放后如果出现了四旋翼,则证明了AirSim环境配置成功。

三、AirSim仿真

3.1 下载Unreal环境及环境配置

打开Epic Games,选中Samples往下拉,找到Virtual Studio环境。

在安装地址可以找到VirtualStudio.uproject,双击打开就会出现UE的编辑器。

为了能够使用Visual Studio 编译.sln文件,我们需要创建自己的类,因为Unreal要求至少有一个源文件。具体步骤是:点击左上角的文件,选择新建C++类,父类选择无,所以直接点击下一步;命名和路径都是默认就好了,直接点击创建类。这时Unreal会自动编译C++代码,然后会自动打开Visual Studio。到此VirtualStudio环境就下载安装好了。

3.2 在环境中添加AirSim插件

这一步我们把airsim作为一个插件,安装到环境中,然后环境就可以认识这个插件,并可以使用airsim。先把上一步打开的Unreal 编辑器和Visual Studio都关闭。找到上一篇文章中下载的AirSim文件夹,找到AirSim\Unreal\Plugins文件夹,并将其复制到VirtualStudio.uproject文件夹中。


然后双击打开VirtualStudio.uproject.uproject。会自动弹出如下窗口,点击是。

然后等待编译完成就好啦。

3.3 Python环境的搭建

win10系统下 python 环境的搭建包括安装和配置编辑器和解释器,编辑器是用来写python代码的,解释器是用来编译运行python程序的。
(本文的python环境配置,不需要手动添加环境变量。)

3.3.1 解释器Anaconda环境的安装和配置

非常推荐使用Anaconda对python环境进行管理,Anaconda中可以创建很多不同的虚拟环境,每个环境之间不会相互干涉,而且可以对每个环境进行个性化的配置,比如针对AirSim可以创建一个环境,在这个环境中只安装AirSim仿真需要使用的第三方包和通用库,而不会对其他的环境造成影响。

首先下载安装Anaconda,打开官网.

下载好之后,双击打开安装包,按照提示一步一步安装即可。安装成功后,就可以针对AirSim专门配置一个虚拟环境。安装完成后,可以看到开始菜单中多了几个应用:

  • Anaconda Navigator :图形用户界面,用于管理python环境。
  • Anaconda PowerShell Prompt:命令行工具。
  • Jupyter notebook:基于web的交互式计算环境,可以编辑markdown,用于展示数据分析的过程。
  • qtconsole :一个可执行 IPython 的仿终端图形界面程序。
  • spyder :一个使用Python语言、跨平台的、科学运算集成开发环境。

我们仅使用 Anaconda NavigatorAnaconda PowerShell Prompt 这两个应用即可。
打开Anaconda Navigator,点击左侧的Environments,这时中间已经有了一个基础环境base(root)。我们新建一个环境,专门用来做AirSim仿真。点击中间下面的Create,这时会跳出来一个窗口,输入一个自己喜欢的命名(我这里是airsim),选择Python版本为3.7,然后点击Create。创建好之后,环境中会包含一些基本的python库和包。

numpy是一个矩阵运算库,对于矩阵向量等运算非常方便使用,基本上做估计控制等算法都需要用到。以numpy为例,介绍一下安装过程。将库的选择选为all(右边左上角),在右上角的搜索框中搜索numpy,在下面的众多库中找到numpy,并在其前面的小框中打上勾,最后点击下面的Apply即可。


下面安装airsim需要用到的第三方库。很多第三方库在这里是搜索不到的,可以使用pip工具来安装。

点击环境名右面的绿色小三角,选择Open Terminal,就可以打开命令行了。

// 在命令行输入pip install msgpack-rpc-pythonpip install airsim

等待安装完成即可。

3.3.2 编辑器pycharm的安装与配置

Pycharm 是一款非常好用的python编辑器,具有代码高亮、自动补全、纠错等非常实用方便的功能,界面也很美观。Pycharm 有教育版,如果使用edu结尾的邮箱注册账号就可以免费使用,这是广大学生的一个非常重大的福利。

首先到官网下载软件安装包。社区版是免费的,教育版对于用结尾是edu的邮箱注册的用户是免费的,专业版是收费的。推荐使用教育版,但是社区版的功能也是完全够用的。下载好之后,双击打开安装包开始安装,根据提示一步一步安装即可。打开pycharm之后,会有选择主题的提示,建议选择暗色,能保护眼睛。

打开pycharm,点击 Create New Project, 先选择新建工程的路径,然后选择解释器为上一节创建的Anaconda环境,但是注意这里第一次选择的时候是没有这个环境选项的。比如我这里应该选择 Python 3.7 (airsim)解释器,但是下拉框中并没有这个环境选项,所以需要添加进来,让Pycharm知道有Anaconda 这个环境。


添加完成后就可以看到如下显示:

四、仿真控制无人机起飞降落

4.1 流程演示

在新建的python工程中新建一个python file

"""
test python environment
"""
import airsim# connect to the AirSim simulation
client = airsim.MultirotorClient()
client.confirmConnection()# get control
client.enableApiControl(True)# unlock
client.armDisarm(True)# Async methods returns Future.Call join() to wait for task to complete.
client.takeoffAsync().join()
client.landAsync().join()# lock
client.armDisarm(False)# release control
client.enableApiControl(False)

下面就是运行程序的步骤。需要先将AirSim运行起来,然后再运行python程序。
首先将C:\Users[用户名]\Documents\AirSim路径下的settings.json文件中的仿真模式改为多旋翼。

 {"SettingsVersion": 1.2,"SimMode": "Multirotor"}

然后打开之前安装好的VirtualStudio环境目录下的VirtualStudio.sln文件;Visual Studio中,选择编译模式为 Debug Game Editor和win64,确保VirtualStudio为启动项目。然后点击 本地Windows调试器,这时会打开 Unreal Editor;在 Unreal Editor 中点击 播放(Play) 按钮,仿真就会运行。

启动完成后,修改UE的游戏模式为AirSimGameMode,然后点击工具栏的运行。

这时候就会出现一架小的无人机。

最后在Pycharm中运行刚刚写好的程序。在右上角选择自己的程序,然后点击运行。

就可以看到仿真中的四旋翼会先飞到一定高度,然后降落。

AirSim仿真模拟

4.2 代码讲解

import airsim

使用 python 做AirSim仿真,必须导入 airsim 包。

 client = airsim.MultirotorClient()

与 AirSim 建立连接,并且返回句柄(client),后面的每次操作需要使用这个句柄。python 与 AirSim 的通信机制在下一节中讲解。

如果是汽车仿真,代码是:

client = airsim.CarClient();
 client.confirmConnection()

检查通信是否建立成功,并且会在命令行中打印连接情况,这样你就可以潘丹程序是否和AirSim连接正常,如果连接正常会在命令行中打印如下:

Connected!
Client Ver:1 (Min Req: 1), Server Ver:1 (Min Req: 1)

 client.enableApiControl(True)    # get controlclient.enableApiControl(False)   # release control

因为安全问题, API 控制默认是不开启的,遥控器有全部的控制权限。所以必须要在程序中使用这个函数来获取控制权。遥控器的操作会抢夺 API 的控制权,同时让 API 获取的控制权失效。使用 isApiControlEnabled 可以检查 API 是否具有控制权。

可能会有人问为什么最后结束的时候要释放控制权,反正都是仿真,结束仿真就好了。但是实际上 AirSim 的开发人员希望在仿真中的代码可以直接移到现实中使用,所以对于现实中的安全问题,还是开发了获取控制权和释放控制权、解锁和上锁等一系列安全操作。

 client.armDisarm(True)    # 解锁client.armDisarm(False)   # 上锁

使用这个函数可以让无人机的旋翼启动和停止旋转。

 client.takeoffAsync().join()   # 起飞client.landAsync().join()      # 降落

这两个函数可以让无人机起飞和降落。

很多无人机或者汽车控制的函数都有 Async 作为后缀,这些函数在执行的时候会立即返回,这样的话,虽然任务还没有执行完,但是程序可以继续执行下去,而不用等待这个函数的任务在仿真中有没有执行完。

如果你想让程序在这里等待任务执行完,则只需要在后面加上.join()。本例子就是让程序在这里等待无人机起飞任务完成,然后再执行降落任务。

新的任务会打断上一个没有执行完的任务,所以如果takeoff函数没有加 .join(),则最后的表现是无人机还没有起飞就降落了,无人机是不会起飞的。

4.3 python与AirSim的通信机制

AirSim API 使用的是 TCP/IP 中的 msgpack-rpc 协议,这是一种网络通信协议,所以如果设置正确,其实可以用两台不同的电脑来做仿真,一台跑 AirSim 和 Unreal,另一台跑 python程序。

当 AirSim 开始仿真的时候,会打开 41451 端口,并监听这个端口的需求。python 程序使用 msgpack serialization 格式向这个端口发送 RPC 包,就可以与AirSim进行通信了。

如果你的计算机的41451 端口已经被其他程序使用了,那么可以通过 settings 文件改变AirSim使用的端口号。

使用这种网络通信协议的方式,可以将 AirSim 和 python程序隔离,互不干扰。所以不需要修改 AirSim 的任何源代码,就可以满足非常多的仿真需求;而且即使python程序中断了,AirSim 的仿真也可以继续进行。

AirSim仿真学习记录(1)相关推荐

  1. 先进PID控制MATLAB仿真学习记录(一)

    目录 前言 一.PID控制原理 二.连续系统的PID控制Simulink仿真 1.利用自带的PID控制器仿真 2.采用S函数进行仿真 总结 前言 PID控制是最早发展起来的控制策略之一,其算法简单.鲁 ...

  2. 无模型自适应迭代学习控制原理和matlab代码仿真学习记录

    无模型自适应ILC原理及代码实现 这里学习的是很老的一篇论文<基于无模型自适应控制的反馈-前馈迭代学习控制系统收敛性研究>,作者是晏静文和侯忠生,大家有兴趣可以找来看看.这里主要介绍的无模 ...

  3. 基于端到端深度学习的自动驾驶:AirSim教程(包含Ubuntu18.04下配置AIrsim仿真环境解决方案)

    这是微软自动驾驶食谱的第一个教程(目前共两个).之前看到过,这里记录一下. https://github.com/microsoft/AutonomousDrivingCookbook 前言 在本教程 ...

  4. ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

    前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章: ROS学习记录(一) Plugin插件 这两天关注了古月老师的公众号,看到了其中一篇课程推 ...

  5. 【ROS学习记录】2021/7/2 Gazebo+rviz仿真(一)

    [ROS学习记录]2021/7/2 Gazebo+rviz进行turtlebot2仿真问题记录 ##小插曲 今天ubuntu挂载u盘一直读取失败所以做了一些令人窒息的操作,晚上开机就进入了initra ...

  6. 【学习记录】Simulink仿真学习:直流电机的VM调速系统与PWM调速系统搭建

    最近需要复现一下论文中的电机仿真环节,于是又在网上找寻了各种教程.这篇文章总结了我学习直流电机仿真的一些记录和一些知识点文章等. 由于本人电力电子技术等知识的欠缺,故这篇文章适用于为理解或者搭建简单的 ...

  7. Airsim仿真平台介绍

    Airsim是一款基于Unreal Engine构建的无人机.汽车等模拟器的开源平台,并且可以跨平台的通过PX4飞行控制器进行仿真控制,在物理和视觉上逼真的模拟环境使得它成为一款很好的平台.不仅模拟了 ...

  8. CVPR2019| 百度17篇CVPR论文学习记录(包含:无人驾驶、神经网络、GAN、无监督学习、目标检测)

    首先感谢现在网上资源丰富,能够获得很多人的总结,结合自身实际进行了学习记录. 并着重标注了其中关键核心 目录 1)Taking A Closer Look at Domain Shift: Categ ...

  9. AMBA总线协议之AHB学习记录(1)—ahb_bus(附verilog代码)

    目录 0.前言 1.AHB简介 2.ahb_bus实现(verilog) 3.总结反思 & 后面学习计划 0.前言 前段时间粗略过了一下riscv指令集相关内容,并对开源项目tinyriscv ...

最新文章

  1. 服务器智能监控软件,监控 监控系统 消防智能监控 智能监控软件
  2. python的速度问题_python编程如何提升速度篇
  3. 【AI白身境】学AI必备的python基础​​​​​​​
  4. 360极速浏览器进行打印时会带出网页地址问题
  5. android setGravity()的使用
  6. php之前代码,PHP语法检查源代码前控制
  7. django 1.8 官方文档翻译:2-5-9 条件表达式 1
  8. shell:概述、脚本编写、变量的简单基础
  9. Excel文件解密软件
  10. 【系统架构】业务架构图
  11. new一个对象是个什么过程
  12. ssrf漏洞修复(ssrf漏洞修复方式)
  13. IOTOS物联中台从0到1开发modbus_rtu驱动 实例详解
  14. Statistics 基础之Hypothesis Tests1---t检验
  15. python运维脚本简书_通过python+selenium3实现浏览器刷简书文章阅读量
  16. 万兴剪刀手去水印教程_万兴神剪手怎么去水印 神剪手去水印操作详解
  17. 使用ElementUi的tabs切换组件时下拉选择器出现破板情况
  18. java计算器课程报告_java计算器课程设计报告
  19. 图像处理------提高图像边缘锐利度之UNSHARP_MASK算法
  20. 深入理解Linux自旋锁(1.0)

热门文章

  1. 王力宏 谭维维-缘分一道桥 【超品质MP3】
  2. TokenRise的见茶卸甲@一杯严选 六道一辉探访“茶人的栖息地@世科坊”
  3. 2018网易校招移动安全工程师笔试题
  4. js 实现模糊搜索功能
  5. 【DD应用系统源码】软件库源码
  6. python之函数用法isupper()
  7. 易班开放平台授权机制理解以及使用
  8. VUE路由懒加载的方式——VUE异步组件
  9. 对逻辑斯蒂回归的一些细节剖析
  10. java分页查询querymap_ES Java API_基于search template实现按品牌分页查询模板