“一起做”系列完结后,我收到不少同学给我的反馈。他们提了一些在程序编译/运行过程中的问题。我把它们汇总起来,组成了这个“补充篇”。你也可以看成是一个Q&A。
- Q: OpenCV的版本?
A: 我用的是2.4.9。可以使用2.4系列,不会有太大差别。而3.0系列则在接口上有一些明显的改动,可能需要修改源码。 - Q: 第二讲的点云如何查看?
A: 使用pcl_viewer。当点云显示时,先用r键复位视角,再用鼠标调整。 - Q: 如何调试代码?
A: 可以在源程序里用cout, cerr输出,善用linux的管道与IO流即可调试。如需断点,可用gdb, ddd等工具(虽然我不怎么用)。
此外,6,7两讲使用g2o,编译过程可能对新手来说有些困难。以下是来自吴思颖同学的反馈——感谢他力图使他的写作风格与我相似:
大家好,我是小萝卜,在跟随高帮主《一起做RGBD-SLAM》的道路上,步步坎坷,终于把帮主博客里的内容跑了个差不多,林林总总,各种问题,在诸位同学的帮助下,虽然还不知其所以然,也算是解决了,下面把这些过程记录下来,希望同学们能够在《一起做》的道路上,少走弯路~
在《一起做》的过程中,主要遇到以下三个问题,我把各个问题的病症以及我认为的可能的原因以及最终的解决方法都记录下来,大家慢慢看(需要说明的是,我是linux新手,很多的基本操作都不熟悉,因此大家可能会看到一些很奇葩的解决方法,见笑啦,进步嘛,总是不那么一帆风顺,折腾,就是折腾!)~
(一)《一起做》系列的(6)、(7)两篇源程序在编译时通不过,错误如下图
该问题的具体原因不明,大家揣测是库冲突,出现在使用从帮主博客《一起做6》里给出的g2o的地址下载的g2o源代码进行编译安装时,解决的方法是,使用帮主在qq讨论群里给出的g2o的压缩包进行编译安装。这个版本的g2o源代码,估计帮主会放在自己的github里,与《一起做》系列的源代码打包在一起供各位小萝卜们下载学习。(我已经更新了我的git)。
(二)问题(一)的衍生问题,出现问题(一)并按照上述问题解决方案进行解决后出现运行g2o_viewer时的core dumped(或者cannot open library: libg2o_solver_eigen.so)问题,猜测原因是之前编译安装的g2o的相关共享库没有清除干净,解决方法为:(1)删除/usr/local/include/g2o,指令为sudo rm -rf /usr/local/include/g2o;(2)删除/usr/local/lib下有关libg2o_*.so的库文件,先进入目录cd /usr/local/lib,然后挨个(可多个同时)删除sudo rm -rf libg2o_*.so libg2o_*.so libg2o_*.so(我一个一个删的我会说……)
(三)这个是和编译安装新源代码相关的问题,还是和g2o有关,具体是我的系统是12.04的,昨天手滑点了更新,结果导致pcl_viewer 使用不了了,而且看提示好像很多pcl相关的库都出现了问题,于是,我重装了系统,然后再把相关的软件都安装后,g2o_viewer运行不了了,问题是error while loading shared libraries: libg2o_viewer.so: cannot open shared object file: No such file or directory, 经帮主指点,发现问题的原因是在默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通过源码包进行安装时,如果不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加 /usr/local/lib这个目录。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。网络上的解决方法是在/etc/ld.so.conf里添加绝对路径/usr/local/lib,作为一个新手,我实在不知道怎么样添加进去,用gedit编辑之后,不能保存,用echo /usr/local/lib >> /etc/ld.so.conf没反应,于是我就采用了奇葩方法:用gedit打开/etc/ld.so.conf,然后添加/usr/local/lib ,再把这个文件保存到home,然后sudo cp -i ld.so.conf /etc/ld.so.conf,之后,执行ldconfig(这一步是必须的,目的是利用ldconfig执行文件将 /etc/ld.so.conf的数据读入高速缓存中),再次运行g2o_viewer result_after.g2o(跑通《一起做7》,在data文件夹下生成的),成功!
致谢:感谢博主&帮主&群主:半闲居士&高翔,感谢哈工程的群友邢会明(问题2的解决方案是由邢同学提供的,我们俩遇到的问题都一样,估计小伙伴们也会在《一起做》的时候遇到);
网络资源:linux共享库,以及/etc/ld.so.conf文件的应用(http://blog.csdn.net/oathevil/article/details/13564213)
/etc/ld.so.conf 文件介绍(http://blog.csdn.net/yjkwf/article/details/7545002)
/etc/ld.so.conf和ldconfig, PKG_CONFIG_PATH
(http://blog.csdn.net/allwtg/article/details/5145306)
最后,如果读者朋友在运行此系列代码时遇到困难,请联系我。如果您的问题很典型,我会更新到这一篇中。
祝大家科研顺利!