Event-based Stereo Visual Odometry(双目事件相机里程计)论文学习

本文详细介绍一篇双目事件相机里程计的论文,Event-based Stereo Visual Odometry,港科大沈邵劼团队Yi Zhou和TU Berlin的Guillermo Gallego共同完成,并公布了代码。我准备在接下来一段儿时间认真研究一下这篇论文与代码,欢迎想深入研究这个方法的朋友与我交流。转载请注明出处

论文下载:arXiv, https://arxiv.org/abs/2007.15548
github代码:https://github.com/HKUST-Aerial-Robotics/ESVO
柯翰同学在公众号的一篇简单介绍:基于双目事件相机的视觉里程计

1. 算法流程

在这里插入图片描述
算法总体流程如上图所示,主要包括三个重要模块(虚线矩形框),分别是:数据处理、Tracking和Mapping。暂时不去管初始化部分,我们关注数据流的方向,可以发现,在Tracking时,传入的是Time-Surface(本文往后缩写为TS)和Local Map,得到运动变换位姿pose;之后,pose和TS等共同完成完整的Mapping过程。

2. 基础知识

2.1 Time-Surface 时间表面

是一种事件相机数据表达方式,请看之前我博客中对这个进行的总结:【事件相机整理】角点检测与跟踪总结 - Time surface / SAE

2.2 Student t 分布

wiki介绍:https://en.wikipedia.org/wiki/Student%27s_t-distribution
作者通过对数据集测试,发现左右目相事件机中,匹配像素的残差 r r r统计上符合“学生t分布”(中文表述不清,原文为: r r r denotes the temporal difference between two corresponding pixels x i , 1 , x i , 2 x_{i,1}, x_{i,2} xi,1,xi,2 inside neighborhoods)由此实现了多帧图像对深度进行融合。

2.3 ZNCC 零均值归一化相似性

是双目像素匹配时利用的一种度量方法,在极线约束上寻找匹配的像素点。在算法初始化部分使用。

2.4 IRLS 迭代重权重最小二乘

wiki介绍: https://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares
一种非线性迭代优化算法,在Mapping过程中利用IRLS得到最优逆深度

2.5 Compositional LK

LK光流跟踪方法的一种变形,增量式而不是绝对式,避免了重复计算完整的雅克比矩阵。在Tracking过程中不断更新计算Warpping Parameter,从而得到运动轨迹。注意每次只是计算更新的部分 W ( x , ρ ; θ ) ← W ( x , ρ ; θ ) ⋅ W ( x , ρ ; Δ θ ) W(x, \rho; \theta) \leftarrow W(x, \rho; \theta) \cdot W(x, \rho; \Delta \theta) W(x,ρ;θ)W(x,ρ;θ)W(x,ρ;Δθ),即式中的 Δ θ \Delta \theta Δθ

3. Tracking部分

3.1 TS negative

论文并没有使用原始的TS进行Tracking,而是使用了 TS negative(后面简写为TSn), τ ‾ ( x ) = 1 − τ ( x ) \overline \tau(x)=1-\tau(x) τ(x)=1τ(x)。作者指出,由于TS的一侧往往是斜坡状,另一侧是陡峭的,所以沿着斜坡可以搜寻到当前Edge在图像中的位置。由此,当使用 ( 1 − τ ) (1-\tau) (1τ)时,值越小意味着距离真实Edge越近。

3.2 目标函数

上面提到,当TSn越小,这意味着图像这个位置对应了真实世界的Edge。在Tracking时,我们需要根据已有的Mapping结果(Local Map),将已知逆深度的Edge点投影到Frame上,计算对应的TSn的数值,进行相加,越小这意味着投影的参数约正确。例如,当位姿完全正确时,真实世界的Edge投影到Frame时,对应的TSn应该全接近0。从而我们可以写出目标函数为: θ ∗ = arg min ⁡ θ ∑ x ∈ S ( τ ‾ ( W ( x , ρ ; θ ) ) 2 , \theta^*=\argmin_ \theta \sum_{x \in S}(\overline \tau(W(x, \rho; \theta))^2, θ=θargminxS(τ(W(x,ρ;θ))2, 即寻找一个最佳的Warpping Parameter θ \theta θ,使Frame中所有有逆深度的点( x ∈ S x\in S xS)经过Warp后对应的TSn尽可能小。其中Warp就是定义为反投影后经过6DoF变换再投影, W ( x , ρ ; θ ) = π l e f t ( T ( π r e f − 1 ( x , ρ ) , G ( θ ) ) ) , W(x, \rho; \theta)=\pi_{left}(T(\pi_{ref}^{-1}(x, \rho), G(\theta))), W(x,ρ;θ)=πleft(T(πref1(x,ρ),G(θ))), 即根据参考位置反投影,经过运动参数 G ( θ ) G(\theta) G(θ)变换再投影到左目。论文指出,只利用左目进行计算就够了,加上右目没有明显的提升。

3.3 优化过程

论文指出,利用Compositional LK算法,不断迭代更新,得到最佳的T。

4. Mapping

Mapping部分主要也有两部分,首先对event的逆深度进行估计,之后再进行半稠密重建。

4.1 Event的深度估计

4.1.1 目标函数

深度估计时,需要知道Tracking的轨迹,进行运动补偿(所以需要一个初始化部分,才能够保证Tracking部分能够首先进行),估计一个event的逆深度 ρ \rho ρ

当我们估计在 t t t时刻一个event的深度 ρ \rho ρ时,我们可以得到这个event在左右目的坐标 x 1 t , x 2 t x_1^t, x_2^t x1t,x2t,如果深度估计的正确,这两者对应的TS应该是相同,且之前一段儿时间 δ t \delta t δt(100Hz)内对应的TS应该也是相同的。所以目标函数定义为: ρ ∗ = arg min ⁡ ρ C ( x , ρ , T l e f t ( , t ) , T r i g h t ( , t ) , T t − δ t , t ) \rho^*=\argmin_\rho C(x, \rho, \Tau_{left}(, t), \Tau_{right}(, t), T_{t-\delta t, t}) ρ=ρargminC(x,ρ,Tleft(,t),Tright(,t),Ttδt,t) 其中 T l e f t / r i g h t \Tau_{left/right} Tleft/right为该像素点在这段儿时间内的TS对应的值,而 C C C具体为: C ( . . . ) = ∑ x 1 , i ∈ W 1 , x 2 , i ∈ W 2 ∣ τ l e f t t ( x 1 , i ) − τ r i g h t t ( x 2 , i ) ∣ 2 2 C(...)=\sum_{x_{1,i}\in W_1, x_{2,i}\in W_2} |\tau_{left}^t(x_{1, i})-\tau_{right}^t(x_{2, i})|_2^2 C(...)=x1,iW1,x2,iW2τleftt(x1,i)τrightt(x2,i)22 即对应的TS值的差。而 x 1 , x 2 x_1, x_2 x1,x2为: x 1 = π ( T c t − ϵ c t ⋅ π − 1 ( x , ρ k ) , x_1=\pi(T_{c_{t-\epsilon}}^{c_t} \cdot \pi^{-1} (x, \rho_k), x1=π(Tctϵctπ1(x,ρk), 即经过当前假设逆深度投影后,经过对应时间戳投影到指定时刻的Frame。

4.1.2 优化

优化采用任何一种非线性优化方法即可,例如GN方法

4.1.3 初始化

初始化时,由于不知道 T T T 的轨迹,所以直接在极线上搜索匹配,只用ZNCC即可。不知道 T T T所以无法得到 T c t − ϵ T_{c_{t-\epsilon}} Tctϵ,所以不是很精确,但作为初始化已经足够了。

4.2 半稠密重建

由4.1,我们得到了一个稀疏的深度图,下一步通过融合的方式,得到半稠密的深度图。在这个过程中,并不是利用一次观测,而是利用了多次观测的结果,所以同时收敛了深度的取值。这部分内容类似深度滤波,但提出了新的融合方法。

在这里插入图片描述
如图,每次观测得到一个稀疏深度图,经过一段儿时间后(M次观测)融合得到更为精确、半稠密的深度图。

作者通过真值,统计两个数据集估计逆深度的残差分布,发现是个Student t分布(下文缩写为St)。当某个像素有多次观测时,多个逆深度进行融合,得到新的St分布。

接下来用到了IRLS进行优化,但我还没能理解这部分是在干啥,就先跳过了。

在融合时,将每次观测计算得到的有深度的像素点投射到下一次观测的像平面,由于不是整数像素,所以在新的像平面中考虑周围4像素是否是同一个数据点。1. 如果是同一个数据点,则利用St分布叠加方式将上一次的逆深度分布作为先验,叠加最新的观测逆深度分布获得后验逆深度分布;2. 如果不是同一个数据点(由二者逆深度分布的均值和方差判断),则取方差较小的作为当前像素点的逆深度;3. 如果最新的测量中没有得到这个像素点的逆深度,则直接定为上次的分布。由此,实现了多次测量的逆深度的融合,也得到了更稠密的深度图。

5. 小结

本文我认为最有创新之处就是多次测量的融合方法。

其他很多地方作者考虑的很细致,也有很多技巧。参考文献有五六十篇非常之多,只能说港科和Guillermo Gallego在EB和Stereo VO上有很深的积累。

在这里插入图片描述(Running results of source codes)

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于无迹二重四元数滤波的立体视觉SLAM 立体视觉SLAM是一种通过使用多个相机来同时感知环境并计算相机位姿和地图的技术。其中,无迹二重四元数滤波是一种用于姿态估计的滤波方法。 无迹二重四元数滤波是一种扩展了基于四元数的卡尔曼滤波的方法,用于在立体视觉SLAM中对相机的位姿进行估计。它通过将姿态表示为一个实部和一个虚部四元数来进行计算。其中实部表示旋转的主轴,并且虚部表示旋转的偏差。这种扩展的滤波方法可以同时估计旋转和平移分量,对于立体视觉SLAM中的运动估计非常有用。 在使用无迹二重四元数滤波进行立体视觉SLAM时,我们基于视觉传感器获取的立体图像来提取特征点,并使用这些特征点来计算相机的运动。然后,通过使用无迹二重四元数滤波来对相机的位姿进行估计,并递推地构建地图。这个过程根据特征点间的匹配和相机的移动来估计相机的轨迹,并同时估计地图的三维结构。 无迹二重四元数滤波在立体视觉SLAM中有着许多优点。首先,它能够同时估计相机的旋转和平移,提高了位姿的准确性。其次,它能够通过使用四元数来表示姿态,减少了计算量。最后, 通过对滤波器进行适当的观测噪声建模和状态转移噪声建模,可以提高系统的鲁棒性和稳定性。 总而言之,基于无迹二重四元数滤波的立体视觉SLAM可以准确估计相机的位姿和三维地图,并在许多应用领域中有着广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值