Direct Sparse Mapping

Introduction

  • 滑窗的会边缘化掉离开视场的点,同时来保证可观性的一致,不能重用边缘化的地图点
  • 特征点法一般根据共视关系选固定位置的**关键帧和地图点,通过固定一帧的策略保证可观性
  • 选择以前的关键帧,结合时间和共视关系来选择**的关键帧
  • 时间上远的帧会受drift影响,因此使用多尺度优化,来增加收敛半径
  • 由于距离远伪观测(外点)会增加,使用t分布来更鲁棒地处理

DSO和LDSO的缺点:

  • 使用了不同的目标函数和点类型来完成里程计估计
  • 闭环检测依赖于特征点的可重复性,损失一些可以用来矫正的点
  • 闭环的误差较正均匀分布在关键帧上,这可能不是最优解
  • 地图点的信息没有被reuse

DSM: Direct Sparse Mapping

Direct Mapping

  • 跟踪线程以帧率速度输出位姿,会判断是否加入关键帧
  • 建图线程处理新的帧,来跟踪关键帧上的点(候选点逆深度更新),插入关键帧会重新计算local window,**新的点,优化motion和structure。然后为了保证全局一致,移除外点,检测遮挡,避免点的重复。

使用固定其它帧的方式来保证不可观自由度的一致性。

LMCW的初始解不在收敛半径内,所以使用粗到精的方式来优化,估计的几何作为下一层的初始值。

LMCW: Local Map Covisibility Window

由时间和共视策略组成,都是相对于最新关键帧的。

DSM: Direct Sparse Mapping

时间窗口主要目的是来优化新的点(初始化新点),并且保证里程计精度。

固定时间窗口的大小,从时间窗口移除关键帧的策略:

  • 总是保留上两个关键帧(I1I_1I2I_2),这保证里程计在挑战环境下(如大旋转)也能保证精度。避免关键帧过早的固定,保证被充分优化。
  • 其他的关键帧要均匀分布在空间中,丢弃有最大距离的,使得视差最大:

s(Ii)=d(I1,Ii)j=3Nt(d(Ii,Ij))1(1) s\left(I_{i}\right)=\sqrt{d\left(I_{1}, I_{i}\right)}\sum_{j=3}^{N_{t}}\left(d\left(I_{i}, I_{j}\right)\right)^{-1} \tag{1}

共视窗口是和时间窗口有共视关系的关键帧,要找到那些在最新关键帧空白区域有地图点投影的关键帧,具体的策略:

  • 计算距离地图来确定耗尽区域,将时间窗口投影到最新关键帧,计算每个像素到最近地图点的距离。
  • 选择具有最大数目投影点的旧关键帧,会剔除大于一定视角的点,来防止遮挡等情况。
  • 更新距离地图
  • 迭代执行第二步,直到选出足够数目,或者没有关键帧。

**新地图点前,共视点已经完成投影,避免了提取重复的地图点,保证地图的一致性。

Robust Non-Linear PBA

LMCW的关键帧选取范围广,忽略了实际光度的不一致性,比如由于遮挡,光反射等

提出根据光度误差的分布来剔除外点:
ξ=argminξknlogp(rkξ)(2) \xi^{*}=\underset{\xi}{\operatorname{argmin}}-\sum_{k}^{n} \log p\left(r_{k} | \boldsymbol{\xi}\right)\tag{2}

均匀分布

若给定且均匀分布的误差rkr_k,求导等于0,得到re-weight的最小二乘:
w(rk)=logp(rk)rk1rk(3) w\left(r_{k}\right)=-\frac{\partial \log p\left(r_{k}\right)}{\partial r_{k}} \frac{1}{r_{k}} \tag{3}

高斯分布

如果符合高斯分布,得到一个常数权重,所有点的同等对待,没法处理外点。
wn(rk)=1σn2(4) w_{n}\left(r_{k}\right)=\frac{1}{\sigma_{n}^{2}} \tag{4}

Student t分布

稠密和稀疏光度误差都比较适合,权重函数
wt(rk)=ν+1ν+(rkσt)2, when μ=0(5) w_{t}\left(r_{k}\right)=\frac{\nu+1}{\nu+\left(\frac{r_{k}}{\sigma_{t}}\right)^{2}}, \quad \text { when } \mu=0 \tag{5}
t分布能快速处理误差,给一个低权重。

使用gradient free iterative Nelder-Mead method(NM单纯形替换法,速度慢)来最小化概率密度函数拟合分布,确定这个参数ν\nuσt\sigma _t,而不是固定一个值(如维度ν=5\nu=5)。在拟合t分布之前会剔除异常值,此时σ^t\hat \sigma_t 的确定是Median Absolute Deviation (MAD),即σ^=1.4826MAD\hat{\sigma}=1.4826 \mathrm{MAD},拒绝大于3倍方差的值。

M估计(Huber)

wh(rk)={1σn2 if rk<λλσn2rk otherwise (6) w_{h}\left(r_{k}\right)=\left\{\begin{array}{ll}{\frac{1}{\sigma_{n}^{2}}} & {\text { if }\left|r_{k}\right|<\lambda} \\ {\frac{\lambda}{\sigma_{n}^{2}\left|r_{k}\right|}} & {\text { otherwise }}\end{array}\right. \tag{6}

λ=1.345σn\lambda=1.345 \sigma_{n} for N(0,σn2)\mathcal{N}\left(0, \sigma_{n}^{2}\right),这个值可以固定,也可以动态调节。

DSM: Direct Sparse Mapping

A. Implementation of the probabilistic model into the PBA

由于内点和外点的判定是动态的,会自动学习每个关键帧的误差分布,因此可以适用于不同的场景。在普通的关键帧上被认为是外点的,在一些挑战场景下会被认为是内点。

把这个误差分布作为权重加到目标函数,可能会每次迭代都改变目标函数,会使得优化降级。我们只在每个金字塔层的最开始计算误差分布,之后优化过程就固定。PBA结束最后会计算一次误差分布。

B. Outlier management

低于目标帧95%的误差分布结果,被认为是内点。对于挑战的关键帧上,阈值会更高,相对宽松。对于普通帧,阈值降低,会更加严格。外点率大于30%就直接扔掉这个观测,如果优化中外点率大于60%就直接放弃这个优化。

要保留一个新点,必须在创建新关键帧后在所有新关键帧中对其进行观察,而在三个关键帧中对其进行观察则将其视为成熟点。 如果观察次数少于三个,则将删除成熟点。

Front-End

新的帧跟踪局部地图,地图点和参考关键帧被固定。使用coarse-to-fine优化,同时使用逆向组合法来避免jacobian的重新计算。

关键帧的判断(相对于最新关键帧):

  • 地图点的可视率(visibility ratio)

su=min(pzpz,1)N s_u = \frac{\sum \min(\frac{p_z}{p_z^\prime},1)}{N}

其中NN是最新关键帧可见点总数,pz,pzp_z, p_z^\prime分别是最新关键帧和跟踪帧的点逆深度。这个的作用是当相机靠近一个物体时,会创建更多的关键帧。

  • 跟踪帧的基线长度

st=tρ2 s_t = \|\mathbf t\overline{\rho}\|^2

定义为帧间位移和跟踪局部地图上平均逆深度的比。作用相当于平移的距离足够大,超出视线范围

  • 光照变化

sa=akai s_a = |a_k - a_i|

如果加权后的满足,则设置为关键帧。
ωusu+ωtst+ωasa>1 \omega_us_u+\omega_ts_t+\omega_as_a > 1

跟踪新地图点

点会更新几帧后有低不确定性才被加入PBA,这种推迟的策略需要较好的初始值。为了保证有足够的点来**,候选点在移出LMCW时才会被清除。**的点是投影在空白区域的,当回到来过的地方,**的点很少。

Discussion

需要一个重识别的功能,因为对于大场景,当误差累积较大时,可能有些点是没法重新投影过来的。

相关文章:

  • 2021-05-11
  • 2022-12-23
  • 2021-12-29
  • 2022-12-23
  • 2021-09-08
  • 2021-11-07
  • 2021-10-20
猜你喜欢
  • 2021-10-24
  • 2021-10-20
  • 2021-10-28
  • 2021-06-26
  • 2022-12-23
  • 2022-01-23
相关资源
相似解决方案