高翔视觉SLAM十四讲课本代码运行

刚开始学这本书,想先把书上的大小案例都跑一下。

这篇文章记录了中间踩过的各种大小坑,有的是因为版本更新,有的是因为自己真的蠢哈哈。

感谢文中提到的链接博文作者!

同学们有问题可以交流~大家加油鸭


首先说一下我的环境,是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下面就可以了


希望能对大家有帮助啦~就是这样~喵

你可能感兴趣的:(SLAM)