【SLAM实战篇】Ubuntu 20.04版本(OpenCV版本4.5.3)对于ORB-SLAM2安装运行,代码编译,自己的数据集构造

这篇具有很好参考价值的文章主要介绍了【SLAM实战篇】Ubuntu 20.04版本(OpenCV版本4.5.3)对于ORB-SLAM2安装运行,代码编译,自己的数据集构造。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学完SLAM十四讲 心血来潮想跑一下ORB-SLAM2的代码,纯新手小白,自己的踩坑经历进行整理:
本文章主要对ORB-SLAM2进行编译运行。以及自己构建数据集。

1 ORB-SLAM2 简介

源码github地址:https://github.com/raulmur/ORB_SLAM2
终端克隆代码:

	git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

ubuntu20.04 安装运行orb_slam2算法,ubuntu,opencv,linux,c++
查看源代码,其重要的代码库仅为三个文件夹:

Example
include
src

2 安装相关库:

可以去看我师兄在知乎发的文章:https://zhuanlan.zhihu.com/p/452256687
主要操作

2.1更新apt库:
sudo apt-get update
2.2安装git

用于从Github上克隆项目到本地

sudo apt-get install git
2.3安装cmake(巨牛逼)

用于程序的编译

sudo apt-get install cmake
2.4安装Pangolin

注意: 需安装0.5版本的Pangolin,若安装最新版会在SLAM项目build时出现 cannot find -lEigen3::Eigen 的报错。
直接在Ubuntu中打开链接
下载地址:https://github.com/stevenlovegrove/Pangolin/tree/v0.5
终端克隆仓库:

git clone https://github.com/stevenlovegrove/Pangolin.git

安装依赖项:

sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev libpython3.8-dev python3-pip

在slambook2/3rdparty/Pangolin文件夹下打开终端并输入:

mkdir build
cd build/
cmake ..
make -j4
sudo make install

测试验证:

cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin

此时终端出现图像,则安装成功
ubuntu20.04 安装运行orb_slam2算法,ubuntu,opencv,linux,c++

3 更改代码中OpenCV(本代码经过修改为4.5.3版本适用)版本

3.1 版本过高,更改最新版本

涉及文件夹:

CMakeLists.txt
Examples/ROS/ORB_SLAM2/CMakeLists.txt
Thirdparty/DBoW2/CMakeLists.txt

需要更改第一行代码,下面那一行是判断版本不正确时,不会进入那一步

find_package(OpenCV 3.0 QUIET)   中更改为   find_package(OpenCV 4.5.3 QUIET) 

ubuntu20.04 安装运行orb_slam2算法,ubuntu,opencv,linux,c++

由于OpenCV版本问题,在opencv4中opencv2的cv.h融合进了imgproc.hpp里我们修改其代码,

include文件夹

include/ORBextractor.h

头文件中

#include <opencv/cv.h>

更改为

#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/highgui/highgui_c.h>

3.2 OpenCV高版本更改

由于opencv高版本弃用CV_LOAD_IMAGE_UNCHANGED这一参数导致的涉及到以下文件夹:

Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/ROS/Stereo/stereo_euroc.cc
Examples/ROS/Stereo/stereo_kitti.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc

将  CV_LOAD_IMAGE_UNCHANGED  更改为	cv::IMREAD_UNCHANGED

4 代码报错

4.1 初次编译

orbslam2 fatal error: …/…/config.h: 没有那个文件或目录
因为g2o没有编译完整,进入ORB_SLAM2文件夹,重新执行 ./build.sh
打开ORB-SLAM文件夹,终端输入完整代码:

cd ORB_SLAM2
chmod +x build.sh
./build.sh
4.2 为避免报错usleep(未声明)的问题

在以下文件夹中头文件添加

Examples 中 Monocular单目相机文件夹

Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc

Examples 中 RGB-D深度相机文件夹

Examples/RGB-D/rgbd_tum.cc

Examples 中 Stereo双目相机文件夹

Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc

include文件夹

include/System.h

src文件夹

src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc

头文件添加

#include <unistd.h>
4.3 修改

把ORB-SLAM2源码目录中include/LoopClosing.h文件夹中第49行代码(中文注释版本在第64行):

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;

5 搭建自己的数据集(单目视频)

原本ORB-SLAM2文件夹的样子:
ubuntu20.04 安装运行orb_slam2算法,ubuntu,opencv,linux,c++
在跑自己的数据后文件夹内容:
ubuntu20.04 安装运行orb_slam2算法,ubuntu,opencv,linux,c++

5.1 新建myvideo.yaml

在ORB-SLAM2文件夹打开终端,要新建一个myvideo.yaml,在终端输入:

gedit myvideo.yaml

打开新建myvideo.yaml,复制以下内容:

%YAML:1.0
 
#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------
 
# Camera calibration and distortion parameters (OpenCV) 
Camera.fx: 500.0
Camera.fy: 500.0
Camera.cx: 320.0
Camera.cy: 240.0
 
Camera.k1: 0
Camera.k2: 0
Camera.p1: 0
Camera.p2: 0
Camera.k3: 0
 
# Camera frames per second 
Camera.fps: 30.0
 
# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 0
 
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------
 
# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000
 
# ORB Extractor: Scale factor between levels in the scale pyramid     
ORBextractor.scaleFactor: 1.2
 
# ORB Extractor: Number of levels in the scale pyramid    
ORBextractor.nLevels: 8
 
# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast            
ORBextractor.iniThFAST: 10
ORBextractor.minThFAST: 5
 
#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize: 2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500

(这一步是设置自己手机摄像头的参数,可以就按照这个用着,手机相机的参数差不多。)

5.2 新建myvideo.cpp

在ORB-SLAM2文件夹打开终端,要新建一个myvideo.cpp,在终端输入:

gedit myvideo.cpp

打开新建的myvideo.cpp,直接复制输入下面的代码。注意第9、10、12行,根据myvideo.yaml、ORBvoc.txt、myvideo.mp4的具体位置自行修改。

#include <opencv2/opencv.hpp>
#include "System.h"
#include <string>
#include <chrono>   // for time stamp
#include <iostream>
using namespace std;
// 参数文件与字典文件
// 如果你系统上的路径不同,请修改它
string parameterFile = "./myvideo.yaml";
string vocFile = "./Vocabulary/ORBvoc.txt";
// 视频文件,若不同请修改
string videoFile = "./myvideo.mp4";
int main(int argc, char **argv) {
 // 声明 ORB-SLAM2 系统
    ORB_SLAM2::System SLAM(vocFile, parameterFile, ORB_SLAM2::System::MONOCULAR, true);
 // 获取视频图像
  cv::VideoCapture cap(videoFile);    // change to 0 if you want to use USB camera.
  // 记录系统时间
  auto start = chrono::system_clock::now();

while (1) {
        cv::Mat frame;
        cap >> frame;   // 读取相机数据

        if ( frame.data == nullptr )
            continue;
        // rescale because image is too large
        cv::Mat frame_resized;
        cv::resize(frame, frame_resized, cv::Size(640,360));
        auto now = chrono::system_clock::now();
        auto timestamp = chrono::duration_cast<chrono::milliseconds>(now - start);
        SLAM.TrackMonocular(frame_resized, double(timestamp.count())/1000.0);
        cv::waitKey(30);
    }
    return 0;


}


(这一步,若按照以上的步骤是不需要修改的,第一步的myvideo.yaml就在ORB-SLAM2文件夹中,ORBvoc.txt下载自带的就在ORB-SLAM2文件夹的Vocabulary文件夹中,myvideo.mp4在第四步,也在ORB-SLAM2文件夹中

5.3 修改CMakeLists.txt

打开ORB-SLAM2文件夹中的CMakeLists.txt,在最后复制添加以下代码并保存:

#生成调用myvideo.mp4 可执行文件
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
add_executable(myvideo myvideo.cpp)
target_link_libraries(myvideo ${PROJECT_NAME})

5.4 拍摄一段视频

注意使用手机(单目)拍摄视频时,因slam初始化需要一定时间,开始的摄像机尽量不要对着颜色单一的白墙或者其他,旋转速度不要太快,将拍好的视频上传到电脑,命名为myvideo.mp4,放在ORB-SLAM2文件夹中。

5.5 编译和运行

ORB-SLAM2文件夹打开终端,直接复制下面代码即可运行:

cd ORB_SLAM2
mkdir build
cd build
cmake ..
make -j
cd ..
./myvideo  #(执行)

这是我的运行结果:
ubuntu20.04 安装运行orb_slam2算法,ubuntu,opencv,linux,c++

6 参考博文:

师兄的环境安装:https://zhuanlan.zhihu.com/p/452256687
ORB-SLAM的安装:https://blog.csdn.net/qq_51645628/article/details/123263013?
编译出现的问题:https://blog.csdn.net/SEAL0107/article/details/128316425?
使用自己的数据集(特别鸣谢,这个很牛,适合新手学习):https://blog.csdn.net/weixin_45947476/article/details/123923975
使用matlab标定相机内参(注意固定焦距):https://blog.csdn.net/qq_64079631/article/details/127984760?
代码讲解:https://www.yuque.com/chenhai-7zi1m/se4n14/udvggt文章来源地址https://www.toymoban.com/news/detail-839249.html

到了这里,关于【SLAM实战篇】Ubuntu 20.04版本(OpenCV版本4.5.3)对于ORB-SLAM2安装运行,代码编译,自己的数据集构造的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 工程(十)——github代码ubuntu20.04在ROS环境运行单目和RGBD相机ORB-SLAM3稠密

    博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论交流一起学习。 加稠密建图:git@github.com:huashu996/ORB_SLAM3_Dense_YOLO.git 纯净版:git@github.com:huashu996/ORB_SLAM3.git orb-slam3的整个环境配置还是比较麻烦的,先将一些坑写在前面,供大家参考和避开这些坑。 orb-slam3的配置要求

    2024年01月25日
    浏览(34)
  • Ubuntu20.04配置YOLOV5算法相关环境,并运行融合YOLOV5的ORB-SLAM2开源代码(亲测有效)

              这篇博客介绍的是如何在Ubuntu系统下配置YOLOV5算法环境。并且运行一个融合YOLOV5的ORB-SLAM2开源代码。         安装的软件主要是anaconda,然后anaconda可以帮我们安装python、pytorch这些东西。我的ubuntu版本:ubuntu20.04.5LTS。 安装的anaconda类型: Anaconda3-2022.05 安装的p

    2024年02月02日
    浏览(37)
  • Ubuntu20.04安装c++版本的OpenCV

    https://www.jianshu.com/p/3c2fc0da7398 https://docs.opencv.org/4.5.3/d7/d9f/tutorial_linux_install.html https://www.jianshu.com/p/3c2fc0da7398 https://www.cnblogs.com/yongy1030/p/10293178.html 其实官网步骤已经非常清楚了,只不过是英文的,可能有小伙伴看不下去,所以不妨看看这篇博客。 进入官网,选择你要下载的

    2024年02月12日
    浏览(29)
  • ubuntu20.04下多版本opencv共存和切换

    之前在ubuntu20.04系统上已经安装了opencv4.5.5和扩展库opencv_contrib4.5.5,但是最近需要跑一下PL-SLAM的源代码,而PL-SLAM系统是基于opencv3.x.x开发的,直接运行会出现很多opencv版本不兼容的问题。因此想再安装opencv3.4.5和扩展库opencv_contrib3.4.5,过程中出现了很多问题,写这篇文章记录

    2024年02月08日
    浏览(112)
  • Ubuntu20.04 OpenCV详细安装教程(附多版本切换共存教程)

    opencv安装有两种方式: 1.使用包管理器安装预编译版本(安装十分简单,但是 版本只有4.2.0 ,且没有扩展模块且不支持Qt窗口) 2.从源码安装(比较复杂,但是推荐) 这样就安装完成了 这种安装方法,默认把opencv相关文件放置在系统目录 官网下载地址 https://opencv.org/release

    2024年03月13日
    浏览(82)
  • 【已解决】Ubuntu 20.04 编译OpenCV 动态链接库指向版本不一致导致出错

    问题:编译OpenCV 4.8.1, 显示出错: /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_uint32@LIBFFI_BASE_7.0\\\' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_sint32@LIBFFI_BASE_7.0\\\' /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to

    2024年02月04日
    浏览(30)
  • Ubuntu18.04版本下配置ORB-SLAM3和数据集测试方法

    使用:VMware Workstation Pro 虚拟机系统版本是:Ubuntu 18.04.06 虚拟机内存:8g(若为4g大小,很容易出现后文中ORB-SLAM3编译时会出现的内存问题) 虚拟机存储:50g 若是配置完发现存储空间不足,可以参考这篇博客进行清理: 下载配置技巧:Ubuntu18.04安装vmware-tools解决无法复制粘贴

    2024年02月09日
    浏览(40)
  • 【ORB_SLAM】Ubuntu20.04 配置ORB_SLAM3

    本文主要记录基于Ubuntu20.04环境下,对普通的ORB_SLAM3和稠密版本的ORB_SLAM3进行环境的配置。 这里采用鱼香ros的一键安装,感谢小鱼的一键安装。 Pangolin:链接: https://pan.baidu.com/s/1FXYLsEK1W3xmX0m_Vqylag 提取码: jgz2 (基于小六的注释后的ORB_SLAM3代码) https://github.com/electech6/ORB_SLAM3_d

    2024年02月15日
    浏览(43)
  • ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

    一、引言 ORB-SLAM2,它是基于单目、双目或RGB-D相机的一个完整的SLAM系统,其中包括地图重用、回环检测和重定位功能。这个系统可以适用于多种环境,无论是室内小型手持设备,还是工厂环境中飞行的无人机和城市中行驶的车辆,其都可以在标准CPU上实时运行。该系统的后端

    2023年04月13日
    浏览(39)
  • Ubuntu20.04安装OpenCV

    开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库。 OpenCV的应用领域包括:2D和3D功能工具包、运动估计、面部识别系统、手势识别、人机交互、移动机器人、动作理解、物体识别、分割和识别、实体影像立体视觉:来自两个摄像机的深度感知、运动跟踪、增强

    2023年04月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包