首页 > 系统相关 >Ubuntu20同时安装并运行ORB SLAM2 、ORB SLAM3(详细安装版)、TUM数据集测试

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

时间:2024-09-27 16:18:59浏览次数:3  
标签:opencv freiburg2 dev dataset 安装版 SLAM2 rgbd ORB

简要说明:

用相同版本库同时安装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快了很多 ,但也有几个旋转较多的场景较慢,在手持抖动,弱纹理环境下易跟丢。

标签:opencv,freiburg2,dev,dataset,安装版,SLAM2,rgbd,ORB
From: https://blog.csdn.net/m0_46406504/article/details/142555666

相关文章

  • 在ubuntu上使用apt或apt-get安装版本较新的git
    在Ubuntu上,通过apt或apt-get安装Git时,默认情况下会从官方的Ubuntu软件源获取Git的版本。然而,官方软件源中的Git版本可能不是最新的。因此,如果你想安装较新的Git版本,可以通过以下几种方法来实现:方法1:使用ppa:git-core/ppa仓库Git官方提供了一个专用的PPA(Pe......
  • nginx 安装服务后,启动报:An attempt was made to access a socket in a way forbidden
    1、nginx1.18.0安装服务成功后,启动服务的时候,一闪直接报错:2、查看Nginx的日志error.log发现启动一次报一条错,并且都是一样的:2024/09/1414:42:18[emerg]6852#6280:bind()to0.0.0.0:80failed(10013:Anattemptwasmadetoaccessasocketinawayforbiddenbyit......
  • mathtype7.4最新永久免费安装版下载链接
    ......
  • 配置免安装版的apache-tomcat环境,jdk11版本以上。解决控制台环境配置显示成功,确打不开
    我这里下的是jdk22版,https://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.ziphttps://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.zip 解压后放在没有中文路径的地方。win+s搜env回车打开环境变量,新建一个变量名:JAVA_HOME,值:为你的jdk解压......
  • eclipse 激活版免安装版 64位 2018
    前言eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。一、下载地址下载链接:eclipsev2018.zip二、安装步骤1、下载解压后将eclipse.exe发送到桌面快捷方式2、点击桌面图标启动3、启动时选择工......
  • threejs中OrbitControls的用法
    OrbitControls是Three.js库中一个非常流行的相机控制组件,它允许用户通过鼠标(或触控设备)来旋转、缩放和平移场景中的相机,从而从不同的角度和距离观察场景。下面是如何在Three.js中使用OrbitControls的方法:1.引入OrbitControls首先需要从Three.js的CDN或本地路径中引入O......
  • 【黑深化-悟空】离线完整免安装版+全能修改器2款补丁
    3DM风灵月影大神已经为这款游戏推出了首款35项修改器,轻松通关!基础无敌模式,还是希望拥有无限生命、法力和气力,无线棍势,无限七十二变……总计35项  修改器功能一览:-数字键1-无敌模式/无视伤害判定-数字键2-无限生命-数字键3-无限法力-数字键4-无限气力......
  • 网站提示403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求怎么办
    当网站提示 403Forbidden 时,这意味着服务器理解了您的请求,但是拒绝执行此请求,通常是因为您没有足够的权限来访问所请求的资源。以下是解决 403Forbidden 错误的一些常见方法:常见原因权限问题:用户没有访问特定资源的权限。文件权限问题:服务器上的文件或目录权限设置不正......
  • R绘图(06)——带errorbar的柱状图
      每次找R绘图美化都很麻烦,索性自己写个笔记慢慢补充绘图美化的指令###生成数据####设置种子以获得可重复的结果set.seed(222)#生成字符序列"AAAABBBB"char_sequence<-c("A","A","A","A","B","B","B","B")#......
  • 扩展 importlinter forbidden 约束支持通配符
    1.前言importlinter默认的forbidden约束并不支持通配符,本文通过自定义合约一直forbidden_modules以支持通配符的方式配置。2.实现在项目根目录中加入importlinterc.py文件:fromimportlinter.application.contract_utilsimportAlertLevelfromimportlinter.contra......