Ubuntu20同时安装并运行ORB SLAM2 、ORB SLAM3(详细安装版)、TUM数据集测试

简要说明:

用相同版本库同时安装ORB SLAM2 、ORB SLAM3,并分别测试几段TUM-RGBD单目数据

ubuntu20.04

Pangolin 0.6

Eigen3

opencv3.4.5

一、换源

通过软件或者修改sources.list换源,推荐清华源

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

sudo gedit /etc/apt/sources.list

更新

sudo apt-get update

二、安装第三方库(ORB-SLAM2、3都适用)

1.安装基本依赖

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

2.安装 Pangolin

建议安装Pangolin 0.6(稳定版)

git clone https://github.com/stevenlovegrove/Pangolin/tree/v0.6 

(1)安装依赖

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

(2)编译

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

(3)测试

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

若安装成功,会弹出以下窗口:

3.安装Eigen3

(1)推荐下载源码

git clone https://github.com/eigenteam/eigen-git-mirror

(2)如果下载总是失败,可以修改hosts,参考以下文章

修改hosts解决github速度慢(windows、ubuntu适用)_ubuntu github 加速-CSDN博客

(3)编译以及安装

cd eigen-git-mirror
mkdir build && cd build
cmake ..
sudo make install

Eigen3的默认安装位置在/usr/local/include/eigen3/ ,不符合需求,需要移动头文件的位置:

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

 此时/usr/local/include/下出现Eigen,则完成。

4.安装opencv3.4.5

ORB-SLAM2要求至少OpenCV- 2.4.3,这里选择安装OpenCV-3.4.5(在Github仓库右侧的Releases里找),下载Source code(大概90M)进行解压

(其他3版本大部分应该也可以,这里没有过多尝试,可能需要根据版本更换接口函数或头文件)

Releases · opencv/opencv · GitHub

(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 
sudo apt-get install libavformat-dev libjpeg.dev libtiff5.dev 
sudo apt-get install libswscale-dev libjasper-dev 
sudo apt-get install libcanberra-gtk-module libcanberra-gtk3-module 

(2) 配置并编译

为了防止opencv多版本共存出现问题,可以将opencv安装到指定位置,在运行代码的时候,指定使用哪个opencv来进行编译和运行的

cd opencv-3.4.5
mkdir build && cd build 

#安装到制定位置
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/.../opencv-3.4.5 ..
#cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

#电脑性能差可去掉-j4,性能很好可增加数字(线程)
make -j4
sudo make install

 安装完后会出现三个上锁的文件(修改权限可选  sudo chmod -R 777 opencv-3.4.5

然后进入

cd /home/.../opencv-3.4.5/share/OpenCV

 然后发现OpenCVConfig.cmake 就是存放opencv 头文件和库文件路径的文件。接下来指定不同的版本,就是指定不同opencv对应的这个文件的路径。

(3)修改Cmakelist 文件(不在opencv,在需要运行的orbslam程序里,后续会说明)

#找到opencv-3.4.5
set(CMAKE_PREFIX_PATH "/home/.../opencv-3.4.5") 
#下面这行可以不加
# set(OpenCV_DIR "/home/.../opencv-3.4.5/share/OpenCV" )  # 你的opencv安装的OpenCVConfig.cmake路径

#如果想验证用的是哪个opencv库
message(STATUS ${OpenCV_INCLUDE_DIRS})   # 将对于调用的opencv的头文件的地址打印出来

注:可以通过填写不同路径找到指定版本的opencv

三、安装ORB-SLAM2

(1)下载源文件

chmod +x 赋予shell文件运行权限,根据电脑情况修改build.sh里的make -j4

git clone https://github.com/raulmur/ORB_SLAM2.git

(2)修改CMakeLists.txt(根据自己的opencv版本而决定

修改ORB_SLAM2-master目录下的CMakeLists.txt和ORB_SLAM2-master/Thirdparty/DBoW2/CMakeLists.txt两个文件

在 find_package(OpenCV 3.0 QUIET)前加入(修改为自己opencv位置

#set(CMAKE_PREFIX_PATH "/home/.../opencv-3.4.5")  #这行可以不用
set(OpenCV_DIR "/home/.../opencv-3.4.5/share/OpenCV" )

将eigen版本改为

find_package(Eigen3  REQUIRED)

(3)编译

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

(4)报错

1.error: ’usleep’ was not declared in this scope
# 大概有10几个文件有这个错误
# 在报错文件加入头文件
#include <unistd.h>

2.error: static assertion failed: std::map must have the same value_type as its allocator
#ORB-SLAM2源码目录中include/LoopClosing.h文件中的
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
替换成:
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
        Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;

改正后基本没有问题,编译成功

四、ORB-SLAM2测试TUM数据集

        根据选择的数据集调整指令,将TUMX.yaml 根据选择的reiburg1, freiburg2 ,freiburg3 序列调整成TUM1.yaml,TUM2.yaml ,TUM3.yaml 。调整  PATH_TO_SEQUENCE_FOLDER为自己数据的路径。结果会默认保存到 当前文件夹的KeyFrameTrajectory.txt。

一共测试6条轨迹

rgbd_dataset_freiburg2_coke、rgbd_dataset_freiburg2_360_kidnap、rgbd_dataset_freiburg3_nostructure_texture_near_withloop、rgbd_dataset_freiburg2_pioneer_360、rgbd_dataset_freiburg2_pioneer_slam3、rgbd_dataset_freiburg3_large_cabinet

# ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml PATH_TO_SEQUENCE_FOLDER
#举例
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml /home/.../rgbd_dataset_freiburg2_coke

测试结果:

1. rgbd_dataset_freiburg2_coke

数据集初始化很慢,中途总是跟踪失败,效果并不好。

 轨迹会断掉

2. rgbd_dataset_freiburg2_360_kidnap

跟踪失败

3. rgbd_dataset_freiburg3_nostructure_texture_near_withloop

效果不错

evo评估

4. rgbd_dataset_freiburg2_pioneer_360

初始化慢,中途跟踪失败

5. rgbd_dataset_freiburg2_pioneer_slam3

初始化失败

6. rgbd_dataset_freiburg3_large_cabinet

跟踪失败

五、安装ORB-SLAM3

(1)下载源码(下载压缩包大概600M,解压后1.5G)

​git clone https://github.com/UZ-SLAMLab/ORB_SLAM3

(2)安装python2.7

sudo apt install libpython2.7-dev

(3)修改CMakeLists.txt(根据自己的opencv版本而决定,opencv4同样支持

修改ORB_SLAM3-master目录下的CMakeLists.txt和ORB_SLAM2-master/Thirdparty/DBoW2/CMakeLists.txt两个文件(修改为自己opencv位置)

(4)编译

根据电脑情况修改build.sh里的make -j*

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

(5)报错

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

调低build.sh的make -j * 即可,继续编译

编译成功 

六、ORB-SLAM3测试TUM数据集

ORB-SLAM3支持惯导,但这里只测试单目效果,同样测试6条轨迹

rgbd_dataset_freiburg2_coke、rgbd_dataset_freiburg2_360_kidnap、rgbd_dataset_freiburg3_nostructure_texture_near_withloop、rgbd_dataset_freiburg2_pioneer_360、rgbd_dataset_freiburg2_pioneer_slam3、rgbd_dataset_freiburg3_large_cabinet

单目运行指令同ORB-SLAM2(根据自己位置进行修改)

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml /home/.../rgbd_dataset_freiburg2_coke

测试结果:

1. rgbd_dataset_freiburg2_coke

数据集初始化比ORB-SLAM2快,跟踪失败2次,重定位才继续(没截到跟踪失败)

EVO评估,不知道为什么真值不是完整轨迹,是否有时间阈值? 

2. rgbd_dataset_freiburg2_360_kidnap

中间有段遮挡,有跳变

3. rgbd_dataset_freiburg3_nostructure_texture_near_withloop

稳定,无需多言!

4. rgbd_dataset_freiburg2_pioneer_360

多次跟丢

通过重定位

5. rgbd_dataset_freiburg2_pioneer_slam3

丢了n次  ,未生成轨迹数据

6. rgbd_dataset_freiburg3_large_cabinet

跟丢

通过测试直观感觉,orbslam3的初始化相比orbslam2快了很多 ,但也有几个旋转较多的场景较慢,在手持抖动,弱纹理环境下易跟丢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值