ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows11安装UE4+AirSim完整指南:无人机仿真环境配置与避坑

Windows11安装UE4+AirSim完整指南:无人机仿真环境配置与避坑 直接说结论AirSim是微软开源的无人机、汽车仿真平台跑在UE4上用于自动驾驶算法验证、强化学习训练、视觉SLAM测试这类工作。标题虽然叫“Windows11安装UE4AirSim”实际操作下来真正折腾人的点主要集中在三个地方UE4版本与AirSim的兼容矩阵、Visual Studio的组件选择、以及编译时杀软和GPU驱动的干扰。这篇文章我按自己在一台Windows11测试机上从零到跑通全部流程的顺序来写把每一步的选型和踩坑都讲清楚你可以把它当成一份可复现的施工手册。1. 环境自检与方案选型动手编译前先想清楚1.1 硬件与系统底座的底线要求Windows11本身对UE4和AirSim的兼容性没有问题但AirSim在Windows11上跑得顺不顺很大程度取决于你的硬件环境。我这边实测的机器是i7-12700K、RTX 3070、32GB内存系统是Windows11专业版23H2系统版本在22H2以上问题都不大。如果你打算用笔记本尤其是双显卡笔记本核显独显要特别注意在NVIDIA控制面板里为UE4编辑器进程指定高性能独立显卡否则编译出来的编辑器运行时可能只有几帧这是AirSim新手最容易误判为“安装失败”的情况。内存和磁盘是另一个容易忽略的硬性需求。UE4.27的引擎本身在编译完成后占用大约30GB加上你的工程目录和AirSim插件源码总共预留至少100GB的可用磁盘空间比较稳妥。内存方面16GB是下限但编译AirSim插件时MSVCMicrosoft C/C编译器的多个实例同时跑经常看到内存占用冲到12GB以上所以建议32GB起步。GPU的话最好是NVIDIA显卡6GB显存以上体验会好很多因为AirSim默认会用高分辨率渲染视口显存不足会导致启动后画面黑屏或直接崩溃。提示Windows11的“基于虚拟化的安全性”VBS功能在某些机器上默认开启实测会拖累UE4的编译速度和运行帧率。如果你暂时用不到内核隔离等安全功能可以在“设置-系统-核心隔离”里暂时关闭编译完成后可以再开回来。这一项不影响最终功能只影响速度。1.2 版本矩阵为什么这次选UE4.27而不是UE5AirSim的官方源码对UE4支持最稳定的是4.27版本UE5分支虽然也存在但截至我写这篇文章时UE5分支的完成度参差不齐很多环境传感器比如Lidar和天气系统在UE5下表现不稳定。如果你是为了跑论文复现或者要配合RflySim、PX4硬件在环这类生态工具UE4.27依然是社区中兼容性最好、资料最多的版本。我自己也试过UE5.1遇到过一次编译通过但启动仿真时网格体加载异常的问题后来为了效率还是回到了4.27。所以这套流程的目标版本定为Windows11 Visual Studio 2019 UE4.27.2 AirSim的master分支。VS2019是很关键的一个选择UE4.27官方仓库里默认使用的工具集是VS2019的v142用VS2022虽然也能编译但需要额外改一些配置而且部分老版本AirSim代码会报C20标准相关的警告。为了不额外冒险老老实实装VS2019最稳妥。另外要注意UE4引擎本身不需要你自己从源码构建直接用Epic Games Launcher安装4.27.2版本就行。AirSim要编译的是它的UE4插件以及一个名为AirSim.sln的独立编译工程它用于生成Python调用的DLL两个东西都要走一遍编译流程。2. AirSim源码编译环境依赖和构建命令2.1 Visual Studio 2019组件选择少选多选都有坑安装VS2019时社区版就够用。关键的坑在组件选择上必须勾选“使用C的游戏开发”工作负载这个负载下默认会带上“适用于Windows的C CMake工具”和“Windows 10 SDK”。但有个额外项容易被忽略就是“C地址消毒器”和“C分析工具”这些附加项根本不用选选了只会拖慢安装速度。需要特别注意SDK版本。AirSim编译时要求Windows 10 SDK版本不低于10.0.19041因为有些头文件比如与Windows图形层相关的部分依赖新版本SDK。如果你机器上只装了更老的SDK编译时会报类似“找不到windows.h”或“SDK版本冲突”的错误。保险做法是在“单个组件”标签页中搜索“Windows 10 SDK”选择最新的稳定版我个人装的是10.0.19041.0和10.0.22621.0并存编译AirSim时选最新的即可。VS安装完成后建议确认一下“开发人员命令提示符”能否正常打开。AirSim的build.cmd本质上就是调用MSBuild相关的批处理命令如果VS环境配置出了问题后续所有编译都会在莫名其妙的地方失败所以环境装好后第一时间打开命令提示符运行cl命令看看有没有正常输出版本信息这是最快速的健康检查。2.2 拉取AirSim仓库并编译第一步AirSim的源码在GitHub上你要去Clone它的仓库。如果你在本地网络环境下访问GitHub比较慢建议用镜像加速或者提前在手机上开个热点总之这个过程千万别断。仓库建议放在一个不包含空格的路径下比如D:\AirSim避免编译时脚本解析路径出问题。拉取命令如下git clone https://github.com/microsoft/AirSim.git这里提醒一个细节AirSim使用了不少子模块主要是外部依赖的库比如MavLinkCom和rpclib直接克隆完主仓库后需要执行git submodule update --init --recursive这一步漏掉的话编译时会出现一大堆“无法打开包含文件”的红色错误而且错误信息指向的路径乱七八糟你会以为是VS配置问题实际上就是子模块没更新。我自己第一次编译就在这上面卡了半小时。子模块更新完成后打开“Developer PowerShell for VS 2019”进入AirSim目录cd D:\AirSim .\build.cmdbuild.cmd会依次执行两个主要操作先编译AirSim的独立库生成AirSim.dll再编译Unreal的插件包输出到Unreal\Plugins目录。这个完整编译过程视机器性能不同通常需要20到40分钟。期间CPU会满载风扇狂转属于正常现象不用太担心。2.3 编译参数与失败点的避让策略build.cmd支持一些参数最常用的是build.cmd --game它会在编译插件时把游戏模式的支持也编译进去而默认的build.cmd只编译编辑器模式。如果你是打算把AirSim嵌入到一个最终发布的产品项目中需要跑--game但仅仅是本地仿真调试默认模式就够了。另一个值得手动配置的是编译并行度。build.cmd默认会自动探测CPU核心数理论上核多编译快但我在Windows11上遇到过CPU满载导致某个编译单元瞬时内存不足的情况表现为报错信息里出现“fatal error C1060”。解决方式是手动限制并行数在系统环境变量中添加MAKEFLAGS并设置为-j8根据你的核心数调整不要超过物理核数。或者在编译时不改环境变量直接用$env:MAKEFLAGS -j8 .\build.cmd还有一类高频失败是杀毒软件把编译生成的DLL当病毒隔离。Windows11自带的Defender实时保护有时候会把AirSim生成的一些临时DLL干掉导致编译报“无法写入文件”或“访问被拒绝”。遇到这种迹象先把AirSim目录和UE4工程目录加入Defender排除名单再重新编译成功率会高很多。3. UE4工程创建与插件挂接关键一步在于复制目录3.1 创建空白工程模板选择有讲究AirSim官方文档推荐的做法是从Epic Games Launcher启动UE4.27在项目浏览器里选择“Games”分类下的“Blank”模板创建C项目不要建蓝图项目。原因在于只带蓝图的项目无法直接编译C插件而我们要挂接的AirSim本身是包含C源码的插件项目必须支持C构建。项目命名建议全部使用英文字母和数字不要用中文也别用下划线开头UE4对项目名限制比较严格。比如我建的项目叫AirSimTest。项目路径同样不能有中文和空格推荐放在D盘根目录的某个英文文件夹里像D:\UEProjects\AirSimTest。UE4会问你是否创建“入门内容包”选择“否”。入门内容包含大量示例网格体和贴图占空间不说还容易在后续编译时增加不必要的耗时。AirSim的默认环境自带地形和建筑物网格我们不需要额外的入门内容。创建完项目后UE4会自动打开编辑器并生成一个默认关卡这时可以先关掉编辑器后面我们要用Visual Studio重新编译整个项目。3.2 将AirSim插件复制进工程核心操作就两步但顺序不能反。第一步把之前编译生成的D:\AirSim\Unreal\Plugins整个文件夹复制到你的UE4工程根目录下也就是放在AirSimTest\Plugins。注意是复制整个Plugins文件夹不是只复制里面的AirSim子文件夹。第二步在UE4工程根目录下找到AirSimTest.uproject文件用记事本打开在文件末尾的大括号前追加Plugins依赖声明。我这里展示一份标准的配置{ FileVersion: 3, EngineAssociation: 4.27, Category: , Description: , Modules: [ { Name: AirSimTest, Type: Runtime, LoadingPhase: Default, AdditionalDependencies: [ Engine ] } ], Plugins: [ { Name: AirSim, Enabled: true } ] }这段配置的意思就是告诉UE4这个项目启用名为AirSim的插件。如果漏掉这段即使Plugins目录里有AirSimUE4也不会自动加载启动后看左上角也不会出现AirSim的悬浮指示窗口。3.3 生成VS工程文件并编译整个项目接下来要让UE4为我们的C项目生成Visual Studio解决方案文件。对着AirSimTest.uproject点击鼠标右键菜单里选择“Generate Visual Studio project files”。这个过程会调用UnrealBuildTool通常几秒钟就完成了之后工程目录下会出现AirSimTest.sln。用VS2019打开这个sln把解决方案配置从“DebugGame Editor”切换到“Development Editor”把解决方案平台保持为“Win64”。然后在“生成”菜单下选择“重新生成解决方案”。第一次生成时间长很正常因为需要编译整个项目和AirSim插件的引擎集成部分。我这台机器跑完大约用了30分钟期间如果CPU温度过高注意通风散热。编译成功后在VS里直接按F5或者点击“本地Windows调试器”运行UE4编辑器会再次打开。此时编辑器左上角应该能看到一个“AirSim”菜单里面包含Vehicle选型等选项。看到这个菜单说明插件挂接成功整个安装流程已经走通了一大半。4. AirSim运行验证与settings.json配置4.1 从无人机到汽车打开第一个仿真场景UE4编辑器重新打开后AirSim插件默认不会自动加载一个可飞行的环境。你需要先加载一个空关卡然后在AirSim菜单中选择“Create Vehicle”这时会看到无人机还是汽车的选择项。AirSim支持两种主要载具多旋翼无人机Multirotor和汽车Car。官方默认的Settings在没做任何配置时会启动无人机。点击播放按钮Play等待几秒钟你会发现默认关卡里出现了一架无人机并且它处于悬停状态。这时你可以按键盘上的F9切换无人机视角按F10切换汽车视角离线模式下。如果无人机摇晃几下后坠落通常是初始化阶段的推力计算问题先检查遥控器模式是否被设置成了“gamepad”但你没有连接手柄AirSim在识别不到遥控器输入时仍会尝试保持悬停但有些版本会有bug导致坐骑抖动。飞行控制可以简单记忆遥控器模式在电脑上映射为键盘的WASD控制水平移动上下箭头控制升降左右箭头控制偏航。第一次玩建议不要猛打杆量AirSim的气动模型和真实无人机很接近大幅度反复打杆会导致姿态失控新手经常出现飞着飞着“翻车”的情况。4.2 settings.json参数注解拿到手就能改的样例AirSim的配置写在文档\AirSim\settings.json里首次运行插件后会自动生成。如果没找到这个文件就手动建一个。这个JSON文件里有很多可调参数我分享一下我自己常用的最小化配置覆盖了一块平地、一辆车和一架无人机{ SettingsVersion: 1.2, SimMode: Multirotor, ClockSpeed: 1, Vehicles: { Drone1: { VehicleType: SimpleFlight, DefaultVehicleState: Armed, rc: { RemoteControlID: 0, AllowAPIWhenDisconnected: true } }, Car1: { VehicleType: PhysXCar, DefaultVehicleState: Running } } }SettingsVersion字段必须保留AirSim用这个字段判断配置文件格式是否兼容。SimMode决定了启动时默认激活哪个载具类型填Multirotor启用无人机填Car启用汽车。如果你想同时加载多辆车或一架无人机加一辆车就需要在Vehicles节点下配置多个实体VehicleType字段指定载具类型。另外API相关的常见坑是在Python等外部程序中通过AirSim API连接时会报“无法连接至localhost:41451”。这个问题九成是因为在settings.json里没开AllowAPIWhenDisconnected。你如果打算跑自动驾驶控制用Python脚本去连接AirSim就必须加上这个字段。我最初跑控制算法时就在这卡了半个多小时连接不上后来查文档才发现默认情况下AirSim的RPC服务只在连接了遥控器时才会激活不加这个字段就永远拒绝外部连接。4.3 验证Python API是否连通如果你安装AirSim就是为了做算法仿真这一步必须验证。建议在Python环境里安装airsim客户端库pip install airsim这里有个容易混淆的地方这个pip包只是客户端库它不包含仿真器本体。仿真器本体就是你正在运行的UE4工程里的AirSim插件。客户端和仿真器通过本地网络端口通信。验证连通性的脚本很短import airsim client airsim.MultirotorClient() client.confirmConnection() print(Connected)运行后如果控制台输出Connected说明整个链路已经打通。如果卡住或者报超时先回到编辑器看看AirSim是否真的处于运行状态Play按钮有没有按下再检查防火墙是否拦截了本地端口。Windows11的防火墙默认对Python进程会弹窗询问是否允许网络通信允许即可。5. 常见问题与排查技巧实录5.1 编译阶段的经典报错速查表报错特征根因解决方案fatal error C1060: compiler out of heap space并行编译导致内存不足限制MAKEFLAGS的并行数关闭后台其它重型软件The target package could not be found项目缺少模块声明检查uproject文件里的Modules和Plugins字段是否完整找不到simhud或者AirSimGameMode插件未被正确加载到编辑器菜单检查AirSim插件是否为Enabled状态API-Version相关编译错误AirSim子模块未初始化执行git submodule update --init --recursive编译时提示Windows SDK版本过低VS组件里没有装新SDK在VS Installer中添加最新Windows 10 SDK这里特别提醒一点UE4的编译日志默认很长红色字体不一定全是致命错误。很多新手看到满屏警告会手足无措但真正决定编译失败的只有最后汇总的error信息建议看到红色日志先沉住气滚动到末尾找Build failed或者Error:关键字再对照处理。我见过一个同事因为看到前半段警告就以为失败了其实后半段该成功的还是成功了。5.2 运行时崩溃和画面异常的处理思路最常见的运行时崩溃之一是启动关卡后不报任何错但直接闪退。这类问题优先检查显卡驱动。UE4.27对NVIDIA驱动版本有轻微的依赖关系驱动太老或太新都可能引发渲染层的闪退问题。解决方案是去官网下载Game Ready驱动安装时选择“执行清洁安装”能解决大部分渲染相关的闪退。如果编辑器正常运行但画面是纯黑或者只有天空要看一看关卡里是否存在默认的地面网格体。AirSim使用这个世界场景作为地面检测和碰撞的依据如果关卡里是没有任何物体的纯空场景无人机起飞后不会坠落飞机会一直保持零坐标位置视觉上就像“卡住”了一样。这时在UE4的放置模式里拖入一个地面平面Basic分类下的Floor或者直接用AirSim自带的Blocks环境在Content Browser中加载AirSim示例地图再播放就不会出现这类视觉问题。还有一个Windows11特有的坑值得单列双显卡笔记本上UE4编辑器虽然打开了但AirSim窗口里画面假死鼠标动不了。这几乎可以断定是GPU切换问题。去“设置-系统-屏幕-显示卡”中在“应用自定义选择”里添加UE4Editor.exe进程并设置为“高性能”重启编辑器就能解决。5.3 Windows11系统层面的特有坑Windows11相较于Windows10在AirSim这类涉及系统和图形API交互的工具链上有几个实际遇到的差异性需要注意。第一Windows11的窗口游戏优化针对游戏窗口的优化调整在某些版本上开启后会让UE4编辑器的视口透明度异常导致场景看起来蒙了一层雾。如果你画面中所有物体都像被一层半透明薄膜盖住检查“设置-系统-屏幕-图形-默认图形设置”里的“优化窗口游戏”开关把它关掉重新打开编辑器。第二Windows11对文件夹访问权限管理更严格。AirSim在运行时会写日志和缓存文件如果UE4工程目录放在类似C盘Program Files这样需要管理员权限的位置运行时可能因为权限不足而无法正常落盘造成各种诡异间歇性错误。解决办法是把整个工程移到普通用户可完全控制的目录比如D盘根目录并且不要使用管理员权限运行编辑器。这样做的好处不仅仅是不弹UAC窗口更重要的是避免权限差异导致的数据写入失败。第三关于系统更新的隐患。如果你长年不更新Windows11UE4.27跑起来没问题但一旦系统更新了新版图形栈个别机器需要重装显卡驱动才能恢复正常帧率。这个纯属经验判断没有统一的处理公式只能说你如果发现更新系统后AirSim突然卡顿先去重装一遍显卡驱动往往能解决。6. 从安装走向开发给初学者的另外几点建议AirSim这套环境装好以后接下来怎么用才是整个生态里更有价值的部分。AirSim的一大优势在于它自带了一套基于Python或C的API可以实时读取无人机的姿态、传感器数据以及发送控制指令这意味着你可以在UE4的仿真世界里验证自己的飞控算法或视觉SLAM算法然后再移植到真机上。这个“先在仿真中验证再上真机”的思路能省下大量试错成本尤其是在电机、桨叶这些硬件容易损耗的场景里。我的建议是刚装好AirSim的新手不要急着接PX4或者QGC这类重量级飞控先跑通自带的SimpleFlight模型把“读取姿态-发送控制指令-收到传感器反馈”这一整条链路玩熟了再考虑引入外部飞控仿真。步子迈太大容易同时踩两套环境的坑排查起来非常痛苦。另外AirSim社区里有人专门维护了一个示例环境集合里面包含城市场景、山区场景等不同类型的地图比自带的Blocks环境更适合做视觉算法的测试。你可以在UE4商城或社区仓库中找到这些地图同样用挂接插件的方式加载即可。这算是AirSim生态比较讨喜的一点UE4庞大的美术资源库可以直接为仿真服务不像有些纯图形仿真引擎需要重新建模。最后分享一个我个人的习惯每次换新机器或重装系统时我会把AirSim的构建缓存和UE4的DerivedDataCache目录一起清理掉再编译。这样做不是因为它们会导致失败而是因为旧缓存可能夹杂着上一个机器安装的第三方插件残留下来的元数据在Windows11下偶尔会诱发不可名状的编译链接错误。虽然清理后首次编译会变慢但换来的构建过程确定性是值得的。这套流程走的弯路我替你们先踩了一遍照着操作下来顺利的话半天内就能看到一个悬停的无人机出现在UE4的视口里。如果过程中有哪个环节对不上回到上面提到的排查表对照一下大部分问题都能在十分钟内定位。祝各位在仿真世界里玩得愉快。
返回列表