博客记录了浙大刘勇教授在2016年国防科大暑期学校的SLAM专题讲座内容,并附带了相关资源链接。
视觉里程估计 VO
-
VO只关注轨迹的局部一致性
-
SLAM同事关注地图与轨迹的全局一致性
-
VO牺牲一致性换取实时性
基础知识
-
透视投影模型 相机模型
-
极线约束(epipolar constraint)维基百科——极线约束
VO的通常计算过程
-
估计两相邻图像帧之间的相对运动
-
连接多帧获得连续运动轨迹
-
采用pose graph或者bundle Adjustment优化最近m个相机姿态,获得较好的最近局部轨迹
VO计算的前端和后端
-
前端(front-end)
-
特征提取 feature extracting
-
特征匹配 feature matching
-
外点剔除 outliner removal
-
闭环检测 loop closure detection
-
-
后端(back-end)
- 位姿(pose)与结构(structure)的优化
相对运动估计
基于特征的VO估计方法
-
提取两帧的特征(RANSAC剔除外点)
-
最小化重投影误差
基于直接VO估计方法
- 最小化光度测量误差(photometric error)
比较
基于特征的VO方法 | 直接VO方法 |
---|---|
支持大帧间运动 | 图像中的所有信息都会被用到(精确,鲁棒) |
高效率实时优化获得结构与运动 | 提高帧率可降低平均每帧的计算代价 |
特征提取和匹配导致效率低 | 仅支持有限的帧间运动 |
可能匹配到外点 | 联合优化稠密的结构运动序列代价太高 |
VO计算流程图
** 增量式的计算相机路径(pose by pose)**
图像特征
-
至少需要5对特征点对完成两帧之间的运动估计
-
检测出显著特征点(detector)
-
从不同图像中检测到相同显著特征点,需要重复性高的检测算子(detector)
-
获得足够信息识别另一帧图像中的同一个点,需要区分性强的描述算子(descriptor)
-
延伸阅读: Performance evaluation of feature detection and matching in stereo visual odometry
特征检测匹配加速策略
-
特征检测与匹配通常是VO的计算瓶颈:
- 每帧执行100+次
-
解决思路:限制搜索区间
-
应用运动模型估计(IMU或GPS估算)
-
金字塔搜索:低分辨率图像中粗匹配,高分辨率图像中精确定位
-
鲁棒的特征检测匹配
-
特征匹配的准确性直接关系到运动估计的精度
- 需要进行模型拟合及外点剔除
-
RANSAC算法(Random Sample Consensus)
-
随机选取N个数据
-
选用待估计模型(线性或非线性最小二乘等)进行参数估计
-
计算符合待估计模型(满足一定的误差冗余度T)的数据点数k,如果k是目前最大的,接受当前确定的模型
-
重复上述步骤S次
-
运动估计
-
2D-2D :从图像匹配点对中估计运动
-
匹配的点对都是2D图像点
-
求解过程最小化投影误差(最少需5个点对)
-
可采用8点法,5点法
-
-
3D-2D : 从图像点与3D结构点对中估计运动
-
也称为PnP问题,最少需3个点对
-
求解过程最小化投影误差
-
-
3D-3D : 从三维结构点对中估计运动(点云注册)
-
常用于立体视觉VO中,最少需要3对非共线的点对
-
求解过程最小化如下三维欧式距离
-
常用算法:ICP,BA,全局注册法
-
运动估计方法小结
估计方法 | 单目VO | 双目VO |
---|---|---|
2D-2D | √ | √ |
3D-3D | √ | |
3D-2D | √ | √ |
位姿-图(pose-graph)优化
-
目前为止仅考虑连续帧间的运动估计
-
非相邻帧间的运动也可以进行估计,只要共同的特征还可以被观测到,因此可以用这些帧作为额外的约束以提高相机位姿精度,如下:
-
仅考虑最近的m帧,通常采用高斯-牛顿,L-M,大图优化采用优化工具g2o,GTSAM,Google Ceres
集束调整(Bundle Adjustment)
-
类似于位姿图优化,但是同时优化3D点
-
为了不陷入局部最小,需给一个较为接近最小值的初值
-
可采用高斯-牛顿,L-M,更高效的大图优化采用优化工具,g2o,GTSAM,Google Ceres
Bundle Adjustment vs Pose-graph Optimization
-
BA 由于增加了landmark点的约束,比pose-graph优化更精确
-
BA计算代价(O(qM+kN)^3)高于Pose-graph优化,其中N是特征点数,M是相机位姿数,q是特征点的参数数,k是相机的参数数。
-
小窗口范围的BA可以取得实时计算效果
-
可采用landmark点参数固定,仅优化相机位姿的方法降低计算复度(motion-only BA)
-
立体视觉里程估计 SVO
SVO的通常计算过程
-
获得左右图像、图像校正
-
提取图像特征点
-
左右图像特征匹配、获取特征点坐标
-
前后图像特征匹配
-
增量式的运动估计
提取图像特征点
左右图像特征匹配、获取特征点坐标
对于校正的左右图像,其基线是水平的,选取左图特征点临近的N*N个像素组成patch,进行相似性检验
增量式的运动估计
根据匹配后的特征点和特征点的坐标,恢复两个时刻相机的运动在匹配过程中,存在大量的误匹配,需要用RANSAC(MLESAC)!
-
从M中选取3个点对
-
由3个点对估计参数
-
根据估计参数得到的模型计算误差,如果小于给定误差,则认为是inlier
-
重复S次,找到inliers最大的点集
-
对该点集进行计算,得到最终T
视觉里程计讲解
VISO2-S – StereoScan: Dense 3d Reconstruction in Real-time IV 2011
主要流程
SSLAM – Robust Selective Stereo SLAM without Loop Closure and Bundle Adjustment ICIAP 2013
2FO-CC – Improving the Egomotion Estimation by Correcting the Calibration Bias VISAPP 2015
MFI – Visual Odometry by Multi-frame Feature Integration. ICCV2013
SOFT – Stereo odometry based on careful feature selection and tracking ECMR , 2015
常用开源系统与算法
开源视觉里程计算法:
-
Modified PTAM: (feature-based, mono):
https://wiki.ros.org/ethzasl_ptam
-
LIBVISO2 (feature-based, mono and stereo):
https://www.cvlibs.net/software/libviso
-
SVO (semi-direct, mono, stereo, multi-cameras):
httpss://github.com/uzh-rpg/rpg_svo
-
更多开源算法:
https://www.cvlibs.net/datasets/kitti/eval_odometry.php
开源优化算法:
-
GTSAM: httpss://collab.cc.gatech.edu/borg/gtsam
-
G2o: httpss://openslam.org/g2o.htm
-
Google Ceres Solver: https://ceres-solver.org/
公开数据集
-
KITTI: https://www.cvlibs.net/datasets/kitti/
-
TUM:httpss://vision.in.tum.de/data/datasets/rgbd-dataset/download
-
NYU Depth: https://cs.nyu.edu/~silberman/datasets/
-
Collection of MRPT: https://www.mrpt.org/robotics_datasets
-
ASL Dataset: https://projects.asl.ethz.ch/datasets/doku.php?id=home
总结与展望
-
VO可估计机器人6DoF姿态和轨迹
-
VO基本流程
-
特征提取/匹配
-
运动估计:2D-2D/ 3D-3D/ 3D-2D
-
局部优化:g2o, BA
-
VO局限
-
-
鲁棒性受到图像质量影响(光照,运动目标,模糊,遮挡等)
-
计算实时性与精度的折中