RGBD-PL-SLAM項(xiàng)目配置

RGBD-PL-SLAM項(xiàng)目配置

編譯環(huán)境 VS2017 + CMake3.20.2 + win10 20H2 + Windows SDK8.1

1. 目前遇到的問題

  1. 為什么要編譯這些庫
  2. 編譯庫以后有什么作用
  3. 我如何創(chuàng)建一個需要編譯的庫

2. 編譯相關(guān)庫

下載源代碼 -> 新建source、build、install文件夾-> 源代碼拷進(jìn)source里 -> 使用Cmake + VS2017進(jìn)行編譯


文件夾結(jié)構(gòu)

2.1 OpenCV-3.4.9

點(diǎn)擊Configure后的編譯選項(xiàng)

都選擇x64的進(jìn)行編譯

編譯的幾個步驟

2.1.1 缺少Window SDK 8.1

上來就遇到一個問題,那就裝唄

D:\DevelopTool\Visual Studio\2017\IDE\Common7\IDE\VC\VCTargets\Microsoft.Cpp.WindowsSDK.targets(46,5): error MSB8036: 找不到 Windows SDK 版本8.1。請安裝所需的版本的 Windows SDK 或者在項(xiàng)目屬性頁中或通過右鍵單擊解決方案并選擇“重定解決方案目標(biāo)”來更改 SDK 版本。

在VS installer里安裝對應(yīng)版本的Window SDK版本

2.1.2 ffmepg

FFMPEG: Download: opencv_ffmpeg.dll
FFMPEG: Download: opencv_ffmpeg_64.dll
FFMPEG: Download: ffmpeg_version.cmake

這幾個要提前下載好,下載起來比較慢,或者翻下墻

2.1.3 配置選項(xiàng)

在配置選項(xiàng)里找到它要配置Eigen_3_3_9 VTK 那就先去配置那些庫

下面這堆配置完以后再回來編譯基本ok了

配置VTK,Eigen3,QT,OPENNI等庫 開始編譯等報錯

結(jié)果就全部成功了 還挺開心的把

2.1.4 配置額外庫

OpenCV3.4.1+opencv_contrib編譯:windows 10_ezhchai的博客-CSDN博客

配置完成后發(fā)現(xiàn)有沖突庫,需要刪除

編譯的時候發(fā)現(xiàn)某些庫編譯不出來 修改一下試試

49>LINK : fatal error LNK1104: 無法打開文件“..\..\lib\Debug\opencv_quality349_d.lib”
88>LINK : fatal error LNK1104: 無法打開文件“..\..\lib\Debug\opencv_ximgproc349_d.lib”
92>LINK : fatal error LNK1104: 無法打開文件“..\..\lib\Debug\opencv_xfeatures2d349_d.lib”
96>LINK : fatal error LNK1104: 無法打開文件“..\..\lib\Debug\opencv_stereo349_d.lib”
114>LINK : fatal error LNK1104: 無法打開文件“..\..\lib\Debug\opencv_mcc349_d.lib”

感覺是庫沖突了,于是把所有模塊都刪了 除了line_descriptor,這個后面要用

然后貌似編譯成功了

還出現(xiàn)個問題 留個網(wǎng)址VS2017的怪問題--錯誤: 未能完成操作。未指定的錯誤_tanmx219的博客-CSDN博客

2.2 Eigen_3_3_9

Eigen是一個高層次的C ++庫,有效支持線性代數(shù),矩陣和矢量運(yùn)算,數(shù)值分析及其相關(guān)的算法。Eigen是一個開源庫,從3.1.1版本開始遵從MPL2許可。

2.2.1 依賴Eigen適用范圍廣,支持包括固定大小、任意大小的所有矩陣操作,甚至是稀疏矩陣;支持所有標(biāo)準(zhǔn)的數(shù)值類型,并且可以擴(kuò)展為自定義的數(shù)值類型;支持多種矩陣分解及其幾何特征的求解;它不支持的模塊生態(tài)系統(tǒng),提供了許多專門的功能,如非線性優(yōu)化,矩陣功能,多項(xiàng)式解算器,快速傅立葉變換等。
Eigen支持多種編譯環(huán)境,開發(fā)人員對庫中的實(shí)例在多種編譯環(huán)境下經(jīng)過測試,以保證其在不同編譯環(huán)境下的可靠性和實(shí)用性

貌似目前只有這倆

  1. Boost
  2. QT

2.2.2 常規(guī)操作

這一行要換成install文件夾,配置好以后再點(diǎn)一下Configure 紅的就白了

然后點(diǎn)Generate生成項(xiàng)目文件

在build目錄下雙擊Eigen3.sln,進(jìn)入解決方案后選擇Debug和Release生成解決方案

這里發(fā)現(xiàn)忘記設(shè)置debug_prefix了,回去cmake設(shè)置一下,這里的選項(xiàng)可能沒用 但是還是設(shè)置一下


添加新條目
image-20210529153229588.png

然后重新Generate一下

2.2.3 生成解決方案

解決方案不在設(shè)置的目錄下生成文件?一看沒有install項(xiàng)目

右鍵生成這個項(xiàng)目

然后就好了,搞下一個

2.3 Boost

Boost C++ 庫(Libraries)是一組擴(kuò)展C++功能的經(jīng)過同行評審(Peer-reviewed)且開放源碼程序庫。大多數(shù)的函數(shù)為了能夠以開放源碼、封閉項(xiàng)目的方式運(yùn)作,而許可于Boost軟件許可協(xié)議(Boost Software License)之下。許多Boost的開發(fā)人員是來自C++標(biāo)準(zhǔn)委員會,而部分的Boost庫成為C++的TR1標(biāo)準(zhǔn)之一。

使用這個軟件打開命令行,進(jìn)入當(dāng)前目錄

image-20210529162327079.png
b2 install --toolset=msvc-14.1 --without-python link=static runtime-link=shared runtime-link=static threading=multi debug release address-model=64

然后就好了 自動生成在C:/Boost文件夾下,路徑不改了 lib中是靜態(tài)庫,include中是頭文件

2.4 flann

FLANN (Fast Approximate Nearest Neighbor Search Library)快速最近鄰逼近搜索函數(shù)庫。即實(shí)現(xiàn)快速高效匹配。

老操作 選擇source、build,修改install目錄,修改CMAKE_DEBUG_POSTFIX

生成解決方案 生成ALL_BUILD的debug和release,然后生成INSTALL的

image-20210529163034938.png

2.5 VTK

VTK是非常優(yōu)秀的開源系統(tǒng),專門用于三維計(jì)算機(jī)圖像處理和可視化任務(wù)。

這個庫比較難搞,等下看運(yùn)氣,這個弄完再搞個PCL就好了

老操作 選擇source、build,修改install目錄,修改CMAKE_DEBUG_POSTFIX

image-20210529163814433.png

把QT勾上 路徑

 D:/DevelopTool/Tools/QT/5.12.10/msvc2017_64/lib/cmake/Qt5

多點(diǎn)幾次Configure 讓紅的變白

這編譯至少得半小時吧... 等著好了

2.6 PCL

PCL(Point Cloud Library)是在吸收了前人點(diǎn)云相關(guān)研究基礎(chǔ)上建立起來的大型跨平臺開源C++編程庫,它實(shí)現(xiàn)了大量點(diǎn)云相關(guān)的通用算法和高效數(shù)據(jù)結(jié)構(gòu),涉及到點(diǎn)云獲取、濾波、分割、配準(zhǔn)、檢索、特征提取、識別、追蹤、曲面重建、可視化等。支持多種操作系統(tǒng)平臺,可在Windows、Linux、Android、Mac OS X、部分嵌入式實(shí)時系統(tǒng)上運(yùn)行。如果說OpenCV是2D信息獲取與處理的結(jié)晶,那么PCL就在3D信息獲取與處理上具有同等地位,PCL是BSD授權(quán)方式,可以免費(fèi)進(jìn)行商業(yè)和學(xué)術(shù)應(yīng)用。

上面弄的這些基本都是給PCL準(zhǔn)備的,開搞

老操作 選擇source、build,修改install目錄,修改CMAKE_DEBUG_POSTFIX

2.6.1 配置FLANN

選擇對應(yīng)的目錄

2.6.2 配置VTK

D:\DevelopTool\CPP_LIB\install\VTK_8_2_0\lib\cmake\vtk-8.2

和上面一樣,選擇有XXXConfig.cmake的路徑即可

2.6.3 配置EIGEN

CMake Error at cmake/Modules/FindEigen.cmake:24 (file):
  file failed to open for reading (No such file or directory):

    D:/SDK/CPP_LIB/install/eigen-3.3.9/include/eigen3/Eigen/src/Core/util/Macros.h
Call Stack (most recent call first):
  CMakeLists.txt:301 (find_package)

提示找不到文件,我一看就是路徑不對,不知道是哪個地方生成的,得改一下

找一下FindEigen.cmake 發(fā)現(xiàn)居然在PCL的source中的cmake里,這可有點(diǎn)呆,現(xiàn)在先改一下吧

set(EIGEN_INCLUDE_DIR "D:/DevelopTool/CPP_LIB/install/eigen_3_3_9/include/eigen3")

然后過了

2.6.4 配置Boost

應(yīng)該和上面一個問題,find文件里路徑不對

新建條目Boost_ROOT 類型Path 內(nèi)容C:/Boost

2.6.5 編譯項(xiàng)目

和VTK差不多慢,還卡我電腦

先等著,看報不報錯,大概率會因?yàn)闆]引用庫報錯

生成Debug

10>已完成生成項(xiàng)目“pcl_kdtree.vcxproj”的操作 - 失敗。
90>已完成生成項(xiàng)目“pcl_registration.vcxproj”的操作 - 失敗。
91>已完成生成項(xiàng)目“pcl_segmentation.vcxproj”的操作 - 失敗。

都是缺flann,調(diào)整一下這三個項(xiàng)目的配置

右鍵項(xiàng)目 屬性 鏈接器 輸入 添加 幾個lib

D:\DevelopTool\CPP_LIB\install\flann_1_9_1\lib\flann_d.lib
D:\DevelopTool\CPP_LIB\install\flann_1_9_1\lib\flann_s_d.lib
D:\DevelopTool\CPP_LIB\install\flann_1_9_1\lib\flann_cpp_s_d.lib

生成Release

11>kdtree_flann.obj : error LNK2001: 無法解析的外部符號 LZ4_resetStreamHC
11>kdtree_flann.obj : error LNK2001: 無法解析的外部符號 LZ4_setStreamDecode
11>kdtree_flann.obj : error LNK2001: 無法解析的外部符號 LZ4_decompress_safe_continue
11>kdtree_flann.obj : error LNK2001: 無法解析的外部符號 LZ4_decompress_safe
11>kdtree_flann.obj : error LNK2001: 無法解析的外部符號 LZ4_compress_HC_continue
11>D:\DevelopTool\CPP_LIB\build\PCL_1_10_0\bin\pcl_kdtree.dll : fatal error LNK1120: 5 個無法解析的外部命令

92>gicp6d.obj : error LNK2001: 無法解析的外部符號 LZ4_resetStreamHC
92>gicp6d.obj : error LNK2001: 無法解析的外部符號 LZ4_setStreamDecode
92>gicp6d.obj : error LNK2001: 無法解析的外部符號 LZ4_decompress_safe_continue
92>gicp6d.obj : error LNK2001: 無法解析的外部符號 LZ4_decompress_safe
92>gicp6d.obj : error LNK2001: 無法解析的外部符號 LZ4_compress_HC_continue
92>D:\DevelopTool\CPP_LIB\build\PCL_1_10_0\bin\pcl_registration.dll : fatal error LNK1120: 5 個無法解析的外部命令

93>unary_classifier.obj : error LNK2001: 無法解析的外部符號 LZ4_resetStreamHC
93>unary_classifier.obj : error LNK2001: 無法解析的外部符號 LZ4_setStreamDecode
93>unary_classifier.obj : error LNK2001: 無法解析的外部符號 LZ4_decompress_safe_continue
93>unary_classifier.obj : error LNK2001: 無法解析的外部符號 LZ4_decompress_safe
93>unary_classifier.obj : error LNK2001: 無法解析的外部符號 LZ4_compress_HC_continue
93>D:\DevelopTool\CPP_LIB\build\PCL_1_10_0\bin\pcl_segmentation.dll : fatal error LNK1120: 5 個無法解析的外部命令

和上面一樣 加上flann_s.lib等lib在鏈接器里就好了

D:\DevelopTool\CPP_LIB\install\flann_1_9_1\lib\flann.lib
D:\DevelopTool\CPP_LIB\install\flann_1_9_1\lib\flann_s.lib
D:\DevelopTool\CPP_LIB\install\flann_1_9_1\lib\flann_cpp_s.lib

2.7 Pangolin

Pangolin是對OpenGL進(jìn)行封裝的輕量級的OpenGL輸入/輸出和視頻顯示的庫。可以用于3D視覺和3D導(dǎo)航的視覺圖,可以輸入各種類型的視頻、并且可以保留視頻和輸入數(shù)據(jù)用于debug。

它要從git 下載源碼進(jìn)行編譯?

Building Custom Rule D:/DevelopTool/CPP_LIB/source/Pangolin/external/CMakeLists.txt
Performing download step (git clone) for '__glew'
Cloning into '__glew'...

失敗了 我一看它要依賴Python? 能不能不依賴的

8>已完成生成項(xiàng)目“SimpleDisplayImage.vcxproj”的操作 - 失敗。
13>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
13>已完成生成項(xiàng)目“SimpleVideo.vcxproj”的操作 - 失敗。
11>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
11>已完成生成項(xiàng)目“SimpleRecord.vcxproj”的操作 - 失敗。
9>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
9>已完成生成項(xiàng)目“SimpleMultiDisplay.vcxproj”的操作 - 失敗。
10>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
10>已完成生成項(xiàng)目“SimplePlot.vcxproj”的操作 - 失敗。
7>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
7>已完成生成項(xiàng)目“SimpleDisplay.vcxproj”的操作 - 失敗。
12>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
12>已完成生成項(xiàng)目“SimpleRepeatVideo.vcxproj”的操作 - 失敗。
6>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
6>已完成生成項(xiàng)目“HelloPangolin.vcxproj”的操作 - 失敗。
14>LINK : fatal error LNK1104: 無法打開文件“python38_d.lib”
14>已完成生成項(xiàng)目“VideoViewer.vcxproj”的操作 - 失敗。

還是依賴一下 python更改 添加debug(網(wǎng)上找的圖)

img

然后還有1失敗??

1>The stash entry is kept in case you need it again.
1>CMake Error at D:/DevelopTool/CPP_LIB/build/Pangolin/external/zlib/tmp/__zlib-gitupdate.cmake:264 (message):
1>
1>
1>  Failed to unstash changes in:
1>  'D:/DevelopTool/CPP_LIB/build/Pangolin/external/zlib/src/__zlib'.
1>
1>  You will have to resolve the conflicts manually
1>
1>
1>已完成生成項(xiàng)目“__zlib.vcxproj”的操作 - 失敗。

這個異常,是指你在本地git pull拉取了代碼后,你stash起來的代碼和你git pull下來的代碼有沖突,因?yàn)橛袥_突,stash的代碼在git pop之后會保留一份備用,防止后續(xù)還需要到stash的代碼。

先暫時不管了把 到時候看有沒有影響

2.8 Qhull

Qhull(http://www.qhull.org/)是一個強(qiáng)大的計(jì)算幾何庫,可以用于計(jì)算高維的convex hull, Delaunay triangulation, Voronoi diagram等

下載 和上面一樣操作一下就好了

3. 修改項(xiàng)目

3.1 下載源碼

RGBD的PL-SLAM項(xiàng)目

https://github.com/maxee1900/RGBD-PL-SLAM

原版的PL-SLAM項(xiàng)目

https://github.com/HarborC/PL-SLAM

3.2 CMAKE

沒啥問題,就還是用GUI生成一下

3.3 構(gòu)建工程

首先要把原版的PL-SLAM項(xiàng)目中,src文件夾復(fù)制到RGBD的項(xiàng)目里,并把里面文件的名字改成.cpp

3.2.1 提示 -Wno-deprecated-declarations 不存在

在CmakeList里把這個去掉就可以編譯了

3.2.2 opencv缺文件

  1. 無法打開包括文件: “opencv2/line_descriptor/descriptor.hpp”: No such file or directory

    需要在OpenCV中包含opencv_contrib這個庫,不然沒有這個東西。

  2. 無法打開包括文件: “unistd.h”: No such file or directory

    Python 安裝zbar-py時出現(xiàn) 無法打開包括文件: “unistd.h” no such file or directory - 何大衛(wèi) - 博客園 (cnblogs.com)

    把unistd.h 替換成io.h 即可

3.2.3 項(xiàng)目缺一些引用

3>d:\project\slam\source\rgbd-pl-slam\include\auxiliar.h(19): fatal error C1083: 無法打開包括文件: “eigen3/Eigen/Core”: No such file or directory

右鍵項(xiàng)目 屬性 VC++目錄 包含目錄

添加 D:\DevelopTool\CPP_LIB\install\eigen_3_3_9\include

4. 項(xiàng)目報錯

先保存一下然后一個個改吧

網(wǎng)上說可能是編碼問題 拉莫改一下編碼試試看

4.1 error C2872: “ACCESS_MASK”: 不明確的符號

修改方法 把所有using namespace cv都刪掉 然后把使用cv的加上cv::

因?yàn)閏v和windows里都有這個ACCESS_MASK

4.2 error C2039: “mnId”: 不是“ORB_SLAM2::KeyFrame”的成員

我懷疑這也是編碼問題 先去修改下試試

把編碼換成UTF-8-BOM 回車換成CRLF

4.3 System.cpp里定義的方法和System.h不一樣

這回又得找下cpp了

發(fā)現(xiàn)是項(xiàng)目文件不匹配 卒

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容