无人机很快会在灾难救援,工业检测环境保护方面祈祷重要作用。这样的应用中获取GPS信息是困难的。因此精确的全自动UAV备选的导航定位系统。使用惯导系统的缺点是累积误差,GPS在受限于使用环境。为了减低重量和功率消耗,视觉导航方法的优点一是不易被干扰,另外是大部分无人机已经配备了相机,视觉系统协同IMU(Inertial Measurement Unit)的方案被广泛采用。本文主要关于VO里程计简介。
选择使用这个词因为它和轮式里程计类似,通过通过对轮子转动圈数积分,增量式估计机器的运动。VO由运动引起的机载相机捕获图像的变化增量式地估计机器的位姿。
和双目例程计最大的区别就是尺度未知,这是因为3D结构必须从2D数据中获取,因此前两个相机位姿之间的距离设为1。 新的图像到来之后,相对尺度和相对于前两帧图像的相机位姿使用3D结构或者三焦张量trifocal tensor获取。
有三类方法,分别是feature-based methods, appearance-based methods, and hybrid methods。Feature-based methods 基于显著的可重复的特征,并在各帧图像中跟踪这些特征。appearance-based methods使用每个像素的秘籍信息或者图像的子区域进行匹配。hybrid method混合前两种方法。
因为VO通过增量式的计算相机的路径,每个新的帧间运动引入的误差随着时间累积。在真是的路径上会产生一个漂移。对于一些应用中,保持漂移尽量小至关重要,可以对局部几个位姿进行优化,叫sliding window bundle adjustment or windowed bundle adjustment。
VO is only concerned with the local consistency of the trajectory, whereas SLAM with the global consistency.
item | VO | v-SLAM |
---|---|---|
goal | a global, consistent estimate of the robot path | local consistency of the trajectory recovering t pose only over the last n poses |
map | a map of the environment | local map |
previously visited area | loop closure | - |
Optimization | global | local/window |
trade off | consistency | performance |
相邻两张图像对应的相机的位置之间的关系为一个刚体变换,如下表示
Tk,k−1=[Rk,k−10tk,k−11]
其中 Rk,k−1∈SO(3) 为旋转矩阵, tk,k−1∈R3 为平移向量,集合 T1:n={T1:0,...,Tn:n−1} 包含了运动的全部序列.VO的主要任务就是从图像 Ik 到图像 Ik−1 的相对变换T_{k,k-1}. 然后连接这些变换得到整个运动航迹。这意味这VO增量的恢复了运动的路径,pose after pose. 这里使用一种迭代方法调整最近m个位姿,这里通过最小化平方重投影误差。
item | features tracking | features Matching |
---|---|---|
detecting features | independently in all the images | in one image |
relate to next frame | matching them | tracking them sing a local search |
based on some | similarity metrics | correlation etc |
现有的一些运动估计方法需要3D点和2D图像对应的三角测量。结构计算仍然需要bundle adjustment来计算局部轨迹的更精确的估计。三角测量的3D点由两张图像的2D图像点对应的投影射线的交点。理想的条件下,这些射线会相交于一个3D点。然后优于图像的噪声,相机模型和校正的误差,以及特征匹配的不确定性,他们从不相交。相对于景深来说相邻帧之间的距离间隔很近的时候上述情形容易发生。避免此种情形的一种方法是构成忽略的帧知道平均不确定性降低至小于一个阈值。选择的帧叫做关键帧。关键帧在VO中十分重要,而且应该在跟新运动之前完成。
主要分为2种方法,一是在一张图像中检测特征,在随后的帧中使用局部搜索方法进行跟踪;另外一种方法是对于所用的图像独立的检测特征并根据相似度进行匹配。前者更适合于从较小分为的视角拍摄的图像,后者适合有较大的运动或者视角变化。早期研究比较倾向于前种方法,近期的方法比较集中于后种方法。原因是早前的工作大多设想于小范围的环境,图像拍摄于近景,近期的研究的焦点尽量使得场景的变化范围尽量远,进而解决运动漂移的限制。
每个特征检测子包含2各步骤,首先是应用feature-response function对于整张图像,之后是进行非最大值抑制,目标是找到feature-response function的局部极值. 使用检测子具有不变性的诀窍就是使用多尺度,如SIFT,SURF,FAST等.
点匹配经常被outlier,错误关联的数据污染,原因可能来自于图像噪声,遮挡,模糊,视角或光照的变化,这些一般会被检测子和描述子所忽略.一般的假设是关照均匀,单纯的相机旋转和尺度,和仿射畸变。
outlier的一种解决方案是利用运动模型的几何约束。鲁棒的估计方法如M估计法,RANSAC等。
VO中的每个变换包含误差,以及不确定性,相机位姿的不确定性依赖于之前时刻的各变换估计结果。VO估计的变换结果的不确定性依赖于相机几何和图像特征。可以证明,当拼接变换时,相机位姿的不确定性总是增加的,因此保持每个变换的不确定性足够小十分重要,以此保证较小的漂移。
最近n帧的图像以及变换已知,加上另外的约束使用图优化可以估计更精确的相机位姿结果。这样相机的估计转化为一个优化问题,从VO估计的相机的位姿表示为位姿graph,每个相机的位姿作为一个节点,每个刚体变换作为边。边的约束可以使用一个代价函数表示
∑eij∥Ci−TeijCj∥2 ,位姿寻找相机位姿参数最小化代价函数.变换的旋转部分使得代价函数非线性,因此该优化需要一个非线性优化算法。
回环约束经常形成与相邻较远的节点,这些节点可能积累较大的漂移。通常这样记过一段长时间之后有看到之间经过路标landmark或者回到已经建图的区域成为回环检测。回环约束可以在评估当前图像和以前图像的视觉相似度中发生。视觉相似度使用全局图像描述子计算。进来使用局部描述子的视觉相似度进行回环检测被很多研究所关注,比较出众的方式视觉单词直方(visual word histgram)的距离。回环检测的第一步是检测视觉单词,找到最相似的n帧图像之后,使用极限月做一个几何验证。使用宽基线特征的刚体变换确认匹配
- Loop constraints are very valuable constraints for pose graph optimization
- Loop constraints can be found by evaluating visual similarity between the current camera images and past camera images.
- Visual similarity can be computed using global image descriptors (GIST descriptors) or local image descriptors (e.g., SIFT, BRIEF, BRISK features)
- Image retrieval is the problem of finding the most similar image of a template image in a database of billion images (image retrieval). This can be solved efficiently with Bag of Words [Sivic’03, Nister’06, FABMAP, Galvez-Lopez’12 (DBoW2)]
In bundle adjustment, the error function to minimize is the image reprojection error:
argmin∑Xi,Ck∥Pik−g(xi,Ck)∥2
重建误差是一个非线性函数,优化方法经常使用LM方法,该方法需要一个靠近最小值的初始值。该优化问题的雅克比有一个特殊的结构可用来提高运算效率。
局部窗口bundle adjustment减小了两视图的漂移,原因是特征测量超过2帧图像。当前相机的位置连接通过3D路标,当前的估计和最近n帧图像的估计一致。窗口的大小由计算量决定。
瞬时从video中恢复相机姿态和视场结构的方法分为2类
- Feature-based method
- Directed method
前者提取显著特征点的稀疏集合并使用invariant descriptors 匹配,使用外极几何恢复相机运动和结构,最后最小化重投影误差调整pose and structure。这个方法的成功之处在于使用了鲁棒的特征监测子和描述子,这样允许帧间有较大的惯性运动。这方法的缺点是依赖于检测子和描述子的阈值,如何处理匹配错的情况,这样的需要使用很多的特征测量来弥补。
后者直接从灰度值估计结构和运动。局部的灰度梯度幅度和方向被使用。梯度值小的点也被直接法使用。光度的计算要比重投影误差要敏感。
The maximum likelihood estimate of the rigid body transformation Tk,k−1 between two consecutive camera poses minimizes the negative log-likelihood of the intensity residuals:
δI(ξ,ui)=Ik(π(T^k,k−1⋅pi))−Ik−1(π(T^(ξ)⋅pi))
MAVMAP: https://github.com/mavmap/mavmap
Pix4D: https://pix4d.com/
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
ROVIO (tightly coupled EKF): https://github.com/ethz-asl/rovio
OKVIS (non-linear optimization): https://github.com/ethz-asl/okvis
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
Multi-Sensor Fusion Package (MSF) (Weiss et al.) - EKF, loosely-coupled:
http://wiki.ros.org/ethzasl_sensor_fusion
SVO + GTSAM (Forster et al. RSS’15) (optimization based, pre-integrated IMU):
https://bitbucket.org/gtborg/gtsam
Instructions here: http://arxiv.org/pdf/1512.02363
GTSAM: https://collab.cc.gatech.edu/borg/gtsam?destination=node%2F299
G2o: https://openslam.org/g2o.html
Google Ceres Solver: http://ceres-solver.org/
DBoW2: https://github.com/dorian3d/DBoW2
FABMAP: http://mrg.robots.ox.ac.uk/fabmap/
These datasets include ground-truthed 6-DOF poses from Vicon and
synchronized IMU and images:
- EUROC MAV Dataset (forward-facing stereo):
http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinerti
aldatasets
- RPG-UZH dataset (downward-facing monocular)
http://rpg.ifi.uzh.ch/datasets/dalidation.bag