AirSim 无人机仿真入门:实现起飞与降落
AirSim 是基于虚幻引擎的开源飞行模拟器。在 Windows 环境下安装 Epic Games 平台、UE4.27.2、Visual Studio 及 AirSim 插件的步骤。通过创建虚幻工程并配置多旋翼模式,结合 Python 脚本调用 AirSim API,实现了无人机的自动起飞与降落控制。同时提供了摄像头窗口设置及端口通信的配置说明,帮助开发者快速搭建仿真环境并进行基础控制测试。

AirSim 是基于虚幻引擎的开源飞行模拟器。在 Windows 环境下安装 Epic Games 平台、UE4.27.2、Visual Studio 及 AirSim 插件的步骤。通过创建虚幻工程并配置多旋翼模式,结合 Python 脚本调用 AirSim API,实现了无人机的自动起飞与降落控制。同时提供了摄像头窗口设置及端口通信的配置说明,帮助开发者快速搭建仿真环境并进行基础控制测试。

Epic Games 是一家游戏公司,Unreal Engine(简称 UE)是 Epic Games 开发的一款游戏引擎。AirSim 是基于 Unreal Engine 开发的一个模拟器,它主要用来模拟无人机(Drone)和自动驾驶汽车的运行环境。
建议按照相关教程一步一步安装。
AirSim\Unreal 文件夹中生成 Plugins 文件夹。这个 Plugins 文件夹非常重要。检验虚拟引擎和 AirSim 是否安装成功: 使用 AirSim 自带的 Block 环境进行测试。
至此,AirSim 全部安装完成,下面可以直接使用 AirSim 做仿真了。
从虚幻商城选择一个场景创建工程,把 AirSim 作为插件导入这个工程中。
AirSim\Unreal\Plugins 文件夹到 LandscapeMountains 文件夹中。LandscapeMountains.uproject 文件,修改 LandscapeMountains\Config\DefaultGame.ini 文件。LandscapeMountains.uproject 文件,选择'Generate Visual Studio project files'选项,会生成.sln 工程文件。{"SettingsVersion":1.2, "SimMode":"Multirotor"}
LandscapeMountains.sln,设置编译选项为'DebugGame Editor'和'Win64',同时将 LandscapeMountains 设为启动项,点击'调试'->'开始调试',或者直接点击'本地 Windows 调试器',这时会自动打开虚幻引擎的关卡编辑器。此时,虚幻引擎编辑器右下角出现了'新插件可用'的提示,说明虚幻引擎已经能够识别到 AirSim 插件了。至此 AirSim 插件已经加载到虚幻引擎场景工程中了。
安装好 python 的运行环境,主要使用 conda 虚拟环境的 python 解释器,pycharm 充当编辑器的作用。使用 AirSim 官方提供的 python API,与无人机建立联系,控制无人机的起飞和降落。
pip install msgpack-rpc-python
pip install airsim
conda 的安装路径\envs\airsim\python.exe。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)
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 的仿真也可以继续进行。
示例:一台跑仿真,一台跑 python 程序
server_ip = "192.168.0.10" # 示例 IP 地址
port = 41451
client = airsim.MultirotorClient(ip=server_ip, port=port)
运行代码: 在右上角点击绿色三角形运行 python 程序,仿真中的四旋翼会先起飞到一定高度,然后降落。
问题: 我发现进行仿真的时候,我的 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 程序控制无人机的功能。这可以视作 AirSim 入门的'Hello World'示例。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online