自学视觉SLAM(1)

引言

在这里插入图片描述

小编研究生的研究方向是视觉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.mzph.cn/news/88241.shtml

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

相关文章

Python爬虫之入门保姆级教程

目录 一、分析要爬取的网站 二、导入相关库 三、相关的参数 四、向网站发出请求(使用代理IP) 五、匹配 六、获取图片,保存到文件夹中(os库) 七、完整代码 总结 相信许多人都曾为如何入门Python爬虫而烦恼。今天…

FastChat 大模型部署推理;Baichuan2-13B-Chat测试、chatglm2-6b测试

参考: https://github.com/lm-sys/FastChat https://blog.csdn.net/qq128252/article/details/132759107 ##安装 pip3 install "fschat[model_worker,webui]"模型下载: ##模型下载;huggingface下载慢,可以在modelscop…

安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

执行上下文,js、React、HTML中的this

目录 执行上下文属性:变量对象、this,作用域链 变量对象是与执行上下文相关的数据作用域,存储:变量、函数声明 执行上下文生命周期 创建:生成变量对象、创建函数作用域,建立作用域链、确定this的指向 …

经典文献阅读之--EGO-Planner(无ESDF的四旋翼局部规划器)

0. 简介 作为局部规划器而言,当机器人或无人机想要避开动态障碍物时。局部规划器就显得尤为重要了。其中基于梯度的规划器被广泛用于四旋翼无人机的局部规划,其中欧几里得符号距离场(ESDF)对于评估梯度幅度和方向至关重要。然而&…

ARINC825规范简介

ARINC825规范简介 机载CAN网络通用标准 ARINC825规范全称为机载CAN网络通用标准(The General Standardization of CAN for Airborne Use)。顾名思义,ARINC825规范是建立在CAN物理网络基础上的高层规范。CAN网络使用共享的双绞电缆传输数据&…

电压放大器在无损探伤中的应用研究

电压放大器是一种常见的电子设备,其主要作用是将低电平信号转换为高电平信号。在无损探伤中,电压放大器被广泛应用于信号增益和分析,以便更好地检测表面或内部缺陷。下面安泰电子Aigtek将详细介绍电压放大器在无损探伤中的应用研究。 电压放大…

二、vue2脚手架-组件化开发

| vue中的图片打包后会转换为base64格式 组件的使用 1.创建组件:component文件夹中创建HelloWorld.vue文件 2.在app.vue中引入组件 组件间的通信/传值(常用) 一、prop父传子 1.App.vue中的引入组件中创建需要传递的数据 2.在子组件中接…

车厂造手机旗舰版售价6899,不只是个“车钥匙”

大伙应该发现了这两年的一个奇怪现象:造手机的跑去造车,而车厂又跑来造手机。 这也好解释,毕竟别人碗里的更香、别人老氵…板先挑衅是吧? 昨日,蔚来在其创新科技日活动中正式发布了传闻已久的手机产品 NIO Phone 。 …

掌动智能兼容性测试有哪些优势

兼容性测试为企业带来市场竞争优势,并提高用户满意度。在软件开发过程中,将兼容性测试作为一个重要的环节,将为企业的成功和用户满意度打下坚实的基础。那么,掌动智能兼容性测试的具体优势是什么?下面,就来看看具体介…

mdobus ASCII转CAN OPEN JAE1939协议网关

Modbus RTU协议转换网关是一种常见的设备,用于将Modbus RTU协议转换为其他通信协议。而CANopen是一种基于CAN总线的通信协议,主要用于工业自动化和控制系统中。本文将介绍Modbus RTU协议转换网关如何支持CANopen协议,以及该功能的应用场景和优…

【1】ElementUI 组件实际应用===》按钮的使用

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑 ,视频内容主要是对应文章的视频讲解形式。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘…

【JAVA EE】详解单点登录

作者简介 目录 1.概述 2.实现方案 2.1.分散鉴权 2.2.集中鉴权 1.概述 SSO,即进行一次认证,然后就可以访问所有子系统。很明显SSO只是一种具象化的目标而已,目前业内为了实现单点登录、统一鉴权,提出了一系列的打法。比如直接…

Unity3D C# 反射与特性的配合使用

需求分析 情况: 假如我们是一个动物园的管理员,我们需要统计园内的所有动物和动物的行为。 举例: 现在园区内有猫、狗和鸡。猫对应的行为是喵喵喵和卖萌,狗对应狗吠和干饭,鸡对应篮球和打鸣那么这时候我要统计这些&a…

Lyapunov optimization 李雅普诺夫优化

文章目录 正文引言Lyapunov drift for queueing networks 排队网络的Lyapunov漂移Quadratic Lyapunov functions 二次李雅普诺夫函数Bounding the Lyapunov drift 李亚普诺夫漂移的边界A basic Lyapunov drift theorem 一个基本的李雅普诺夫漂移定理 Lyapunov optimization for…

【C++】手撕string(string的模拟实现)

手撕string目录: 一、 Member functions 1.1 constructor 1.2 Copy constructor(代码重构:传统写法和现代写法) 1.3 operator(代码重构:现代写法超级牛逼) 1.4 destructor 二、Other mem…

【算法思想】贪心

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

探索ClickHouse——使用Projection加速查询

在测试Projection之前,我们需要先创建一张表,并导入大量数据。 我们可以直接使用指令,从URL指向的文件中获取内容并导入表。但是担心网络不稳定,我们先将文件下载下来。 下载文件 wget wget http://prod.publicdata.landregistr…

项目开发中使用Date和LocalDateTime处理日期

文章目录 项目开发中使用Date和LocalDateTime处理日期Date类型验证数据库表设计(年月日情况)实体类说明映射文件xml响应展示情况注意事项 LocalDateTime验证数据库设计实体类日期类型动态SQL日期类型响应展示情况 总结 项目开发中使用Date和LocalDateTim…

Windows10/11显示文件扩展名 修改文件后缀名教程

前言 写这篇文章的原因是由于我分享的教程中的文件、安装包基本都是存在阿里云盘的,下载后需要改后缀名才能使用。 但是好多同学不会改。。 Windows 10 随便打开一个文件夹,在上方工具栏点击 “查看”点击 “查看” 后下方会显示更详细的工具栏然后点…