1 安装 AirSim
1.1 环境说明
AirSim 是基于 Unreal Engine 开发的模拟器,用于模拟无人机和自动驾驶汽车的运行环境。
1.2 安装步骤
- 安装 Epic Games 平台:记得注册账号。
- 下载 UE:点击 Epic 平台左边的'虚幻引擎'菜单,'库'里面有不同的虚幻引擎版本,选择 4.27.2 版本进行安装,这个版本比较适配 AirSim。
- 安装 Visual Studio Community 2022:记得勾选'C++ 桌面开发'、'Windows 10 SDK 10.0.19041',并在'单个组件'选项卡下选择最新的'.NET Framework SDK'。
- 安装 Git Bash 工具。
- 克隆 AirSim 工程:进入要安装 AirSim 的磁盘,执行 git clone。进入目录 build.cmd。编译好之后会在
AirSim\Unreal文件夹中生成Plugins文件夹。这个Plugins文件夹非常重要。
检验虚拟引擎和 AirSim 是否安装成功:使用 AirSim 自带的 Block 环境进行测试。

至此,AirSim 全部安装完成,下面可以直接使用 AirSim 做仿真了。
2 开始使用 AirSim
2.1 配置工程
从虚幻商城选择一个场景创建工程,把 AirSim 作为插件导入这个工程中。
2.2 操作步骤
- 创建工程:从虚幻商城中找到场景,创建工程,得到.uproject 文件。
- 新建 C++ 类:双击.uproject 文件进入关卡编辑器,新建 C++ 类,等待编译完成(这一步耗时较长,而且要关注 VS2022 的左下角的编译进度),得到.sln 文件,至此'山脉景观'场景工程创建完成。
- 添加 AirSim 插件:复制
AirSim\Unreal\Plugins文件夹到LandscapeMountains文件夹中。 - 修改文件:修改
LandscapeMountains.uproject文件,修改LandscapeMountains\Config\DefaultGame.ini文件。 - 创建 VS 工程:右键点击
LandscapeMountains.uproject文件,选择'Generate Visual Studio project files'选项,会生成.sln 工程文件。 - 改成多旋翼模式:把 settings.json 文件中的仿真模式改为多旋翼。
{"SettingsVersion":1.2, "SimMode":"Multirotor"}
- 进入工程:双击打开
LandscapeMountains.sln,设置编译选项为'DebugGame Editor'和'Win64',同时将LandscapeMountains设为启动项,点击'调试'->'开始调试',或者直接点击'本地 Windows 调试器',这时会自动打开虚幻引擎的关卡编辑器。此时,虚幻引擎编辑器右下角出现了'新插件可用'的提示,说明虚幻引擎已经能够识别到 AirSim 插件了。 - 设置游戏模式为 AirSim:在关卡编辑器中,将右侧'世界场景设置'中的'游戏模式重载'设置为'AirSimGameMode',点击'保存当前关卡'。
- 运行:点击绿色三角开始仿真。

至此 AirSim 插件已经加载到虚幻引擎场景工程中了。
3 撰写 Python 控制程序
3.1 环境准备
安装 Anaconda 并创建环境,并在该环境中安装必需的包。
pip install msgpack-rpc-python
pip install airsim
安装 PyCharm 社区版,是免费的,目前功能够用。
3.2 代码示例
PyCharm 中创建一个新的 Python 工程,解释器选择上面新建的 conda 环境中的 Python 解释器:conda 的安装路径\envs\airsim\python.exe。
在新建的 Python 工程中新建一个 Python File,将下面的代码复制进去:
import airsim
# 与 AirSim 仿真器建立连接,并且返回句柄
client = airsim.MultirotorClient()
client.confirmConnection()
# 获得控制权
client.enableApiControl(True)
# 解锁无人机
client.armDisarm(True)
# Async 函数在执行的时候会立即返回。此时有可能任务还没执行完。在后面加上.join(),就可以让当前函数执行完才执行下一行
client.takeoffAsync().join()
client.landAsync().join()
# 上锁
client.armDisarm(False)
# 释放控制权
client.enableApiControl(False)
3.3 通信机制
AirSim API 使用的是 TCP/IP 中的 msgpack-rpc 协议,可以用两台不同的电脑来做仿真,一台跑 AirSim 和 Unreal(仿真),另一台跑 Python 程序(算法)。当 AirSim 开始仿真的时候,会打开 41451 端口,并监听这个端口的需求。Python 程序使用 msgpack serialization 格式向这个端口发送 RPC 包,就可以与 AirSim 进行通信了。如果 41451 端口已经被其他程序使用了,那么可以通过 settings 文件改变 AirSim 使用的端口号。使用这种网络通信协议的方式,可以将 AirSim 和 Python 程序隔离,互不干扰。所以不需要修改 AirSim 的任何源代码,就可以满足非常多的仿真需求;而且即使 Python 程序中断了,AirSim 的仿真也可以继续进行。
示例:一台跑仿真,一台跑 Python 程序
server_ip = "192.168.0.10"
port = 41451
client = airsim.MultirotorClient(ip=server_ip, port=port)
运行代码后,仿真中的四旋翼会先起飞到一定高度,然后降落。

4 注意事项
4.1 摄像头显示问题
若进行仿真的时候,UE 界面没有显示三个摄像头的画面,跟原教程截图的不一样,需修改 settings.json 文件打开无人机的三个摄像头窗口。
"SubWindows":[{"WindowID":0, "ImageType":0, "CameraName":"front_center", "Visible": true}, {"WindowID":1, "ImageType":3, "CameraName":"front_center", "Visible": true}, {"WindowID":2, "ImageType":5, "CameraName":"front_center", "Visible": true}]
其中,ImageType 的值表示图像类型:

CameraName 的值表示是哪一个相机:


至此,AirSim 环境已成功安装,并实现了使用 Python 程序控制无人机的功能。


