目录
1. C++11 or C++0x Compiler
2.Pangolin
3.opencv
4.eigen
5.boost安装
6.DBoW2 and g2o
7.下载编译ORB-SLAM3
8.运行ORB-SLAM3的测试数据集
9. 采坑记录
参考:
1. C++11 or C++0x Compiler需要安装支持C++11特性的编译器
sudo apt-get install gcc sudo apt-get install g++ sudo apt-get install build-essential sudo apt-get install cmake
2.Pangolin安装依赖(Ubuntu18.04 为例)
sudo apt install libgl1-mesa-dev sudo apt install libglew-dev sudo apt install libpython2.7-dev sudo apt install pkg-config sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
编译(Ubuntu18.04 为例)
git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake .. #有的地方写 cmake -DCPP11_NO_BOOSR=1 .. 也可以,#待验证区别 cmake --build . #有的地方写 make 也是一样的 sudo make install (这个也是需要的,网上很多教程没有这个命令)
默认安装位置:/usr/local/include/pangolin
Ubuntu16.04 下安装Pangllin遇到的问题:
1). Cmake版本过低
解决方法:安装高版本Cmake(如:下载源码,配置~./bashrc中的PATH即可 共存多版本cmake)
2). 找不到 Eigen3Config.cmake
解决方法:先安装eigen ( 如下 sudo apt-get install libeigen3-dev)
3). template error: ‘auto’ parameter not permitted in this context
原因:最新版本的还未完善好 (记录时间2021-09-06)
解决方法: 换个低版本的(如pangolin-0.6) 文件 · v0.6 · mirrors / stevenlovegrove / pangolin · GitCode
3.opencvubuntu下的opencv安装是一件十分复杂的事情,我参照以下教程安装成功的。 参照以下教程安装 https://www.jianshu.com/p/f646448da265
或者:
// Ubuntu18.04为例:
sudo apt install libopencv-dev
拓展:Linux(Ubuntu)使用 sudo apt-get install 命令安装软件的目录在哪?
include文件理论:/usr/include bin文件路径: /usr/bin 库文件路径: /usr/lib/ 其它的图标啊什么的路径: /usr/share 配置文件路径: /etc/
apt-get是老版的命令,apt是新版的命令,apt还包含了apt-get cache等等,用起来更方便。因为apt刚刚出来,所以允许有apt-get和apt共存,以后apt-get就要淘汰了。
拓展:ubuntu16.04查看opencv版本
pkg-config opencv --modversion
//ubuntu16.04 的一个实例:2.4.9.1
拓展:opencv使用源码安装(ubuntu16.04+opencv3.4.3)路径在哪里?
/usr/local/include /usr/local/share /usr/local/lib /usr/local/bin
4.eigen两种方式安装eigen 直接上个超链接,两种方式安装eigen3。网上很多博客说建议源码安装,这样安装到的是/usr/local/include/eigen3/目录下,但是我直接使用命令安装最后也编译成功了ORB-SLAM3,安装在了/usr/include。可以先命令安装,编译的时候检测不到再回头来源码安装。如果安装好了但是还报错,按照这篇博客说的做 https://blog.csdn.net/qq_43872529/article/details/100937091
自带包(Ubuntu18.04 为例)安装:
sudo apt-get install libeigen3-dev
#上面的命令,会在 /usr/lib/cmake/eigen3 中创建Eigen的配置文件: Eigen3Config.cmake 或者 eigen3-config.cmake
#相关指令:
sudo updatedb #创建或更新 slocate/locate 命令所必需的数据库文件
locate eigen3
若出错则需要更换源!
(对应:ubuntu16.04中 apt-get默认版本3.2.92 记录日期2021-09-07)
源码安装:
(如 3.2.10版本 )
官网下载本地安装:
github 有个mirror,版本3.3.4 from 2017
git clone https://github.com/eigenteam/eigen-git-mirror
#安装 cd eigen-git-mirror mkdir build cd build cmake .. sudo make install
# 安装后,头文件安装在/usr/local/include/eigen3/
报错:找不到eigen 的配置文件 Eigen3Config.cmake 或者 eigen3-config.cmake
解决方法: 在网上下载两个这样的文件,放到 /usr/lib/cmake/eigen3 目录下,如下所示
网上的教程并没有说boost安装的事情,但是编译的时候会遇到这个错误,我们可以直接提前安装好https://www.jianshu.com/p/4c621a34ba69
Ubuntu 18.04 安装 boost 1.67_alen_feng的专栏-CSDN博客_ubuntu18.04安装boost
// ubuntu18.04 下默认boost版本 1.65.0
sudo apt-get install libboost-system-dev
或者
sudo apt install libboost-all-dev
这两个库ORB-SLAM3的作者在他的文件夹里做了修改,不需要我们单独下载,直接去第7步即可。在ORB-SLAM3的Thirdparty文件夹下,编译ORB-SLAM3的时候会自动编译。
补充一下,需要下载这些,亲身实践。 在这里下载一个
sudo apt-get install libcanberra-gtk-module sudo apt-get install libssl-dev
7.下载编译ORB-SLAM3git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 cd ORB_SLAM3 chmod +x build.sh ./build.sh
这里编译的时候可以vim build.sh文件,修改一下make -j8,8是cpu核数,这样编译的更快。同时修改CMakelist文件把warning去掉,因为有eigen库,定义的变量未使用也会报错,很烦。修改CMakelist和build.sh都是可选的,不想修改就可以直接./build.sh编译就完成了。
8.运行ORB-SLAM3的测试数据集数据集链接
点进链接下载ASL格式的Machine Hall 01,然后解压后修改名称为MH01。放在需要放的位置,然后把MH01所在的文件夹的路径拷贝到euroc_examples.sh的第二行的引号内
pathDatasetEuroc=‘这里放路径’
然后进入ORB-SLAM3运行./euroc_examples.sh就大功告成了。
经过无数折磨,终于把ORB-SLAM3配置好了。
先说一下遇到的错误
9. 采坑记录第一次
在虚拟机里装的ubuntu16.04里编译遇到的错误 ./Examples/Monocular/mono_euroc: symbol lookup error: /home/jhw/ORB_SLAM3/lib/libORB_SLAM3.so: undefined symbol: _ZN5DBoW24FORB1LE。 链接错误是非常少见的,而且在ORB-SLAM3里边也有人遇到这个错误,但是没有方法解决,报的是DBoW的错误。我也尝试了很久,最终也没有解决,建议遇到这个错误直接重装系统。本人比较幸运,遇到这个错误的第三天实验室的师兄给我了一台台式机主机,感谢师兄。
第二次错误
在台式机的双系统里边遇到的 ORB_SLAM3/src/System.cc:315:20: error: ‘usleep’ was not declared in this scope usleep(5000); 找到对应的System.cc加入 #include
在source文件的开头增加include #include
需要增加unistd.h的文件有:
Examples/Monocular/mono_euroc.cc Examples/Monocular/mono_kitti.cc Examples/Monocular/mono_tum.cc Examples/RGB-D/rgbd_tum.cc Examples/Stereo/stereo_euroc.cc Examples/Stereo/stereo_kitti.cc src/LocalMapping.cc src/LoopClosing.cc src/System.cc src/Tracking.cc src/Viewer.cc
第三次
在台式机的双系统里边遇到的,错误不大,是漏装了一个库,但是由于eigen报warning(定义的变量未使用)太多,导致看不到真正的错误位置 CMakeFiles/Makefile2:289: recipe for target ‘CMakeFiles/ORB_SLAM3.dir/all’ failed make[1]: *** [CMakeFiles/ORB_SLAM3.dir/all] Error 2 Makefile:83: recipe for target ‘all’ failed make: *** [all] Error 2 这里建议编译的时候在ORB-SLAM3的cmakelist的-Wall后边加上-w屏蔽编译的warning便于发现错误的真正位置 一般这里少装了一个库sudo apt-get install libssl-dev
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -march=native") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -march=native")
采坑记录1:
解决方法1:使用make –j2 或者 make -jn 或者 make(而不是make -j) (建议将n设为cpu逻辑数量)
运行./build.sh 编译24小时未果 果断放弃 查看其内部命令为 make –j 故改之
解决方法2:使用swap创建临时分区(主要是在编译过程中,内存不够造成的。)
sudo dd if=/dev/zero of=/swapfile bs=64M count=32
#count的大小就是增加的swap空间的大小,64M是块大小,所以空间大小是bs*count=2048MB
sudo mkswap /swapfile
#把刚才空间格式化成swap格式
chmod 0600 /swapfile
sudo swapon /swapfile
#使用刚才创建的swap空间
// do something...
#工作做完可以把临时空间关闭
swapoff -a
#详细的用法可以:swapoff --help
#查看当前内存使用情况:free -m
采坑记录2:
原因没有安装:openssl
方法:
sudo apt-get install openssl
sudo apt-get install libssl-dev
采坑记录3:
解决方法: 安装:sudo apt-get install libboost-all-dev
采坑记录4:
ORB-SLAM3可编译通过,跑时,出现段错误,定位后在调用g2o的optimizer对象上
原因:自己又重新自己手动使用Thirdparty中的g2o的CMakeLists.txt遍历了一遍g2o.
解决方法:直接使用源码中原有的g2o
参考:- Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】
-
Ubuntu18.04下编译ORB_SLAM3遇到的问题