“一起做”系列完结后,我收到不少同学给我的反馈。他们提了一些在程序编译/运行过程中的问题。我把它们汇总起来,组成了这个“补充篇”。你也可以看成是一个Q&A。

  1. Q: OpenCV的版本?
    A: 我用的是2.4.9。可以使用2.4系列,不会有太大差别。而3.0系列则在接口上有一些明显的改动,可能需要修改源码。
  2. Q: 第二讲的点云如何查看?
    A: 使用pcl_viewer。当点云显示时,先用r键复位视角,再用鼠标调整。
  3. 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)

  最后,如果读者朋友在运行此系列代码时遇到困难,请联系我。如果您的问题很典型,我会更新到这一篇中。

  祝大家科研顺利!

2015.9.22 更新

  以下是来自中科院张慧娟同学的反馈:

“一起做系列”问题总结

小萝卜2号 2015/9/22

  大家好,我是小萝卜2号,喜欢看霹雳五号、黑客帝国、人工智能、机器管家、机械公敌、机械姬、终结者……最近,迷上了群主的“一起做”系列,跌跌撞撞,终于把博客里的内容跑了下来,当然长跑中遇到不少问题,多方寻求,得到解答。在此,小萝卜2号把过程记录下来,希望对各位小萝卜N号有所帮助。由于小萝卜2号所懂不多,若有不对的地方,请大家指正,补充,小萝卜2号会不断改进哦。(“一起做8”中已经给出了6和7讲编译程序时遇到的三个问题,我也遇到了,参考8,这里不再赘述。)

  这里以问答形式描述了整个过程,总结了9点。(尝试嘛,总会磕磕绊绊)

Q:用的系统是什么版本?

小萝卜2号:我使用的系统是Ubuntu14.04 for ros(indigo),与群主的Ubuntu12.04不同,是易科机器人社区发布的镜像,网上可下载到。提供一个网址:http://blog.exbot.net/archives/1206 小萝卜2号同时是ros使用者,所以用U盘刻录,然后安装,如有不懂,可到网上搜索具体安装过程。这个镜像对于使用ros 的初学者非常方便,里面装好了集成环境,不必浪费很多时间去配置软件,想用ros又想节省时间的小萝卜N号们可以考虑下。

Q:Ubuntu14.04和Ubuntu 12.04的区别是什么?

小萝卜2号:这里我们要讲下依赖问题。在跑群主程序过程中,我们用到三个库opencv、PCL和g2o,而安装它们一般都需要系统依赖库,因此需要首先安装各种依赖项。系统版本不同,依赖库不同,而我们用到的库是基于某个依赖库开发的,其他版本(如高版本)的依赖库可能不识别,导致无法编译成功。因此,建议安装时参考库的说明文档,有安装要求和步骤,尽量按照说明安装。

Q:OpenCV的版本?

小萝卜2号:我用的是opencv2.4.10,默认安装方式。群主说2.4系列差别不大,而3.0系列则在接口上有一些明显改动,可能需要修改源码。个人觉得,2.4.9和2.4.10没差别,无影响。

Q:PCL 安装问题?

小萝卜2号:我开始用的是Ubuntu12.04,在用命令行安装PCL时,提示找不到依赖项,缺缺缺……于是采用源码安装(参考古月居的博客http://blog.csdn.net/hcx25909/article/details/8651840),装了依赖库,原因未知,还是编译通不过,缺依赖项,缺缺缺……源码安装行不通,果断改装系统,Ubuntu14.04 for ros(indigo),简单又粗暴吧,之后再用三句命令行安装PCL,完全没问题。建议:如果非要用源码安装,每个人电脑配置不同,遇到的问题不同,若实在解决不了,就忍痛割爱,系统重来。

Q:g2o安装问题?

小萝卜2号:对于g2o,最好是用群主github中提供的,一般Ubuntu12.04编译没有问题。我尝试了三种方法,一一解析。(1)不过我的Ubuntu14.04中libQGLViewer有问题,libqglviewer-qt4-dev安装不了,尝试下载debin安装,依然会提示缺少依赖项。(2)所以干脆舍弃g2o的可视化模块g2o_viewer,安装cmake-curses-gui这个包,通过gui来选择想编译的g2o模块, 找到build apps,enter键修改状态为off,make,继续sudo make install,安装相应的lib、头文件、执行文件。缺少显示模块,只是无法用g2o显示图像,不过该有的数据还是都有的。(3)另外,若官网上下载最新g2o,参考安装说明文档,在Ubuntu14.04中编译也能神奇通过,但是在跑“一起做6和7”时,提示错误:core dumped。重启系统,始终不行,原因未知,考虑是库冲突。所以不推荐。

尝试安装libqglviewer-qt4-dev_2.3.4.4_amd64.deb的过程中的错误,大家可以清楚看到n重依赖以及相互冲突:

Q:用PCL的cloudviewer把点云显示出来,为什么会是上下颠倒?

小萝卜2号:关于图像上下翻转问题,是因为opencv定义的坐标系和pcl_viewer显示坐标系不同,opencv是x右y下,而pcl显示是x右y上。解决方法:找到群主程序image2PointCloud函数中,把计算点空间坐标的公式的p.y值添加负号,这样y方向就可以正常显示了,so easy。(或许还有别的方法)

(图片上下翻转)

Q:文件路径问题

小萝卜2号:上面的错误是跑3时的一个提示,是说没有读到数据,没有点云。读取的parameters.txt以及存储的点云数据,最好给出具体的路径。如:/home/document/RGBD_tutorial/part3/code/data/,这样程序才能读取到数据或者保存到正确的文件夹里。

Q:在编译6和7时遇到c++11不兼容的问题?

小萝卜2号:

在确保程序编译通过,而在运行时遇到c++0x_warning.h:32:2 error,我曾尝试在CMakeLists.txt中添加一段代码,然并没卵用,或许有人可以的(可尝试)。参考:http://blog.csdn.net/zyh821351004/article/details/46521319

添加的代码:

多半是因为用的不是群主github上提供的g2o版本,于是g2o重装,程序顺利运行,听着机子跑程序时哗哗的声音,是不是内心无比高兴。

Q: 在cmake时会出现类似的WARNING?

小萝卜2号:注意这个是warning,不是error,不影响编译。原因可能是cmake里的find_package命令把/usr/lib给找出来了,引发了warning。(群主告诉偶滴,直接忽略)

非常感谢群主及各位提供帮助的小伙伴,希望对遇到相似问题的小萝卜N号们有帮助。

-- 我的反馈:

ubuntu 1404下是可以用g2o_viewer的,只要你手动把依赖项配好。一共有三个依赖项,配好之后g2o_viewer照常使用:

一起做RGB-D SLAM(8) (关于调试与补充内容)相关推荐

  1. 【移动端debug-6】如何做一个App里的web调试小工具

    原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...

  2. python255多少钱_CS255留学生作业代做、代写Python语言作业、Timetabling作业代做、Python编程设计作业调试...

    CS255留学生作业代做.代写Python语言作业.Timetabling作业代做.Python编程设计作业调试 日期:2019-11-11 11:08 CS255 Artificial Intell ...

  3. Linux学习笔记-gdb调试的补充说明

    gdb调试的补充说明 程序运行截图如下: 源码如下: #include <stdio.h>void test(int i){if(i==0){return;}printf("Th ...

  4. 滚动代码循环滚动代码如何怎么样做淘宝轮播代码滚动天猫店铺装修自定义内容代码设置

    滚动代码循环滚动代码如何怎么样做淘宝轮播代码滚动天猫店铺装修自定义内容代码设置

  5. 钉钉微应用调试工具mac_如何在电脑上做钉钉微应用的调试

    事情得从前两天说起,公司一个内部应用在钉钉前端做了免登之后身份信息需要在自有的系统上对用户身份在后台二次鉴权.博主很少做微应用和小程序之类的开发,所以常规逻辑就用session去鉴权.再写入sessi ...

  6. SLAM工具|GDB调试从入门到精通

    前言 对于windows平台下,VS下调试简单又方便,那么在linux系统下,该如何进行代码的调试呢? gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能非常强大, ...

  7. 华友高科激光SLAM导航系统整车调试方法(一)

    1.概述 本文档主要讲述,AGV装配完成后,如何进行整车的测试和配置. 2.电气测试 步骤1:电池放电接口拔掉,所有开关闭合,万用表测量供电端的电阻,是否有短路现象,如果有请排查. 步骤2:如果没有异 ...

  8. TTL(RGB)接口液晶显示屏的调试方法

    TTL接口的液晶显示屏一般会使用DE模式驱动它.首先需要CPU带有LCD控制器,能够产生出液晶显示屏所需要的以下几个信号: 1.时钟信号(DOTCLK) 2.行同步信号(HSYNC) 3.场同步信号( ...

  9. 计算机装配调试员培训内容.doc,电子计算机装配调试员理论培训文档.doc

    电子计算机装配调试员理论培训文档 一.综合题 计算机的系统资源划分为哪几类?包括哪些具体内容? 答:计算机系统资源分为硬件资源和软件资源两大类, 硬件资源包括运算器.控制器.存储器和输入设备.输出设备 ...

最新文章

  1. 使用MATLAB实现的小算法练习1
  2. 编译x264 for ios
  3. linux下批量添加新用户
  4. TypeScript里的工具类型Partial的用法
  5. MacBook Air的命令终端如何在root和普通用户之间切换
  6. Java在ACM中的应用
  7. 半波对称振子方向图_画好服装款式图的五个要点
  8. 切图时图片的选择:JPG、PNG、GIF的区别
  9. excel 地级市名单_“excel随机抽取名单“谁有全国行政区划列表(EXCEL版且含省市县乡)?...
  10. java二级大纲_计算机二级Java语言程序设计考试大纲
  11. 亲密接触Redis-第一天
  12. 一个树莓派集群 (VAX)
  13. Python练习——基础练习题1
  14. zigbee加PA信号增强方案:rfx2401+cc2530
  15. 敏捷估算为何使用斐波那契数列(Fibonacci)(
  16. 微信开发-错误码大全
  17. 声音信号希尔伯特黄变换
  18. markdown 编辑器实现双屏同步滚动
  19. 多米机器人教材_祝博士多米机器人首次进入公校课堂, 科技辅助教学培养学生全面发展!...
  20. Android开发实战《智慧北京》——7.项目拓展

热门文章

  1. 中兴ZXV BV310_S905L3_EMMC_当贝线刷固件包
  2. 因为计算机中丢失d3dx96,视频软件edius常见问题的解决方法
  3. 六级考前必看单词总结(7)
  4. java加载dtk控件,DTK教程 五 :一些基本的控件(三) 输入框
  5. 黑马程序员16——OC之Fundation(NSNumber)
  6. 大话数据结构 —— 1.5.1 逻辑结构
  7. 新能力:企业微信【客户群群发】的最全使用指南!
  8. SAP IDES各Client用途和用户名密码 1
  9. 通过查看Windbg中汇编指令及内存中的值去定位软件崩溃问题
  10. 区块链开发者观点:来自 Math(麦子钱包)的 Eric Yu