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} M
    关键帧: { K 1 , … , K j , … , K m } \left\{\mathcal{K}_{1}, \ldots, \mathcal{K}_{j}, \ldots, \mathcal{K}_{m}\right\} {K1,,Kj,,Km}其中 K j = { T w j , P j } \mathcal{K}_{j}=\left\{T_{w}^{j}, P^{j}\right\} Kj={Twj,Pj}
    点云帧: P w j = P_{w}^{j}= Pwj= { p w 1 , … , p w i , … , p w n } \left\{p_{w}^{1}, \dots, p_{w}^{i}, \dots, p_{w}^{n}\right\} {pw1,,pwi,,pwn}
  • 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

最小化光度误差 r p h r_{ph} rph与几何误差 r g r_g rg.

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

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

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

2.1.Photometric error ( r p h r_{ph} rph )

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

photometric error:

r p h = ∑ i = 1 n w p ( ( I k ( π ( T w k p w i ) ) − a I f ( π ( T w f T − 1 p w i ) ) + b ) 2 σ p h 2 ) 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) rph=i=1nwp(σph2(Ik(π(Twkpwi))aIf(π(TwfT1pwi))+b)2)
其中:

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

2.2.Covariance-weighted Geometric error ( r g r_g rg )

(1)Covariance-weighted Geometric error:
r g = ∑ i = 1 n w p ( ( 1 e z T T w f T − 1 p w i − D f ( π ( T w f T − 1 p w i ) ) 2 σ g 2 ) ) \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) rg=i=1nwpσg2(ezTTwfT1pwi1Df(π(TwfT1pwi))2

其中:

  • 1 e z T T w f p x i \frac{1}{e_{z}^{T} \boldsymbol{T}_{w}^{f} p_{x}^{i}} ezTTwfpxi1 3D点云与投影帧对齐后的逆深度?错了:是当前帧的逆深度(残差构建就是预测的逆深度减去测量的你深度值,从而优化 T T T);
  • D f D_{f} Df测量值的逆深度;
  • e z = [ 0 , 0 , 1 ] e_{z}=[0,0,1] ez=[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 = f b d z=\frac{f b}{d} z=dfb
逆深度:
ρ = d f b \rho=\frac{d}{f b} ρ=fbd

标准差:
σ z = ∂ z ∂ d σ d = f b d 2 σ d = z 2 f b σ d \sigma_{z}=\frac{\partial z}{\partial d} \sigma_{d}=\frac{f b}{d^{2}} \sigma_{d}=\frac{z^{2}}{f b} \sigma_{d} σz=dzσd=d2fbσd=fbz2σd

逆深度标准差:

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

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.
对于光度误差,使用前一帧残差的中值绝对偏差来提取标准偏差的可靠估计:
σ p h = 1.482 ∗ median ⁡ ( r p h − median ⁡ ( r p h ) ) \sigma_{p h}=1.482 * \operatorname{median}\left(r_{p h}-\operatorname{median}\left(r_{p h}\right)\right) σph=1.482median(rphmedian(rph))

3.Mapping thread

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

ρ ^ 2 = arg ⁡ min ⁡ ρ 2 r p h \hat{\rho}_{2}=\underset{\rho_{2}}{\arg \min } r_{p h} ρ^2=ρ2argminrph
r p h = ∑ o ∥ ( I j ( s u ∗ ) − I o ( G ( s u ∗ , T w j , T w o , ρ ) ) ) ∥ 2 2 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} rph=o(Ij(su)Io(G(su,Twj,Two,ρ)))22

其中:

  • ρ = ∑ j = 1 2 ρ j σ j 2 ∑ j = 1 2 1 σ j 2 , σ = 1 ∑ j = 1 2 1 σ j 2 \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}}} ρ=j=12σj21j=12σj2ρj,σ=j=12σj211
  • S u ∗ S_{u} * Su:坐标
  • G ( ) G() G()投影函数, I j I_j Ij投影到 I o I_o Io
  • σ j \sigma_{j} σj为前面的标准差;

4.LOOP CLOSURE AND MAP REUSE

略.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值