Windows11下UE4+AirSim无人机仿真环境搭建完整指南 Windows11上搭这套UE4 AirSim环境我前后折腾了两遍第一遍断断续续花了好几个晚上第二遍重新走流程不到一小时就跑通了。网上关于AirSim的资料其实不少但大多还停留在Win10 UE4.24/4.25的年代Windows11 UE4.27 新版VS这一套组合的完整踩坑记录反而比较零散。这篇文章就把我从系统准备、工具链安装、AirSim源码编译、插件挂载到Python API控制的完整过程写清楚顺便把那些特别容易卡人的坑提前给你标出来。如果你需要用AirSim做无人机视觉算法验证、强化学习训练或者只是想找个高保真仿真环境跑跑多旋翼控制这篇笔记应该能帮你省下大量排查时间。文章整体按照“选型思路 - 环境准备 - 编译集成 - 首次飞行 - 问题排查”的顺序展开新手建议按顺序读已经有基础的人可以直接跳到第四章看API使用或者到第五章查问题对照表。1. 方案选型为什么是Windows11、UE4和AirSim1.1 AirSim能做什么解决什么问题AirSim是微软开源的一个仿真平台跑在虚幻引擎里主要面向无人机、汽车等机器人的算法研究。它做的事情可以简单理解成在UE4渲染出逼真场景的同时通过内置的传感器模型给你提供相机图像、深度图、语义分割图、激光雷达点云、IMU数据等而且这些都带上了相对可信的物理模型和噪声特性。那它和直接用Gazebo这类机器人仿真器比有什么优势最直观的一点就是画质和场景真实度。AirSim直接复用UE4的渲染管线光照、材质、反射效果都很接近真实环境这对做视觉感知算法来说非常重要。你在真实世界拍的训练数据往往很难覆盖所有光照和天气条件而在AirSim里可以随时切换场景、调整灯光甚至一次性挂多个不同角度的相机数据获取成本低很多。除此之外AirSim的开放程度也做得不错。它有Python和C两套API控制无人机起飞、降落、移动、读取传感器、修改场景参数都能通过API完成不需要手动操作界面。这一点对强化学习来说尤其关键——训练循环里每一步都要和环境交互API越顺手迭代越快。1.2 为什么版本选型上选了UE4.27而不是UE5这是很多人一开始最容易踩的坑AirSim的官方插件对UE4的支持最成熟UE5虽然也能跑但很多高级功能尤其是传感器渲染和车辆物理相关的部分并没有完全适配。我当时也犹豫过要不要直接上UE5毕竟场景效果更好但查了一圈资料后发现AirSim官方仓库的Roadmap里明确标注UE5支持是实验性的很多社区反馈在UE5下会遇到编译报错、功能缺失的问题。所以在4.24到4.27这几个UE4版本里我最终选了4.27.2。原因很简单这是UE4的最后一个大版本官方维护时间最长社区踩坑记录也最全AirSim插件在4.27上基本是开箱即用、最稳定的状态。如果你现在正准备从零搭建直接固定这个版本组合就行别在版本兼容性上浪费生命。至于系统层面Windows11对我来说主要看中两点一是Visual Studio 2022和CUDA工具链在Win11上支持得更好二是如果你以后要在WSL2里跑训练程序Win11的WSL体验比Win10顺畅不少。但Win11也有一个需要注意的地方——它默认会开启基于虚拟化的安全性VBS和内存完整性这两个东西会占用额外的CPU和内存开销对UE4这种吃性能的编辑器来说影响挺明显的后面会专门说怎么处理。1.3 整套环境的安装链路先给你一棵整体的“安装树”心里有数再动手Windows11系统准备开启开发者模式、更新GPU驱动、规划安装路径安装Visual Studio 2022必须带“使用C的游戏开发”工作负载安装Epic Games Launcher和UE4.27.2引擎下载AirSim源码用VS开发者命令行执行build.cmd编译核心库把AirSim插件挂载到UE4项目推荐先用官方自带的Blocks环境安装Python的airsim客户端库写第一个起飞降落脚本这套流程每一步都有讲究尤其是编译和插件挂载这两步稍不注意就会在打开项目时看到一堆红色报错。下面我按顺序拆开讲。2. 环境准备从系统设置到UE4引擎落地2.1 先把Windows11这些开关和驱动处理好系统版本方面建议直接使用官方镜像安装的Windows11专业版或企业版不要在第三方精简版系统上折腾因为后续编译过程对系统组件完整性有要求。打开“运行”窗口输入winver可以看到当前准确版本号只要是Windows11的正式版通道21H2之后的稳定版都可以一般不会有问题。不建议在这个阶段使用Insider预览版或者像27H2这种还没完全铺开的测试版本UE4编译涉及大量系统调用稳定优先。装完系统后先打开“设置 - 隐私和安全性 - 开发者选项”把“开发人员模式”开启。这一步的作用是让系统放开一些文件路径和符号链接的权限限制后续很多构建工具会省掉权限方面的麻烦。GPU驱动这一步经常被忽略但影响非常大。AirSim的视觉仿真完全依赖GPU渲染如果你用的是NVIDIA显卡建议先去官网或者GeForce Experience把驱动更新到最新稳定版。我第一遍装完后运行UE4编辑器发现场景渲染出来一片黑排查到最后就是老驱动和DX12渲染之间出了兼容问题。路径规划也是老生常谈但必须强调的一点。UE4引擎和AirSim项目都不要放在包含中文或空格的路径下。比如我自己放在D:\dev\AirSim和D:\dev\UeProjects全程没有中文。这个习惯能帮你避开很多诡异的编译错误因为Visual Studio和UE4的构建工具在解析中文路径时经常出错而且报错信息往往很隐晦。2.2 Visual Studio 2022安装的关键选项AirSim源码本身是C工程UE4插件也是C模块所以VS是这条链路里绕不开的一环。去Visual Studio官网下载Community版安装器打开后勾选“使用C的游戏开发”工作负载这一步会把MSVC编译器、Windows SDK、CMake工具以及标准库头文件一次性装好。这里有个细节值得注意安装“使用C的游戏开发”后最好再到右侧的“安装详细信息”里确认一下Windows 10/11 SDK是不是被勾选上了。正常情况下它会默认带上但如果你在安装时手动改动过组件列表很容易把SDK漏掉。SDK缺失的典型表现是后面编译AirSim时疯狂报fatal error C1083: 无法打开包括文件: windows.h第一次遇到时人容易懵其实根源就是SDK没装全。所以我给你的建议是如果硬盘空间允许把“游戏开发”工作负载里的所有可选组件都保持默认勾选不要为了省空间去逐个精简。整个过程大概需要几个GB空间但换来的是后续编译一次通过这笔账很划算。2.3 通过Epic Games Launcher安装UE4.27.2VS装完之后去Epic Games官网下载Epic Games Launcher。安装启动器、登录账号然后进入“虚幻引擎”标签页在左侧“库”里选择“引擎版本”下拉菜单找到4.27点击安装。引擎安装位置建议保持默认的C:\Program Files\Epic Games\UE_4.27AirSim的构建脚本能自动定位到默认安装路径如果你自己改了位置后面可能需要手动配置环境变量没必要给自己加戏。安装过程会下载比较大的数据包网络条件一般的话建议留出足够时间。下载完成后先双击启动一次UE4.27创建一个空的“蓝图”项目让它跑一遍首次初始化流程。这一步是为了让编辑器生成Shader缓存和默认配置文件否则后面直接打开AirSim项目时首次编译和加载时间会特别长甚至给人“卡住了”的错觉。至此系统层和引擎层都准备好了下一步是真正关键的AirSim编译和插件挂载。3. AirSim源码编译与插件挂载3.1 拉取AirSim源码并编译核心库AirSim的源码托管在GitHub上仓库地址是https://github.com/microsoft/AirSim.git。推荐用Git for Windows来拉取没装Git的话先去装一个命令行工具里选默认选项一路下一步就行。打开命令提示符进入你规划的代码目录执行git clone https://github.com/microsoft/AirSim.git克隆完成后进入AirSim目录你会看到几个关键子目录AirSim是核心C库Unreal是UE4插件和示例工程PythonClient是Python示例代码docs里面有很多API文档后面查函数签名时可以多翻翻。然后就是很多人卡住的一步编译。先找到“开始菜单 - Visual Studio 2022 - 开发者 PowerShell for VS 2022”注意一定要用这个开发者终端因为它已经把MSVC编译器、SDK环境变量都注入到了当前会话里。如果是普通PowerShell或者系统CMD执行build脚本时大概率会报找不到编译工具的错。在开发者终端里进入AirSim目录执行./build.cmd这个脚本会完成以下工作编译AirSim核心动态库、编译一些辅助工具、准备好Python客户端依赖。首次编译时间比较长我这边大概跑了十几分钟期间终端会滚动大量日志不用紧张只要最后能看到类似Done或build succeeded的提示就说明成功了。如果这里报错最常见的两类是没有使用开发者终端导致找不到MSBuild或者VS组件安装不全导致某个头文件缺失。前者重新打开开发者终端就行后者参考2.2节补装组件。3.2 插件挂载官方Blocks环境还是自建项目AirSim编译完成后插件本身已经出现在AirSim\Unreal\Plugins目录下接下来需要把它挂到UE4工程里。对第一次接触的人来说我强烈建议先用官方自带的AirSim\Unreal\Environments\Blocks工程跑通全流程。这个工程就是一个最简单的城市街区场景里面有地面、楼房、一个可以起飞的无人机AirSim插件已经预先配置好你不需要做任何手动挂载操作。进入Blocks目录可以看到一个Blocks.uproject文件。右键这个文件选择“生成Visual Studio项目文件”等待生成完成后直接用UE4编辑器双击打开Blocks.uproject。如果你打开时收到一个弹窗提示“The following modules are missing or built with a different engine version: AirSim”这不是什么致命错误选择“是Yes”让编辑器重新编译缺失模块就行。首次打开会等待一小会儿因为编辑器需要编译和加载AirSim插件完成后就会进入一个空场景默认的无人机模型和场景物体应该已经在编辑器世界里了。如果你打算用自己创建的UE4工程来跑AirSim那需要注意一个前置条件新建工程时一定要选择“C 基础代码”项目模板不能选纯蓝图项目。原因很简单AirSim插件是C模块它需要在工程编译时被链接到游戏模块里纯蓝图工程没有C文件编译器根本没有机会加载插件代码。创建好C工程后把AirSim\Unreal\Plugins\AirSim整个文件夹复制到你的工程Plugins目录下没有就新建一个然后右键.uproject文件重新“生成Visual Studio项目文件”再打开编辑器即可。3.3 在编辑器里启动AirSim场景场景打开并完成编译之后直接点击工具栏上的“Play”按钮AirSim就会在编辑器视口中启动仿真。你会看到左下角出现一个多旋翼的HUD界面场景里有一架无人机模型这就说明AirSim已经正常工作了。启动之后先别急着写代码你可以用鼠标在视口里四处转转看看场景加载情况。如果一切正常其实大部分AirSim用户并不会真的用键盘遥控杆来飞无人机而是直接切到API模式通过Python脚本控制。所以这里不需要纠结键盘键位怎么设置我们直接把目标放在“能用程序控制无人机”这一步上。这里还要提醒一句每次修改AirSim插件的C代码或者更换UE4引擎版本都需要重新生成VS工程文件并编译一次不要指望改完代码重启编辑器就能生效。4. 用Python API让无人机飞起来4.1 安装airsim的Python客户端Python端主要做两件事安装airsim库然后写控制脚本。建议使用Python3.9或者3.10Python3.11以上的版本也能装但有些旧的示例代码可能牵涉到旧依赖没必要给自己增加适配成本。执行pip install airsim如果你的网络环境不太好可以加国内镜像源加速pip install airsim -i https://pypi.tuna.tsinghua.edu.cn/simple安装完成后在Python交互环境里执行import airsim不报错就说明客户端库装好了。这个库本质上是AirSim核心库的Python绑定它通过共享内存和IPC跟UE4里的AirSim插件通信所以你电脑本机的防火墙策略不要拦掉UE4进程和Python进程之间的通信。4.2 settings.json基础配置AirSim的很多行为可以通过一个配置文件控制位置在文档\AirSim\settings.json如果这个文件不存在首次启动时会自动生成。需要注意的是这个路径是跟随系统“我的文档”路径走的如果你之前重定向过文档目录要留意实际位置。下面是一份最基础的多旋翼配置{ SettingsVersion: 1.2, SimMode: Multirotor, ClockSpeed: 1 }SettingsVersion表示配置文件格式版本一般保留默认值1.2即可SimMode用来切换仿真类型Multirotor是多旋翼无人机Car是汽车ClockSpeed是仿真时钟倍速做强化学习时经常把它调大比如3或者5来加速训练但调太高会导致物理计算失真需要自己权衡。如果你想测试的是汽车而不是无人机把SimMode改成Car重新启动场景后就能看到一辆汽车出现在场景里。修改settings.json后必须重启UE4场景才能生效这个别偷懒。4.3 第一个起飞降落脚本假设你已经打开UE4编辑器并点击了Play现在无人机应该处于可以接收指令的状态。在项目目录下新建一个Python文件比如first_flight.pyimport airsim import time # 连接仿真环境 client airsim.MultirotorClient() client.confirmConnection() # 切换到API控制模式解锁电机 client.enableApiControl(True) client.armDisarm(True) # 起飞并爬升到距离地面3米的高度 client.takeoffAsync().join() client.moveToZAsync(-3, 1).join() # 以2m/s的前向速度向前飞3秒 client.moveByVelocityZAsync(2, 0, -3, 3).join() time.sleep(1) # 降落 client.landAsync().join() # 最后收尾上锁、退出API控制 client.armDisarm(False) client.enableApiControl(False)这里有一个很重要的坐标系概念AirSim使用的是NED坐标系也就是X轴朝前、Y轴朝右、Z轴朝下。所以我们看到的moveToZAsync(-3, 1)里的-3在NED坐标里表示向上3米。很多初学者第一次写脚本时会疑惑为什么高度是负数这就是原因。执行脚本的顺序也有讲究先保证UE4场景正在运行已经点击了Play然后再运行python first_flight.py。如果你场景没启动脚本会卡在confirmConnection这一步一直等待连接成功不会报错也不会退出看着就像“程序死掉了”其实是在等你启动场景。4.4 获取相机图像与后续算法扩展AirSim最核心的价值之一就是图像数据接口。在多旋翼的默认配置下0号相机是前视的彩色相机通过simGetImages可以拿到图像数据import airsim import numpy as np client airsim.MultirotorClient() client.confirmConnection() response client.simGetImages([ airsim.ImageRequest(0, airsim.ImageType.Scene, False, False) ])[0] img1d np.frombuffer(response.image_data_uint8, dtypenp.uint8) img_rgb img1d.reshape(response.height, response.width, 3)拿到img_rgb之后就可以用OpenCV或者PIL做后续处理了。如果你是做深度学习的还可以把ImageType.Scene换成ImageType.Segmentation或者ImageType.DepthPlanner这样就能一次性获得语义分割标签和深度图用来做数据集自动标注。这些传感器数据在UE4场景里通过AirSim插件统一映射到API接口你可以把它理解为一种“外接设备数据源”——外部算法通过固定的接口获取仿真世界里各类传感器的输出接口设计上和使用真实传感器区别不大迁移到真机时的代码改动成本会低很多。5. 常见问题排查与性能优化5.1 高频问题速查表这套环境装下来我在不同阶段遇到过不少状况顺手整理成了一张速查表你可以先收藏备用现象常见原因解决办法打开uproject提示缺少AirSim模块插件未编译或引擎版本和插件编译版本不一致右键uproject重新生成VS工程文件用VS编译后再打开或用编辑器弹窗选项重新编译build.cmd执行就报MSB3073没用开发者PowerShell或VS工作负载缺失从开始菜单打开“开发者 PowerShell for VS 2022”重新进入目录运行补装“使用C的游戏开发”组件编译时找不到windows.hWindows SDK未安装完整VS安装器里单独勾选最新Windows SDK组件重启后重试Play后画面黑屏/无人机不可见显卡驱动过旧或DX12兼容性有问题更新GPU驱动项目设置里把RHI改成DirectX 11降低画质等级Python脚本连不上AirSim场景没启动、settings.json语法错误、API控制未开启确认已点Play用在线JSON工具检查配置文件脚本里调用enableApiControl飞行过程中画面卡顿严重VBS/内存完整性占用资源或场景画质太高关闭内核隔离里的内存完整性UE编辑器画质调到Low后台程序尽量关掉修改settings.json后不生效编辑器没有重启或文档路径不对重启UE4场景确认配置文件在“文档\AirSim”下且JSON格式正确5.2 编译和启动阶段的典型报错实录除了上面表格里的高频项我把几个印象最深、排查起来最耗时的报错单独拿出来说说。第一个是编译AirSim时出现的error MSB3073: 命令“...\xcopy.exe ...”已退出代码为 3。这个报错表面看是文件复制失败实际原因基本是目标路径不存在或者源路径包含了中文/空格。我当时把AirSim放到了D:\我的项目\AirSim下面xcopy解析路径失败最后把整个目录搬到纯英文路径后重新编译一次通过。所以再次强调路径一定要干净。第二个是打开Blocks工程时提示“The following modules are missing or built with a different engine version: AirSim”。出现这个弹窗说明插件模块的编译版本和当前引擎版本对不上。如果你的机器上同时装了多个UE4版本打开工程时很容易串版本。解决办法就是让编辑器重新编译模块弹窗选“是”等编译完成如果反复失败就用VS打开解决方案手动生成一遍。第三个是运行时地图里找不到无人机只有空荡荡的场景。这种情况多半是场景相机视角角度不对无人机在某个角落里显示不出来试着用鼠标在视口里拖动旋转视角把视野拉大一些就能找到。还有一种可能是你没有点击Play只是在编辑器里“看”场景AirSim仿真进程没有启动自然没有无人机。5.3 性能调优与后续可玩的扩展方向硬件配置上我现在的机器是RTX 3060 12GB 32GB内存跑Blocks场景默认画质可以稳定在60帧以上。如果显卡显存低于6GB建议在项目设置里把渲染画质调到中等或者低否则显存爆掉后编辑器会变得非常卡顿甚至直接崩溃。另外如果你不需要使用WSL2或者Hyper-V虚拟机建议在“Windows安全中心 - 设备安全性 - 内核隔离”里把“内存完整性”关掉。这个功能在Win11里默认开启但对UE4编辑器这种吃性能的应用影响很大关闭之后编译和运行速度都有肉眼可见的提升。当然如果你平时要用到WSL2这个开关就要权衡一下毕竟改了之后虚拟化相关功能可能会受影响。最后的最后空气仿真这块其实还有很多扩展玩法。等你的第一架无人机顺利起飞后不妨去看看PythonClient目录下的reinforcement_learning示例里面有现成的强化学习训练循环也可以尝试用Unreal编辑器导入自己的场景模型做一个数字孪生环境还可以同时创建多架无人机做多智能体协同算法的实验。我个人的体会是用这套环境最好遵循一个原则先跑通默认工程再自定义先控制飞机再做视觉算法先看官方文档再问社区。按照这个顺序即便遇到问题定位范围也会小很多。现在这套环境我已经用在了日常的仿真实验里每次新项目需要快速验证算法可行性时直接复制一套省下的时间真的能多试好几个idea。