-
第一讲
SLAM 的目的是解决“定位”、“地图构建”两个问题。其中,定位:估计传感器自身的位置,地图构建:建立周围环境的模型。 -
第二讲
常用相机类型:单目相机,双目相机,深度相机单目相机:结构简单,成本低。以二维的形式反映三维世界,丢掉了场景中的一个维度,也就是所谓的深度。通过移动相机,改变相机的视角来恢复深度,这也是为什么单目SLAM初始化的时候要有一定的平移。(比较常用的深度恢复的方法有三角测量,也称三角化。)虽然能够通过一定的方法恢复出深度,但是它们仍然只是一个相对值,与真实值之间相差一个因子,也就是尺度。单目SLAM无法仅凭图像确定真实尺度,称为尺度不确定性。(一定要注意区分深度和尺度,是两个完全不同的概念。)
双目相机:双目相机通过基线来估计每个像素的空间位置,其配置和标定均较为复杂,其深度量程和精度受双目的基线与分辨率所限制,并且非常消耗计算资源,需要使用GPU,FPGA设备加速才能做到实时输出。
深度相机,又称RGB-D相机。通过红外结构光和TOF原理测出相机与物体之间的距离,相比于双目相机,能够节省大量计算。常用的相机包括:Kinect/Kinect V2、Xtion Pro Live、RealSense。缺点:测量范围窄,噪声大,视野小,易受日光干扰,无法测量透射材质等。
经典视觉SLAM框架:见书17页。
视觉里程计(前端):估算相邻图像间的运动。
后端优化:主要指处理SLAM过程中噪声的问题。滤波、非线性优化、图优化。
回环检测:图像间的相似性,检测出回到原始位置,交由后端优化校正整个轨迹的形状。
建图:度量地图:分为稀疏和稠密两种,强调精确地表示地图中物体的位置关系。拓扑地图:更强调地图元素之间的位置关系。SLAM问题的数学表述:运动方程、观测方程。
编程基础:使用cmake、使用库。
CMakeLists.txt 的写法:
##声明要求的cmake最低版本
cmake_minimum_required(VERSION 2.8)
##声明一个cmake工程
project(HelloSLAM)
##添加一个可执行程序
##add_executable(程序名 源代码文件)
add_executable(helloSLAM helloSLAM.cpp)
在C++工程中,只有带main函数的文件才能生成可执行程序,另一些代码,只想把他们打包成一个东西,供其他程序调用,这个东西叫做库。
声明库需要在cmakelists.txt文件中加上:
add_library(hello,libhelloslam.cpp)
使用库,还需一个头文件,说明库里有什么。另外还需将库链接到程序中。
target_link_libraries(usehello,hello_shared)