VO视觉里程计
1
简介
VO(Visual Odometry)视觉里程计是通过车载摄像头或移动机器人的运动所引起的图像的变化,以逐步估计车辆姿态的过程。
前提假设
1, 环境照明充足
2, 静态场景相对动态场景较多
3, 有足够的纹理来提取明显的运动
4, 连续帧之间有足够的场景是重叠的
2
VO ,VSLAM,SFM对比
VO vs SFM
SFM比VO更通用,解决了无序图像集的三维重建和6DOF姿态估计问题。
VO是一个特殊的SFM情况。
VO专注于实时估计相机的三维运动。
术语:有时sfm用作vo的同义词。
VO vs Visual SLAM
VO仅针对轨迹的局部一致性。
SLAM的目标是实现里程计和地图的全局一致性。
VO可以用作slam的构建模块。
VO在SLAM回环检测之前。
VO和V-SLAM之间的选择取决于性能和一致性之间,以及实现的简单性的权衡。
VO利用一致性实现实时性能,而无需跟踪摄像机的所有历史信息。
3
VO工作原理
计算相对运动
恢复两帧之间的运动轨迹
对m个姿态进行优化,局部优化轨迹(使用姿态图或捆集调整BA)
4
如何估计相对运动?
Direct Image Alignment:有稠密,半稠密,稀疏三种方法,求像素的灰度值差最小化。
稀疏法-基于特征点的方法
提取特征和特征匹配(+RANSAC)
最小化重投影误差
优点
帧到帧之间可大运动
准确度:能够有效的优化结构和运动(捆集调整)
缺点
由于功能提取和匹配成本高昂,速度较慢
有异常值匹配(RANSAC)
直接法
最小化灰度误差
优点
可以利用图像中的所有信息(精度、鲁棒性)
增加摄像头帧速率可降低每帧的计算成本
缺点
帧到帧运动受限
密集结构和运动的联合优化成本太高
2D-to-2D
图像特征对应的运动
指定在二维图中两个特征点。
最少用到5对关联点。
最小化再投影误差
流行算法:8点和5点算法
3D-to-2D
三维结构运动与图像的对应
最少涉及3对关联点(+1对点用于消除歧义点)
最小化再投影误差找到解决方案:
流行算法:p3p
3D-to-3D
三维点对应运动(点云配准)
最少点解决方案涉及3对点。
最小化3D-3D欧几里得距离:
流行算法:用于全局配准,ICP用于局部优化或捆集调整(BA)
5
VO模块流程
Coner vs Blob
角点定义为一条或多条边的交点。
角点具有较高的定位精度
角点检测器适用于VO
E.g., Harris, Shi-Tomasi, SUSAN, FAST
一个Blob是图像块,它不是一个角,并在强度和质地上明显不同于它的相邻像素。
定位精度低于corner。
Blob探测器更适合位置识别。
它比角点更具有区别性。
E.g., MSER, LOG, DOG (SIFT), SURF, CenSurE
6
资料汇总
VO (i.e., no loop closing)
Modified PTAM: (feature-based, mono): http://wiki.ros.org/ethzasl_ptam
LIBVISO2 (feature-based, mono and stereo): http://www.cvlibs.net/software/libviso
SVO (semi-direct, mono, stereo, multi-cameras): https://github.com/uzh-rpg/rpg_svo
VIO
ROVIO (tightly coupled EKF): https://github.com/ethz-asl/rovio
OKVIS (non-linear optimization): https://github.com/ethz-asl/okvis
VSLAM
ORB-SLAM (feature based, mono and stereo): https://github.com/raulmur/ORB_SLAM
LSD-SLAM (semi-dense, direct, mono): https://github.com/tum-vision/lsd_slam
Open Source Optimiation Tools
GTSAM: https://collab.cc.gatech.edu/borg/gtsam?destination=node%2F299
G2o: https://openslam.org/g2o.html
Google Ceres Solver: http://ceres-solver.org/
如有补充请大家积极留言,并且希望大家能够在阅读论文或者有推荐的论文或者开源代码,只要和点云相关,都可以留言给群主,如果有必要将会出与你推荐相关的资料。希望大家能够积极参与分享。