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.pswp.cn/web/82617.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82617.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82617.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GPU 圖形計算綜述 (三):可編程管線 (Programmable Pipeline)

2000年左右,微軟在DirectX 8.0中首次提出了Shader Model 1.0和頂點著色器(Vertex Shader)的概念,標志著可編程管線時代的來臨。隨后,在DirectX 9.0中推出了Shader Model 2.0和像素著色器(Pixel Shader&…

【Go語言基礎【3】】變量、常量、值類型與引用類型

文章目錄 一、值(Value)與字面量(Literal)1. 值2. 字面量 二、變量(Variable)1. 聲明方式2. 賦值方式3. 變量默認值4. 類型與值的匹配 三、常量(Constant)1. 聲明方式2. 常量的特性3…

AWS 亞馬遜 S3存儲桶直傳 前端demo 復制即可使用

自己踩過坑不想別人也踩坑了 亞馬遜S3存儲桶直傳前端demo復制即可使用 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0…

Python數據可視化科技圖表繪制系列教程(四)

目錄 帶基線的棒棒糖圖1 帶基線的棒棒糖圖2 帶標記的棒棒糖圖 啞鈴圖1 啞鈴圖2 包點圖1 包點圖2 雷達圖1 雷達圖2 交互式雷達圖 【聲明】&#xff1a;未經版權人書面許可&#xff0c;任何單位或個人不得以任何形式復制、發行、出租、改編、匯編、傳播、展示或利用本博…

如何有效刪除 iPhone 上的所有內容?

“在出售我的 iPhone 之前&#xff0c;我該如何清除它&#xff1f;我擔心如果我賣掉它&#xff0c;有人可能會從我的 iPhone 中恢復我的信息。” 升級到新 iPhone 后&#xff0c;你如何處理舊 iPhone&#xff1f;你打算出售、以舊換新還是捐贈&#xff1f;無論你選擇哪一款&am…

[yolov11改進系列]基于yolov11使用SwinTransformer替換backbone用于提高多尺度特征提取能力的python源碼+訓練源碼

【SwinTransformer介紹】 摘要 ViT的缺點&#xff1a; Transformer在語言處理中的基本元素是word token&#xff0c;其特點是語義信息比較密集。而ViT中token的尺度&#xff08;scale&#xff09;是固定的&#xff0c;且視覺token攜帶的語義信息比語言文字序列差&#xff0c…

NoSQL 之 Redis 配置與優化

目錄 一、Redis 介紹 1、關系型數據庫與非關系型數據庫 &#xff08;1&#xff09;關系型數據庫 &#xff08;2&#xff09;非關系型數據庫 &#xff08;3&#xff09;非關系型數據庫產生背景 2、Redis 基礎 &#xff08;1&#xff09;Redis 簡介 &#xff08;2&#x…

算法復雜度,咕咕咕

1.數據結構與算法 數據結構是計算機存儲&#xff0c;組織數據的方式&#xff0c;指相互之間存在一種或多種特定關系的數據元素的集合。可以理解為形狀不同的容器。 算法是定義好的計算過程&#xff0c;取輸入值&#xff0c;經過一系列計算方法變成輸出值。 &#xff08;推薦…

【Linux】 Linux 進程控制

參考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/125581083 一、進程創建 1.1 fork()函數 在linux中fork函數是非常重要的函數&#xff0c;它從已存在進程中創建一個新進程。新進程為子進程&#xff0c;而原進程為父進程。進程調用fork&#xff0c;當…

【大模型】MCP是啥?它和點菜、做菜、端菜有啥關系?

什么是 Model Context Protocol (MCP)? Model Context Protocol(模型上下文協議),通俗來說,就是一套用來管理、傳遞和維護對話或交互中上下文信息的規則和格式標準。 換句話說,MCP定義了模型在處理用戶輸入和生成回答時,如何理解、保留和傳遞上下文信息的協議,確保對…

機器學習的數學基礎:決策樹

決策樹 文章目錄 決策樹決策樹的基本思想劃分選擇信息增益增益率基尼指數 減枝處理回歸問題對連續值的處理對缺失值的處理 決策樹的基本思想 決策樹是基于樹結構來進行決策的&#xff0c;通過對問題的判斷與決策&#xff0c;得到最終決策。 一般的&#xff0c;決策樹包括一個…

基于若依前后分離版-用戶密碼錯誤鎖定

sys_config配置參數 user.password.maxRetryCount&#xff1a;最大錯誤次數 user.password.lockTime&#xff1a;鎖定時長 //SysLoginController//登錄 PostMapping("/login") public AjaxResult login(RequestBody LoginBody loginBody) {AjaxResult ajax AjaxR…

Java線程安全集合類

Java線程安全集合類全面解析 目錄 并發集合概述List線程安全實現Set線程安全實現Map線程安全實現Queue線程安全實現總結 并發集合概述 Java提供了多種線程安全的集合類&#xff0c;主要分為兩大類&#xff1a; 傳統同步集合&#xff1a;通過synchronized關鍵字實現線程安全…

匯川變頻器MD600S-4T-5R5為什么要搭配GRJ9000S-10-T濾波器?

一、變頻器的工作原理與電磁干擾 匯川MD600S-4T-5R5變頻器是一款緊湊型高性能變頻器&#xff0c;適用于三相380V-480V電網&#xff0c;額定電流5.5A&#xff0c;支持矢量控制和多種編碼器接口&#xff0c;適用于需要高精度速度和轉矩控制的場景&#xff0c;如機器人、電梯、紡…

數學運算在 OpenCV 中的核心作用與視覺效果演示

在計算機視覺中&#xff0c;圖像不僅僅是我們肉眼所見的內容&#xff0c;它其實是由數值矩陣組成的“數據”。而在 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;中&#xff0c;正是數學運算賦予了圖像處理無限的可能——從基本的濾波、增強到復雜的特征…

【快速預覽經典深度學習模型:CNN、RNN、LSTM、Transformer、ViT全解析!】

&#x1f680;快速預覽經典深度學習模型&#xff1a;CNN、RNN、LSTM、Transformer、ViT全解析&#xff01; &#x1f4cc;你是否還在被深度學習模型名詞搞混&#xff1f;本文帶你用最短時間掌握五大經典模型的核心概念和應用場景&#xff0c;助你打通NLP與CV的任督二脈&#xf…

springboot mysql/mariadb遷移成oceanbase

前言&#xff1a;項目架構為 springbootmybatis-plusmysql 1.部署oceanbase服務 2.springboot項目引入oceanbase依賴&#xff08;即ob驅動&#xff09; ps&#xff1a;刪除原有的mysql/mariadb依賴 <dependency> <groupId>com.oceanbase</groupId> …

電網“逆流”怎么辦?如何實現分布式光伏發電全部自發自用?

2024年10月9日&#xff0c;國家能源局綜合司發布了《分布式光伏發電開發建設管理辦法&#xff08;征求意見稿&#xff09;》&#xff0c;意見稿規定了戶用分布式光伏、一般工商業分布式光伏以及大型工商業分布式光伏的發電上網模式&#xff0c;當選擇全部自發自用模式時&#x…

C語言之編譯器集合

C語言有多種不同的編譯器&#xff0c;以下是常見的編譯工具及其特點&#xff1a; 一、主流C語言編譯器 GCC&#xff08;GNU Compiler Collection&#xff09; 特點&#xff1a;開源、跨平臺&#xff0c;支持多種語言&#xff08;C、C、Fortran 等&#xff09;。 使用場景&…

負載均衡將https請求轉發后端http服務報錯:The plain HTTP request was sent to HTTPS port

https請求報錯&#xff1a;The plain HTTP request was sent to HTTPS port 示例背景描述&#xff1a; www.test.com:11001服務需要對互聯網使用https提供服務后端java服務不支持https請求&#xff0c;且后端程序無法修改&#xff0c;僅支持http請求 問題描述&#xff1a; 因…