SLAM概述与预备知识
一、熟悉 Linux
1.1.如何在 Ubuntu 中安装软件(命令行界面)?它们通常被安装在什么地方?
- Ubuntu 中安装软件(命令行界面):
- 在线安装:
sudo apt-get install xxx
; - 本地安装:
sudo dpkg -i xxx.deb
- 软件安装位置:
- 一般在
/usr/bin
中
1.2. linux 的环境变量是什么?我如何定义新的环境变量?
-
Linux环境变量是系统预定义的参数
-
环境变量定义:
- 临时:在终端中直接使用export指令添加,eg. export AA="hello world"
- 长期:在~/ .bashrc文件中添加export指令。
1.3. linux 根目录下面的目录结构是什么样的?至少说出 3 个目录的用途。
- 目录结构
bin/ dev/ home/ lib64/ mnt/ proc/ run/ snap/ sys/ usr/
boot/ etc/ lib/ media/ opt/ root/ sbin/ srv/ tmp/ var/
- 目录用途
- bin: 存放二进制可执行文件
- dev: 外接设备文件
- home: 通常用来保存用户的文件
1.4. 假设我要给 a.sh 加上可执行权限,该输入什么命令?
chmod +x a.sh
1.5. 假设我要将 a.sh 文件的所有者改成 xiang:xiang,该输入什么命令?
chown xiang:xiang a.sh
二、SLAM 综述文献阅读
2.1. SLAM 会在哪些场合中⽤到?
- AR和VR技术 ; 2) 无人驾驶;3) 多机器人协同作业
2.1 SLAM 中定位与建图是什么关系?为什么在定位的同时需要建图?
- 定位与建图:
-
定位:机器人获取自身在环境中位置
-
建图:机器人将周围环境信息制成地图
单独的定位是在已知地图的情况下,机器人通过传感器获 取外部信息来获得自己的具体位置,比如高精度地图下无人车的定位;单独的建图也有,例如三维重建技术,对一些建筑的精细化重建。
而SLAM的关键是在实时状态下,机器人可以在定位的同时建立环境地图。这样可以使得机器人可以在未知环境下,进行探索,并实时反馈各种突发情况,降低了自动机器人的环境应用限制。
2.3 SLAM 发展历史如何?我们可以将它划分成哪⼏个阶段?
SLAM的发展史,我从计算设备的发展程度,划分为3个阶段。
-
阶段1:机器人定位和环境重建各自研究,少有交集。
-
阶段2:随着硬件设备的发展,开始探索同时定位和建图的研究领域。
-
阶段3:多机器人协同作业,多智能体的SLAM的研究。例如,以万物可联的愿景,未来所有智能体都能自发的进行SLAM操作,获得动态地图,智能体间还能互动的提高各自的定位精度。
2.4 列举三篇在 SLAM 领域的经典⽂献。
[1] Zou D, Tan P. Coslam: Collaborative visual slam in dynamic environments. IEEE transactions on pattern analysis and machine intelligence. 2012 May 1;35(2):354-66.
[2] Forster C, Pizzoli M, Scaramuzza D. SVO: Fast semi-direct monocular visual odometry. In2014 IEEE international conference on robotics and automation (ICRA) 2014 May 31 (pp. 15-22). IEEE.
[3] Mur-Artal R, Montiel JM, Tardos JD. ORB-SLAM: a versatile and accurate monocular SLAM system. IEEE transactions on robotics. 2015 Aug 24;31(5):1147-63.
三、 CMake 练习
四、理解 ORB-SLAM2 框架
4.1 从 github.com 下载 ORB-SLAM2 的代码
4.2 ORB-SLAM2 的 CMakeLists.txt 解读
a) ORB-SLAM2 将编译出什么结果?有⼏个库⽂件和可执⾏⽂件?
- 编译输出多个可执行文件程序和多个库文件。
- 库文件:通过
/src
文件夹中的.cc文件生成动态库文件ORB_SLAM2。 - 可执行文件:rgbd_tum、stereo_kitti、stereo_euroc、mono_tum、mono_kitti、mono_euroc 。
b) ORB-SLAM2 中的 include, src, Examples 三个⽂件夹中都含有什么内容?
- /include:对应c++函数的头文件
- /src:主函数c++文件
- /Examples:相机的主程序。
c) ORB-SLAM2 中的可执⾏⽂件链接到了哪些库?它们的名字是什么?
- OPENCV_LIBS
- EIGEN3_LIBS
- Pangolin_LIBRARIES
- /ORB-SLAM2/Thirdparty/DBoW2/lib/libDBoW2.so
- /ORB-SLAM2/Thirdparty/g2o/lib/libg2o.so