RGBD-PL-SLAM项目配置

RGBD-PL-SLAM项目配置

编译环境 VS2017 + CMake3.20.2 + win10 20H2 + Windows SDK8.1

1. 目前遇到的问题

  1. 为什么要编译这些库
  2. 编译库以后有什么作用
  3. 我如何创建一个需要编译的库

2. 编译相关库

下载源代码 -> 新建source、build、install文件夹-> 源代码拷进source里 -> 使用Cmake + VS2017进行编译


文件夹结构

2.1 OpenCV-3.4.9

点击Configure后的编译选项

都选择x64的进行编译

编译的几个步骤

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 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。

在VS installer里安装对应版本的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 配置选项

在配置选项里找到它要配置Eigen_3_3_9 VTK 那就先去配置那些库

下面这堆配置完以后再回来编译基本ok了

配置VTK,Eigen3,QT,OPENNI等库 开始编译等报错

结果就全部成功了 还挺开心的把

2.1.4 配置额外库

OpenCV3.4.1+opencv_contrib编译:windows 10_ezhchai的博客-CSDN博客

配置完成后发现有冲突库,需要删除

编译的时候发现某些库编译不出来 修改一下试试

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,这个后面要用

然后貌似编译成功了

还出现个问题 留个网址VS2017的怪问题--错误: 未能完成操作。未指定的错误_tanmx219的博客-CSDN博客

2.2 Eigen_3_3_9

Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。

2.2.1 依赖Eigen适用范围广,支持包括固定大小、任意大小的所有矩阵操作,甚至是稀疏矩阵;支持所有标准的数值类型,并且可以扩展为自定义的数值类型;支持多种矩阵分解及其几何特征的求解;它不支持的模块生态系统,提供了许多专门的功能,如非线性优化,矩阵功能,多项式解算器,快速傅立叶变换等。
Eigen支持多种编译环境,开发人员对库中的实例在多种编译环境下经过测试,以保证其在不同编译环境下的可靠性和实用性

貌似目前只有这俩

  1. Boost
  2. QT

2.2.2 常规操作

这一行要换成install文件夹,配置好以后再点一下Configure 红的就白了

然后点Generate生成项目文件

在build目录下双击Eigen3.sln,进入解决方案后选择Debug和Release生成解决方案

这里发现忘记设置debug_prefix了,回去cmake设置一下,这里的选项可能没用 但是还是设置一下


添加新条目
image-20210529153229588.png

然后重新Generate一下

2.2.3 生成解决方案

解决方案不在设置的目录下生成文件?一看没有install项目

右键生成这个项目

然后就好了,搞下一个

2.3 Boost

Boost C++ 库(Libraries)是一组扩展C++功能的经过同行评审(Peer-reviewed)且开放源码程序库。大多数的函数为了能够以开放源码、封闭项目的方式运作,而许可于Boost软件许可协议(Boost Software License)之下。许多Boost的开发人员是来自C++标准委员会,而部分的Boost库成为C++的TR1标准之一。

使用这个软件打开命令行,进入当前目录

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中是静态库,include中是头文件

2.4 flann

FLANN (Fast Approximate Nearest Neighbor Search Library)快速最近邻逼近搜索函数库。即实现快速高效匹配。

老操作 选择source、build,修改install目录,修改CMAKE_DEBUG_POSTFIX

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

image-20210529163034938.png

2.5 VTK

VTK是非常优秀的开源系统,专门用于三维计算机图像处理和可视化任务。

这个库比较难搞,等下看运气,这个弄完再搞个PCL就好了

老操作 选择source、build,修改install目录,修改CMAKE_DEBUG_POSTFIX

image-20210529163814433.png

把QT勾上 路径

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

多点几次Configure 让红的变白

这编译至少得半小时吧... 等着好了

2.6 PCL

PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用。

上面弄的这些基本都是给PCL准备的,开搞

老操作 选择source、build,修改install目录,修改CMAKE_DEBUG_POSTFIX

2.6.1 配置FLANN

选择对应的目录

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 发现居然在PCL的source中的cmake里,这可有点呆,现在先改一下吧

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

然后过了

2.6.4 配置Boost

应该和上面一个问题,find文件里路径不对

新建条目Boost_ROOT 类型Path 内容C:/Boost

2.6.5 编译项目

和VTK差不多慢,还卡我电脑

先等着,看报不报错,大概率会因为没引用库报错

生成Debug

10>已完成生成项目“pcl_kdtree.vcxproj”的操作 - 失败。
90>已完成生成项目“pcl_registration.vcxproj”的操作 - 失败。
91>已完成生成项目“pcl_segmentation.vcxproj”的操作 - 失败。

都是缺flann,调整一下这三个项目的配置

右键项目 属性 链接器 输入 添加 几个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进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。

它要从git 下载源码进行编译?

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

失败了 我一看它要依赖Python? 能不能不依赖的

8>已完成生成项目“SimpleDisplayImage.vcxproj”的操作 - 失败。
13>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
13>已完成生成项目“SimpleVideo.vcxproj”的操作 - 失败。
11>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
11>已完成生成项目“SimpleRecord.vcxproj”的操作 - 失败。
9>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
9>已完成生成项目“SimpleMultiDisplay.vcxproj”的操作 - 失败。
10>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
10>已完成生成项目“SimplePlot.vcxproj”的操作 - 失败。
7>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
7>已完成生成项目“SimpleDisplay.vcxproj”的操作 - 失败。
12>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
12>已完成生成项目“SimpleRepeatVideo.vcxproj”的操作 - 失败。
6>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
6>已完成生成项目“HelloPangolin.vcxproj”的操作 - 失败。
14>LINK : fatal error LNK1104: 无法打开文件“python38_d.lib”
14>已完成生成项目“VideoViewer.vcxproj”的操作 - 失败。

还是依赖一下 python更改 添加debug(网上找的图)

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>已完成生成项目“__zlib.vcxproj”的操作 - 失败。

这个异常,是指你在本地git pull拉取了代码后,你stash起来的代码和你git pull下来的代码有冲突,因为有冲突,stash的代码在git pop之后会保留一份备用,防止后续还需要到stash的代码。

先暂时不管了把 到时候看有没有影响

2.8 Qhull

Qhull(http://www.qhull.org/)是一个强大的计算几何库,可以用于计算高维的convex hull, Delaunay triangulation, Voronoi diagram等

下载 和上面一样操作一下就好了

3. 修改项目

3.1 下载源码

RGBD的PL-SLAM项目

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

原版的PL-SLAM项目

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

3.2 CMAKE

没啥问题,就还是用GUI生成一下

3.3 构建工程

首先要把原版的PL-SLAM项目中,src文件夹复制到RGBD的项目里,并把里面文件的名字改成.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时出现 无法打开包括文件: “unistd.h” no such file or directory - 何大卫 - 博客园 (cnblogs.com)

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

3.2.3 项目缺一些引用

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

右键项目 属性 VC++目录 包含目录

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

4. 项目报错

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

网上说可能是编码问题 拉莫改一下编码试试看

4.1 error C2872: “ACCESS_MASK”: 不明确的符号

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

因为cv和windows里都有这个ACCESS_MASK

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

我怀疑这也是编码问题 先去修改下试试

把编码换成UTF-8-BOM 回车换成CRLF

4.3 System.cpp里定义的方法和System.h不一样

这回又得找下cpp了

发现是项目文件不匹配 卒

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355