SLAM
Simultaneous Localization And Mapping, 同步定位与构图
简述
Simultaneous Localization And Mapping, 同步定位与构图, 参考链接bilibili
- 输入
- 可见光视觉
- IMU, 用于 VR
- 激光雷达
- 声呐, 水下
- 应用领域
- 无人驾驶
- 虚拟现实(VR)
- 增强现实(AR)
- 无人机
- 自主服务机器人
- 算法
- EKF-SLAM
- FAST-SLAM, 需要现有常见的地图
- Graph-SLAM
- Scan matching
- RGTBD-SLAM
- ORB-SLAM
- LSD-SLAM
- LOAM, Ji Zhang
- 数据集
- KITTI
刚体运动
1. 相机位姿
1. 平移
2. 旋转
3D 坐标系的平移和旋转
原点的平移, 本质上就是两个坐标系原点的向量 \(t\)
X, Y, Z 轴的旋转, 在坐标系中的同一个向量左乘一个旋转矩阵(\(R\))得到
旋转矩阵的定义
\(R\) 的特性
角轴/旋转向量
另外一种表示旋转的方式
上图中, 红色的 w 为角轴, 向量 a 绕轴 n 旋转 theta 角度之后, 变换到了向量 b, w 称之为角轴或者旋转向量, n 表示旋转的方向, theta 表示旋转的大小
旋转向量与旋转矩阵的区别
四元数
另外一种表示旋转的方法, 在实际应用中比较广泛
a 与 b 向量的叉乘为, a 与 b 组成的平面的法向量的方向, 而长度是 a 与 b 向量组成的平行四边形的面积, 虚部之间的关系在上面的图片中有介绍到
刚体运动表示为: \(a'=Ra+t\)
再高一层次, 如果遇到多次变换, 则 3 会显得复杂繁琐, 可以将平移和旋转放到一个矩阵中, 这个矩阵称之为变换矩阵 (\(T\)), 之后就可以在两个坐标系中通过 \(a = Tb\) 计算
- 变换矩阵
反向计算 \(T\)
- 在实际应用中, 总是先得到世界坐标, 再通过计算得到相机位姿
群
一个集合再加上一个运算符且满足如下性质即为一个群
相机模型
- 相机记录的是真实世界在成像平面上的投影
- 在投影的过程中, 丢失了距离, 深度的信息
物理平面到像素平面
相机在拍摄图片的时候, 得到的是图像是在物理成像平面上的, 如果要得到其像素坐标(一般图像的基本单位是像素), 需要对单位进行映射
- P 为实际的点, P' 为成像平面上的点
- 以相机光心为原点的相机坐标系, 一般 Z 轴指向相机的正前方
- f 为 focal length, 表示焦距
- 通过三角形的相似公式可以得到像素平面的坐标, 但是因为是单目的, 无法得到几何信息
- Alpha 和 beta 表示比率, cx 和 cy 表示偏移量, 最终得到的 u 和 v 就是新的坐标系下的 P' 的坐标
- 最后一个公式, fx 和 fy 分别为 alpha 和 beta 与 f 混合的数
对上面的公式进行变换得到相机的内参数
一般相机的内参数在生成之后就已经固定了, 一般来说可以将其当做已知条件, 但是如果对图片进行 resize, clip, 或者 copy 等操作可能导致内参数改变
内参数包括
1. 相机成像平面在 x 和 y 轴方向上到像素平面的比率 2. 相机物理平面到像素平面的偏移量
上面的内参数可以简单的理解为相机的分辨率
相机的外参数
相机的外参数, 即相机的位姿(camera poses)
- 平移
- 旋转
双目模型
模拟人眼两只眼睛的工作
双目模型下 3D 坐标计算
- 参考链接
特征匹配
特征点
一般角点是特征点
FAST 与 SIFT 算法十分类似
FAST 计算特征点的方法
- 在 4x4 的区域内选择一个像素作为中心点, 如果在该区域内的像素值 P 与中心像素点 C 的差的绝对值大于一个阈值 T, 则认为该中心点可能为角点, 只要出现连续的 N 个这样的点, 就认为该中心点为角点, 这里的计算的实质就是计算像素的差, 判断是否为边界
- 对原图进行多尺度变换构成图像金字塔, 在重复 1 步骤, 得到 FAST 的多尺度信息
- 为每一个特征点计算出质心, 一般来说, 选取一块区域, 根据该区域的零阶矩和一阶距计算出质心, 几何中心到质心的方向就是该特征点的方向, 可以定义为 theta
- 计算 BRIEF 描述符
- 用来描述一个特征点额外的信息
- 将每张图片中的每一个特征点的特征点领域中的随机像素进行比较, 比如选出 128 对(a, b), 每一对比较大小, 如果 a>b 则输出1, 如果 a<b 则输出0, 最后每一个特征点会得到一个 1x128 维度的向量, 对另外一张图也是如此, 每一个特征点得到一个 1x128 的向量, 比较他们的汉明距离
- 参看链接ORB 特征提取、匹配及实现