ORB_SLAM3复现——上篇

ORB_SLAM3

  • 前言
  • 1. ORB_SLAM3
  • 2. 准备环境
    • 2.1 C++11 Compiler
    • 2.2 Pangolin
    • 2.3 Opencv
    • 2.4 Eigen
  • 3. 复现ORB_SLAM3
    • 3.1 下载代码
    • 3.2 执行build.sh
    • 3.3 测试EuRoC数据集
  • 总结

前言

最近由于工作需要,鄙人被迫转入SLAM领域,实属无奈,为了讨口饭吃,被迫放弃最初的梦想,哭哭哭哭哭,最近发现SLAM也蛮好玩的哈,哎,真香!话不多说,还是那句话,为了督促自己认真学习,记录以下复现的第一个SLAM相关的项目吧。

1. ORB_SLAM3

ORB_SLAM是一种基于 ORB特征的三维定位与地图构建算法,OBR_SLAM家族已经更新到第三代了,今天我们就来复现以下ORB_SLAM3,虽然距今已经两年多了,对于刚入门的人来说,复现最新版本是最好的选择。
源码连接:https://github.com/UZ-SLAMLab/ORB_SLAM3
推荐学习:https://mp.weixin.qq.com/s/h1OIxdYQ5Eu-2OAHhsVcIQ
下面我们就来一步步复现吧,条件不好的同学,建议使用虚拟机Ubuntu18.04,版本不建议太高或者太低,容易出问题。

2. 准备环境

2.1 C++11 Compiler

安装好虚拟机后,建议更换到国内源,打开终端,开始安装gcc,g++gcc是C语言编译器,g++是C++编译器,所以这两个都建议安装以下。然后就是安装Cmake跨平台编译工具。

  1. gcc,g++
sudo apt-get install gcc
sudo apt-get install g++
  1. cmake
sudo apt-get install build-essential
sudo apt-get install cmake

2.2 Pangolin

安装过程可以根据作者提供的过程来,可能操作过程会出现很多错误,每个人出现的错误不一样,我建议更换成国内源可能问题会少一些。官方安装连接。

2.3 Opencv

值得注意的是官方说opencv3.2和4.4都测试过,可以跑通,但是很多同学反应,只有4.4能用,我建议安装opencv4.4。

  1. 官网下载安装包
    官网连接,官网提供了很多下载方式,注意下载Sources哈
    ORB_SLAM3复现——上篇_第1张图片
  2. 解压切换到路径下
unzip opencv-4.4.0.zip
cd opencv-4.4.0
  1. 下面开始安装依赖项
sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
  1. Cmake一下
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..

备注:

命令 说明
CMAKE_BUILD_TYPE=RELEASE 发布版本
CMAKE_INSTALL_PREFIX 动态库的安装路径,可以自定义
WITH_GTK=ON libgtk2.0-dev是否安装成功
OPENCV_GENERATE_PKGCONFIG=YES 自动生成OpenCV的pkgconfig文件

提示安装多个版本,可以这样修改,其他不变

# 设置安装路径
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.4.0 -D WITH_GTK=ON -D OPENCV_GENERATE_PKGCONFIG=YES ..

# 添加环境变量,想使用那个版本,就把哪个版本注释即可
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv-4.4.0/lib/pkgconfig  
export PKG_CONFIG_PATH 
  1. 编译make
    使用多系统内核进行编译,可以通过nproc查询。
make -j2
  1. make安装
sudo make install

注释:如果中途出现错误,需要从新编译,需要先清空build文件。

  1. 添加库路径
sudo vim /etc/ld.so.conf

在文件中添加如下代码include /usr/loacal/lib,记住保存退出(ESC + : + wq!)。也可以手动生成opencv.conf,打开sudo vim /etc/ld.so.conf.d/opencv.conf,写入/usr/local/lib。注意opencv.conf,是vim手动生成的空文件。
ORB_SLAM3复现——上篇_第2张图片

  1. 使路径生效
sudo ldconfig
  1. 配置系统环境
sudo vim /etc/bash.bashrc

在文件末尾添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

同样使用(ESC + : + wq!)保存退出。
ORB_SLAM3复现——上篇_第3张图片

  1. 使系统变量生效
source /etc/bash.bashrc
  1. 测试环境配置是否成功
pkg-config --modversion opencv4
pkg-config --cflags opencv4
pkg-config --libs opencv4

ORB_SLAM3复现——上篇_第4张图片
出现以上结果,恭喜您已经大功告成了,如果你还想检验一下,库能否正常调用,那么你可以测试一下代码。
新建一个测试文件test.cpp。在终端输入(新建文件touch test.cpp ) (打开文件gedit test.cpp)输入以下代码保存。

#include 
#include 
 
using namespace std;
using namespace cv;

int main()
{
    Mat srcImage = imread("image.jpg");
    imshow("Display Image window",srcImage);
    waitKey(0);
    return 0;
}

注意放一张图片在同级目录下哈,并且改名图片名为image.jpg。编译使用如下命令。

g++ `pkg-config opencv4 --cflags` test.cpp  -o demo `pkg-config opencv4 --libs`
./demo

ORB_SLAM3复现——上篇_第5张图片
ORB_SLAM3复现——上篇_第6张图片
走到这里恭喜你,喜提opencv4.4

2.4 Eigen

安装Eigen相对简单,没什么好说的,直接上代码。

git clone https://gitlab.com/libeigen/eigen.git
cd eigen
mkedir build
cd build
cmake ..
make
sudo make install

3. 复现ORB_SLAM3

3.1 下载代码

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

3.2 执行build.sh

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

3.3 测试EuRoC数据集

下载EuRoC MAV Dataset数据集,下面以这个数据集为例。点击连接下载,在ORB_SLAM3路径下新建文件Datasetsmkidr Datasets),将下载的数据集重命名为MH01放入Datasets文件中。注意路径哈,不然会出错。
ORB_SLAM3复现——上篇_第7张图片
一定要注意路径相对应哈

./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./Datasets/MH01/ ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono

出现以下问题,就是在运行一遍命令。./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./Datasets/MH01/ ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
ORB_SLAM3复现——上篇_第8张图片
另外可能运行中出现这个问题,既不报错,又没有结果,如下,这个问题花了很长时间解决。

The output in terminal is as follows.
Initialization of Atlas from scratch
Creation of new map with id: 0
Creation of new map with last KF id: 0
Seq. Name:
There are 1 cameras in the atlas
Camera 0 is pinhole
[ INFO:0] global /home/ber/Documents/software/opencv-4.5.4/modules/core/src/parallel/registry_parallel.impl.hpp (96) ParallelBackendRegistry core(parallel): Enabled backends(3, sorted by priority): ONETBB(1000); TBB(990); OPENMP(980)
First KF:0; Map init KF:0
New Map created with 271 points

解决办法,可以查看连接,就是Examples/Monocular/mono_euroc.cc这个文件中的false to true,大概在这个位置。
ORB_SLAM3复现——上篇_第9张图片
下面是正常运行的结果。
ORB_SLAM3复现——上篇_第10张图片

ORB_SLAM3复现——上篇_第11张图片
注释:视频图像中出现的绿色小方框是提取到的ORB特征,地图视频中出现的绿色线路径代表相机的运动路径,蓝色小方框代表的相机的运动过程,也就是关键帧,黑点代表过去路标,红点代表现在路标。

总结

今天博客就写到这里,由于,博客内容太多,页面总是卡顿,所以剩下的部分,我另外再接着写,后面我会多所有数据都测试一遍,并且做结果评价。

你可能感兴趣的:(SLAM,opencv,人工智能,计算机视觉)