作者开源的代码地址:https://github.com/rubengooj/pl-slam
我的环境:Ubuntu14.04,cmake3.12
在安装相关库和项目的过程中出现了不少问题,记录在此. 以下整体上按照代码内README.md的安装流程进行,其中由于stvo-pl的编译安装依赖于MRPT,故调整顺序. 且程序运行需要wxWidgets,在MRPT前安装.
注意:
MRPT和stvo-pl解压至pl-slam同级文件夹下,否则需设置一些环境变量来引用两个项目文件的头文件等.
详见:https://blog.csdn.net/Wenyue_Wang/article/details/82223808
库地址:http://opencv.org.
注意PL-SLAM依赖扩展库opencv_contrib,如果只安装了opencv库,需要下载对应版本的扩展库.
方法为:将扩展库解压缩至opencv源码文件夹下,进入编译opencv时建立的build文件夹,打开终端,输入命令
$ cmake -DOPENCV_EXTRA_MODULES_PATH=/home/xxx/opencv/opencv_contrib-3.3.1/modules -DBUILD_opencv_legacy=OFF /home/xxx/opencv
$ make
$ sudo make install
contrib·库的README.md也作出了相应说明:
$ cd <opencv_build_directory>
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>
$ make -j5
由此可见看说明文档README.md的重要性.
注意:
cmake完之后查看终端输出内容,检查是否有问题. 如遇到网络问题导致ippicv和xfeatured模块下载失败(会有提示),请看这篇帖子. 如果跳过这一步会导致必要的模块无法编译安装.
http://eigen.tuxfamily.org
或者上篇帖子.
sudo apt-get install libboost-dev
后边编译某些库或工程时如果遇到如下错误提示:
cmake无法链接boost以下内容:
- boost_regex
- boost_thread
- boost_system
- boost_filesystem
解决方式为:
首先判断文件是否存在:
$ locate boost_system
1) 看到类似于:/usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0
说明文件存在,而编译时未找到,故需要链接库:
$ /usr/lib/x86_64-linux-gnu/
$ ls libboost* //列出含libboost的文件
$ sudo ln -s libboost_system.so.1.54.0 libboost_system.so
2) 没有的需要下载安装
$ sudo apt-get install libboost-filesystem
提示:E: 未发现软件包 libboost-filesystem
$ apt-file search libboost-filesystem //搜索,会出现很多,选择libboost-filesystem-dev即可。
$ sudo apt-get install libboost-filesystem-dev//安装
其他两个依赖项:
apt-file search libboost-regex(sudo apt-get install libboost-regex-dev)
apt-file search libboost-thread(sudo apt-get install libboost-thread-dev)
参考:https://blog.csdn.net/kingmicrosoft/article/details/39377715
参考:帖子.
1)sudo apt-get install libyaml-cpp-dev //一个命令即可
或者
2)下载码包,并安装. 下载地址:https://github.com/jbeder/yaml-cpp
$ cmake -DBUILD_SHARED_LIBS=ON ..
$ make -j12
cmake安装动态库,否则出错. 文件夹下util的CMakeLists.txt要求最小版本3.5,改成了2.8,编译通过. 但建议安装高版本cmake,以防有其它问题. 我最终运行PL-SLAM通过选用的cmake 3.12.
通过以下命令获取:
$ sudo apt-get install libwxgtk2.8-dev
我曾安装GitHub上的3.1.x版,make MRPT的过程中出错:
‘wxFont::wxFont(int, int, int, int, bool, const wxString&, wxFontEncoding)’ is deprecated (declared at /usr/local/include/wx/gtk/font.h:89): use wxFONT{FAMILY,STYLE,WEIGHT}_XXX constants [-Wdeprecated-declarations]
wxFont 11lbXYZsFont(7,wxTELETYPE,wxFONTSTYLE_NORMAL,wxNORMAL,false,wxEmptyString,wxFONTENCODING_DEFAULT);
make[1]: * [apps/ReactiveNavigationDemo/CMakeFiles/ReactiveNavigationDemo.dir/all] Error 2
没找到解决办法,故而卸载重装2.8.
注意1:
如需卸载,在安装目录下执行make uninstall后,要把安装在/usr内的相关文件夹及文件包括链接库删除(sudo rm -rf packagename; or sudo rm -rf packagename
.前者为删除文件夹,后者为文件.) 一般在/usr/local或/usr/lib或/usr/share/. 注意文件所处位置,考虑能否删除,切记不要删除x86内的相关文件.
至于为什么……有效果不出错!对于系统操作,还是新手,不太了解.注意2:
如果安装有提示 ldconfig,输入此命令即可.(具体安装哪个部分有这个提示忘记了,所以如果安装时cmake命令系列需要看下运行结果,了解是否缺少什么、需要做什么.)
选用作者建议的版本,不要用最新版:
https://github.com/MRPT/mrpt/tree/0c3d605c3cbf5f2ffb8137089e43ebdae5a55de3
安装过程参考(标准):
https://www.mrpt.org/Building_and_Installing_Instructions#13_Ubuntu_Debian(感谢博主W_Tortoise提供!)
我的过程:
//安装依赖库,其中有些库如果已经安装,不必重复安装. 如果按照我上篇帖子的OpenCV安装方法,可以发现前几个都安装过了.而且有些库是可选择性安装的,详见上述标准安装过程网址.
$ sudo apt-get install build-essential pkg-config libdc1394-22-dev libjpeg-dev libsuitesparse-dev libftdi-dev freeglut3-dev zlib1g-dev libusb-1.0-0-dev libudev-dev libfreenect-dev libavformat-dev libswscale-dev libassimp-dev libgtest-dev libpcap-dev
//进入MRPT码包
$ mkdir build
$ cd build
$ cmake ..
$ make -j12
$ sudo make install
地址:https://github.com/rubengooj/stvo-pl
解压完后可以发现文件夹内有build.sh文件:
$ ./build.sh
如果无操作权限,修改即可sudo chmod 777 build.sh
.
PS:build.sh内对3rdparty内相关内容进行了操作,生成了相应库文件,如果采用别的方式编译,出现如下错误:
make[2]: * No rule to make target `../3rdparty/line_descriptor/lib/liblinedesc.so’, needed by ../lib/libstvo.so. Stop.
make[2]: * Waiting for unfinished jobs….
即是未进行3rdparty内的操作,没有生成相应库.
Line Descriptor
不用操作.
(更改过 line_descriptor module from the OpenCV/contrib library (both BSD) which is included in the 3rdparty folder.)
PS:
1)下载依赖库出现:
Unable to locate package .
在执行sudo apt-get install之前更换了软件源,但是却忘了update下:
$ sudo apt-get update
2)出错: /usr/bin/ld: cannot find -lxxxx
缺少xxxx动态库,找到该动态库文件拷贝到usr/local/lib
(因为动态库文件xxxx没在默认路径下(如/usr/lib /lib /usr/local/lib).
1)增加了cmake_modules文件夹,内含FindG2O.CMake
2)CMakList.txt:54、67行地址注意是否需要修改(提示缺少.h文件).
3)~/src/slamConfig.cpp内vocabulary_p和vocabulary_l 地址修改.
4)~/config/config/config_kitti.yamlvocabulary_p和vocabulary_l 地址修改.
1) 准备数据集,假设地址为/home/xxx/Desktop/data/kitti/00. 设置环境变量,将数据集地址写入:
$ sudo gedit ~/.bashrc //会打开一个文档,输入完之后保存关闭
$ export DATASETS_DIR=/home/xxx/Desktop/data
$ source ~/.bashrc //必须有这句
同时需要将~/config文件夹内的kitti00-02.yaml复制到/home/xxx/Desktop/data/kitti/00,并修改其名为dataset_params.yaml(读程序plslam_dataset.cpp可知原因.)
如果你的数据集图片文件夹名字有区别,请做相应修改.(灰度图片为image_0和image_1,去kitti00-02.yaml内修改.)
2) 在build文件夹进入终端,编译后,运行程序:
$ ./plslam_dataset kitti/00
PS:
1)如果出现“CMake Error at CMakeLists.txt:10 (find_package):
By not providing “FindEigen3.cmake” in CMAKE_MODULE_PATH”相关错误,可知是找不到Eigen3库.
我的解决方式:注释掉第10行,在48行include_directories部分,添加/usr/include/eigen3,指向eigen3库文件地址.
2)Find G2O出错,找不到库,可以选择手动在mrpt文件夹下增加cmake_modules文件夹,内含FindG2O.CMake.
3)出错:
Linking CXX shared library ../lib/libplslam.so /usr/bin/ld: can not
find -lg2o_ext_csparse
解决:
$ cd /usr/local/lib
$ sudo ln -sv libg2o_csparse_extension.so libg2o_ext_csparse.so
4)运行出错,看错误提示. plslam_dataset.cpp会首先检查数据集地址是否有问题. 地址没问题会读取文件(包括.yaml文件和图片),分别通过PinholeStereoCamera类和Dataset类实现,如果出错,进入stvo-pl内调取相应.cpp文件查看,根据错误提示修改.
数据集地址错误:
- “Invalid vocabulary for points”
- “Invalid vocabulary for lines”
- “Check your DATASETS_DIR environment variable”
- “Invalid dataset path”
读取文件错误:
- “[PinholeSteroCamera] Invalid parameters file”
- “[Dataset] Invalid images subfolder”
- “[Dataset] Invalid image names?”
- ……
- “[Dataset] Left and right images”
内容部分引用相关博文:
[1] https://github.com/rubengooj/pl-slam (作者分享代码地址,可查看issue部分,有作者答疑.)
[2] https://blog.csdn.net/learning_tortosie/article/details/80444190#commentsedit(安装.)
[3] https://blog.csdn.net/xs1102/article/details/80757404 (wxWidgets部分为3.1.x版,我未运行成功.)
[4] https://blog.csdn.net/yanni0616/article/details/81017120 (动静态库.)
[5] https://blog.csdn.net/tust123qht/article/details/79631977 (MRPT依赖项.)
[6] https://stackoverflow.com/questions/42582712/relocation-r-x86-64-32s-against-py-notimplementedstruct-can-not-be-used-when(–enable shared=ON)
[7] https://blog.csdn.net/xiaogugood/article/details/18400669 (unable to locate package.)
[8] https://blog.csdn.net/kingmicrosoft/article/details/39377715 (boost相关文件未下载或未链接.)
再次对分享问题与解决方式的大家表示感谢!