自学视觉SLAM(1)

news2024/11/26 23:42:38

引言

在这里插入图片描述

小编研究生的研究方向是视觉SLAM,目前在自学,已经学了Linux系统的基本操作,vim编辑器以及高翔老师的一些视屏。本篇文章为初学笔记。

文章目录

  • 引言
  • 1 熟悉 Linux
    • 1.1 如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅?
    • 1.2 linux 的环境变量是什么?我如何定义新的环境变量?
    • 1.3 linux 根⽬录下⾯的⽬录结构是什么样的?⾄少说出 3 个⽬录的⽤途。
    • 1.4 假设我要给 a.sh 加上可执⾏权限,该输⼊什么命令?
    • 1.5 假设我要将 a.sh ⽂件的所有者改成 xiang:xiang/root,该输⼊什么命令?
  • 2 SLAM 综述文献阅读
    • 2.1 SLAM 会在哪些场合中⽤到?⾄少列举三个⽅向。
    • 2.2 SLAM 中定位与建图是什么关系?为什么在定位的同时需要建图?
    • 2.3 SLAM 发展历史如何?我们可以将它划分成哪⼏个阶段?
    • 2.4 列举三篇在 SLAM 领域的经典⽂献。
  • 3 CMake 练习
    • 3.1书写⼀个由 cmake 组织的 C++ ⼯程,要求如下:
  • 4 理解 ORB-SLAM2 框架


1 熟悉 Linux

1.1 如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅?

可以使用 sudo apt install XXX
普通安装:sudo apt-get install XXX
修复安装:sudoapt-get -f install XXX
重新安装:sudo apt-get -f reinstall XXX

在linux中文件与软件一般都是安装在到/usr/share和/usr/local中了,如果我们需要查看软件安装路径linux为我们提供了查看命令,whereis就可以帮我查找文件安装路径在哪里了,which可以查询在哪里运行。

/usr/下系统自带的程序,/usr/local/是用户安装的程序

在这里插入图片描述

1.2 linux 的环境变量是什么?我如何定义新的环境变量?

环境变量,就是存在当前环境中的变量,无论是Linux还是Windows,都有环境变量。比如,最常用的环境变量PATH,JAVA_HOME。Windows下的环境变量如图所示.

在这里插入图片描述
按照序号①②③操纵即可

Linux下的环境变量可以用以下命令查看:

①定义环境变量: export OUTDIR=/opt export可以认为是导出的意思 OUTDIR是环境变量的名字,然后加上一个值,这个值是一个路径
②显示环境变量: echo $OUTDIR或者echo $OUTDIR/si ,可以用echo将它显示出来,或者用在一个字符串里也可以
③查看所有环境变量: printenv

环境变量可以在当前终端中使用,也可以在一个脚本里面执行的时候直接调用,但是环境变量的范围仅仅局限于当前这个终端环境中,将它关闭或是重开一个都是没有的。

环境变量更加细分如下:
①用户环境变量:就是对当前用户有效的那些环境变量。定义在~/.profile中(在有的Linux系统中定义在.bash_profile中),其在主目录下,是一个隐藏文件,直接使用ls命令无法查看,需要使用ls -la查看,a表示all,显示所有文件。在Linux下,以.开头的文件为隐藏文件。
我们可以用vim查看,输入命令行:vim .profile,进入后我们可以添加环境变量,比如我们添加一个,输入export JAVA_HOME=/opt/jdk1.8(路径不存在没有关系),然后保存关闭保存后我们需要注销一下才可以生效。

②系统环境变量:用户环境变量只对当前用户有效,如果想定义一个变量对所有用户都有效的话,需要系统环境变量。系统环境变量定义在/etc/profile中,想要执行必须以root超级用户来执行。同样的,输入命令vim /etc/profile进入,但是一般不直接修改/etc/profile,而是在/etc/profile.d/ 创建一个自定义的脚本。
以下命令为演示:
vim /etc/profile.d/myprofile.sh 用vim创建一个脚本
export TOMCAT=/opt/tomcat 定义环境变量,然后保存,注销并重新登陆

③PATH环境变量:最常见的一个环境变量,用于描述可执行程序的搜索路径
echo $PATH 查看当前的PATH环境变量(为一堆路径,多个路径之间以:分割)
1.编辑/etc/profile.d/myprofile.sh
设定PATH环境变量
export PATH=$PATH:/opt/tomcat/bin
最后保存注销重新登陆

这三种环境变量,①和②比较简单,这里便不在演示,这里着重演示以下③
在这里插入图片描述

在这里插入图片描述
用vim打开我们的PATH环境变量设置

在这里插入图片描述
在这里插入图片描述

1.3 linux 根⽬录下⾯的⽬录结构是什么样的?⾄少说出 3 个⽬录的⽤途。

/bin二进制可执行命令。该目录下存放着普通用户的命令
/dev系统的设备文件,即设备的驱动程序
/home用户主目录的基点
/lost-found这个目录平时是空的,当系统非正常关机而留下的“无家可归”的文件便会储存在这里
/misc储存着一些特殊的字符的定义
/net存放着和网络相关的一些文件
/proc存放着用户与内核的交互信息
/sbin系统的管理命令,这里存放的是系统管理员使用的程序
/srv系统启动服务时可以访问的数据库目录
/tmp临时文件,重启后自动清空
/var某些大文件的溢出区,比如各种服务的日志文件
/boot启动linux的核心文件
/etc系统所有的配置文件都在这个目录中
/lib存放着和系统运行相关的库文件
/media存放着可移除的设备,比如软盘,光盘
/mnt挂载目录,是系统管理员临时安装文件的系统安装点
/opt(option : 自由选择)主要给源码安装软件时选择的安装目录位置
/root超级用户的目录
/selinux主要用来加固操作系统,提高系统的安全性
/sys管理设备文件
/usr最大的目录,存放着应用程序和文件

1.4 假设我要给 a.sh 加上可执⾏权限,该输⼊什么命令?

chmod a+w a.sh 所有人all添加w权限
chmod a-w a.sh 所有人减去w权限
chmod u+w a.sh仅用户suer自己的权限 +w
chmod o-w a.sh 修改别人other的权限-w
chmod +w a.sh 同下
chmod -w a.sh 前面不写的话是默认修改自己和本组的权限

链接: link如果大家想看更具体的,可以看我之前写过的博客,此为连接

1.5 假设我要将 a.sh ⽂件的所有者改成 xiang:xiang/root,该输⼊什么命令?

在这里插入图片描述
链接: link如果大家想看更具体的,可以看我之前写过的博客,此为连接

2 SLAM 综述文献阅读

2.1 SLAM 会在哪些场合中⽤到?⾄少列举三个⽅向。

1.手持设备定位
2.自动驾驶定位
3.AR(增强现实)

2.2 SLAM 中定位与建图是什么关系?为什么在定位的同时需要建图?

定位是为了精确地确定当前设备在某个环境中的姿态和位置;建图将周围环境的观测部分整合到一个单一的模型中。最初定位和建图是两个相互独立的关系,后来发现这两个步骤是相互依赖的。建图的准确性依赖于定位精度,而定位的实现又离不开精确的建图。

SLAM强调在未知环境下进行整个过程,如果在未知环境下进行定位,首先需要能够识别并理解周围的环境。再利用环境中的外部信息作为定位的基准,所以需要对所处的环境进行建图。

2.3 SLAM 发展历史如何?我们可以将它划分成哪⼏个阶段?

定位与建图(Simultaneous localization and mapping,SLAM)技术最早由 Randall C. Smith 和Peter Cheeseman 于 1986 年提出,后经 Leonard 等扩充.
Cadena 将 SLAM 的 发 展 分 为 两 个阶段:古 典 时 代 ( 1986—2004 年 ) 与 算 法 分 析 时 代( 2004—2015 年).

在 古 典 时 代,SLAM 算 法 处 于probabilistic SLAM 阶段,算 法 包 括 扩 展 卡 尔 曼 滤 波(
extended Kalman filter, EKF ) 、 Rao-Blackwellized 粒子滤 波、 以 及 最 大 似 然 估
计 等。
2007 年, Davison 等提 出 了 MonoSLAM, 这 是 第 一 个 实 时 的 视 觉SLAM系统,以一个单目相 机 作 为 输 入,实 现 对 相 机位置 的 定 位, 并 构 建 由 高 质 量 特 征 构 成 的 稀 疏 3D地图。同 年, Klein等提 出 了 PTAM, 将 位 置 估 计 ( tracking ) 与 建 图( mapping)并行运行,以提高运行效率。
2014 年,Forster 等提 出了 SVO,采用半直接法,具 有 极 高 的 运 行 速 度,但 该方法 只 实 现 了 视 觉 里 程 计 的 功 能。
2015 年, Mur-Artal 等提 出 了 ORB-SLAM, 使 用 了FAST 角 点以 及 ORB ( orientedbrief) 描述子[,使系统具有更高的运行速度。
2017 年,Mur-Artal等进一步提出了 ORB-SLAM2,支持了双目以及 RGB-D 摄像机模式,并加入全局优化、纯定位模式 等 改 进。
2020年,Zubizarreta 等提 出 了 基 于 直 接 法 的 完 整 单 目SLAM 系统 DSM,具 有 优 秀 的 速 度 与 精度。

参考文献:
[1]曾庆化,罗怡雪,孙克诚,等. 视觉及其融合惯性的SLAM技术发展综述[J]. 南京航空航天大学学报,2022,54(6):1007-1020. DOI:10.16356/j.1005-2615.2022.06.002.
[2]高翔,张涛,刘毅,等 . 视觉 SLAM 十四讲:从理论到实践[M]. 北京:电子工业出版社,2019.
[3]万泽宇,丁朝阳,王怡阳,等. 同步定位与建图技术的发展现状[J]. 微纳电子与智能造,2022,4(2):22-45. DOI:10.19816/j.cnki.10-1594/tn.2022.02.022.

2.4 列举三篇在 SLAM 领域的经典⽂献。

[1] Mur-Artal R, Montiel J M M, Tardos J D. ORB-SLAM: a versatile and accurate monocular SLAM system[J]. IEEE transactions on robotics, 2015, 31(5): 1147-1163.

[2] Davison A J, Reid I D, Molton N D, et al. MonoSLAM: Real-time single camera SLAM[J]. IEEE transactions on pattern analysis and machine intelligence, 2007, 29(6): 1052-1067.

[3] Durrant-Whyte H, Bailey T. Simultaneous localization and mapping: part I[J]. IEEE robotics & automation magazine, 2006, 13(2): 99-110.

3 CMake 练习

3.1书写⼀个由 cmake 组织的 C++ ⼯程,要求如下:

  1. include/hello.h 和 src/hello.c 构成了 libhello.so 库。 hello.c 中提供⼀个函数 sayHello(),调⽤此函数时往屏幕输出⼀⾏“Hello SLAM”。
  2. ⽂件 useHello.c 中含有⼀个 main 函数,它可以编译成⼀个可执⾏⽂件,名为“sayhello”。
  3. 默认⽤ Release 模式编译这个⼯程。
  4. 如果⽤户使⽤ sudo make install,那么将 hello.h 放⾄/usr/local/include/下,将 libhello.so 放
    ⾄/usr/local/lib/下。

首先我们理以下文件,清晰以下工程结构:
在这里插入图片描述

include中放头文件,src中放源文件。

运行指令:

cd cmakebuild2
cmake ..
make
./sayHello

输入以下指令即可运行出Hello SLAM!

在这里插入图片描述

这里只做简单的运行演示,如果需要是自学小白需要从头看演示的
可以看此篇博客:

链接: link

4 理解 ORB-SLAM2 框架

  1. 从 github.com 下载 ORB-SLAM2 的代码。地址在: https://github.com/raulmur/ORB_SLAM2.
    提⽰:在安装 git 之后,可以⽤ git clone https://github.com/raulmur/ORB_SLAM2 命令下载
    ORB-SLAM2。下载完成后,请给出终端截图。

命令:

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

在这里插入图片描述
2. 此时我们不着急直接运⾏ ORB-SLAM2,让我们⾸先来看它的代码结构。 ORB-SLAM2 是⼀个
cmake ⼯程,所以可以从 CMakeLists.txt 上⾯来了解它的组织⽅式。阅读 ORB-SLAM2 代码⽬录
下的 CMakeLists.txt,回答问题:
(a) ORB-SLAM2 将编译出什么结果?有⼏个库⽂件和可执⾏⽂件?
(b) ORB-SLAM2 中的 include, src, Examples 三个⽂件夹中都含有什么内容?
© ORB-SLAM2 中的可执⾏⽂件链接到了哪些库?它们的名字是什么?

(a) ORB-SLAM2 将编译出什么结果?有⼏个库⽂件和可执⾏⽂件?
使用cmeke …进行编译,编译结果如下:
在这里插入图片描述
可以编译出5个可执行文件和1个库文件。

凡是有add_library的都是库文件
1.只有一个,在CMakeLists.txt的第51-71行

` 凡是有add_executable的都是可执行文件 阅读文件可知
1.add_executable(rgbd_tum Examples/RGB-D/rgbd_tum.cc)
2.add_executable(stereo_kitti Examples/Stereo/stereo_kitti.cc)
3.add_executable(stereo_euroc Examples/Stereo/stereo_euroc.cc)
4.add_executable(mono_tum Examples/Monocular/mono_tum.cc)
5.add_executable(mono_kitti Examples/Monocular/mono_kitti.cc)
6.add_executable(mono_euroc Examples/Monocular/mono_euroc.cc)

(b) ORB-SLAM2 中的 include, src, Examples 三个⽂件夹中都含有什么内容?

include下是20个头文件。src下是19个源文件。
include文件夹包含:对应src中程序的代码函数头文件
src文件夹包含:相应程序的代码函数的c++文件
Examples文件夹包含:对应不同类别的相机的主程序,包含单目,RGBD,双目以及ROS,编译通过之后可执行文件会存放在这些文件夹中;

© ORB-SLAM2 中的可执⾏⽂件链接到了哪些库?它们的名字是什么?
在这里插入图片描述
(1)OPENCV_LIBS

(2)EIGEN3_LIBS

(3)Pangolin_LIBRARIES

(4)/ORB-SLAM2/Thirdparty/DBoW2/lib/libDBoW2.so

(5)/ORB-SLAM2/Thirdparty/g2o/lib/libg2o.so

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

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

相关文章

算法竞赛备赛之动态规划训练提升,DP基础掌握

1.背包问题 1.1.01背包问题 01背包问题是在M件物品中选择若干件放在空间为W的背包中,每件物品的体积为W1,W2至Wn,价值为P1,P2至Pn,01背包的约束条件是给定几种物品,每种物品有且只有一个,并且…

(4) OpenCV图像处理kNN近邻算法-识别数字0和1

我们的目标是构建一个可以读取手写数字的应用程序。为此,我们需要创建一个手写数字的图片文件 “ digits.png ”,图像的像素为:( 320*40 ), 其中包含 32个手写数字(每个数字16个),每个数字都是20x20的图像,如下图。 因此,我们的第 1 步是将图像分割成 32 个不…

华为OD机试 - 第k个排列 - 全排列递归(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

C语言刷题篇(备赛中......)--------( 篇章1 )

前言: 博主报名了一个小比赛,用来写一些基础的C语言题目,正好借此巩固一下基础 希望这些题对你们也有帮助 猫猫跟你说:该学习了 目录 前言: 题目( 1 ) 解题思路 题目( 2 ) 解题思路 题目&#xff…

Linux虚拟机磁盘空间不足怎么办

我是一个目录 1. 在虚拟机客户端扩充磁盘空间2. 检查磁盘空间3. 扩展空间而无需重启虚拟机4. 创建新磁盘分区5. 创建物理卷6. 扩展逻辑卷 对大多数系统管理员来说,扩充 Linux 服务器的磁盘空间是日常的工作之一,下面会通过使用 Linux 命令,在…

Text-to-SQL小白入门(七)PanGu-Coder2论文——RRTF

论文概述 学习这个RRTF之前,可以先学习一下RLHF。 顺带一提:eosphoros-ai组织「DB-GPT开发者」最新有个新项目Awesome-Text2SQL:GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2…

ps 去除图标背景色

百度安全验证 https://baijiahao.baidu.com/s?id1766678909759797922&wfrspider&forpc 使用魔术橡皮擦工具,超级简单 最后,保存为PNG格式,因为PNG格式支持透明背景。

大二毕设.3-网盘系统-文件模块讲解

目录 模块功能介绍 抽象文件存储引擎顶级接口 高性能单文件上传-sendfile零拷贝 为什么要分片上传 文件存储引擎模块讲解 文件模块具体实现讲解 项目演示博客 模块功能介绍 文件列表查询 聚簇索引和非聚簇索引回表查询最左前缀原则覆盖索引创建文件夹文件重命名文件删除 …

jvs-rules(规则引擎)和jvs智能bi(自助式数据分析)9.22更新内容

规则引擎更新功能 新增: 1.新增节点匹配筛选 用于做多个条件的数据筛选,以便将符合条件的数据传递给下一个节点进行处理,通常用于实现复杂的查询逻辑。 2.复合变量节点新增判断条件选项说明 用户可以根据自己的需求,为复合变量节点添加不…

全球化、国际化、本地化和翻译:GILT 的方法

为促进公司走向全球市场,您需要与客户沟通,并成功传达您的信息。您可能会认为,您需要的只是一支强大的翻译团队。但是,翻译并不像看起来那么简单。 将公司信息翻译成另一种语言,需要了解一些细微差别和文化背景。要想在…

合合信息、上海大学、华南理工大学发布业内首个古彝文编码“大字典” ,为古文字打造“身份证”

“乌蒙山连着山外山,月光洒向了响水滩。”近期在各大短视频平台爆火的《奢香夫人》你听过吗?奢香夫人是一位彝族“巾帼英雄”,这首同名歌曲早在2009年便已发布,如今突然“翻红”,不仅体现了大众对于少数民族文化高涨的…

竞赛 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

计算糖果(牛客)

一、题目 计算糖果_牛客题霸_牛客网 二、代码 #include <iostream> using namespace std;int main() {int x, y, m, n;cin >> x >> y >> m >> n;//A-Bx B-Cy ABm BCnif ((x > 30 || x < -30) && (y > 30 || y < -30) &am…

【Vue】模板语法,插值、指令、过滤器、计算属性及监听属性(内含面试题及毕设等实用案例)上篇

一、引言 1、什么是模板语法&#xff1f; Vue 的模板语法是一种用于在 HTML 中声明式地渲染 Vue 组件的语法。它基于 HTML&#xff0c;并通过特定的模板语法扩展了 HTML。Vue 使用了一种称为 “Mustache” 语法的模板插值来绑定数据到 HTML 元素上。 在 Vue 的模板语法中&…

像专业人士一样部署:掌握代码部署的最佳实践

作为开发人员&#xff0c;您知道部署代码可能是一个耗时且复杂的过程。简化生产部署对于确保您的代码尽快有效地到达用户手中至关重要。但如何实现这一目标呢&#xff1f;在本文中&#xff0c;我们将讨论简化生产部署的一些基本提示和技巧。 从自动化构建过程到优化发布策略&am…

Java高级应用——多线程

目录 多线程 相关名词解释 程序、进程与线程 并行与并发 单核与多核 Java多线程概述 Test测试框架测试多线程的注意事项 主线程和子线程的概念 Test测试类需要使用.join()方法来确保子线程执行完毕 线程调度&#xff08;目前仅了解&#xff09; 守护线程&#xff08;…

【Linux】Linux 常用命令

Linux 常用命令 1. 复制/粘贴2. 查看目录和文件: ls3. 查看当前目录: pwd4. 切换目录: cd5. Linux 目录结构6. 绝对路径 vs 相对路径7. tab 键补全8. ctrl c 重新输入9. 创建文件: touch10. 查看文件内容: cat11. 写内容 echo12. 创建目录: mkdir12. 删除文件: rm13. 拷贝文件…

易基因直播预告|细菌微生物基因表达调控表观研究易基因科技

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 DNA甲基化是在半个多世纪前在细菌中发现的。DNA碱基可以作为一个表观遗传调节因子——也就是说&#xff0c;它可以赋予相同的基因序列不同的和可逆的调控状态。在真核生物中&#xff0c;…

可变形注意力转换器综述

这篇文章基于本文的发现 一、说明 关于注意力机制&#xff0c;关于transformer等存在大量的研究和尝试&#xff0c;这些研究有的被沙汰&#xff0c;有的被采用并发扬光大&#xff0c;本篇对可变卷积、可变局部注意力机制和全局注意力机制做详细解释。因为这些模型规模巨大&…

【前端面试题】2023年 国庆 前端面试真题之JS篇

人的一生&#xff0c;总是难免有浮沉。不会永远如旭日东升&#xff0c;也不会永远痛苦潦倒。反复地一浮一沉&#xff0c;对于一个人来说&#xff0c;正是磨练。因此&#xff0c;浮在上面的&#xff0c;不必骄傲&#xff1b;沉在底下的&#xff0c;更用不着悲观。必须以率直、谦…