RGBDTAM: A Cost-Effective and Accurate RGB-D Tracking and Mapping System

0.引言

IROS2017.一个小众的不太出名的RGBD-SLAM系统,无意中搜索到,发现是开源的。学习一下。

主要贡献:

  • 1.系统结合半稠密光度误差和稠密集合误差作为VO的优化error,并证明了这样选择是精确度最高的组合;
  • 2.构建了多视图约束及其在tracking和mapping线程的误差模型;

.  In the case of the geometric error, all the pixels have a high signal/noise ratio. There are some degenerated cases, though, where some degrees of freedom are not constrained, and those justify the combination of both residuals. As they are complementary, the minimization of both errors achieves the best performance. The photometric error is useless in texture-less scenarios, and the geometric one is useless in structure-less scenarios.

系统说明:

  • 1.vo_system launch the three threads, tracking, semidense mapping and dense mapping (3D superpixels)
///Launch semidense tracker thread
boost::thread thread_semidense_tracker(&ThreadSemiDenseTracker,&images,&semidense_mapper,&semidense_tracker,&dense_mapper,&Map,&vis_pub,&pub_image);
//Launch semidense mapper thread
boost::thread thread_semidense_mapper(&ThreadSemiDenseMapper,&images,&images_previous_keyframe,&semidense_mapper,&semidense_tracker,&dense_mapper,&Map,&pub_cloud);
///Launch viewer updater.
boost::thread thread_viewer_updater(&ThreadViewerUpdater, &semidense_tracker,&semidense_mapper,&dense_mapper);
  • 2.mapping线程构建新帧:M\mathcal{M}
    关键帧:{K1,,Kj,,Km}\left\{\mathcal{K}_{1}, \ldots, \mathcal{K}_{j}, \ldots, \mathcal{K}_{m}\right\}其中Kj={Twj,Pj}\mathcal{K}_{j}=\left\{T_{w}^{j}, P^{j}\right\}
    点云帧:Pwj=P_{w}^{j}={pw1,,pwi,,pwn}\left\{p_{w}^{1}, \dots, p_{w}^{i}, \dots, p_{w}^{n}\right\}
  • 3.代码使用openmp加速,boost管理线程。

1.相关系统(direct RGB-D odometry)

1.KinectFusion:只利用了深度信息;
2.Kintinuous:KinectFusion的改进,对内存机制进行了改进,能进行较大场景的重建且加入了闭环与位姿优化;
3.DVO-SLAM:基于图优化,关键帧约束,based on dense photometric and geometric error minimization,CPU实时,但是输入系统的图像分辨率被降低(不是640*480);
4.ElasticFusion:ICP + photometric reprojection error.

Alt

2. tracking thread

最小化光度误差rphr_{ph}与几何误差rgr_g.

{T^,a^,b^}=argminT,a,brph+λrg\{\hat{T}, \hat{a}, \hat{b}\}=\underset{T, a, b}{\arg \min } r_{p h}+\lambda r_{g}

其中,aba、b是当前图像的增益和亮度.TT是当前相机姿态的运动估计增量。λ\lambda是对光度和几何项进行加权的学习常数。tracking线程只优化TabT、a、b三个量。
优化在李代数空间进行:

T=[expSO(3)(δω)δt01×31] T=\left[\begin{array}{cc}{\exp _{\mathrm{SO}(3)}(\delta \omega)} & {\delta t} \\ {0_{1 \times 3}} & {1}\end{array}\right]
GN优化得到的结果右乘更新:
TwfTwfT^1 T_{w}^{f} \leftarrow T_{w}^{f} \hat{T}^{-1}

2.1.Photometric error (rphr_{ph} )

We minimize the photometric error only for those pixels belonging to Canny edges.Their inverse depth is estimated using the mapping method.

photometric error:

rph=i=1nwp((Ik(π(Twkpwi))aIf(π(TwfT1pwi))+b)2σph2) r_{p h}=\sum_{i=1}^{n} w_{p}\left(\frac{\left(I_{k}\left(\pi\left(T_{w}^{k} p_{w}^{i}\right)\right)-a I_{f}\left(\pi\left(T_{w}^{f} T^{-1} p_{w}^{i}\right)\right)+b\right)^{2}}{\sigma_{p h}^{2}}\right)
其中:

  • Ik(π(Twkpwi)I_{k}\left(\pi\left(\boldsymbol{T}_{w}^{k} p_{w}^{i}\right)\right.为关键帧IkI_k中3D点的PwiP_w^i的灰度(或则说光照强度);
  • If(π(TwfT^1pwi)))\left.I_{f}\left(\pi\left(\boldsymbol{T}_{w}^{f} \hat{T}^{-1} p_{w}^{i}\right)\right)\right)为当前帧IfI_f中3D点的PwiP_w^i的灰度(或则说光照强度);
  • π()\pi()为重投影函数;
  • a和b是当前帧相对于当前关键帧的增益和亮度,通过估计a和b来解决全局光照明暗的变化;
  • wpw_p是Geman-McClure鲁棒cost function,用于消除遮挡和动态对象的影响;
  • σph2\sigma_{p h}^{2}是什么?论文中没提到。是高维高斯传递的方差??

2.2.Covariance-weighted Geometric error (rgr_g )

(1)Covariance-weighted Geometric error:
rg=i=1nwp((1ezTTwfT1pwiDf(π(TwfT1pwi))2σg2))\left.r_{g}=\sum_{i=1}^{n} w_{p}\left(\frac{\left(\frac{1}{e_{z}^{T} T_{w}^{f} T^{-1} p_{w}^{i}}-D_{f}\left(\pi\left(T_{w}^{f} T^{-1} p_{w}^{i}\right)\right)^{2}\right.}{\sigma_{g}^{2}}\right)\right)

其中:

  • 1ezTTwfpxi\frac{1}{e_{z}^{T} \boldsymbol{T}_{w}^{f} p_{x}^{i}} 3D点云与投影帧对齐后的逆深度?错了:是当前帧的逆深度(残差构建就是预测的逆深度减去测量的你深度值,从而优化TT);
  • DfD_{f}测量值的逆深度;
  • ez=[0,0,1]e_{z}=[0,0,1]为三维向量;

.   in order to achieve CPU real-time performance. We use four pyramid levels (from 80 × 60 to 640 × 480). For the first level we use all pixels. For the second, third and fourth levels we use one in every two, three and four pixels respectively –horizontally and vertically.

(2)Covariance Propagation for Structured Light Cameras:

只对结构光深度相机??有什么区别吗?双目!!
深度:
z=fbdz=\frac{f b}{d}
逆深度:
ρ=dfb\rho=\frac{d}{f b}

标准差:
σz=zdσd=fbd2σd=z2fbσd \sigma_{z}=\frac{\partial z}{\partial d} \sigma_{d}=\frac{f b}{d^{2}} \sigma_{d}=\frac{z^{2}}{f b} \sigma_{d}

逆深度标准差:

σρ=ρdσd=σdfb \sigma_{\rho}=\frac{\partial \rho}{\partial d} \sigma_{d}=\frac{\sigma_{d}}{f b}

2.3.Scaling parameters

As we combine residuals of different magnitudes, we need to scale them according to their covariances. For the geometric error we propagate its uncertainty using equations 8 and 9.(就是上面的标准差) For the photometric error we use the median absolute deviation of the residuals of the previous frame to extract a robust estimation of the standard deviation.
对于光度误差,使用前一帧残差的中值绝对偏差来提取标准偏差的可靠估计:
σph=1.482median(rphmedian(rph)) \sigma_{p h}=1.482 * \operatorname{median}\left(r_{p h}-\operatorname{median}\left(r_{p h}\right)\right)

3.Mapping thread

添加关键帧到地图。每个像素有两种方式来估计其逆深度:传感器测量ρ1\rho 1以及多视图三角化ρ2\rho 2.The inverse depth ρ2\rho 2 for every high-gradient pixel uu^* in a keyframe IjI_j is estimated by minimizing its photometric error rphor_{ph}^o with respect to several overlapping views IoI_o .

ρ^2=argminρ2rph \hat{\rho}_{2}=\underset{\rho_{2}}{\arg \min } r_{p h}
rph=o(Ij(su)Io(G(su,Twj,Two,ρ)))22 r_{p h}=\sum_{o}\left\|\left(I_{j}\left(s_{u^{*}}\right)-I_{o}\left(G\left(s_{u^{*}}, T_{w}^{j}, T_{w}^{o}, \rho\right)\right)\right)\right\|_{2}^{2}

其中:

  • ρ=j=12ρjσj2j=121σj2,σ=1j=121σj2\rho=\frac{\sum_{j=1}^{2} \frac{\rho_{j}}{\sigma_{j}^{2}}}{\sum_{j=1}^{2} \frac{1}{\sigma_{j}^{2}}}, \quad \sigma=\frac{1}{\sum_{j=1}^{2} \frac{1}{\sigma_{j}^{2}}}
  • SuS_{u} *:座标
  • G()G()投影函数,IjI_j投影到IoI_o
  • σj\sigma_{j}为前面的标准差;

4.LOOP CLOSURE AND MAP REUSE

略.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章