IROS2017.一个小众的不太出名的RGBD-SLAM系统,无意中搜索到,发现是开源的。学习一下。
主要贡献:
. 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.
系统说明:
///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);
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.
最小化光度误差 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 a、b是当前图像的增益和亮度. T T T是当前相机姿态的运动估计增量。 λ \lambda λ是对光度和几何项进行加权的学习常数。tracking线程只优化 T 、 a 、 b T、a、b T、a、b三个量。
优化在李代数空间进行:
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} Twf←TwfT^−1
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=1∑nwp(σph2(Ik(π(Twkpwi))−aIf(π(TwfT−1pwi))+b)2)
其中:
(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=1∑nwp⎝⎛σg2(ezTTwfT−1pwi1−Df(π(TwfT−1pwi))2⎠⎞⎠⎞
其中:
. 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=∂d∂zσ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
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.482∗median(rph−median(rph))
添加关键帧到地图。每个像素有两种方式来估计其逆深度:传感器测量 ρ 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
其中:
略.