Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装

在新安装的Ubuntu 20.04系统中配置ORB-SLAM2和ORB-SLAM3的运行环境,记录走过的路

一、换源

Ubuntu系统自带的源都是国外的网址,国内用户在使用的时候网速比较慢甚至无法获取,在安装各种库或软件时会深受其折磨!解决方案是直接替换成国内的镜像源。
(1)备份源文件:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

(2)打开文件:

sudo gedit /etc/apt/sources.list

(3)换源:推荐清华的源(根据自己的网去尝试,选择最快的一个,查看ubuntu版本命令:cat /etc/issue):清华源地址,选择Ubuntu版本并复制源,覆盖sources.list文件原来的内容。
(4)换过源之后要更新:

sudo apt-get update

二、安装三方库

2.1 安装必要的依赖项

sudo apt-get update
sudo apt-get install git gcc g++
sudo apt-get install vim make cmake

2.2 安装Pangolin

安装Pangolin v0.6(稳定版)(官网下载地址,不要下载最新master版,编译的时候可能有错误)
(1)安装依赖项

sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
sudo apt-get install libpng-dev

(2)配置并编译

cd Pangolin 
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install

(3) 验证

cd ..
cd examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin

若安装成功,则会弹出以下窗口:
Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装

2.3 安装OpenCV3

ORB-SLAM2要求至少 2.4.3,作者使用 OpenCV 2.4.11 和 OpenCV 3.2 测试。我测试OpenCV-3.4.5可行,安装OpenCV-3.4.5(OpenCV老版本可在Github仓库右侧的Releases里找),将文件解压到某个位置,在该文件下打开终端
(1)安装依赖项

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev 
sudo apt install libcanberra-gtk-module libcanberra-gtk3-module 
#或者
sudo apt-get install libcanberra-gtk*

(2) 配置并编译

mkdir build && cd build 
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
#电脑性能差可去掉-j4,性能很好可增加数字(线程)
make -j4
sudo make install

(3)查询OpenCV版本、库以及头文件目录的三个命令来确保上面的OpenCV安装步骤都正常:

pkg-config --modversion opencv
pkg-config --cflags opencv
pkg-config --libs   opencv

2.4 同时安装OpenCV4

安装OpenCV4.4.0(与3.4.5共存),使能运行ORB-SLAM2和ORB-SLAM3(只使用OpenCV3也是可以的,ORB-SLAM3要求至少 3.0,作者使用 OpenCV 3.2.0 和 4.4.0 测试,不安装OpenCV4请忽略这一节,我只测试过4.4.0)
(1)安装依赖库:

sudo apt-get install build-essential cmake git 
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy python3-dev python3-numpy
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

(2)其他安装步骤都一样,只是camke …改为(防止冲突,安装到不同的路径/usr/local/opencv4下):

mkdir build && cd build 
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 -D CMAKE_BUILD_TYPE="Rlease" -D OPENCV_GENERATE_PKGCONFIG=ON ..
make -j4
sudo make install

(3)配置OpenCV变量,编辑文件 /etc/ld.so.conf.d/opencv.conf(如果没有就会自动创建):

sudo gedit  /etc/ld.so.conf.d/opencv.conf

然后添加 OpenCV-4.4.0 的 lib 路径:

/usr/local/opencv4/lib

保存退出,执行:

sudo ldconfig

(4)编辑 ~/.bashrc 文件:

sudo gedit ~/.bashrc

最后添加:

#opencv-4.4.0
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/opencv4/lib/pkgconfig
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./usr/local/opencv4/lib

保存退出,执行:

source ~/.bashrc

查询OpenCV版本、库以及头文件目录,结果仍然是之前安装的OpenCV3的版本。因为,对于OpenCV4以上的版本要使用OpenCV4才能正确查询到其版本,库以及头文件目录的值。具体命令如下所示:

pkg-config --modversion opencv4
pkg-config --cflags opencv4
pkg-config --libs   opencv4

(5)使用多版本OpenCV,在写CmakeList.txt要注意,如果只有一个版本的OpenCV,我们一般直接使用FIND_PACKAGE(OpenCV REQUIRED),如果现在要使用的是默认安装的OpenCV3,则使用使用上面的指令就足够了。如果现在要使用的是我们自己指定路径的opencv-4.4.0,则在上面指令前面加上如下指令:

set(CMAKE_PREFIX_PATH "/usr/local/opencv4") 

2.5 安装Eigen3

Eigen3(地址)是一个纯头文件的库,这个特点让使用者省去了很多安装和环境配置的麻烦
直接安装:

sudo apt-get install libeigen3-dev

建议源码安装:

cd eigen3
mkdir build
cd build
cmake..
make
sudo make install

安装后头文件安装在:

/usr/local/include/eigen3/

移动头文件:

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

三、安装ORB-SLAM2

(1)解压源文件,在该文件夹下打开终端:

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

注意系统若硬件不行(线程少),将build.sh里的make -j(默认启用最大线程)修改为make,防止卡死,反之性能很好可增加数字(线程):如make -j4/j8/jx
(2)编译时如果有错误:

’usleep’ was not declared in this scope

在对应的头文件中加上 :

#include <unistd.h>

(3)运行单目例子(彩色是我修改了代码,源码黑白,不用在意):

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml Data/rgbd_dataset_freburg2_desk

Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装

四、安装ORB-SLAM3

(1)解压源文件修改CMakeLists.txt,调低make -j x,在FIND_PACKAGE(OpenCV REQUIRED)前面加上如下指令(使用OpenCV4,若使用OpenCV3忽略):

set(CMAKE_PREFIX_PATH "/usr/local/opencv4") 

将find_package(Eigen3 3.1.0 REQUIRED)修改为:

find_package(Eigen3 REQUIRED)

(2)安装python2.7:

sudo apt install libpython2.7-dev

(3)在源文件夹下打开终端:

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

(4)报opensll错误,缺少对应的库,需安装openssl-devel:

sudo apt-get install libssl-dev

(5)报错:x3D=x3D_h.get_minor<3,1>(0,0)/x3D_h(3); error:no match for ’operator/’ ,应该是是重载了这个符号,但是这里直接这样写是不合格的,两个地方提示出错:

/ORB_SLAM3/src/LocalMapping.cc:628:49: error: no match for ‘operator/’
 (operand types are ‘cv::Matx<float, 3, 1>’ and ‘float’) x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3);
/ORB_SLAM3/src/CameraModels/KannalaBrandt8.cpp:534:41: error: no match for ‘operator/’ 
(operand types are ‘cv::Matx<float, 3, 1>’ and ‘float’) x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3);

在源码中的这两个地方,将x3D = x3D_h.get_minor<3,1>(0,0) / x3D_h(3)修改为:

x3D = cv::Matx31f(x3D_h.get_minor<3,1>(0,0)(0) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(1) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(2) / x3D_h(3));

(6)如果内存不足中断编译进程:

c++: fatal error: Killed signal terminated program cc1plus

调大虚拟机内存/创建swap分区,调低make -j x
(7)运行TUM corridor(Monocular-Inertial)例子:

./Monocular-Inertial/mono_inertial_tum_vi ../Vocabulary/ORBvoc.txt Monocular-Inertial/TUM_512.yaml dataset-corridor1_512_16/mav0/cam0/data Monocular-Inertial/TUM_TimeStamps/dataset-corridor1_512.txt Monocular-Inertial/TUM_IMU/dataset-corridor1_512.txt dataset-corridor1_512_monoi

Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装

五、安装PCL和Octomap

在ubuntu18.04之后,安装pcl和octomap只需两行命令(若遇到问题,首先考虑是否已经换源):

sudo apt-get install libpcl-dev pcl-tools
sudo apt-get install liboctomap-dev octovis

(1)使用pcl-tools命令pcl_viewer查看.pcd点云文件:

pcl_viewer map.pcd

Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装
(2)使用octovis查看八叉树点云文件:

octovis octomap.bt

Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装

六、安装Sophus

安装基于模板的Sophus库,基于模板的Sophus库与Eigen一样仅含有头文件,并且Sophus库是在Eigen基础上开发的,继承了Eigen库中的定义的各个类。因此要先安装Eigen,这里基于上述安装的Eigen3.4.0

git clone https://github.com/strasdat/Sophus.git
cd Sophus
mkdir build 
cd build
cmake ..
make
sudo make install

报错:

error: implicitly-declared ‘Eigen::Map<Sophus::SO2<double> >::Map(const Eigen::Map<Sophus::SO2<double> >&)’ is deprecated [-Werror=deprecated-copy]
   99 |     Eigen::Map<SO2Type> shallow_copy = map_of_so2;

在CMakeLists.txt里# Add local path for finding packages, set the local version first之前加:

set(CMAKE_CXX_FLAGS "-Wno-error=deprecated-declarations -Wno-deprecated-declarations ")

运行高翔十四讲例子:
Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年5月31日 上午11:08
下一篇 2022年5月31日 上午11:10

相关推荐