Ubuntu16.04,ros(distro-kinect),注意orbslam2中的orbslam编译不需要基于ros。
Opencv2.4.9。
安装过程与坑:
Orbslam的项目主页:https://github.com/raulmur/ORB_SLAM
下载指令(for newer):
git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM
主要参考博文:
https://blog.csdn.net/qq_33179208/article/details/53032687
https://blog.csdn.net/sinat_38343378/article/details/78883919
第一部分
安装依赖库:
sudo apt-get install libboost-all-dev ----安装boost库,用以管理多线程
g2o(非线性优化库)依赖库安装
- sudo apt-get install libblas-dev
- sudo apt-get install liblapack-dev
- sudo apt-get install libeigen3-dev
注意此处安装eigen3时用下列网址:(第一大坑)
https://launchpad.net/ubuntu/trusty/amd64/libeigen3-dev/3.2.0-8
在下载目录中:
sudo dpkg -i libeigen3-dev_3.2.0-8_all.deb
否则在编译ORB-slam时会报错;
编译依赖库:
g2o 进入ORB-slam文件夹中的Thirdparty/g2o/
常规cmake项目的编译:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
DBow2(词袋)编译Go into Thirdparty/DBoW2/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make(如果未安装OpenCV,首先编译OpenCV)
第二部分 ORB-slam编译
- 打开manifest.xml,注释掉(也可以删去)对opencv2的依赖。(第二大坑)
如下:
<package>
<description brief="ORB_SLAM">
ORB_SLAM
</description>
<author>Raul Mur-Artal</author>
<license>GPLv3</license>
<depend package="roscpp"/>
<depend package="tf"/>
<depend package="sensor_msgs"/>
<!--depend package="OpenCV"-->
<depend package="image_transport"/>
<depend package="cv_bridge"/>
</package>
- 打开src/ORBextractor.cc文件(vim,gedit都可以呀),开头添加#include <opencv2/opencv.hpp>(第三大坑)
cd ORB_SLAM-master/
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make
第三部分:其他的问题
一、编译orb-slam时如果cmake一直不成功,可采用下列命令行
sudo rosdep fix-permissions;
rosdep update
如果第二条命令不成功,可以忽略,或者可采用sudo ros init && rosdep update
后cmake ..
二、注意上述过程如果在ros的workspace中,是ok的,但如果不在,需要添加下列命令行:
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:{$此处添加orbslam的绝对路径}
三、
如果出现类似上述问题
原因是:libboost_system.so 与libboost_filesystem.so找不到链接目录
可通过locate boost_system
locate boost_filesystem 即可找到目录
将libboost_system.so与libboost_filesystem.so复制到ORB_SLAM master/lib下,并在ORB-SLAM master的Cmakelists.txt中添加二者库目录:
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
${PROJECT_SOURCE_DIR}lib/libboost_filesystem.so
${PROJECT_SOURCE_DIR}lib/libboost_system.so
熟悉cmake的话会知道 set 内容会在target_link_libararies后面
此处往往会报错
Building CXX object CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o make[2]: *** No rule to make target '../../../../lib/libboost_system.so', needed by '../RGBD'。 停止。 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2 Makefile:127: recipe for target 'all' failed make: *** [all] Error 2
可采用下列命令行:
sudo ln –s /usr/lib/x86-64-linux-gnu/libboost_filesystem.so
sudo ln –s /usr/lib/x86-64-linux-gnu/libboost_system.so
原因在于找不到.so的目标文件,上述命令的意义为建立符号链接,深入了解可参考下面的这篇博文
https://www.cnblogs.com/perfy/p/5164430.html;
后直接编译make即可;