论文阅读 - Low-Latency Visual Odometry using Event-based Feature Tracks
Low-Latency Visual Odometry using Event-based Feature Tracks 通过手工设计的 feature 和 feature tracking 的方法,将问题转化为传统 VO,但又不失 Event 带来的高速和异步的特性。
Low-Latency Visual Odometry using Event-based Feature Tracks
Kueng, B., Mueggler, E., Gallego, G., Scaramuzza, D.,
Low-Latency Visual Odometry using Event-based Feature Tracks,
IEEE/RSJ Int. Conf. Intelligent Robots and Systems (IROS), 2016, pp. 16-23. PDF. YouTube
本篇概要
通过手工设计的 feature 和 feature tracking 的方法,将问题转化为传统 VO,但又不失 Event 带来的高速和异步的特性。
实验设置
使用 DAVIS,跟踪 event-based feature 从而实现一个低延迟的 VO。
A lowlatency visual odometry algorithm for the DAVIS sensor using event-based feature tracks.
主要过程
首先在 DAVIS 的灰度帧中检测 feature,然后利用 event 流进行异步的跟踪。然后这些特征被输入到 VO 算法中,通过最小化投影误差计算场景的 local probabilistic 3D map 以及做 6-DoF 的位姿估计。位姿估计是 event-based 的,所以具有低延迟的特性。
对比已有工作
None of the previous event-based motion estimation methods is based on tracking complex, natural features in the event stream.
算法实现
-
特征提取与跟踪部分
算法整体流程:
详细说明:
- 通过灰度 Frames 进行特征提取。算法流程:
- 通过 Canny 边缘提取和 Harris 角点检测。
- 在最突出、分布均匀的角点周围,再其 edge 图上选取一个一定大小的 patch。Frame 的帧率并不需要固定,这些相当于是提供初始的特征;并且在特征点丢失的情况下再补充特征点。如 Fig.4 的 (a)->(b) 图示意。这个 patch 中的边缘点的集合称为 model point set。
-
通过 Events 数据进行 feature tracking:
-
将新产生的 Event 归到上一步划分的 patch 中。每组 Events patch 的里面的 Events 的数量和上一步检测到的边缘点的数量一致,每个 patch 集合中的 Events 称为 data point set。然后维护一个队列,先进先出。每次每个 patch 中的 Event 发生更新后,就单独对更新的 patch 重新运行一次 registration。
-
registration 是通过将上述的 model point set 和 data point set 通过 ICP(3D 点推广到 2D 点)进行配准,从而找出匹配点。这一步相当于是让 Events 去适配目前的 feature。
一个典型的 ICP 问题:
这样来找出 Event 和 Edge 点的对应的匹配关系。
-
针对 Tracking 的一些改进
-
由于这些 Event 其实都是边缘特征触发的,所以相当于是有一个结构的约束的。所以看上面的那个求解 ICP 的公式,那个 其实相当于加了一个约束,它的大小与 data point set 中后 1/4 的 Event 中落在当前 Event 周围 3*3 像素中的个数成正比。
-
为了更好的长期跟踪 feature,还通过基于 Event 累计触发量直方图的方式,通过调整 feature 的位置来增加长期跟踪的鲁棒性。因为时间长的话,偏移比较大的时候,Events 就无法很好的和目前的 feature 进行 ICP 了,这个时候就再去调整 feature 在图片上的二维坐标就 OK 了。比如针对这个特征,刚开始选择 M1 数量个 Events 根据触发数量合成直方图,然后用当前最近的 M2 个 Event 合成的直方图,然后定义一个 表示一个范围在 个像素的偏移。然后枚举所有 的值,找出使得下面值最小的 :
如果 大于一个阈值,就把他应用到 feature 中。M1 和 M2 是大于 N(也就是 data point set 的大小的),并且为了得到一个较好的初始值,M1 是可以大于 M2 的。下图是当 M2=5N 的时候的直方图情况:
-
-
-
VO 部分
有了上面的特征点的部分,那么接下的 VO 部分其实就是传统的 VO 了:
-
通过深度滤波器(depth-filters),恢复出 3D 场景的结构。
-
通过最小化重投影误差求解出相机的位姿
有个细节,这一步通过高斯牛顿法 (G-N) 优化、初值选用上一帧的 pose 就可以了,因为两帧 event 之间的运动是非常非常小的,使用 G-N 的优化速度很快,不需要使用 L-M 了。
是鲁棒核函数:
其中 , pixels。
和 SVO 中的做法是一样的。
具体细节就不再详述了。
-
对比与实验
作者做了 Feature 跟踪性能的分析、VO 精度的对比分析、系统运行时间消耗的分析。详细的实验数据见原论文。
-
Feature 跟踪性能的分析:
patch 大小为 19*19 时,
-
在 checkerboard-like 的场景中跟踪 8 秒,跟踪错误的平均误差为 1.5pixels;在自然场景中跟踪 6 秒,跟踪错误的平均误差为 2.5pixels。
-
一个特征被跟踪的生命周期,经过直方图 refine 之后:
-
-
VO 性能分析:
细节:当前跟踪的 feature 数量维持在 120 个左右的时候比较合适;当小于 100 的时候效果较差。
Event-based VO 与 Ground Truth、Frame-based VO (SVO) 三者的对比。可以看出,在精度上还是比传统 VO(SVO)稍差。
-
运行时间分析:
在 Core i7-4710MQ CPU @ 2.50GHz with 8GB RAM 配置的机器上、C++ 单线程实现的情况下,events 的处理速度平均为 160kevents/s。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!联系作者。