《视觉SLAM十四讲笔记摘录
- ch02 初识SLAM
-
- 经典视觉SLAM框架
- SLAM数学表达问题
- ch03 三维空间刚体运动
-
- 旋转矩阵
-
- 点与向量,坐标系
- 欧氏变换坐标系
- 转换矩阵和齐次坐标
- 齐次坐标(Homogeneous Coordinate)的优势
-
-
- 优势1:方便判断是否在直线或平面上
- 优点2:方便表示线路交点和点共线
- 优点3:能区分向量和点
- 优点4:能表达无限的远点
- 优点5:可以简单地表示变化
-
- 旋转向量和欧拉角
-
- 旋转向量
- 欧拉角
- 四元数
-
- 定义四元数
- 用单位四元数表示旋转
- ch04 李群和李代数
-
- 李群和李代数基础
-
- 群的定义
- 定义李代数
- 李代数 s o ( 3 ) \mathfrak{so}(3) so(3)
- 李代数 s e ( 3 ) \mathfrak{se}(3) se(3)
- 李群与李代数的转换关系:指数映射和对数映射
-
- S O ( 3 ) SO(3) SO(3)和 s o ( 3 ) \mathfrak{so}(3) so(3)转换关系
- S E ( 3 ) SE(3) SE(3)和 s e ( 3 ) \mathfrak{se}(3) se(3)转换关系
- 李代求导: 引入李代数的主要动机之一是方便求导和优化
-
- 李群乘法与李代数加法的关系
- S O ( 3 ) SO(3) SO(3)上李代数求导
-
- 李代数求导
- 扰动模型(左乘)
- S E ( 3 ) SE(3) SE(3)上的李代数求导
- ch05 相机与图像
-
- 针孔相机模型
- 畸变模型
- 单目相机的成像过程
- ch06 非线性优化
-
- 状态估计问题
-
- 最大后验与最大似然
- 最小二乘
-
- 基于观测数据 z z z的最小二乘
- 基于观测数据 z z z和输入数据 u u u的最小二乘
- 非线性最小二乘
-
- 一阶和二阶梯度法
- 高斯牛顿法
- 列文伯格-马夸尔特方法
- ch07 视觉里程计01
-
- 特征点匹配
-
- 特征点
- 根据特征点匹配计算相机运动
-
- 2D-2D匹配: 对极几何
-
- 对极约束
- 本质矩阵 E E E的求解
- 对极几何的讨论
- 3D-2D匹配: PnP(Perspective-n-Point)
-
- 直接线性变换(DLT): 先求解相机位姿,再求解空间点位置
- P3P: 先求解空间点位置,再求解相机位姿
- Bundle Adjustment: 最小化重投影误差,同时求解空间点位置和相机位姿
- 3D-3D匹配: ICP
-
- SVD方法
- 非线性优化方法
ch02 初识SLAM
经典视觉SLAM框架
视觉SLAM流程包括以下步骤:
-
传感器信息读取: 在视觉SLAM中主要为相机图像信息的读取和预处理.如果是在机器人中,还可能有码盘、惯性传感器等信息的读取和同步.
-
视觉里程计(Visual Odometry,VO): 视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子.VO又称为前端(Front End).
视觉里程计不可避免地会出现累积漂移(Accumulating Drift)问题.
-
后端优化 (Optimization): 后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图.由于接在VO之后,又称为后端(Back End).
在视觉 SLAM中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法.
-
回环检测 (Loop Closing): 回环检测判断机器人是否到达过先前的位置.如果检测到回环,它会把信息提供给后端进行处理.
-
建图 (Mapping): 它根据估计的轨迹,建立与任务要求对应的地图.
地图的形式包括度量地图(精确表示地图物体的位置关系)与拓扑地图(更强调地图元素之间的关 系)两种.
SLAM问题的数学表述
“小萝卜携带着传感器在环境中运动”,由如下两件事情描述:
-
什么是运动 ?我们要考虑从 k − 1 k-1 k−1时刻到 k k k时刻,小萝卜的位置 x x x是如何变化的.
运动方程:
x k = f ( x k − 1 , u k , w k ) x_k = f(x_{k-1}, u_k, w_k) xk=f(xk−1,uk,wk)
- x k , x k − 1 x_k, x_{k-1} xk,xk−1表示小萝卜在 k k k和 k − 1 k-1 k−1时刻的位置
- u k u_k uk表示运动传感器的读数(有时也叫输入)
- w k w_k wk表示噪声
-
什么是观测 ?假设小萝卜在 k k k时刻于 x k x_k xk处探测到了某一个路标 y j y_j yj,我们要考虑这件事情是如何用数学语言来描述的.
观测方程:
z k , j = h ( y j , x k , v k , j ) z_{k,j} = h(y_j, x_k, v_{k,j}) zk,j=h(yj,xk,vk,j)
- z k , j z_{k,j} zk,j表示小萝卜在 x k x_k xk位置上看到路标点 y j y_j yj,产生的观测数据
- y j y_j yj表示第 j j j个路标点
- v k , j v_{k,j} vk,j表示噪声
这两个方程描述了最基本的SLAM问题:当知道运动测量的读数 u u u ,以及传感器的读数 z z z 时,如何求解定位问题(估计 x x x )和建图问题(估计 y y y)?这时,我们就把SLAM问题建模成了一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏着的状态变量?
ch03 三维空间刚体运动
旋转矩阵
点和向量,坐标系
-
向量 a a a在线性空间的基 [ e 1 , e 2 , e 3 ] [e_1, e_2, e_3] [e1,e2,e3]下的坐标为 [ a 1 , a 2 , a 3 ] T [a_1, a_2, a_3]^T [a1,a2,a3]T.
a = [ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = a 1 e 1 + a 2 e 2 + a 3 e 3 a = [e_1, e_2, e_3] \left[\begin{array}{c} a_1 \\ a_2 \\ a_3 \end{array}\right] = a_1e_1 + a_2e_2 + a_3e_3 a=[e1,e2,e3]⎣⎡a1a2a3⎦⎤=a1e1+a2e2+a3e3
-
向量的内积与外积
-
向量的内积: 描述向量间的投影关系 a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ cos ⟨ a , b ⟩ a \cdot b = a^T b = \sum_{i=1}^3 a_ib_i = |a|\,|b| \cos \langle a,b \rangle a⋅b=aTb=i=1∑3aibi=∣a∣∣b∣cos⟨a,b⟩
-
向量的外积: 描述向量的旋转 a × b = [ i j k a 1 a 2 a 3 b 1 b 2 b 3 ] = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b ≜ a ∧ b a \times b = \left[\begin{array}{ccc} i & j & k \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ \end{array}\right] = \left[\begin{array}{c} a_2b_3 - a_3b_2 \\ a_3b_1 - a_1b_3 \\ a_1b_2 - a_2b_1 \end{array}\right] = \left[\begin{array}{ccc} 0 & -a_3 & a_2\\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{array}\right] b \triangleq a ^\wedge b a×b=⎣⎡ia1b1ja2b2ka3b3⎦⎤=⎣⎡a2
-