小编研究生的研究方向是视觉SLAM,目前在自学,已经学了Linux系统的基本操作,vim编辑器以及高翔老师的一些视屏。本篇文章为初学笔记。
可以使用 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/是用户安装的程序
环境变量,就是存在当前环境中的变量,无论是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
最后保存注销重新登陆
这三种环境变量,①和②比较简单,这里便不在演示,这里着重演示以下③
/bin | 二进制可执行命令。该目录下存放着普通用户的命令 |
---|---|
/dev | 系统的设备文件,即设备的驱动程序 |
/home | 用户主目录的基点 |
/lost-found | 这个目录平时是空的,当系统非正常关机而留下的“无家可归”的文件便会储存在这里 |
/misc | 储存着一些特殊的字符的定义 |
/net | 存放着和网络相关的一些文件 |
/proc | 存放着用户与内核的交互信息 |
/sbin | 系统的管理命令,这里存放的是系统管理员使用的程序 |
/srv | 系统启动服务时可以访问的数据库目录 |
/tmp | 临时文件,重启后自动清空 |
/var | 某些大文件的溢出区,比如各种服务的日志文件 |
/boot | 启动linux的核心文件 |
/etc | 系统所有的配置文件都在这个目录中 |
/lib | 存放着和系统运行相关的库文件 |
/media | 存放着可移除的设备,比如软盘,光盘 |
/mnt | 挂载目录,是系统管理员临时安装文件的系统安装点 |
/opt | (option : 自由选择)主要给源码安装软件时选择的安装目录位置 |
/root | 超级用户的目录 |
/selinux | 主要用来加固操作系统,提高系统的安全性 |
/sys | 管理设备文件 |
/usr | 最大的目录,存放着应用程序和文件 |
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如果大家想看更具体的,可以看我之前写过的博客,此为连接
链接: link如果大家想看更具体的,可以看我之前写过的博客,此为连接
1.手持设备定位
2.自动驾驶定位
3.AR(增强现实)
定位是为了精确地确定当前设备在某个环境中的姿态和位置;建图将周围环境的观测部分整合到一个单一的模型中。最初定位和建图是两个相互独立的关系,后来发现这两个步骤是相互依赖的。建图的准确性依赖于定位精度,而定位的实现又离不开精确的建图。
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.
[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.
include中放头文件,src中放源文件。
运行指令:
cd cmakebuild2
cmake ..
make
./sayHello
输入以下指令即可运行出Hello SLAM!
这里只做简单的运行演示,如果需要是自学小白需要从头看演示的,可以看我写的一篇cmake的使用教程,包括两部分内容,一部分是简单的直接编译,另一种是稍微复杂的包含库的。
链接如下:
链接: cmake使用
命令:
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