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

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

http://blog.csdn.net/allwtg/article/details/5145306

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

  祝大家科研顺利!

时间: 2024-10-12 04:10:35

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

使用 Napa 创建并调试一个 Office 内容应用 – Hello World

原文地址:http://simpeng.net/office-add-in/%e4%bd%bf%e7%94%a8-napa-%e5%88%9b%e5%bb%ba%e5%b9%b6%e8%b0%83%e8%af%95%e4%b8%80%e4%b8%aa-office-%e5%86%85%e5%ae%b9%e5%ba%94%e7%94%a8-hello-world/, 为了本博客的内容完整性,转载至此. 准备工作 开发 Office Add-Ins 基本等同于开发常见的 Web 应用程序,add-i

今天做题做到了并查集相关的内容~简单介绍一下关于并查集的东西

就例如一个非常简单的题~ 有一堆人 其中某些人是朋友 有如下的规则 如果A和B是朋友 B和C是朋友 那么A和C也是朋友~ 最后我们有n次的查询 每次查询问其中两个人是不是朋友? 这个题我们就可以用到集合的思想~ 例如A和B是朋友 我们可以把A和B放到一个集合里~ C和D是朋友 我们就把C和D放到一个集合里~ 如图 (原谅只会人工画图的笨比) 但如果我们假设A和C也是好朋友 我们就把这两个集合合并起来~ 就是这个样子~我们对所有的“朋友对”进行这样的操作 就会把他们分到一个个集合里 这时候查找他们

C++调试 输出数组内容和数组名

#include <cstdio> using namespace std; //函数定义 #define printArr(arr,n,format) printf("%s:",#arr);for(int i = 0;i<(n);++i){ printf((format),arr[i]); printf(" ");}printf("\n"); #define N 100 int arr1[N]; float arr2[N];

支付系统整体设计:整体架构设计以及注意要点(三)

一般来说,银行会提供两种支付途径:无跳转的快捷支付接口和带跳转的网银接口.前者在绑卡,支付的时候,不需要跳到银行页面上去处理,后者则需要在银行的网银页面上完成.显然前者对用户来说体验要好多了,用户流程不会被打断.快捷支付要求支付系统在本地保存用户的支付信息,如卡号,登记手机.系统要确保这些信息不被泄漏.风险非常好,所以大部分银行要求接入方必须经过ADSS检验才能够接入快捷支付. 这种固定方式的接入有单点故障的问题,一旦某个渠道出问题,绑定的支付方式就无法使用.改进策略是为每个支付方式定义多个渠道

一起做RGB-D SLAM (4)

第四讲 点云拼接 广告:“一起做”系列的代码网址:https://github.com/gaoxiang12/rgbd-slam-tutorial-gx 当博客更新时代码也会随着更新. SLAM技术交流群:254787961 读者朋友们大家好!尽管还没到一周,我们的教程又继续更新了,因为暑假实在太闲了嘛! 上讲回顾 上一讲中,我们理解了如何利用图像中的特征点,估计相机的运动.最后,我们得到了一个旋转向量与平移向量.那么读者可能会问:这两个向量有什么用呢?在这一讲里,我们就要使用这两个向量,把两张

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

查看和调试Qt源码(动态编译的QT也可进入源码)good

简述 在调试程序的时候,有时需要调试进入 Qt 源码,这不仅有利于我们了解内部实现机制,而且对于解决一些隐蔽性问题很有帮助. 都知道 F11 是“单步进入”,可是在调试的过程中,按下 F11 却无法进入.有人说需要静态编译 Qt 才可以,其实不然,只需要简单的几个配置就可以搞定. 简述 Qt 版本及安装 配置 Qt Creator 源码调试 更多参考 版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820 Qt 版本及安装 Qt 针对 Win

TP框架---Model模型层---做模型对象

TP框架----Model模型层---------------做模型对象 Model模型层是用来做什么的呢???? 主要是用来做操作数据库访问的. 也就说明TP框架自带了一种访问数据库的方式,使用的是Model模型. Model模型怎样使用呢??? 要使用Model模型层访问数据库的话,需要做配置,因为必须把数据库的一些参数配置好之后,才能连接,所以找到Config.php 配置文件,打开 这些是关于数据库的配置, 要把这些粘贴到config.php 进行修改. config.php配置文件(修

PHP开发调试环境配置

——基于wamp和Eclipse for PHP Developers 引言 为了搭建PHP开发调试环境,我曾经在网上查阅了无数的资料,但没有一种真正能够行的通的.因为PHP开发环境需要很多种软件相互配合,软件之间版本必须相互匹配,而具体到底怎么个匹配法也很难说,至于最新版本的软件之间相互匹配就更加缺少相应的资料了.哪怕版本之间有细微的版本不匹配情况,最后的结果都会是徒劳无功. 不过,通过不懈的坚持和努力,在失败了一次又一次之后,终于在凌晨1点半将PHP开发调试环境全部搭建完毕,看到运行网页后,