1. 项目概述与核心价值
最近在折腾无人机仿真,想把AirSim这个微软开源的仿真平台在Windows 11上跑起来,配合UE4.27.2和VS2022搞点研究。本以为照着官方文档一步步来就行,结果从环境准备到编译运行,踩的坑一个接一个,有些问题搜遍全网都找不到现成的解决方案,只能自己硬着头皮调试。折腾了快一周,总算把整个流程打通了。今天就把这套在Windows 11下配置UE4.27.2 + AirSim的完整过程,连同那些官方文档没写、但实际安装中一定会遇到的“坑”和解决方案,一次性整理出来。这篇指南的目标是让你能无脑跟着操作,从零开始,最终能在自己的电脑上成功运行AirSim的仿真环境,无论是用于算法测试、视觉研究还是单纯想体验一下高保真的无人机仿真,都能直接上手。
整个配置的核心链条是:Windows 11操作系统 -> Visual Studio 2022(提供C++编译工具链) -> Unreal Engine 4.27.2(提供仿真渲染引擎和编辑器) -> AirSim插件(提供无人机/车辆的物理模型和API接口)。任何一个环节版本不匹配或者配置出错,都会导致后续步骤失败。尤其是UE4.27.2这个版本,它处于一个承上启下的位置,对VS2022的版本有特定要求,而AirSim的插件编译又严重依赖正确的UE引擎路径和编译环境。下面,我就从最基础的软件安装开始,带你一步步避坑。
2. 基础环境准备:Windows 11与VS2022的安装细节
很多人觉得安装VS2022就是点下一步,但在搭配UE4.27.2时,有几个工作负载和组件的选择至关重要,选错了后面编译UE源码或AirSim插件会直接报错。
2.1 Visual Studio 2022的定制化安装
首先,去Visual Studio官网下载VS2022 Community版(对于个人学习和开源项目完全免费)。运行安装程序后,你会看到工作负载选择界面。
注意:千万不要直接勾选默认的“.NET桌面开发”或“使用C++的桌面开发”就完事了。UE4.27.2的源码编译需要一些特定的Windows SDK和C++工具集。
你需要执行以下操作:
- 在“工作负载”标签页,找到并勾选“使用C++的桌面开发”。
- 这还没完,勾选这个工作负载后,在右侧的“安装详细信息”面板中,你必须手动展开并确保以下组件被选中:
- Windows 10 SDK (10.0.19041.0) 或更高版本:UE4.27.2官方推荐使用10.0.19041.0。虽然Windows 11 SDK也可能工作,但为了避免不必要的兼容性问题,建议安装这个特定版本。如果列表里没有,你可能需要在“单个组件”标签页搜索并添加。
- MSVC v143 - VS 2022 C++ x64/x86 生成工具:这是VS2022的默认编译器,必须要有。
- C++ CMake 工具:虽然AirSim官方用.bat脚本,但有了CMake工具会更方便,且一些依赖可能用到。
- 对 v143 生成工具的 C++ Clang 编译工具:可选,但建议装上,有时对解决复杂编译问题有帮助。
- 切换到“单个组件”标签页,搜索并勾选:
- Windows 11 SDK:如果你的系统是Win11,也建议装上,但主要开发目标仍应基于Windows 10 SDK。
- C++ AddressSanitizer:用于内存错误检测,调试时有用。
安装路径建议放在空间充足的盘符(如D:\VisualStudio2022),因为连同SDK一起会占用超过20GB的空间。安装过程耗时较长,取决于你的网速和硬盘速度,可以去喝杯咖啡。
安装完成后,一个关键的验证步骤:打开“开始”菜单,找到“Developer Command Prompt for VS 2022”或“Developer PowerShell for VS 2022”,右键以管理员身份运行。输入cl命令,如果能看到Microsoft C/C++编译器的版本信息,说明基础C++环境安装成功。这个命令行窗口非常重要,后续编译AirSim必须在这里进行,因为它已经配置好了所有的环境变量。
2.2 Windows 11系统层面的必要设置
在Windows 11上,一些默认设置可能会成为阻碍。
- 启用“开发人员模式”:进入“设置 -> 隐私和安全性 -> 开发人员专用模式”,打开“开发人员模式”。这允许你从非商店来源安装应用,对于运行一些脚本和UE编辑器是必要的。
- 调整长路径限制:Windows默认有260个字符的路径长度限制,而UE和AirSim的源码路径嵌套可能非常深,容易触发此限制导致文件操作失败。你需要通过组策略或注册表启用“启用Win32长路径”。最简便的方法是:在“开发者命令提示符”中运行
reg add HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f,然后重启电脑。 - 防火墙与网络:后续AirSim会通过TCP端口(如4560)与PX4仿真器通信。可以提前在Windows Defender防火墙中为“入站规则”添加一条新规则,允许TCP 4560端口,或者更简单点,在测试时暂时关闭防火墙(仅限测试环境)。
3. 虚幻引擎UE4.27.2的获取与源码编译
UE4.27.2不建议通过Epic Games启动器直接安装二进制版本,因为AirSim插件编译需要链接到引擎的源代码。我们需要从GitHub克隆源码并自行编译。
3.1 获取UE4.27.2源代码
- 访问 Epic Games的GitHub仓库 ,你需要先有一个Epic Games账户,并将其与你的GitHub账户关联,才能获得访问权限。
- 使用Git克隆仓库。这里有个大坑:不要直接克隆主分支!UE4.27.2是一个发布标签(Tag)。
或者,先克隆仓库,再切换到指定标签:git clone --branch 4.27.2-release https://github.com/EpicGames/UnrealEngine.gitgit clone https://github.com/EpicGames/UnrealEngine.git cd UnrealEngine git checkout 4.27.2-release4.27.2-release这个标签才是我们需要的精确版本。克隆下来的数据量巨大(约30GB),请确保网络稳定且磁盘有充足空间(建议预留100GB)。
3.2 编译UE4.27.2引擎
进入克隆下来的UnrealEngine目录,找到Setup.bat文件。右键,选择“使用Developer PowerShell for VS 2022运行”(或者先打开开发者命令行,再导航到该目录执行)。
- 运行
.\Setup.bat。这个脚本会下载引擎编译所需的所有依赖项,包括.NET Framework、各种库文件等。这个过程耗时极长,且需要稳定的网络连接,因为它要从Epic的服务器下载数十GB的数据。如果中途失败,可以多次重试,脚本支持断点续传。 - 依赖下载完成后,运行
.\GenerateProjectFiles.bat。这个脚本会读取引擎的配置,并生成Visual Studio的解决方案文件UE4.sln。 - 用Visual Studio 2022打开生成的
UE4.sln。在解决方案资源管理器中,确保配置是“Development Editor”,平台是“Win64”。 - 右键解决方案“UE4”,选择“生成解决方案”。这是整个流程中最耗时的一步,可能需要2到6小时,取决于你的CPU核心数和内存大小(建议至少16GB RAM)。编译过程中,VS会输出大量信息,只要没有出现红色的错误(Error),黄色的警告(Warning)可以忽略。
实操心得:编译过程CPU和内存占用极高,建议关闭所有不必要的程序。如果出现编译错误,常见原因有:磁盘空间不足、VS2022组件没装全(回头检查2.1节)、源码拉取不完整(重新执行git checkout)。一个典型的错误是“找不到Windows SDK”,请确认安装的是10.0.19041.0版本。
编译成功后,你会在UnrealEngine\Engine\Binaries\Win64目录下找到UnrealEditor.exe。运行它,如果能成功打开UE编辑器,说明引擎编译成功。首次打开会进行一些着色器编译,稍等片刻即可。
4. AirSim插件编译与集成
有了可用的UE4.27.2引擎,接下来就是编译AirSim插件,并将其集成到一个UE项目中。
4.1 获取与编译AirSim
- 打开“Developer Command Prompt for VS 2022”,切换到一个你打算存放项目的目录(路径尽量短且无中文和空格)。
- 克隆AirSim仓库并进入目录:
git clone https://github.com/microsoft/AirSim.git cd AirSim - 运行编译脚本。这是第二个大坑:官方文档可能让你直接运行
build.cmd,但在我们的环境下,需要指定UE4的安装路径(即我们刚才编译的源码路径)。
将build.cmd --ue4-path D:\YourPath\UnrealEngineD:\YourPath\UnrealEngine替换为你实际编译的UE4.27.2源码根目录。build.cmd脚本会做以下几件事:- 检查环境(Python, CMake等)。
- 使用CMake配置AirSim的底层库(如rpclib)。
- 编译生成AirSim的UE插件二进制文件(.dll, .lib等)。 编译成功的标志是在
AirSim\Unreal\Plugins目录下生成了AirSim插件文件夹,里面包含Binaries,Intermediate,Resources等子目录。
4.2 创建或配置UE项目并集成插件
AirSim提供了几个示例环境,最经典的是Blocks。我们用它来测试。
- 在刚才的AirSim目录下,进入示例环境目录并运行更新脚本:
这个脚本会下载Blocks环境所需的资产,并生成cd Unreal\Environments\Blocks update_from_git.batBlocks.sln解决方案文件。 - 用VS2022打开
Blocks.sln。在解决方案资源管理器中,你会看到Blocks项目。右键将其设为“启动项目”。 - 关键的配置步骤:在VS顶部的工具栏,确保解决方案配置为“DebugGame Editor”,解决方案平台为“Win64”。这是与UE4.27.2源码编译配置(Development Editor)相匹配的调试配置。
- 按F5或点击“调试 -> 开始调试”。VS会开始编译Blocks项目并启动Unreal Editor。
注意事项:如果启动UE编辑器时崩溃或报错“找不到插件”,请检查:
- 插件路径是否正确:在UE编辑器中,打开“编辑 -> 插件”,在“已安装”或“项目”标签页下应该能看到“AirSim”插件,且已启用。
- 项目
.uproject文件右键,选择“切换虚幻引擎版本”,确保它关联到了你编译的4.27.2引擎。- 有时需要手动将
AirSim\Unreal\Plugins\AirSim文件夹复制到Blocks\Plugins\目录下。
当UE编辑器成功打开并加载了Blocks场景,恭喜你,最复杂的编译部署部分已经完成了!
5. 运行仿真与基础配置
在UE编辑器中打开Blocks项目后,点击工具栏上的“播放”按钮(或按Alt+P),你会看到场景开始运行,但可能什么都没有。这是因为还没有配置运行哪种交通工具。
5.1 选择仿真模式与车辆
在场景运行时,你可以按键盘上的“反引号”键(`)打开UE的控制台,输入:
AirSimVehicleSelector Car或者
AirSimVehicleSelector Multirotor来分别选择汽车或多旋翼无人机模型。选择后,相应的模型应该会出现在场景中。
5.2 理解与配置settings.json
AirSim的行为通过一个JSON配置文件控制。这个文件默认位于C:\Users\[你的用户名]\Documents\AirSim\settings.json。如果目录和文件不存在,需要手动创建。
一个最基本的用于多旋翼无人机仿真的配置如下:
{ "SettingsVersion": 1.2, "SimMode": "Multirotor", "ClockType": "SteppableClock", "Vehicles": { "SimpleFlight": { "VehicleType": "SimpleFlightDrone", "DefaultVehicleState": "Armed" } } }SimMode: 仿真模式,Multirotor(多旋翼)、Car(汽车)或ComputerVision(仅视觉)。ClockType:SteppableClock允许外部(如Python API)控制仿真步进,对于算法测试非常有用。Vehicles: 定义车辆。这里用了内置的SimpleFlight控制器,它不需要额外的飞控软件(如PX4),适合快速入门测试。
将上述内容保存为settings.json后,重启Blocks仿真(或重新点击播放)。你应该能看到一架无人机出现在空中,并且可以使用键盘(WASD控制姿态,PageUp/PageDown控制高度)来手动飞行它。
5.3 使用Python API进行控制
AirSim的强大之处在于其丰富的API。我们通过Python来测试。
- 安装Python包:打开系统命令行(非VS开发者命令符),运行
pip install msgpack-rpc-python numpy。AirSim的Python客户端依赖这两个包。 - 运行API测试:在AirSim源码的
PythonClient目录下,有很多示例脚本。我们运行一个最简单的:
如果配置正确,这个脚本会连接到正在运行的Blocks仿真,让无人机起飞、盘旋、然后降落。你会在仿真窗口和命令行中看到相应的输出。cd AirSim\PythonClient\multirotor python hello_drone.py
常见问题:如果Python脚本报错“连接被拒绝”,请检查:
- Blocks仿真是否正在运行。
settings.json中的SimMode是否与脚本匹配(例如,hello_drone.py需要SimMode为Multirotor)。- 默认情况下,API通过本地网络(127.0.0.1)的41451端口通信,确保没有防火墙阻挡。
6. 进阶集成:连接PX4软件在环仿真
对于更接近真实无人机飞控的仿真,我们需要将AirSim与PX4的软件在环仿真连接起来。这涉及到网络配置和启动顺序。
6.1 配置settings.json连接PX4
修改settings.json,使用PX4作为车辆控制器:
{ "SettingsVersion": 1.2, "SimMode": "Multirotor", "ClockType": "SteppableClock", "Vehicles": { "PX4": { "VehicleType": "PX4Multirotor", "UseSerial": false, "UseTcp": true, "TcpPort": 4560, "ControlIp": "remote", "ControlPortLocal": 14540, "ControlPortRemote": 14580, "LocalHostIp": "127.0.0.1", "Parameters": { "NAV_RCL_ACT": 0, "NAV_DLL_ACT": 0, "COM_OBL_RC_ACT": 1 } } } }关键参数解释:
UseTcp: true和TcpPort: 4560:AirSim作为客户端,将通过TCP连接到PX4 SITL的4560端口。LocalHostIp: "127.0.0.1":如果PX4 SITL和AirSim运行在同一台Windows机器上,就使用本地回环地址。ControlPortLocal和ControlPortRemote:用于MAVLink消息的额外UDP端口,QGroundControl地面站软件会用到。
6.2 在Windows上运行PX4 SITL
传统上PX4 SITL需要在Linux环境下运行,但现在可以通过WSL2在Windows上实现。
- 安装WSL2和Ubuntu:以管理员身份打开PowerShell,运行
wsl --install -d Ubuntu。完成后,设置好Ubuntu的用户名和密码。 - 在WSL中安装PX4开发环境:在Ubuntu终端中,按照PX4官方指南克隆源码并安装依赖。大致步骤如下:
git clone https://github.com/PX4/PX4-Autopilot.git --recursive cd PX4-Autopilot bash ./Tools/setup/ubuntu.sh - 启动PX4 SITL连接AirSim:在Ubuntu终端中,先设置环境变量指向Windows主机(AirSim所在)的IP。这里有个关键点:在WSL2中,Windows主机的IP不是127.0.0.1,而是通过
cat /etc/resolv.conf命令看到的nameserver地址,通常是172.x.x.1。export PX4_SIM_HOST_ADDR=172.x.x.1 # 替换为你的Windows主机在WSL2中的IP make px4_sitl_default none_irisnone_iris表示不使用Gazebo等视觉仿真器,只启动PX4飞控软件,等待AirSim连接。
6.3 启动顺序与连接测试
正确的启动顺序至关重要:
- 第一步:在Windows上,启动编译好的Blocks仿真(UE编辑器播放模式或直接运行.exe)。查看UE编辑器输出日志窗口,应该能看到类似
Waiting for TCP connection on port 4560...的信息,表示AirSim已在监听。 - 第二步:在WSL的Ubuntu终端中,运行上述
make px4_sitl_default none_iris命令。如果连接成功,PX4终端会输出INFO [simulator] Got initial simulation data,AirSim的日志窗口会显示TCP connection established。 - 第三步:在Windows上启动QGroundControl。它应该能自动通过UDP 14550端口发现并连接到PX4。在QGC中,你可以看到无人机的状态、传感器数据,并能进行解锁、起飞、任务规划等操作。
7. 避坑指南与疑难杂症排查
根据我踩坑的经验,以下问题及其解决方案最为常见:
7.1 编译类问题
- 问题:编译UE4或AirSim时出现“无法打开包括文件: ‘corecrt.h’”或类似SDK错误。
- 排查:在VS2022安装程序中,确认已安装Windows 10 SDK (10.0.19041.0)。在VS2022中,打开“项目 -> 属性 -> 常规”,查看“Windows SDK版本”是否设置正确。也可以在“开发者命令提示符”中输入
cl并查看输出中的SDK版本。
- 排查:在VS2022安装程序中,确认已安装Windows 10 SDK (10.0.19041.0)。在VS2022中,打开“项目 -> 属性 -> 常规”,查看“Windows SDK版本”是否设置正确。也可以在“开发者命令提示符”中输入
- 问题:运行
build.cmd时失败,提示CMake或Python错误。- 排查:确保在“开发者命令提示符”中操作。检查Python是否已安装并添加到系统PATH。AirSim的脚本可能需要Python 3.8或更高版本。可以尝试手动安装CMake并将其路径添加到系统环境变量。
- 问题:打开Blocks.sln编译时,报错“无法找到 .uproject 文件”。
- 排查:确保在
Unreal\Environments\Blocks目录下运行了update_from_git.bat。这个脚本会下载必要的资产并生成项目文件。如果网络问题导致资产下载不全,可以尝试手动从AirSim的GitHub Releases页面下载对应的资产包。
- 排查:确保在
7.2 运行与连接类问题
- 问题:UE编辑器能打开,但点击播放后场景是黑的,或者控制台报插件加载失败。
- 排查:检查AirSim插件是否被正确启用。在UE编辑器中,进入“编辑 -> 插件”,搜索“AirSim”,确保其已勾选启用。有时需要重启编辑器。另外,检查项目目录下的
Plugins文件夹里是否有AirSim文件夹及其内容。
- 排查:检查AirSim插件是否被正确启用。在UE编辑器中,进入“编辑 -> 插件”,搜索“AirSim”,确保其已勾选启用。有时需要重启编辑器。另外,检查项目目录下的
- 问题:Python API (
hello_drone.py) 无法连接,提示“Timeout”或“Connection refused”。- 排查:
- 确认仿真场景正在运行(UE编辑器处于播放模式)。
- 检查
settings.json文件是否放在正确的Documents\AirSim路径下,且格式正确(可以用JSON在线校验工具检查)。 - 默认API端口是41451,确保没有其他程序占用。可以尝试在Python脚本中显式指定IP和端口:
client = AirSimClient('127.0.0.1', 41451)。
- 排查:
- 问题:PX4 SITL无法连接AirSim,一直等待。
- 排查:
- 启动顺序:必须是AirSim先启动并进入等待连接状态,然后再启动PX4 SITL。
- IP地址:这是最常见的坑。在
settings.json中的LocalHostIp,必须填写Windows主机在WSL2网络中的IP(即WSL2中cat /etc/resolv.conf看到的那个IP),不能填127.0.0.1。同时,在WSL2中启动PX4前,export PX4_SIM_HOST_ADDR必须设置为同一个IP。 - 防火墙:关闭Windows防火墙,或为4560端口添加入站规则。
- 端口占用:检查4560端口是否被其他程序占用(如另一个未关闭的仿真)。
- 排查:
7.3 性能与稳定性问题
- 问题:仿真运行卡顿,帧率很低。
- 排查:UE4对硬件要求较高。在UE编辑器的“编辑 -> 项目设置 -> 引擎 - 渲染”中,可以尝试关闭一些特效,如动态阴影、后处理等。将显示模式从“Lit”改为“Unlit”也能大幅提升性能。确保你的显卡驱动是最新的。
- 问题:长时间运行后仿真崩溃。
- 排查:可能是内存泄漏或显存不足。监控任务管理器的内存和GPU内存使用情况。尝试降低场景复杂度,或定期重启仿真。确保使用的是DebugGame Editor或Development Editor配置,而不是Debug配置,后者更耗资源。
整个配置过程确实繁琐,但一旦打通,你就拥有了一个功能强大的无人机仿真平台。从手动飞行测试,到用Python脚本编写自动飞行逻辑,再到连接PX4进行硬件在环测试,AirSim+UE4提供了一个从算法研发到系统测试的完整沙盒环境。我个人的体会是,耐心和仔细阅读终端输出的错误信息是关键,大部分问题都能从中找到线索。希望这份详尽的指南能帮你绕过我踩过的那些坑,顺利开启你的仿真之旅。如果在配置中遇到这里没提到的问题,不妨去AirSim的GitHub Issues页面搜索一下,很可能已经有人遇到并解决了。