ORB-SLAM2编译遇到的一些问题

最近开始接触SLAM的东西,在初步做了一些了解之后,接触到了ORB-SLAM,知乎上有关于这个的讨论:orb-slam在众多SLAM方法中处于怎样的地位?。
ORB SLAM项目主页:http://webdiis.unizar.es/~raulmur/orbslam/
现在已经有ORB SLAM2了,鉴于它提供双目的接口,就打算去试试。

我的系统ubuntu 14.04 LTS。

源码地址:https://github.com/raulmur/ORB_SLAM2
这个库的编译主要的依赖:OpenCV,Eigen3,g2o,DBoW2,另外还有一个UI库Pangolin。其中g2o和DBoW2在它的Thirdparty文件夹中就有,作者还写了一个脚本build.sh,依赖库准备好后只需要到的目录下,然后运行这个即可:

cd path
chmod +x build.sh
./build.sh

而且ORB-SLAM2并不需要依赖ROS,编译还是很方便的。但是我在编译Pangolin的时候遇到了很多问题,这里记录一下。

Pangolin源码:https://github.com/stevenlovegrove/Pangolin
终端进入目录,执行:

cd path
mkdir build
cd build
cmake ..
make

然后在make的时候就出现了:

/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

网上查了很多,给的解决方法都是这些:

找到configure 文件,在类似这个位置修改echo make CC=$GCCPATCH/bin/gcc -fPIC

.

(1)在makefile文件里的CFLAGS里加上 -fPIC选项,这样可以一劳永逸
(2)如果你的makefile很大,CFLAGS也不明确,那就在配置时手动加上:CFLAGS=”-fPIC” ./configure …………..如果这样还不行,你需要试一下sudo:$sudo CFLAGS=”-fPIC” ./configure …………..

.

在configure的时候加上 –enable-shared和–enable-pic这两个选项

下面这个没怎么看懂,也不知道该怎么尝试,不过挺有趣的

Linux共享对象之编译参数fPIC

但是Pangolin源码没有Configure文件,无从修改,然后我对MakeFile也不了解,改了半天只是越改越糟糕。之后在Stackoverflow看到了这个:http://stackoverflow.com/questions/25539034/opencv-make-fails-recompile-with-fpic,因为之前倒腾FFmpeg的时候弄得很乱,所以很有可能就是FFmpeg的问题。

重下了FFmpeg:http://ffmpeg.org/download.html#releases
用下面的方法重新编译了FFmpeg,就没有上面的问题了,然后ORB-SLAM2的编译就很顺利了。

./configure –enable-nonfree –enable-pic –enable-shared
make
make install

这里提一下一个问题,FFmpeg别装3.0.2的,因为API都变更了,编译的时候会找不到。
这里有一些别人整理出来的变更记录:http://blog.csdn.net/leixiaohua1020/article/details/41013567

由于双目测试数据集还没有,等之后熟悉一些我再写点关于这个库的理解。

你可能感兴趣的:(SLAM)