目录
一、定义
slamslamSlam是同时定位与地图构建(Simultaneous Localization and Mapping)的简称,搭载特定传感器的主体(机器人、无人机、无人车、XR眼镜等)在未知环境中从一个未知位置开始移动,在移动过程中根据位置和地图进行自身定位(位姿估计),同时在自身定位的基础上建造增量式地图。
而视觉slam (visual-slam),搭载的传感器是相机,通过一张张连续的图像推断相机的位姿变化和周围环境情况。由于各种噪声(传感器、环境等)造成的不确定性,为了避免误差累积,需要不断进行数据优化。
二、经典框架
视觉slam的经典框架:
1、传感器信息读取
主要是相机传感器,包括单目、双目、RGBD等,有时还包括惯性传感器(IMU:陀螺仪+加速度传感器),对这些传感器的信息进行读取和预处理
2、前端视觉里程计(Visual Odometry,VO)
根据传感器的信息估算相邻图像间相机的运动,以及局部地图的构建,VO又称为前端(Front End)。VO只有简单的位姿估计功能,不具备定位、导航、交互等复杂功能,只能存储局部状态。
3、后端优化(Optimization)
后端(Back End)接受VO测量的相机位姿及回环检测的信息,并对他们进行优化,得到一个全局一直的轨迹和地图,简单来说就是用来减小累积误差。后端优化又分为滤波(KF、EKF等)和非线性优化(BA和图优化)。
4、回环检测(Loop Closure Detection)
回环用来判断机器人是否达到过先前的位置,如果检测到回环则发送给后端处理,是减小累积误差的关键。回环监测的方法包括随机检测、基于里程计的几何关系、基于外观的几何关系,而随着机器学习的发展,回环检测算法将会有进一步完善,比如直接从图像计算采集时刻相机的位姿来检测回环。
5、建图(Mapping)
根据估计的轨迹建立相应的地图,来完成定位、导航、避障、交互等任务
三、知识体系
Slam的知识体系十分庞大,涉及的学科和实践能力种类多并需要有一定深度,其中数学原理和C++编程更是理解slam理论和完成实践的难点和关键。
1、数学知识
①矩阵:
四则运算、求逆、反对称矩阵、矩阵分解(SVD、QR、Cholesky)
②李群和李代数:
指数对数映射、李代数求导、扰动模型
③非线性优化:
最速下降法、牛顿法、高斯牛顿法、LM算法、Dog-Leg算法、BA等
2、编程
①Linux操作
②C++基础
C++语法、cmake(编译)、Kdevelop(开发环境)
③第三方库
OpenCV(计算机视觉)
Eigen(几何变换)
Sophus(李代数)
Ceres(非线性优化)
G2o(图优化)
OpenGL(计算机图形学)
3、文档编辑
Gvim、vim等
4、计算机视觉
传感器、相机、特征点、多视角几何等,如下图所示,图源计算机视觉life公众号。
5、知识树