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了

发现是项目文件不匹配 卒

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。