简要说明:
用相同版本库同时安装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