做此打卡,监督自己每天学点小东西,予百川汇海之效。同时,乱星式笔录自己之前未涉猎的知识点,待遗忘之时重拾“朝花”。
视觉SLAM学习打卡【1】
- 一、相机分类
- 1.单目(Monocular)相机
- 2.双目(Stereo)相机
- 3.深度(RGB-D)相机
- 二、“管理员”cmake
- 三、Linux 常用命令汇总
- 四、经典视觉SLAM框架
一、相机分类
1.单目(Monocular)相机
只使用一个摄像头。以二维的方式记录三维的世界,丢掉了场景的一个维度,即深度。通过相机移动使图像形成视差,判断物体远近。单目slam估计的轨迹和地图与真实的轨迹和地图相差一个因子,即“尺度”,存在尺度不确定性。
2.双目(Stereo)相机
由两个单目相机组成。通过软件计算测量深度,通过两相机之间的距离(称为基线)估计每个像素的空间位置,类似于人眼。基线距离越大,能够测量的物体就越远。
3.深度(RGB-D)相机
通过物理的测量手段,测出距离。通过主动向物体发射光并接受返回的光,测出物体与相机之间的距离。
二、“管理员”cmake
一个C++程序可以用g++编译,但当程序规模越来越大时,编译指令变得冗余繁琐.这时,使用cmake管理将会变得高效起来。
CMakeLists.txt文件
#声明要求的cmake最低版本
cmake_minimum_required(VERSION 2.8)
#声明一个cmke工程
project(hello world)
#添加一个可执行程序
add_executable(helloslam helloslam.cpp)
#语法 add_executable(程序名(在ros中称为节点名) 源代码文件)
#添加库 此cpp与源文件不同的是不含有main函数,没有可执行文件。编译后在build文件夹中生成libku.a静态库文件(是一个含有二进制函数的压缩包)
add_library(ku ku.cpp)
#静态库(.a后缀)每次调用生成一个副本,共享库(.后缀)只有一个副本,更省空间。
#生成共享库语法
add_library(ku_shared SHARED ku.cpp) #编译后在build文件夹中生成libku_shared.so共享库文件
#链接库 语法target_link_libraries(可执行文件 库文件)
add_executable(use_lib use_lib.cpp) #use_lib.cpp中包含头文件
target_link_libraries(use_lib ku_shared)
三、Linux 常用命令汇总
命令 | 说明 |
---|---|
ls | 查看当前目录下的文件列表 |
cd / | 转到根目录 |
cd /home | 比如进入 ‘/ home’ 目录’ |
cd … | 返回上一级目录 |
cd …/… | 返回上两级目录 |
pwd | 比如切换到 home目录,执行命令 pwd ,显示 /home路径 |
mkdir test | 创建一个叫做 ‘test’ 的目录’ |
touch | 创建新文件,他可以创建一个空白的文件,可以在其中添加文本和数据。touch newfile 该命令创建一个名为newfile 的空白文件 |
less abc.txt | 查看 abc.txt 文本内容(不必读整个文件,加载速度会比 more 更快) |
more abc.txt | more abc.txt |
四、经典视觉SLAM框架
1.传感器信息读取: 在视觉SLAM中主要为相机图像信息的读取和预处理。如果是在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。
2.视觉里程计(Visual Odometry,VO): 视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子。VO又称为前端(Front End)。视觉里程计不可避免地会出现累积漂移(Accumulating Drift)问题.
3.后端优化 (Optimization): 后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在VO之后,又称为后端(Back End)。在视觉 SLAM中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。
4.回环检测 (Loop Closing): 回环检测判断机器人是否到达过先前的位置.如果检测到回环,它会把信息提供给后端进行处理。
5.建图 (Mapping): 它根据估计的轨迹,建立与任务要求对应的地图。地图的形式包括度量地图(精确表示地图物体的位置关系)与拓扑地图(更强调地图元素之间的关系)两种。