当前位置:网站首页>ORB_SLAM3复现——上篇
ORB_SLAM3复现——上篇
2022-07-25 17:55:00 【[email protected]】
ORB_SLAM3
前言
最近由于工作需要,鄙人被迫转入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跨平台编译工具。
- gcc,g++
sudo apt-get install gcc
sudo apt-get install g++
- 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。
- 官网下载安装包
官网连接,官网提供了很多下载方式,注意下载Sources哈
- 解压切换到路径下
unzip opencv-4.4.0.zip
cd opencv-4.4.0
- 下面开始安装依赖项
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
- 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文件 |
- 编译make
使用多系统内核进行编译,可以通过nproc查询。
make -j2
- make安装
sudo make install
注释:如果中途出现错误,需要从新编译,需要先清空build文件。
- 添加库路径
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手动生成的空文件。
- 使路径生效
sudo ldconfig
- 配置系统环境
sudo vim /etc/bash.bashrc
在文件末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
同样使用(ESC + : + wq!)保存退出。
- 使系统变量生效
source /etc/bash.bashrc
- 测试环境配置是否成功
pkg-config --modversion opencv4
pkg-config --cflags opencv4
pkg-config --libs opencv4

出现以上结果,恭喜您已经大功告成了,如果你还想检验一下,库能否正常调用,那么你可以测试一下代码。
新建一个测试文件test.cpp。在终端输入(新建文件touch test.cpp ) (打开文件gedit test.cpp)输入以下代码保存。
#include <iostream>
#include <opencv2/opencv.hpp>
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


走到这里恭喜你,喜提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路径下新建文件Datasets(mkidr Datasets),将下载的数据集重命名为MH01放入Datasets文件中。注意路径哈,不然会出错。
一定要注意路径相对应哈
./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
另外可能运行中出现这个问题,既不报错,又没有结果,如下,这个问题花了很长时间解决。
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特征,地图视频中出现的绿色线路径代表相机的运动路径,蓝色小方框代表的相机的运动过程,也就是关键帧,黑点代表过去路标,红点代表现在路标。
总结
今天博客就写到这里,由于,博客内容太多,页面总是卡顿,所以剩下的部分,我另外再接着写,后面我会多所有数据都测试一遍,并且做结果评价。
版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/CharmsLUO/article/details/125949694
边栏推荐
- C LINQ de Duplication & de duplication sum
- 精彩记录
- Which futures account is the best and safest
- Redis源码与设计剖析 -- 18.Redis网络连接库分析
- go语言context控制函数执行超时返回
- Mock service Moco series (III) - redirection, regular expression, delay, template, event, sub module design
- Itextpdf realizes the merging of multiple PDF files into one PDF document
- Function name pointer and function pointer
- 有没有什么不起眼却挣钱的副业?
- MySQL数据库常用命令
猜你喜欢

云VR:虚拟现实专业化的下一步

Redis源码与设计剖析 -- 15.RDB持久化机制

排序还需要了解的信息以及链表

Wu Enda's machine learning programming operation cannot be suspended pause problem solved

Idea essential plug-ins

SLA 、SLO & SLI

Dating activity records

PageHelper can also be combined with lambda expressions to achieve concise paging encapsulation

IDEA集成SVN代码管理常用功能

Nineteen year old summary
随机推荐
「数字安全」警惕 NFT的七大骗局
Resttemplate realizes the unified encapsulation (printable log) of post, put, delete, get, set request and file upload (batch files and parameters) through generics
带你初步了解多方安全计算(MPC)
Highlights
WPF 实现用户头像选择器
I'm also drunk. Eureka delayed registration and this pit!
Mock service Moco series (III) - redirection, regular expression, delay, template, event, sub module design
SDLC 软件开发生命周期及模型
Which one of the electronic products has a longer service life??
go语言context控制函数执行超时返回
itextpdf实现多PDF文件合并为一个PDF文档
Brief introduction of bubble sort and quick sort
H5 test point (mind map)
十九岁的总结
OSPF---开放式最短优先路径协议
直击考点:PMP考试中常见敏捷知识点汇总
PageHelper还能结合Lambda表达式实现简洁的分页封装
11. Camera and lens
Redis source code and design analysis -- 17. Redis event processing
Postman快速上手