当前位置: 首页 > backend >正文

AirSim/Cosys-AirSim 游戏开发(二)使用自定义场景

在实际的开发过程中很少会只用 AirSim 自带的 Blocks 场景,通常需要用到自定义的一些环境和模型,依托于强大的 UE 引擎可以较为逼真地完成场景渲染。这篇博客记录了如何从头开始导入一个自定义场景并加载 AirSim 插件。

【Note】:由于 UE Editor 和商店的版本迭代,有些按钮或工具位置会有变动,我这里使用的是 5.5.1 + UE5 的组合。

核对以下软件版本:

  • Windows 10;
  • UE Launcher + UE5;
  • Visual Studio 2022;
  • AirSim / Cosys-AirSim;

当前所有操作都在Windows上完成,后面会介绍 PX4 和 MAVLINK 在不同设备上通讯

因为我本身不是做 UE 的,只是工作中需要用到 UE,这篇博客是站在一个机器人算法工程师角度展开,因此部分内容可能不太专业,如果存在错误还请在评论区留言,我会在第一时间处理。


1. 从 Epic 商店中选择场景素材

虽然可以直接从浏览器的方式进入商店,但我个人习惯从本地的 Launcher 进入商店,可以少占用一个浏览器的收藏位。

启动 Epic Game Launcher 后按照顺序执行以下操作:

  1. 进入 “库” 标签页;
  2. 下拉到软件最下面找到 “Fab 库” 的位置;
  3. 点击黄色的 “请访问 Fab.com” 链接;

在这里插入图片描述

2025年06月05日 的在线商店长下面这个样子:

在这里插入图片描述

往下拉一些找到 Environments 标签,这个标签里都是可下载的环境,对于初学 AirSim 来说里面的免费资源足够折腾了。

在这里插入图片描述

进入页面后可以在上方的 Price 筛选器中勾选 Free 筛选出免费的场景素材:

在这里插入图片描述

这里以 Downtown West Modular Park 资源为例,选中并点击进去:

在这里插入图片描述

因为我已经将这个资源添加到我的库里了,所以页面右侧显示 “已添加”,如果你之前没有操作过应该可以看见 Add to My Library 按钮,点击并添加到自己的库中,然后刷新页面就可以看见 View in Launcher 按钮。

【Note】:在我写这篇博客的时候点击 View in Launcher 按钮只会自动打开 Epic Launcher,并不会自动添加到本地,需要点击 View in My Library 按钮后手动下载。

在这里插入图片描述

在弹出的 Epic Launcher 中有时候会自动刷新,如果你没看见新加的场景则可以手动刷新一下:

在这里插入图片描述

因为这里添加的是 素材 而不是 工程,所以我们需要自己新建一个工程并将这个素材添加到工程中。


2. 新建一个空白工程

在上一步的 Epic Launcher 中选择右上角的 启动 Unreal Engine 5.5.1 按钮先将UE引擎启动。

【Note】:这里每个人安装的 UE 引擎版本不一样因此可能会存在差异,但这一步的操作都是为了启动引擎创建新的工程。

在这里插入图片描述

在启动后按照下面的流程新建一个工程:

  1. 点击 SIMULATION 标签;
  2. 选择一个存放工程的位置;
  3. 【可选】在 Project Name 中修改你的工程名,这里我偷懒就不修改了;
  4. 点击 Create 创建工程;

在这里插入图片描述

创建工程按钮被点击后 UE 会进行一些基础元素的编译与构建,这一步会花费一点时间,然后自动弹出以下画面,到达这一步至少说明你的 UE 引擎都正常,没有缺少必要的库或文件。

在这里插入图片描述


3. 将场景添加到工程中

3.1 下载资源库场景

先将上面弹出的操作界面关闭,回到 Epic Launcher 中点击 添加到工程 按钮

在这里插入图片描述
在弹出的页面中按照以下顺序操作:

  1. 勾选 显示所有工程
  2. 选择刚才创建的工程 MyProject
  3. 如果你的引擎和我的一样是 UE 5.5.1 那么需要以兼容的形式运行,在 选择版本 中选择一个版本号差距最小的;
  4. 点击 添加到工程

在这里插入图片描述

确认后 Epic Launcher 会自动下载这个资源,等待下载完成即可:

在这里插入图片描述

下载完成后会自动打开新建的工程,这里建议先将下载好的资源备份一份,以免误操作导致损坏文件导致重新下载。位置就在你的工程目录下的 Content 文件夹中,以我的路径为例 C:\Users\Lucks\Desktop\AirSim-Self-Env\MyProject\Content

在这里插入图片描述

3.2 导入场景到操作界面中

返回到 UE Editor 中开始导入场景,按照下面的步骤依次操作:

  1. 打开 左下角 的资源抽屉 Content Drawer
  2. 将左侧文件目录展开,这里使用的是 Downtown_West
  3. 进入到 Maps 文件夹中;
  4. 双击 Demo_Enviroment 等待场景加载完成;

【Note】:不同的资源文件在第3、4步可能存在文件选择差异,但只要是制作合规的场景都有 Level 标签

通常情况下会自动递归加载需要的场景文件,如果你发现显示的不全可以手动进入 Sub-Level 文件加载一些其他场景,这个资源里的子文件中有不同的天空背景,感兴趣的可以多尝试下。

在这里插入图片描述

在场景正确加载后必须检查一下是否可用,点击上方绿色的 Play 按钮进入环境,想要退出的话点击 Esc 即可结束仿真。

在这里插入图片描述

3.3 设置工程默认关卡

在确认环境能正确加载并运行后 Ctrl + S 保存,此时如果你直接退出,然后再在 Launcher 中打开的话仍然显示的是空白场景,这是因为没有设置 默认关卡,按照下面的步骤设置默认关卡:

  1. 在上方工具栏中点击 Edit,然后在下拉菜单栏中点击 Project Settings
  2. 弹出窗口的左侧选择 Maps & Models
  3. Default Maps 中的 Editor Starup Map 中选择 Demo_Enviroment 场景;
  4. 在下面的 Game Default Map 中也选择 Demo_Enviroment 场景;

经过上述操作后下一次打开就是默认的这个场景了。

在这里插入图片描述


4. 创建空的 C++ 类

【Note】:有些工程自带一个空的 C++类 就不需要执行这一步,如果你的下拉菜单中 Generate Visual Studio Project 是灰色不可选中的,那么需要手动创建。这个类基本用不上,是为了引导 UE 生成 Visual Stuido 工程用的。

点击上方工具栏中的 Tools ,在下拉菜单中选择 New C++ Class

在这里插入图片描述

在弹出的页面中点击 Next

在这里插入图片描述

类名可以随意起,用默认也无所谓,点击 Create Class

在这里插入图片描述

等走完进度条后先不要打开编辑器,选择 No 即可:

在这里插入图片描述

此时你的 工程目录下应该会自动生成一个 MyProject,.sln 文件:

在这里插入图片描述

然后关闭 Editor 准备编译 AirSim 插件。


5. 编译 AirSim 插件

这里无论你使用的是 AirSim 还是 Cosys-AirSim 都需要先找到对应的插件位置,但好在两个库的结构基本一致,所以 UE 插件路径也相似。

5.1 复制 Plugins/AirSim 文件夹

我这里以我用的 Cosys-AirSim 为例,其 UE 插件位置在 C:\Users\Lucks\Desktop\Cosys-AirSim\Unreal\Plugins

在这里插入图片描述
然后前往你的工程目录,我这里是 C:\Users\Lucks\Desktop\AirSim-Self-Env\MyProject,如果你的工程目录中有 Plugins 文件夹则直接进去并粘贴上一步复制的 AirSim 文件夹,如果没有就手动创建并复制进去。

在这里插入图片描述

5.2 编辑 MyProject.uproject 文件

回到你的工程目录中使用文本编辑器打开你的 MyProject.uproject 文件并进行编辑:

在这里插入图片描述

然后在 “Plugins” 元素中添加以下字段:

{"Name": "AirSim","Enabled": true	
}

修改完成就保存并关闭。

在这里插入图片描述

5.3 生成 Visual Studio 工程文件

回到工程目录中,右键点击 MyProject.uproject 在弹出的菜单中选择 Generate Visual Studio project file 等待生成结束。

在这里插入图片描述


[可选] 6. 配置 Visual Studio 工程

如果你想要在这个工程上验证一下官方的无人机起降Demo可以按照下面的流程进行,官方 Demo 的核心是里面的一个 cpp 文件,执行了无人机起飞、运动几米、拍照、降落这几个动作。

在上面工程文件成功生成后就可以双击打开 MyProject.sln 启动 Visual Stuido:

在这里插入图片描述

6.1 新建一个空白工程

右键 Games 然后在 Add 中新建一个空白工程 New Project
在这里插入图片描述

在弹出的窗口中直接选择 Empty Project 就够用了,我这里给工程起名为 SelfDemo

在这里插入图片描述

6.2 复制 HelloSpawnedDrones.cpp 文件

前往你的 AirSim 或 Cosys-AirSim 的安装路径,找到 HelloSpawnedDrones.cpp 文件,这个文件就是用来生成一个可用的无人机入口,对于我而言这个文件在 C:\Users\Lucks\Desktop\Cosys-AirSim\HelloSpawnedDrones\HelloSpawnedDrones.cpp

在这里插入图片描述

然后将这个文件复制到刚才新建的空白工程目录下 Source\MyProject 文件夹中,对我而言就是在路径 C:\Users\Lucks\Desktop\AirSim-Self-Env\MyProject\SelfDemo

在这里插入图片描述

在 Visual Stduo 中将这个文件添加到项目中,浏览文件将其加入到编译队列里:

在这里插入图片描述

6.3 设置工程为启动项

右键新建的工程,并在弹出的菜单中选择 Set as Startup Project

在这里插入图片描述

然后就是传统的配置 Visual Stduio 项目步骤了。

6.4 添加包含目录

找到你刚才复制进来的 Plugins/AirSim 的插件文件夹,并将以下三个路径复制进去:

  • Plugins\AirSim\Source\AirLib\include;
  • Plugins\AirSim\Source\AirLib\deps\eigen3;
  • Plugins\AirSim\Source\AirLib\deps\rpclib\include;

在这里插入图片描述

效果如下:

在这里插入图片描述

6.5 添加附加库目录

附加库目录需要根据当前编译条件修改,本质是下面三个路径:

  • Plugins\AirSim\Source\AirLib\lib
  • Plugins\AirSim\Source\AirLib\deps\rpclib\lib
  • Plugins\AirSim\Source\AirLib\deps\MavLinkCom\lib

在这里插入图片描述

次数还需要手动修改路径末尾的信息,为上面的路径添加 $(Platform)\$(Configuration) 结尾,最终效果如下:

在这里插入图片描述

6.6 添加附加依赖项

添加附加依赖项基本和上面一致,将 *.lib 加上即可:

在这里插入图片描述
最终效果如下:

在这里插入图片描述


7. 编译工程

7.1 编译 Visual Studio 工程

Debug + x64 的组合编译工程 MyProject

在这里插入图片描述

如果编译有报错,大概率是 6.46.56.6 没有配置好,仔细检查路径是否正确。

如果确认上面的配置都没有问题,但仍然报错没有找到头文件,你需要去 MyProject 中查看是不是把 HelloSpawnedDrones.cpp 文件放到了工程里,这个文件应该在新建的项目中添加。

7.2 编译 UE 工程

双击打开 MyProject.uproject 然后点击确认即可。

在这里插入图片描述
等待 UE Editor 完全启动后在右上角点击 Settings -> World Settings

在这里插入图片描述

在更新后的右边导航栏中选择 Game Mode 中的 Game Mode Override -> AirSimGameMode

在这里插入图片描述

然后点击 Play 按钮就可以看见无人机生成了:

在这里插入图片描述

http://www.xdnf.cn/news/12341.html

相关文章:

  • Python训练营---Day45
  • DeepSeek 农业大模型:应用潜力与数据隐私保护的双重考量
  • Python训练营---Day44
  • MySQL常用知识总结
  • 三分算法与DeepSeek辅助证明是单峰函数
  • 学习路之PHP--webman安装及使用、webman/admin安装
  • OpenLayers 地图投影转换
  • 视频监控EasyCVR3.7.2版本支持更改播放器默认解码方式,该如何进行配置?
  • 组合与排列
  • 湖北理元理律所债务优化实践:法律技术与人文关怀的双轨服务
  • 【LC#39270】判断子序列爬楼梯(dp算法 第一期)
  • 面向开发者的提示词工程③——文本总结(Summarizing)
  • [蓝桥杯]序列计数
  • 26考研|数学分析:多元函数极限与连续
  • 面试总结。
  • 数据迁移是什么?数据迁移过程中
  • 细说STM32单片机FreeRTOS空闲任务及低功耗的设计方法及应用
  • Java(io)字节流
  • Java应用10(客户端与服务器通信)
  • App使用webview套壳引入h5(一)—— webview和打开的h5进行通信传参
  • 为什么 SDXL 用两个文本编码器?
  • aiohttp异步爬虫实战:从零构建高性能图书数据采集系统(2025最新版)
  • 华为交换机vlan配置步骤
  • 【git】把本地更改提交远程新分支feature_g
  • Python 网络编程 -- WebSocket编程
  • Java线程安全集合类
  • NumPy 比较、掩码与布尔逻辑
  • [AI绘画]sd学习记录(一)软件安装以及文生图界面初识、提示词写法
  • rapidocr 3.0 在线demo来了
  • 时序预测模型测试总结