自学SLAM(2)---保姆教程教你如何使用自己的视频运行ORB-SLAM2

news2024/11/16 19:44:37

前言

在这里插入图片描述

如果你是新手入门,仅仅只会Linux的基本操作,并看了高翔老师视觉SLAM视屏的第一讲,那么你需要准备一整天的时间,可能还不一定能运行出来!运行ORB-SLAM2将会安装很多很多东西。那么,我们准备开始!!

我是默认你已经装了虚拟机和Ubuntu系统的!!

首先先展示一下成果吧,我只能说网上那么多教程都是有漏洞不完整,要么就是一本正经的胡写,有很多问题,我花了整整一天的时间才解决,那么就来看看这个最详细的保姆级教程吧。
在这里插入图片描述

文章目录

  • 前言
  • 1.安装能使Linux和你电脑交互的软件(Xshell和Xftp)
  • 2.安装环境,以及运行ORB_SLAM2的必备软件
  • 3.运行前准备工作
  • 4.编译工作


1.安装能使Linux和你电脑交互的软件(Xshell和Xftp)

我之前的博客:
链接: Linux使用之xshell、xftp保姆教学(含安装包,详细使用方法,连接失败解决方法)

如果你有其他工具,用你的工具即可。

为了实际运⾏ ORB-SLAM2,你需要安装它的依赖项,并通过它本⾝的编译。它的依赖项见它⾃⼰的 github主页,请按照主页上的提⽰安装好 ORB-SLAM2 的依赖项。具体来说,对于 pangolin(⼀个 GUI库),你需要下载并安装它,它同样是个 cmake ⼯程,所以我不必谈怎么编译安装的细节了。对于 opencv 和eigen3,你可以简单的⽤⼀⾏命令来解决:

sudo apt-get install libopencv-dev libeigen3-dev libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-devlibcxsparse3.1.2 libcholmod-dev
这行代码现在已经用不了了,请大家不要使用,按照下面我的第二步,安装环境慢慢来!!!

2.安装环境,以及运行ORB_SLAM2的必备软件

安装cmake,git ,gcc ,g++,vim编辑器,ORB_SLAM2源码,Pangolin , OpenCV , Eigen,TUM 数据集等等。
一步一步来,安装这几个软件可能花费你几个小时的时间,甚至更多。

# 更新apt库,更新软件列表
sudo apt-get update
# 安装git,用于从Github上克隆项目到本地
sudo apt-get install git
# 安装cmake,用于程序的编译
sudo apt-get install cmake
# 安装gcc和g++,安装c和c++编译器
sudo apt-get install gcc g++
#安装vim编辑器,我使用的是vim,如果你使用gedit也可以
sudo apt-get install vim
//直接在高翔博士的github上拷贝ORB_SLAM2源码
git clone https://github.com/raulmur/ORB_SLAM2 

下面是安装几个大应用环境
1.安装Pangolin
1.1安装依赖项

sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libpython2.7-dev

下面需要大家下载pangolin,然后使用Xftp传输到linux系统中,后面几个需要下载的文件也在这个连接中。
链接:https://pan.baidu.com/s/1vdJwa4TZBjwwPAKBXPSMQQ
提取码:lusq

解压什么的我就不再说了,自己操作

# 解压并重命名为Pangolin
unzip Pangolin-0.6.zip && mv Pangolin-0.6 Pangolin
# 开始编译和安装
cd Pangolin
mkdir build && cd build 
cmake -DCPP11_NO_BOOST=1 ..
sudo make install
# 验证是否安装成功
cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin

在这里插入图片描述
2.安装openCV
2.1安装依赖项

# 解决:Unmet dependencies.Try'apt--fix-broken install'with no packages(or specify a solution)
sudo apt --fix-broken install
sudo apt-get update
sudo apt-get upgrade

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev
sudo apt-get install libtiff5.dev libswscale-dev

# 解决:add-apt-repository: command not found
sudo apt-get install software-properties-common

sudo apt-get update
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get update
sudo apt-get install libjasper1 libjasper-dev

下面需要大家下载openCV,然后使用Xftp传输到linux系统中,后面几个需要下载的文件也在这个连接中。
链接:https://pan.baidu.com/s/1vdJwa4TZBjwwPAKBXPSMQQ
提取码:lusq

# 解压并重命名为opencv
tar -xvf opencv-3.4.5.tar.gz && mv opencv-3.4.5 opencv
# 开始编译和安装
cd opencv
mkdir build && cd build 
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
# 4线程数量,根据电脑性能选择合适的数字
make -j4
sudo make install

提示:安装openCV的时候你大概概率会遇到ippicv下载问题,线:ippicv_2019_lnx_intel64_general_20180723.tgz你可以参考如下:
链接: 解决ippicv_2019问题

# 查询OpenCV版本
pkg-config --modversion opencv
# 查询OpenCV库
pkg-config --cflags opencv
# 查询头文件目录
pkg-config --libs   opencv
# 验证是否安装成功
cd opencv/samples/cpp/example_cmake
cmake .
make
./opencv_example

在这里插入图片描述

3.安装Eigen
下面需要大家下载Eigen,然后使用Xftp传输到linux系统中,后面几个需要下载的文件也在这个连接中。
链接:https://pan.baidu.com/s/1vdJwa4TZBjwwPAKBXPSMQQ
提取码:lusq

# 解压并重命名为opencv
tar -xvf eigen-3.3.7.tar.gz && mv eigen-3.3.7 eigen
# 开始编译和安装
cd eigen
mkdir build && cd build
cmake ..
make
sudo make install

# 在很多程序中include时经常使用#include <Eigen/Dense>而不是使用#include <eigen3/Eigen/Dense>
# 因此安装后需要将头文件从 /usr/local/include/eigen3/ 复制到 /usr/local/include
# 后续小节会有C++测试代码说明
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
# 建立 test 测试文件
touch test_eigen.cpp
# 用vim打开此测试文件,添加C++代码用于测试
vim test_eigen.cpp
# 编译后生成一个test_eigen的可执行文件
g++ test_eigen.cpp -o test_eigen
# 在test_eigen可执行文件目录下执行以下命令,证明eigen库安装完成
./test_eigen

在test_eigen.cpp文件中添加的C++测试代码如下:

#include <iostream>
//需要将头文件从 /usr/local/include/eigen3/ 复制到 /usr/local/include
#include <Eigen/Dense>
//using Eigen::MatrixXd;
using namespace Eigen;
using namespace Eigen::internal;
using namespace Eigen::Architecture;
using namespace std;
int main()
{
        cout<<"*******************1D-object****************"<<endl;
        Vector4d v1;
        v1<< 1,2,3,4;
        cout<<"v1=\n"<<v1<<endl;
 
        VectorXd v2(3);
        v2<<1,2,3;
        cout<<"v2=\n"<<v2<<endl;
 
        Array4i v3;
        v3<<1,2,3,4;
        cout<<"v3=\n"<<v3<<endl;
 
        ArrayXf v4(3);
        v4<<1,2,3;
        cout<<"v4=\n"<<v4<<endl;
}

在这里插入图片描述

3.运行前准备工作

这是给大家准备的视频,在ORB_SLAM2中运行的就是这个

链接:https://pan.baidu.com/s/1MRtDGEavtWjJYQLAkE_-AA
提取码:p5df

在这里插入图片描述

add_executable(myvideo Examples/Monocular/myvideo.cpp)
target_link_libraries(myvideo ${PROJECT_NAME})

注意了,上面的myvideo后面的只是路径而已没什么难的,如果有问题的话可以看一下我的上一篇博客,学习一下:
链接: 自学SLAM(1)

将code中其中三个文件都拷贝到 ORB_SLAM2/Examples/Monocular 中
在这里插入图片描述
然后修改myvideo.cpp
在这里插入图片描述
注意需要将Vocabulary也拷贝进去
在这里插入图片描述

还有一件事!!
在这里插入图片描述

这时候我们就可以准备编译了

4.编译工作

编译的时候我们可能会有几个错误
错误1:

一个是出现usleep的错误:这个错误解决方法如下:
直接在 ORB_SLAM2/include/System.h 中加上 #include<unistd.h> 即可

错误2:关于Loop的问题
在LoopCloseing.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;

因为我只遇到了这两个问题,所以其他问题大家可以多搜搜,然后还有一个需要注意的地方:
!!!如果不是第一次编译运行的话(即在./build.sh编译之前)
!!!在运行之前,手动进到Thirdparty里的g2o和DboW2两个文件都把你新建的build删了(是的,删了),再把ORB-SLAM下面那个build文件夹删了(不是删build.sh).

开始编译:

cd ORB_SLAM2
# 赋予shell文件运行权限
chmod +x build.sh
./build.sh

在这里插入图片描述

 ./myvideo

在这里插入图片描述
我们就运行成功了
下一期,我会写如何调用摄像头来运行ORB_SLAM2,觉得有用的小伙伴可以关注我哦,我是一个在读研究生,研究方向是视觉SLAM,在不断自学中,也希望有能力的小伙伴多多帮助我!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新版WIFI分销系统微信小程序源码+WiFi大师版流量主+搭建独立源码WiFi营销小程序源码

新版WIFI分销系统微信小程序源码&#xff0c;带有流量主&#xff0c;可以搭建独立源码的WiFi营销小程序源码。它是一款集流量主、分销和WiFi热点为一体的微信小程序源码。它基于创新的技术架构和设计理念&#xff0c;实用和运行稳定。 这款源码有多种分销模式&#xff0c;用户…

基于闪电搜索优化的BP神经网络(分类应用) - 附代码

基于闪电搜索优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于闪电搜索优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.闪电搜索优化BP神经网络3.1 BP神经网络参数设置3.2 闪电搜索算法应用 4.测试结果…

bat脚本获取系统服务的可执行文件路径

查看系统服务器名称 鼠标右键点击&#xff0c;选择任务管理器 我们以ActiveMQ为例子进行演示 手动查看可执行文件路径 打开服务 选择服务&#xff0c;右键选择属性 下图中就是可执行路径 命令行查看可执行文件路径 选择管理员运行 cmd运行下面命令 sc qc ActiveMQ 下图就是…

Python 无废话-基础知识函数详解

函数定义 函数是一段可重复使用的代码块&#xff0c;用于实现特定的功能。 类似的前面已学过print(),len(),input(),str(),list(),tuple()等内置函数 自定义函数 内置函数是python类库的已定义好的函数&#xff0c;如果某些功能不能满足时&#xff0c;需要我们自定义函数&am…

迄今为止丨ChatGPT最强指令,一个可以让机器人生成机器人的Prompt,价值百万!

原文&#xff1a; 【ChatGPT调教】ChatGPT最强指令、让机器人为你生成机器人&#xff01;-CSDN博客 说明&#xff1a;最好看原文 昨天&#xff0c;发现了一条可能是迄今为止&#xff0c;我见过最牛的&#xff0c;商业价值最高的ChatGPT指令。 通过这条指令&#xff0c;可以…

推荐系统实践 笔记

诸神缄默不语-个人CSDN博文目录 这是我2020年写的笔记&#xff0c;我从印象笔记搬过来公开。 如果那年还在读本科的同学也许有印象&#xff0c;那年美赛出了道根据电商评论给商户提建议的题。其实这件事跟推荐系统关系不大&#xff0c;但我们当时病急乱投医&#xff0c;我打开…

Golang interface 接口的应用场景 使用细节

应用场景介绍 对初学者讲&#xff0c;理解接口的概念不算太难&#xff0c;难的是不知道什么时候使用接口&#xff0c;下面我例举几个应用场景&#xff1a; 1.说现在美国要制造轰炸机&#xff0c;武装直升机&#xff0c;专家只需把飞机需要的功能/规格定下来即可&#xff0c;然…

​“FTX 传奇曾经大佬 SBF 的审判:密友出庭指控,陪审团选择延长,听证会揭示 “

备受期待的 FTX 创始人 SBF 刑事审判开始&#xff0c;引发了检方和辩方之间关于他在加密货币交易所垮台中所扮演角色的冲突。美国助理检察官塞恩雷恩(ThaneRehn)将 SBF 描述为一位前雄心勃勃的人物&#xff0c;过着建立在欺骗基础上的奢华生活方式。 SBF 的律师马克科…

逻辑回归评分卡

文章目录 一、基础知识点(1)逻辑回归表达式(2)sigmoid函数的导数损失函数(Cross-entropy, 交叉熵损失函数)交叉熵求导准确率计算评估指标 二、导入库和数据集导入库读取数据 三、分析与训练四、模型评价ROC曲线KS值再做特征筛选生成报告 五、行为评分卡模型表现总结 一、基础知…

【数据结构】初探时间与空间复杂度:算法评估与优化的基础

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;数据结构 &#x1f525;该文章主要了解算法的时间复杂度与空间复杂度等相关知识。 目录&#xff1a; &#x1f30f; 时间复杂度&#x1f52d…

基于自私羊群优化的BP神经网络(分类应用) - 附代码

基于自私羊群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于自私羊群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.自私羊群优化BP神经网络3.1 BP神经网络参数设置3.2 自私羊群算法应用 4.测试结果…

苹果手机怎么备份所有数据?2023年iPhone 15数据备份常用的3种方法!

当苹果手机需要进行刷机、恢复出厂设置、降级iOS系统等操作时&#xff0c;我们需要将自己的iPhone数据提前进行备份。 特别是在苹果发布新iOS系统时&#xff0c;总有一些小伙伴因为升降级系统&#xff0c;而导致了重要数据的丢失。 iPhone中储存着重要的照片、通讯录、文件等数…

STM32--人体红外感应开关

本文主要介绍基于STM32F103C8T6和人体红外感应开关实现的控制算法 简介 人体红外模块选用HC-SR501人体红外传感器&#xff0c;人体红外感应的主要器件为人体热释电红外传感器。人体都有恒定的体温&#xff0c;一般在36~37度&#xff0c;所以会发出特定波长的红外线&#xff0…

windows系统服务管理命令sc

sc可以用于管理系统服务、计划任务、系统日志等方面&#xff0c;是不可或缺的神器。 基本用法 在命令提示符下输入sc命令&#xff0c;然后按回车键。 上图展示的是sc命令的使用方法&#xff0c;支持哪些参数实现哪些功能 要查看系统所有服务列表&#xff0c;包括它们是否正在…

基于入侵杂草优化的BP神经网络(分类应用) - 附代码

基于入侵杂草优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于入侵杂草优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.入侵杂草优化BP神经网络3.1 BP神经网络参数设置3.2 入侵杂草算法应用 4.测试结果…

Mac版快速切换工具:One Switch中文 for mac

One Switch是一款功能强大、体验极简的Mac菜单栏工具&#xff0c;适合需要频繁切换系统设置和启动应用程序的用户使用。通过它&#xff0c;用户可以更方便地完成日常操作&#xff0c;提高工作效率。 快速访问工具&#xff1a;One Switch提供了一个便捷的菜单栏图标&#xff0c;…

1700*C. Number of Ways(贪心前缀和)

Problem - 466C - Codeforces Number of Ways - 洛谷 解析&#xff1a; 首先判断所有数总和是否能被三整除。 之后遍历前缀和数组&#xff0c;如果某个位置的前缀和等于sum/3&#xff0c;则记录。 某个位置前缀和等于sum/3*2则记录答案。 注意由于分成三份&#xff0c;所以同…

出去重复的列值(关键词:distinct)

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select distinct 列名 from 表名; 案例&#xff1a;查询emp表中&#xff0c;员工的职位&#xff08;job&#xff09;&#xff0c;并去重…

第八章 排序 五、快速排序

目录 一、算法思想 二、例子 三、代码实现 四、验证 五、算法效率分析 1、时间复杂度 ​编辑 2、空间复杂度 3、小结 4、优化思路 5、稳定性 六、总结 一、算法思想 首先&#xff0c;选取一个数作为序列的基准数&#xff0c;分别定义序列的第一个数和最后一个数为l…

Go Gin Gorm Casbin权限管理实现 - 1. Casbin概念介绍以及库使用

1. 核心概念 核心配置中含两部分模型配置以及策略配置&#xff0c;给出两个示范配置&#xff0c;在此基础上对实际请求进行分析。 1.1 Model 模型文件&#xff0c;存储了请求定义(request_definition)&#xff0c;策略定义(policy_definition)&#xff0c;匹配规则(matchers)&a…