ORB-SLAM3在windows11下的編譯使用

01 寫在前面

近期在學習SLAM,想部署一下ORB-SLAM3,但是自己電腦是win11系統,因此就想著在win11上部署一下。但是網上看了一些教程,有一些博客,但是可能不適合我這種情況把,就很糾結。先說下結果,配置成功,過程極其痛苦。

02 參考工作

所參考的資料如下,感謝各位技術大佬的付出。

1、https://github.com/ds-ly/orbslam3-windows

2、ORB-SLAM3在Windows環境下的編譯配置 | 北遠山村

3、ORB-SLAM3在windows下的編譯使用 - 知乎

03 基礎環境

  1. CPU:i7-12700K;
  2. GPU:RTX A4000;
  3. 操作系統:Windows 11 64位專業版;
  4. Microsoft Visual Studio 2022; (此軟件默認大家已經裝好,在此對vs的安裝不贅述)
  5. CMake GUI;(不贅述too)

04 開始配置

04-1 下載源碼

本方案是基于https://github.com/ds-ly/orbslam3-windows

該方案中在Thirdparty中包含了一些博客中提到的DBoW2、eigen、g2o、Pangolin等幾個關鍵的包,所以大家也不用額外再去搜,直接在此方案下配置,配置的時候地址也比較集中,很方便。不必擔心忘記安裝在哪里了。但是在這之前有兩個軟件需要額外先安裝一下,opencv和boost。當然了你也可以Thirdparty下安裝。但是考慮到我自己的需要,我是在其他路徑下安裝的。都一樣,記住安裝位置就行了。

04-2 安裝opencv

因為的自己的opencv之前就安裝過,所以在此沒有同步記錄,推薦一些博客或者大家搜索自行安裝opencv。

Windows下 OpenCV 的下載安裝教程(詳細)_opencv下載-CSDN博客

04-3 安裝boost

boost安裝,首先從官網下載相應文件。(Boost C++ Libraries)

選擇下載,然后將下載的文件解壓到你想要安裝的路徑下:

進入boost_1_83_0文件夾,開始安裝

(1)雙擊bootstrap.bat文件,生成b2.exe;(也可以通過終端命令執行)

(2)接下來應該對b2.exe進行操作,操作之前,請先看這個:

????????

說明:

????????這里通過雙擊b2.exe進行編譯的,默認在stage下生成lib文件夾,里面只包含著靜態庫。
如果想要生成dll動態庫,可./b2 --help查看參數說明,然后需要輸入相應的編譯命令樣式如:

./b2.exe toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug


????????其中

toolset:指定編譯器,可選的如minGW、msvc等。
vs2017 : msvc-14.1,vs2015 : msvc-14.0, linux :gcc

link:生成動態鏈接庫/靜態鏈接庫。生成動態鏈接庫需使用shared方式,生成靜態鏈接庫需使用static方式。一般boost庫可能都是以static方式編譯,因為最終發布程序帶著boost的dll感覺會比較累贅。

runtime-link:動態/靜態鏈接運行時庫。同樣有shared和static兩種方式,標記如何連接C++運行庫,是包含就用靜態,使用系統運行庫就用動態。

threading:單/多線程編譯。一般都寫多線程程序,當然要指定multi方式了;如果需要編寫單線程程序,那么還需要編譯單線程庫,可以使用single方式。

variant:編譯debug/release版本。一般都是程序的debug版本對應庫的debug版本,所以兩個都編譯。

  • 以“lib”開頭的是“link=static”版本(靜態鏈接庫版本,沒有dll),而直接以“boost”開頭的是“link=shared”版本(動態鏈接庫版本,包含lib和dll)。
  • 所有的庫都含有"boost"前綴。
  • 緊隨其后的是boost庫名稱(比如date_time庫)。
  • 然后是編譯器的版本,與庫名稱之間以"-"而不是下劃線"_"分隔(比如 -vc120)。
  • 有“mt”的為“threading=multi”版本,沒有的則是“threading=single”版本。
  • 有“s”的為“runtime-link=static”版本,沒有的則是“runtime-link=shared”版本。
  • 有“gd”的為debug版本,沒有的則是release版本。
  • 所有的庫都含有boost庫的版本號結尾(比如1_56,其中的"."以下劃線"_"代替)
    ?

之所以要說這個,是因為后面要用到boost里面一個很重要的文件libboost_serialization-vc143-mt-s-x64-1_83.lib。 我第一遍生成的時候,是生成“gd”的了,反正我是默認直接生成,他給我生成這個了,后期我死活找不到這個文件,編譯不成功。后來知道這個問題后重新生成了一些就好了,也就是說,我們要生成帶s的。

所以可以直接:

.\b2.exe link=static runtime-link=static

(其他參數沒動)

(3)等待編譯完成,時間不等。結束后會生成bin.v2和stage兩個文件夾,其中bin.v2下是生成的中間文件,大小在2.4G左右,可以直接刪除(看別的博客說的)。stage/lib下是要用的文件。

(4)配置boost環境

通過VS2022創建一個空項目,點擊“項目”,點擊“屬性”,然后:

1)找到“配置屬性/ VC++目錄”,點擊“包含目錄”。在里面添加boost的根目錄。(如我的是:D:\boost\boost_1_83_0)

2)找到“配置屬性/ VC++目錄”,點擊“庫目錄”。在里面添加boost的鏈接庫目錄。(如我的是:D:\boost\boost_1_83_0\stage\lib)

2)找到“配置屬性/鏈接器/常規”,點擊“附加庫目錄”,同上述庫目錄:D:\boost\boost_1_83_0\stage\lib

(要熟悉這種包含目錄啊庫目錄的操作,后面要頻繁用到)

操作完以上,Boost環境應該就配置好了。可以進行測試一下。

(5)測試

測試代碼如下:

#include <iostream>
#include <boost/version.hpp>
#include <boost/config.hpp>using namespace std;
int main()
{cout<<BOOST_VERSION<<endl;cout<<BOOST_LIB_VERSION<<endl;cout<<BOOST_PLATFORM<<endl;cout<<BOOST_COMPILER<<endl;cout<<BOOST_STDLIB<<endl;getchar();return 0;
}

有結果輸出,說明boost部署成功~,因為我這沒啥錯,大家如果有啥錯了先自行解決一下=-=。

04-4 第三方庫的配置

eigen

eigen:線性算術的C++模板庫(屬于g2o的依賴),剛開始我沒有用這套源碼的時候,一個個單獨安裝依靠包,是相當啰嗦麻煩,有了這個源碼的Thirdparty,就方便很多了。這個包放這就行。只要保證后面項目生成的時候有這個路徑即可。

DBoW2

用于SLAM回環檢測,這里需要opencv環境的支持。

(1)在Thirdparty/DBoW2路徑下新建一個build文件夾;

(2)打開Thirdparty/DBoW2/CMakeLists.txt,在里面配置自己安裝opencv的路徑。

原版是這樣式兒的:

然后我給改了一下,把那幾行給刪除了。

就是根據自己的opencv路徑,set(OpenCV_DIR "D:\opencv\opencv3_4\opencv\build"

這個opencv路徑設置也可以通過后面的cmake來設置,但是我覺得這樣方便點。

(3)打開cmake。把cmake上的倆路徑改了(根據自己路徑來)。然后點擊“condigure”,出現done,再點擊“Generate”。出現done。則表示配置成功。

如果出現報錯,大概率就是opencv的路徑問題。

如果成功,會在build文件中看到,DBoW2.sln。

(4)用vs2022打開build/DBoW2.sln

(5)

  • 將配置改成release
  • 右鍵項目==> 屬性 ==> 常規 ==> 配置類型 ==>?靜態庫(.lib)
  • 屬性 ==> 高級 ==> 目標文件擴展名 ==>?.lib
  • C/C++ ==> 代碼生成 ==> 運行庫 ==>?多線程 (/MT)
  • 右鍵項目 ==> 生成,即可看到生成好的lib文件Thirdparty/DBoW2/lib/Release/DBoW2.lib

g2o

g2o用于圖優化的框架

然后熟悉的操作來了:

(1)在Thirdparty/g2o路徑下新建一個build文件夾

(2)打開cmake,把cmake上的倆路徑改了(根據自己路徑來)。然后點擊“condigure”,出現done,再點擊“Generate”。出現done。則表示配置成功。 (這個不用設置opencv路徑)

(3)用vs2022打開build/g2o.sln

(4)

  • 將配置改成release,同時
  • 右鍵項目==> 屬性 ==> 常規 ==> 配置類型 ==>?靜態庫(.lib)
  • 屬性 ==> 高級 ==> 目標文件擴展名 ==>?.lib
  • C/C++ ==> 代碼生成 ==> 運行庫 ==>?多線程 (/MT)
  • C/C++ ==> 預處理器 ==>最上面加入WINDOWS
  • 右鍵項目 ==> 生成,即可看到生成好的lib文件Thirdparty/g2o/build/Release/g2o.lib

Pangolin

用于3D視覺和3D導航的視覺圖和用戶之間的交互。這里其實和編譯ORB_SLAM3沒有關系,但是我們使用ORB_SLAM3庫的時候應用的例子上是需要這個庫的。

(1)在Thirdparty/g2o路徑下新建一個build文件夾

(2)打開cmake,把cmake上的倆路徑改了(根據自己路徑來)。然后點擊“condigure”,出現done,再點擊“Generate”。出現done。則表示配置成功。

(3)用vs2022打開build/Pangolin.sln

(4)

  • 將配置改成release
  • 右鍵項目==> 屬性 ==> 常規 ==> 配置類型 ==>?靜態庫(.lib)
  • 屬性 ==> 高級 ==> 目標文件擴展名 ==>?.lib
  • C/C++ ==> 代碼生成 ==> 運行庫 ==>?多線程 (/MT)
  • 右鍵項目 ==> 生成,即可看到生成好的lib文件ThirdParty/Pangolin/lib/Release/pangolin.lib

至此所有的準備工作完成,開始編譯ORB_SLAM3

05 編譯ORB_SLAM3

(1) 找到orbslam3-windows/CMakeLists.txt文件,配置opencv3.4.11的路徑。

同樣我時在txt文件中直接給,跟上文操作一樣:

(2)在orbslam3-windows的路徑下新建一個build文件夾

(3)打開cmake,把cmake上的倆路徑改了(根據自己路徑來)。然后點擊“condigure”,出現done.

(4)用vs2022打開build/ORB_SLAM3.sln

(5)

  • 將配置改成release;
  • 同時右鍵項目==> 屬性 ==> 常規 ==> 配置類型 ==>?靜態庫(.lib)
  • 屬性 ==> 高級 ==> 目標文件擴展名 ==>?.lib
  • C/C++ ==> 代碼生成 ==> 運行庫 ==>?多線程 (/MT)
  • C/C++ ==> 預處理器 ,添加以下預編譯器定義
    WINDOWS
    COMPILEDWITHC11
  • 右鍵項目 ==> 生成,即可看到生成好的lib文件ORB_SLAM3/build/Release/ORB-SLAM3.lib

這步可能會有一些報錯,大多都是相應的boost包、第三方庫啥的路徑沒設置對,特別是opencv,因為我這個博客中沒有提到對opencv的設置,默認為大家都設置好了,所以在這步相應的包含目錄啊、庫目錄啊都要有相應依賴性的路徑。簡而言之,就是你所編譯的這個ORBSLAM3的項目,里面設置路徑的地方要把上面的依賴包都包含進去。

06?展示案例

我是測試的單目方案,大家根據自己的需要來。

在orbslam3-windows\Examples文件中包含單目、雙目、RGB項目等。

1、下載數據集

(1)下載數據集,我是用的The EuRoC MAV Dataset數據集,地址如下,我下載了MH_01_easy。

kmavvisualinertialdatasets – ASL Datasets

下載后我是放到Examples\Monocular文件夾中,解壓。

2、編譯案例Monocular

  • 用vs2019打開build/ORB_SLAM3.sln
  • 將配置改成release
  • 同時右鍵項目mono_euroc(如果想編譯其他案例就選擇自己需要的) ==> 屬性 ==> C/C++ ==> 代碼生成 ==> 運行庫 ==>?多線程 (/MT)
  • C/C++ ==> 預處理器 ,添加以下預編譯器定義COMPILEDWITHC11
  • 鏈接器 ==> 高級 ==> 導入庫,改為
  • 鏈接器 ==> 輸入 ==> 去掉..\Thirdparty\boost_1_67_0\lib64-msvc-14.1\libboost_serialization-vc141-mt-s-x64-1_67.lib,改為自己路徑下的lib,此處我的為:D:\boost\boost_1_83_0\stage\lib\libboost_serialization-vc143-mt-s-x64-1_83.lib
  • 右鍵項目 ==> 生成,即可看到生成好的exe文件orbslam3-windows\Examples\Monocular\Release\mono_euroc.exe

如果有exe文件生成,說明案例編譯成功了。

3、運行案例Monocular

指令用法

Usage: ./mono_euroc path_to_vocabulary path_to_settings path_to_sequence_folder_1 path_to_times_file_1 (path_to_image_folder_2 path_to_times_file_2 ... path_to_image_folder_N path_to_times_file_N) (trajectory_file_name)

分析一下:

./mono_euroc

path_to_vocabulary?# 字典文件

path_to_settings??# 參數設置文件

path_to_sequence_folder_1?# 影像序列文件夾路徑

path_to_times_file_1?# 對應的時間戳文件

trajectory_file_name

我在orbslam3-windows目錄下運行:

 .\Examples\Monocular\Release\mono_euroc.exe Vocabulary\ORBvoc.txt Examples\Monocular\EuRoC.yaml Examples\Monocular\MH_01_easy Examples\Monocular\EuRoC_TimeStamps\MH01.txt dataset-MH01_monocular

不管寫絕對路徑還是相對路徑,只要寫對了就行。

最后!運行成功!!!

哈哈部署成功還是很開心的~

祝大家順利~~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160387.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160387.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160387.shtml

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

相關文章

【python基礎(三)】操作列表:for循環、正確縮進、切片的使用、元組

文章目錄 一. 遍歷整個列表1. 在for循環中執行更多操作2. 在for循環結束后執行一些操作 二. 避免縮進錯誤三. 創建數值列表1. 使用函數range()2. 使用range()創建數字列表3. 指定步長。4. 對數字列表執行簡單的統計計算5. 列表解析 五. 使用列表的一部分-切片1. 切片2. 遍歷切片…

【并發編程】ThreadLocal詳解與原理

&#x1f4eb;作者簡介&#xff1a;小明Java問道之路&#xff0c;2022年度博客之星全國TOP3&#xff0c;專注于后端、中間件、計算機底層、架構設計演進與穩定性建設優化&#xff0c;文章內容兼具廣度、深度、大廠技術方案&#xff0c;對待技術喜歡推理加驗證&#xff0c;就職于…

【電路筆記】-電流源

電流源 文章目錄 電流源1、概述1.1 理想電流源1.2 實際電流源1.3 連接規則 2、依賴電流2.1 壓控電流源2.2 電流控制電流源 3、總結 本文為前面文章 電壓源的延續&#xff0c;我們將在本文介紹電流源。 與電壓源的情況類似&#xff0c;我們將首先介紹理想電流源的概念&#xff…

MySQL 8.2 Command Line Client打開時一閃而過閃退問題

MySQL8.2安裝成功后&#xff0c;發現打開MySQL 8.0 Command Line Client時出現一閃而過&#xff0c;打不開的情況。 解決方案&#xff1a; 1、打開MySQL 8.2 Command Line Client文件位置 2、右鍵選擇屬性 3、復制它的目標 4、我復制下來的目標路徑是這樣的&#xff0c;"…

關于 Docker

關于 Docker 1. 術語Docker Enginedockerd&#xff08;Docker daemon&#xff09;containerdOCI (Open Container Initiative)runcDocker shimCRI (Container Runtime Interface)CRI-O 2. 容器啟動過程在 Linux 中的實現daemon 的作用 Docker 是個劃時代的開源項目&#xff0c;…

[計算機網絡實驗]頭歌 實驗二 以太網幀、IP報文分析(含部分分析)

目錄 第1關&#xff1a;Wireshark基本使用入門 【實驗目的】 【實驗環境】 【本地主機、平臺虛擬機之間數據傳遞】 wireshark基本用法】 1、wireshark主界面 2、抓取分組操作 3、Wireshark窗口功能 4、篩選分組操作 【實驗操作】 ?編輯 第2關&#xff1a;Ethernet幀…

編程語言發展史:C++語言的發展和應用

預計更新 第一部分&#xff1a;早期編程語言 1.1布爾代數和機器語言 1.2匯編語言的出現和發展 1.3高級語言的興起 第二部分&#xff1a;主流編程語言 1.1 C語言的誕生及其影響 1.2 C語言的發展和應用 1.3 Java語言的出現和發展 1.4 Python語言的興起和特點 1.5 JavaScript語言…

基于Towers of Binary Fields的succinct arguments

1. 引言 Ulvetanna團隊Benjamin E. Diamond和Jim Posen 2023年論文《Succinct Arguments over Towers of Binary Fields》&#xff0c;開源代碼見&#xff1a; https://github.com/recmo/binius&#xff08;Rust Sage&#xff09;【基于plonky3等庫】 在該論文中&#xff1…

Apache POI簡介

三十二、Apache POI 32.1 介紹 Apache POI 是一個處理Miscrosoft Office各種文件格式的開源項目。簡單來說就是&#xff0c;我們可以使用POI在Java程序中對Miscrosoft Office各種文件進行讀寫操作。 一般情況下&#xff0c;POI都是用于操作Excel文件。 Apache POI 的應用場…

基于區域劃分的GaN HEMT 準物理大信號模型

GaN HEMT器件的大信號等效電路模型分為經驗基模型和物理基模型。經驗基模型具有較高精度但參數提取困難&#xff0c;特別在GaN HEMT器件工藝不穩定的情況下不易應用。相比之下&#xff0c;物理基模型從器件工作機理出發&#xff0c;參數提取相對方便&#xff0c;且更容易更新和…

火山引擎 ByteHouse 的增強型數據導入技術實踐

作為企業數字化建設的必備要素&#xff0c;易用的數據引擎能幫助企業提升數據使用效率&#xff0c;更好提升數據應用價值&#xff0c;夯實數字化建設基礎。 數據導入是衡量OLAP引擎性能及易用性的重要標準之一&#xff0c;高效的數據導入能力能夠加速數據實時處理和分析的效率。…

Sa-Token 整合Java17和SpringBoot

目錄 前言引入項目開啟登錄認證路由攔截鑒權解決兼容問題總結 前言 之前無意中發現Sa-Token權限認證框架&#xff0c;項目十分好用。 項目地址&#xff1a; https://github.com/dromara/sa-token 官網地址&#xff1a; https://sa-token.cc/doc.html#/start/example 我的個人…

如何輕松應對企業網絡管理挑戰,釋放網絡靈活性

企業在日常經營中&#xff0c;越來越依賴于云應用程序&#xff0c;分散的團隊和統一通信。這些變化使得保持網絡連接性不僅是必要的&#xff0c;而且對任務的成功完成至關重要。 傳統的廣域網&#xff08;WAN&#xff09;并不總能適應這些挑戰&#xff0c;因為它們往往無法提供…

不停的挖掘硬盤的最大潛能

從 NAS 上退休的硬盤被用在了監控的存儲上了。 隨著硬盤使用壽命的接近尾聲&#xff0c;感覺就是從高附加值數據到低附加值數據上。監控數據只會保留那么幾個月的時間&#xff0c;很多時候都會被覆蓋重新寫入。 有人問為什么監控數據不保留幾年的&#xff0c;那是因為監控數據…

java_函數式接口

文章目錄 一、什么是函數式接口二、四大核心函數式接口三、使用舉例 一、什么是函數式接口 如果一個接口只有一個抽象方法&#xff0c;那么該接口就是一個函數式接口函數式接口的實例可以通過 lambda 表達式、方法引用或者構造方法引用來創建如果我們在某個接口上聲明了 Funct…

【Unity入門】鼠標輸入和鍵盤輸入

Unity的Input類提供了許多監聽用戶輸入的方法&#xff0c;比如我們常見的鼠標&#xff0c;鍵盤&#xff0c;手柄等。我們可以用Input類的接口來獲取用戶的輸入信息 一、監聽鼠標輸入 GetMouseButtonUp 、GetMouseButtonDown、GetMouseButton input.GetMouseButtonDown和 inp…

從mysql源碼編譯出相應的庫和可執行文件及搭建mysql服務端

目錄 1. 問題的提出 2. 源碼下載 3. 升級或安裝某些前置軟件 3.1. 升級CMake 3.2. 升級gcc、g 4. 安裝依賴庫 4.1. 安裝OpenSSL 4.2. 安裝Curses 4.3. 安裝pkg-config 5. 編譯、安裝 6. 編譯結果、配置 7. 編譯錯誤處理 7.1. 錯誤1 7.2. 錯誤2 8. 搭建mysql數…

VMware三種網絡模式

橋接模式 NAT(網絡地址轉換模式) Host-Only(僅主機模式) 參考&#xff1a; vmware虛擬機三種網絡模式 - 知乎 (zhihu.com)

【中國平安社招校招】【內推】【當天內推】

中國平安社招校招內推 通過內推鏈接即時內推&#xff0c;反饋速度比正常要快(可私信問進度) 開放大量HC(不限崗位和地區,技術、設計、產品、運營、數據等都可內推) Step1&#xff1a;查看相關職位 瀏覽平安的招聘官網&#xff1a;復制以下地址至瀏覽器打開。注意以下鏈接包含…

一篇文章搞懂WPF動畫的使用技巧

WPF 動畫系統提供了豐富的功能&#xff0c;用于為 UI 元素創建流暢的動態效果。動畫可以應用于任何可用于渲染的屬性&#xff0c;比如位置、顏色、大小等。在 WPF 中&#xff0c;動畫是通過更改隨時間變化的屬性來實現的。 WPF動畫基本用法 例如實現如下的動畫效果&#xff1…