ORB_SLAM3复现——上篇

2023-11-08

前言

最近由于工作需要,鄙人被迫转入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哈
    在这里插入图片描述
  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手动生成的空文件。
在这里插入图片描述

  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!)保存退出。
在这里插入图片描述

  1. 使系统变量生效
source /etc/bash.bashrc
  1. 测试环境配置是否成功
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路径下新建文件Datasetsmkidr 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特征,地图视频中出现的绿色线路径代表相机的运动路径,蓝色小方框代表的相机的运动过程,也就是关键帧,黑点代表过去路标,红点代表现在路标。

总结

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORB_SLAM3复现——上篇 的相关文章

  • 如何使用 OpenCV 找到红色区域? [复制]

    这个问题在这里已经有答案了 我正在尝试编写一个检测红色的程序 然而有时它比平常更暗 所以我不能只使用一个值 检测不同深浅的红色的最佳范围是多少 我目前使用的范围是 128 0 0 255 60 60 但有时它甚至检测不到我放在它前面的红色物
  • 在opencv中发现凸性缺陷? [根据给定的输入图像崩溃..]

    我有一个计算图像凸包的程序 我正在尝试使用此信息来计算fingers存在于输入图像中 从一些冲浪中我发现做到这一点的方法 数手指 是 寻找轮廓 凸包 凸性缺陷 但我在使用凸性缺陷函数时遇到了麻烦 它编译得很好 但在运行时程序会因某些输入图像
  • 相机姿态估计(OpenCV PnP)

    我正在尝试使用网络摄像头从具有已知全球位置的四个基准点的图像中获取全局姿态估计 我检查了许多 stackexchange 问题和一些论文 但似乎无法得到正确的解决方案 我得到的位置数字是可重复的 但与相机移动绝不成线性比例 仅供参考 我正在
  • cv2.cv.BoxPoints(rect) 返回什么?

    rect cv2 minAreaRect largest contour rect rect 0 0 self scale down rect 0 1 self scale down rect 1 0 self scale down rec
  • 将四边形(四边形)拟合到斑点

    应用不同的过滤和分割技术后 我最终得到如下图像 我可以访问一些轮廓检测函数 这些函数返回该对象边缘上的点列表 或者返回一个拟合的多边形 尽管有很多边 远多于 4 个 我想要一种将四边形适合该形状的方法 因为我知道它是应该是四边形的鞋盒的正面
  • 编译使用Basler相机的程序

    我正在尝试使用 Basler 相机捕获图像的 C 程序来工作 我拿到 来自制造商的代码 它应该 非常容易使用 但是 链接它有 成为一场噩梦 我的 C 时代已经过去了 最近只使用 Matlab 所以我可能会犯一些愚蠢的错误 但请赐教 代码如下
  • C++ OpenCV 2.3 中缺少 MoveWindow()

    我正在使用 OpenCV 2 3 的 C 版本 并且正在努力完成一项基本任务 我想做的是创建一个窗口并将其移动到屏幕上的特定位置 例如使用 cv namedWindow My Window 1 cv MoveWindow My Window
  • OpenCV findContours 破坏源图像

    我编写了一个在单通道空白图像中绘制圆形 直线和矩形的代码 之后 我只需找出图像中的轮廓 就可以正确获取所有轮廓 但找到轮廓后 我的源图像变得扭曲 为什么会出现这种情况 任何人都可以帮我解决这个问题 我的代码如下所示 using namesp
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 如何在Python中使用tcp套接字发送和接收网络摄像头流?

    我正在尝试重新创建这个项目 https github com hamuchiwa AutoRCCar 我拥有的是服务器 我的电脑 和客户端 我的树莓派 我所做的与原始项目不同的是我尝试使用一个简单的网络摄像头而不是树莓派摄像头将图像从我的
  • 计算两个描述符之间的距离

    我正在尝试计算已计算的两个描述符之间的距离 欧几里得或汉明 问题是我不想使用匹配器 我只想计算两个描述符之间的距离 我正在使用 OpenCV 2 4 9 并且我的描述符存储在 Mat 类型中 Mat descriptors1 Mat des
  • 来自 OpenCV 的外部参数

    我正在使用 OpenCV 来校准立体相机对 我拍摄了各种校准照片 并且使用 cv2 calibrateCamera 对内在参数进行了令人满意的拟合 然而 目前尚不清楚如何获取外部参数 该函数仅返回cameraMatrix 尽管它很有用 但实
  • 提高 pytesseract 从图像中正确识别文本的能力

    我正在尝试使用读取验证码pytesseract模块 大多数时候它都能提供准确的文本 但并非总是如此 这是读取图像 操作图像以及从图像中提取文本的代码 import cv2 import numpy as np import pytesser
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • Python中最相似的人脸识别

    如何使用Python和OpenCV来查找面部相似 我已成功使用 OpenCV 和 Python 使用 Haar Cascades 从多张照片中提取人脸 我现在有一个图像目录 所有这些都是不同人的面孔 我想做的是拍摄一张样本图像 然后看看它最
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • 如何将输出视频保存到 OpenCV 中的文件中

    我想将输出视频保存到文件中而不是显示它并尝试使用 cvcaptureimage 但仍然无法获得结果 include
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • OpenCV C++ 如何知道每行的轮廓数进行排序?

    我有一个二值图像 https i stack imgur com NRLVv jpg在这张图片中 我可以使用重载的函数轻松地对从上到下 从左到右找到的轮廓进行排序std sort 我首先通过以下方式从上到下排序 sort contours

随机推荐

  • 显卡3080设备CentOS 7.9 环境安装最新anconda、tensorflow-gpu 、cudatoolkit、cudnn、 python

    目标 使用3080显卡搭建环境 系统安装 显卡驱动安装 安装anconda 安装 python 安装 cuda 安装 cudnn 安装 tensorflow 一 系统安装 详见历史文档 二 显卡驱动安装 详见历史 三 整理自己需要安装的环境
  • 期货不变的本质是什么意思(期货不变的本质是什么意思呀)

    期货的本质是什么 本质是一个风险转移工具 通过把风险转移给愿意投机获利 亏损的人 产业方得以获得确定的盈利预期 这是期货的核心价值 狭义理论认为期货市场是 零和 负和 游戏 但如果把眼光放宽 把实体产业加进来 可以发现期货是市场环境里一项必
  • web python识花_TensorFlow迁移学习识花实战案例

    TensorFlow 迁移学习识花实战案例 本文主要介绍如何使用迁移学习训练图片识别花朵的模型 即识别出图片上是何种花朵 本文档中涉及的演示代码和数据集来源于网络 你可以在这里下载到 TRANSFER LEARNING zip 本模块将通过
  • cocos2d-x客户端与Java服务器的通信(一)

    o 貌似自己已经有一段时间没有写博客了 其实主要原因还是觉得自己水平有限 加上上班实在是太忙 实在抽不出时间来写博客 言归正传 大家都知道 在网络游戏开发中 网络通信一直是个比较大的难题 一个服务器可能要同时处理几千上万甚至上百万的用户数据
  • 14款开源或免费的GIS软件

    1 QGIS 原称Quantum GIS QGIS 原称Quantum GIS 是一个跨平台的桌面GIS软件 它提供数据的显示 编辑和分析功能 可以自动生成地图 并且能够处理地理空间数据 最后形成你期待的地图数据 它于2004年成为地理空间
  • Idea使用工具Statistic进行代码数量,注释的统计

    Statistic是idea上面的一个用于统计代码数量 注释数量的工具 1 安装 重启idea后 工具就能直接使用 如过没有结果的话 刷新下 扩展设置
  • 中缀表达式转后缀表达式

    一 什么是中缀表达式 后缀表达式 二 中缀表达式转后缀表达式 例题 中缀表达式 10 20 2 3 2 8 转换为对应的后缀为 后缀表达式 10 20 2 3 2 8 解题思路 1 观察两表达式 后缀明显没有 这两个符号 其次与中缀相比数字
  • git push origin master报错的解决方法 & 常见git命令(待更新)

    git push origin master报错的解决方法 常见git命令 待更新 参考Git常用命令 文章目录 git push origin master报错的解决方法 常见git命令 待更新 1 git push origin mas
  • c语言:折半查找法(二分查找法)

    折半查找法 half interval search 优点 比较次数少 查找速度快 平均性能好 缺点 是要求待查表为有序表 且插入删除困难 因此 折半查找方法适用于不经常变动而查找频繁的有序列表 注意 折半查找法仅适用于对已有顺序的数组 数
  • JDBC连接mysql的url的写法和常见属性

    URL jdbc mysql host port database 其后可以添加性能参数 propertyName1 propertyValue1 propertyName2 propertyValue2 MySQL 8 0 以上版本的数据
  • 2. 刘二大人《PyTorch深度学习实践》作业--梯度下降

    这里 我在刘老师的基础上做了改进 将线性函数改为了 y w x b y wx b y wx b 以下实现都是基于此线性函数做的 1 梯度下降 import n
  • 网站搭建的详细步骤-宝塔建站前沿篇!

    导语 宝塔建站是现代建站过程中一种简单而高效的方式 本文将为您详细介绍宝塔建站的步骤 让您轻松创建自己的网站 一 选择合适的虚拟主机 1 在宝塔官网下载并安装宝塔面板 2 打开宝塔面板 在左侧面板选择 网站 点击 添加站点 开始站点创建过程
  • Oracle中连接与会话的区别

    1 oracle中文概念手册 连接 connection 与会话 session 这两个概念均与用户进程 user process 紧密相关 但二者又具有不同的含义 连接 用户进程和 Oracle 实例间的通信通道 communicatio
  • OSError: /home/ren/anaconda3/envs/torch/lib/python3.8/site-packages/nvidia/cublas/lib/libcublas.so.1

    pytorch 常见报错及解决方案 报错 解决方案 报错 OSError home ren anaconda3 envs torch lib python3 8 site packages nvidia cublas lib libcubl
  • Linux安装免费Https证书,过期自动更新 省钱秘籍

    Linux安装免费Https证书 过期自动更新 acme sh这个服务可以友好地帮助我们获取免费的证书以及过期实现自动更新操作 官方网站 https github com acmesh official acme sh 介绍 嗨 今天我要和
  • VMware Workstation Pro界面设置为中文界面

    在桌面找到VMware Workstation Pro的快捷方式 右键属性 在路径 目标 后面添加 locale zh CN然后点击确定 再重新打开VMware Workstation Pro软件即可看到界面已变成中文界面 Tips 我使用
  • 解决python安装模块时的“No module named setuptools“报错问题

    在利用python安装模块时利用python setup py install语句执行时 出现一下报错问题 简单来讲 该问题出现的原因就是 python默认是没有安装setuptools这个模块的 这也是一个第三方模块 所以在利用setup
  • SQL Server 本机 Web 服务的使用方案

    摘要 获得有关如何设置 SQL Server 以便在异类环境中进行 We
  • Angular中如何自定义模块

    为什么要自定义模块 当项目比较小的时候就可以不用自定义模块 但是当我们的项目庞大 并且需要把所有组件挂载到根模块里面时 Angular内置的模块就不是很合适了 因此遇到这样的情况 我们就可以使用自定义模块的方式来规划我们的项目 并通过Ang
  • 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 s