刚开始学这本书,想先把书上的大小案例都跑一下。
这篇文章记录了中间踩过的各种大小坑,有的是因为版本更新,有的是因为自己真的蠢哈哈。
感谢文中提到的链接博文作者!
同学们有问题可以交流~大家加油鸭
首先说一下我的环境,是Ubuntu16.04+cuda10.0+opencv3.1.0。
大家在遇到问题的时候建议参考相同配置的博主。
我的编译都是直接在命令行完成的,因为感觉比较简单,不太会用cmake的gui哈哈。
在安各种库的时候,不建议直接按照高博的书本来,每一个安之前都认真看官方的安装文档,搜一下网上的安装教程,
因为有些库可能都更新了,不能按照原先的路子走。
按照书本上来的话,大方向是要安装这些库的:
eigen;opencv及其依赖包;sophus;pangolin;g2o;pcl;ceres;DBOW3;gtsam4.0
还有一些小的比如doxygen之类的,在搜对应的库教程的时候都会提醒你安的。
首先是一些基本的。
opencv和cuda参考了教程。
https://www.jianshu.com/p/b1df7df72b6d
opencv依赖包下载地址:
https://github.com/opencv/opencv_contrib/releases/tag/3.4.0
第五讲案例报错:
Could not find a configuration file for package opencv2
The following configuration files were considered but not accepted: /usr/local/share/OpenCV/O
解决:把cmakelist里面的opencv 2 required的2改成3 就可以了
第六讲g2o相关代码运行报错:
error while loading shared libraries: libg2o_core.so: cannot open shared object file: No such file for directory
解决:
http://www.bubuko.com/infodetail-2568605.html
第七讲,特征匹配,代码运行报错:
OpenCV Error: Assertion failed (!outImage.empty()) in drawKeypoints, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/features2d/src/draw.cpp, line 115
terminate called after throwing an instance of 'cv::Exception'
what(): /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/features2d/src/draw.cpp:115: error: (-215) !outImage.empty() in function drawKeypoints
Aborted (core dumped)
解决:把图片放到和可执行程序同一个文件夹下就可以了
可能还会报错:
[ INFO:0] Initialize OpenCL runtime...
X server found. dri2 connection failed!
X server found. dri2 connection failed!
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)
怀疑没有安opencl?但是不管好像也没事。
第八讲运行用于时间上对齐的脚本associate.py时报错:
AttributeError: 'dict_keys' object has no attribute 'remove'
原因是python3和python2的语法不一样了。python3的dict.keys返回的是一个dict_keys对象,不包含remove方法,而python2返回的是list对象。
解决方法:
https://blog.csdn.net/u012796629/article/details/87932936
要注意,python的tab和空格不能混用,并且同一个逻辑块必须采用相同的缩进。associate采用的是space缩进。
安装gtsam的make check步骤时报错:
9/230 Test #9: testWrap ...............................***Failed 0.11 sec
<<< DIFF OUTPUT (if none, white-space differences only):
158c158
< def __str__(self):
---
> def __repr__(self):
>>>
/home/lin/Documents/Main/PostGraduate/SLAM/slambook-master/3rdparty/gtsam/wrap/tests/testWrap.cpp:500: Failure: "files_equal(epath + "geometry.pyx", apath + "geometry.pyx" )"
There were 1 failures
决定不管,直接make,目前没什么影响
第八讲的稀疏直接法运行出来的结果一直是Loop和星号××××
因为没有链接到整个data文件夹,就是深度图和rgb图的上一层,我一直选择了深度图所在的文件夹。
啊啊啊这个错误犯了很多次,超级傻,data文件夹不要写错。
为了查看第10章的结果,下载了meshlab
https://blog.csdn.net/liudahanghang/article/details/81328617
代码运行方法请认真阅读 readme文档。
运行11讲的代码时,make出现错误,并且用g2o_viewer无法查看给定的仿真位姿图,并报错
*** Error in `g2o_viewer': realloc(): invalid pointer: 0x00007eff54332820 ***
参考解决办法(由于qt4和qt5同时存在):
https://blog.csdn.net/sinat_34156619/article/details/86489199
解决后g2o即可正常运行
但是,代码还是报错:
No rule to make target '/home/lin/Documents/Main/PostGraduate/SLAM/slambook-master/3rdparty/Sophus/build/libSophus.so', needed by 'pose_graph_g2o_lie'. Stop.
然后发现,书本上写sophus只需要编译不需要安装,所以当时的步骤就到make为止了,应该再加一步sudo make install 才算顺利编译。虽然没有这一步,第四章的代码是可以运行的。
将11讲的工程编译完成后,sphere.g2o文件放到build目录下,运行pose_graph_g20_SE3 sphere.g2o 即可输出result.g2o文件。
运行12讲的程序:
reading images...
detecting ORB features ...
creating vocabulary ...
vocabulary info: Vocabulary: k = 10, L = 5, Weighting = tf-idf, Scoring = L1-norm, Number of words = 0
done
单词数量显示0??
解决:建完build之后要把data文件夹放进去。
13讲运行点云地图部分代码时,报错
cannot find pose file
一样的,把整个data文件夹放到build下面就可以了
希望能对大家有帮助啦~就是这样~喵