-
数学基础
- 旋转矩阵,平移矢量
- 四元数
- 欧拉角
-
三大模块
- 前端的视觉里程计
- 后端优化
- 回环检测
-
前端里程计
- 根据传回的图像计算相机的帧间运动
- 估计路标点大致的空间位置坐标
-
后端优化
- 说白了是起到了状态预测的作用
- 根据前段在不同时刻计算的相机位姿来计算最大后验概率
-
回环检测
-
判断相机是否回到了先前的位置,修正误差,使构建的点云图最大接近于实际
当相机到达先前的位置时,由于计算过程和传感器等造成的误差,很难使得构建出来的点云图实现曲线闭合
-
前段视觉里程计部分
-
相机的选取
- 单目相机
- 优点:便宜
- 缺点:初始化很难,容易tracking lost; 容易出现数据丢失,尺度不确定性问题(比如深度数据丢失)
- 双目相机
- 优点:被动计算,可以通过计算获得物体的深度信息
- 缺点:计算量较大,在特征比较少的白墙,沙漠容易tracking lost;
- RGB-D
- 优点:主动测量,可以通过传感器测得深度信息,且不易tracking lost;
- 缺点:money;受阳光,墙面反光影响
- 单目相机
-
怎么通过图像计算帧间运动
针孔相机模型
-
n在视觉里程计中,一个最基本的问题是:给定两个已经成功匹配的空间点在相机平面投影的坐标,如何计算相机在这两个空间点之间的运动状态
-
问1:怎么进行点的匹配
-
每帧图像包含的信息:关键点和描述子
关键点是图像信息最集中的部分
描述子是区别于每个特征点之间的信息,对不同帧之间的同一特征点进行匹配
-
特征点匹配算法:ORB,SIFT,SURF 等
-
-
问2:如何计算状态
-
计算方法:对极几何方法,PNP方法,ICP方法
对极几何方法:确定两组像素的位置,估计相机的运动状态。每两个成功匹配的点可以提供一组__对极约束__,提供八个点就可以确定本质矩阵,(八点法),对本质矩阵进行SVD分解,就可以解出相机的旋转矩阵R和旋转矢量t。
PNP方法:知道一组匹配点的空间位置和在相机平面的投影位置,估计相机运动状态。
ICP方法:知道两组点的空间位置,估计相机运动状态。
-
-
后端优化部分(多为一些比较成熟的算法)
-
主要算法
-
基于滤波器:KF,EKF
EKF:将系统线性化,用高斯分布近似观测噪声,并利用卡尔曼滤波进行状态更新
-
基于非线性优化:图优化,因子图
图优化:给定初值之后不断迭代更新图,主要利用的是g2o库
-
回环检测部分
作用:当相机在空间中运动的时候,很有可能出现相机所在的点在之前到达过的情况。此时三维重建的点云图上,相机的运动轨迹应该是闭合的曲线。但是由于传感器存在误差,计算过程也有很大的误差,所以点云图上,相机的轨迹通常不闭合。词袋检测可以判断相机是否在曾经到达过当前点,如果到达过,则让点云图轨迹闭合。
-
实现方法:创建词袋.
可以理解为一个袋子,这个袋子里装着每一帧图像中的特征元素。利用词袋比较每两帧图像的相似度,当相似度大于某一个阈值的时候,就认为这两幅图像是在同一点观测到的,相机回到了曾经到达过的位置。