研0学生,放假宅家,本科期间对其感兴趣,故开始学习。
一个人学有点无聊,可以一起来学呀!参考书:高翔《slam十四讲》第二版
我会在我的笔记中,结合自己的理解复述内容,并对代码部分完成复现。有问题的可以留言或者私信噢!
开发环境:虚拟机Ubuntu22.04+Vscode。
SLAM:Simultaneous Localization and Mapping
中文名:同时定位与地图构建
基本定义:搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。
这里的传感器主要为相机,则为“视觉SLAM”
第1讲:预备知识——已学完7.10
第2讲:SLAM系统概述,介绍SLAM组成模块,各模块具体工作。编程环境搭建以及IDE使用——已学完7.10
第3讲:三维刚体运动,主要了解旋转矩阵,欧拉角,四元数,练习使用Eigon——已学完7.11
第4讲:学习李群和李代数,定义及使用方式;练习使用Sophus操作
第5讲:针孔相机模型,图像在计算机中的表达;用OpenCV调用相机内外参——已学完7.12
第6讲:非线性优化,包括状态估计理论基础,最小二乘问题,梯度下降法;使用Ceres和g2o进行曲线拟合实验
第7讲:基于特征点法视觉里程计,特征提取与匹配,对极几何约束的计算、PnP和ICP等。利用以上方法估计两个图像之间的运动。
第8讲:直接法视觉里程计,学习光流法和直接法原理,利用以上方法实现简单的直接法运动估计。
第9讲:后端优化,主要对Bundle Adjustment(BA)深入讨论,利用稀疏性加速求解过程,利用Ceres和g2o分别书写BA程序。
第10讲:后端优化中的位姿图,介绍SE(3),Sim(3)位姿图,使用g2o对一个位姿球进行优化
第11讲:回环检测,介绍以词袋模型为主的回环检测,使用DBoW3书写字典训练程序和回环检测程序
第12讲:地图构建,使用单目进行稠密深度图的估计,讨论RGB-D的稠密地图构建过程
第13讲:工程实践,搭建双目视觉里程计框架,综合运用之前的知识,利用Kitti数据集测试性能
第14讲:介绍当前开源SLAM方案以及未来的发展方向
SLAM回答了两个关键问题:
安装于环境中的:二维码,GPS;
携带于机器人本体的:
对比激光和相机两大类传感器,激光建图基本上已经研究清楚,视觉SLAM还没有稳定可靠运行;
摄像头优点:轻便、便宜、信息丰富;
缺点:遮挡、受光照影响、计算量大;
种类:单目,双目,深度相机(TOF:Time of flight/结构光)
传感器信息读取:在视觉SLAM中主要为相机图像信息的读取和预处理。如果是机器人中,还可能是码盘、惯性传感器等信息的读取和同步
前端视觉里程计(Visual Odometry,VO):视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子,又称为前端(Front End)
后端非线性优化(Optimization):后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对他们进行优化,得到全局一致的地图。由于在VO之后,又被称为后端(Back End)
回环检测(Loop Closure Detection):回环检测机器人是否到达过先前的位置,如果检测到回环,它会把信息提供给后端进行处理。
建图(mapping):它根据估计的轨迹,建立与任务要求对应的地图
关于SLAM的数学描述,主要有两个方程,分别为位置方程和观测方程:
x k = f ( x k − 1 , u k , w k ) z k , j = h ( y j , x k , v k , j ) x_{k} =f(x_{k-1},u_{k},w_{k})\\ z_{k,j} =h(y_{j},x_{k},v_{k,j}) xk=f(xk−1,uk,wk)zk,j=h(yj,xk,vk,j)
x k x_{k} xk表示机器人当前所处的位置, x k − 1 x_{k-1} xk−1表示机器人 k − 1 k-1 k−1时刻所处的位置, u k u_{k} uk是运动传感器的读数或者输入;
z k , j z_{k,j} zk,j表示机器人在 x k x_{k} xk位置上看到的某个路标点 y j y_{j} yj时产生的观测数据;
另外,无论是位置方程还是观测方程均要引入噪声,也就是式子中的 w k w_{k} wk和 v k , j v_{k,j} vk,j,也因此需要在后端进行优化,或者说状态估计,来找到一个最有可能的位姿图。
这两张的知识并不难理解,对slam有一个宏观的认识,后面的基础知识才是重点。