提出了一种手持式3D传感器的SLAM算法,该算法使用点和平面作为基本体。我们表明,可以使用三个点平面基本体(3个平面、2个平面和1个点、1个平面和2个点以及3个点)的任意组合在两个不同坐标系中注册3D数据。算法使用RANSAC框架中的最小基元集来稳健地计算对应关系并估计传感器姿态。由于平面数明显小于典型3D数据中的点数,我们的RANSAC算法更喜欢包含更多平面的原始组合,而不是点。与现有的主要使用点进行配准的方法相比, 优点:
图2显示了我们的SLAM系统的流程图。系统的输入是一对彩色图像和深度图(RGB-D数据)。我们使用测量和地标的标准术语:我们的系统从输入数据中提取测量值,并生成/更新全球地图中的地标。这是通过从输入数据中提取点和平面,并将其与使用先前测量生成的全球地图中的点/平面地标进行注册来实现的。我们在该系统中的主要贡献是:(1)基于RANSAC的注册算法,使用最少的基元数;(2)使用点和平面的地图优化算法,分别在第三节和第四节中详细介绍。在这里,我们简要描述了系统的每个组件。
我们的系统从每个彩色图像中提取2D关键点,并使用获得3D点测量值的相应深度图。每个点的测量值都用 ( p m , D m ) (p_m,D_m) (pm,Dm)表示,其中 p m p_m pm表示3D位置, D m D_m Dm表示关键点描述符。我们使用OpenCV中实现的SURF作为描述符。
为了从深度地图生成的3D点云中提取基本平面,我们使用以下多级RANSAC算法:
每个平面测量值都用 ( π m , I m ) (π_m,I_m) (πm,Im)表示,分别表示平面参数和内点数。4D矢量 π m = ( n m T , d m ) T π_m=(n^T_m,d_m)^T πm=(nmT,dm)T,其中 n m n_m nm是单位法向量, d m d_m dm是到相机坐标系原点的距离。
当前帧的姿势是通过使用我们基于RANSAC的注册算法将测量值注册到地图中的地标来计算的。第三节介绍了使用点到点和平面到平面对应以及有效的RANSAC程序的注册问题的封闭式解决方案。
在全局地图中,我们的系统维护从关键帧中的测量生成的点和平面地标。如果使用基于RANSAC的注册计算的姿势与以前的关键帧的姿势有足够的不同,我们的系统会将当前帧作为关键帧添加到地图中。基于RANSAC的注册结果还用于确定关键帧中的测量是与现有地标关联(是内点的情况)还是生成新地标(是局外点的情况)。每个点地标用 ( p l , D l ) (p_l,D_l) (pl,Dl)表示,其中 p l p_l pl表示3D位置, D l D_l Dl表示从相关联点测量获得的关键点描述子信息。每个平面地标用 ( π l , I l ) (π_l,I_l) (πl,Il)表示,其中 π l = ( n l T , d l ) T π_l=(n^T_l,d_l)^T πl=(nlT,dl)T表示平面参数, I l I_l Il表示相关联平面内点的集合。
为了获得全局一致的结果,我们的系统运行束调整,以使用所有测量值优化关键帧和点/平面地标的姿势。第四节解释了这一步骤。如[1]所示,束调整与主摄像机跟踪线程一起异步运行。
在本节中,提出一种使用点到点和平面到平面对应的闭合形式配准算法。该算法适用于3个或3个以上的匹配;因此,它可以用于在我们的RANSAC框架中生成假设,以及使用所有内点优化相机姿势。然后,我们介绍了高效的RANSAC程序,该程序将平面图元优先于点图元,因为三维数据中的平面数通常小于点数。我们还描述了几种几何约束,以使用解释树去删除错误的对应。
设 p i {p_i} pi和 p ′ i {p′_i} p′i,其中 i = 1 , … , M i=1,…,M i=1,…,M为相对应的3D点, π j = ( n j T , d j ) T {π_j=(n_j ^T,d_j)^T} πj=(njT,dj)T和 π ′ j = ( n ′ j T , d ′ j ) T π′_j=(n′_j^ T,d′_j)^T π′j=(n′jT,d′j)T,其中 j = 1 , . . . . , N j = 1,....,N j=1,....,N是相对应的3D平面。我们希望找到坐标系之间的刚体变换 [ R , t ] [R,t] [R,t]。
单个情况解决方法:对于点对点对应情况,已经证明旋转和平移分量可以解耦。三维点集的质心 p ‾ = 1 M ∑ i p i \overline{p} = \frac{1}{M}\sum_ip_i p=M1∑ipi 和 p ′ ‾ = 1 M ∑ i p ′ i \overline{p\prime} = \frac{1}{M}\sum_ip\prime_i p′=M1∑ip′i。 q i = p i − p ‾ q_i = p_i - \overline{p} qi=pi−p和 q ′ i = p ′ i − p ′ ‾ q\prime_i = p\prime_i - \overline{p\prime} q′i=p′i−p′然后通过最小化得到旋转的最小二乘解
这个问题可以用旋转的四元数表示或奇异值分解(SVD)来解决。使用估计的旋转R,平移计算为旋转质心之间的差值:
对于平面到平面的对应情况,旋转通过最小化获得
这可以类似于点到点对应的情况来解决。为了计算平移,我们可以叠加一个线性约束
对于3个或更多平面,并求解线性系统。
混合情况的解决方法
在我们考虑混合情况,其中我们既有点到点的对应,也有平面到平面的对应。我们利用在个别情况下使用的解耦,首先计算旋转,然后计算平移。
为了计算旋转,我们结合公式。(1) 和(3)得到:
其中, w j w_j wj是分配给第 j j j个平面对应的权重。该等式与等式 ( 1 ) ( 3 ) (1)(3) (1)(3)的形式相同。以相同的方式获得最优旋转。具体来说,我们将3×3协方差矩阵K定义为
设 K = U D V T K=UDV^T K=UDVT是K的奇异值分解,其中 D = d i a g ( σ 1 , σ 2 , σ 3 ) D=diag(σ1,σ2,σ3) D=diag(σ1,σ2,σ3), σ 1 ≥ σ 2 ≥ σ 3 ≥ 0 σ1≥ σ2 ≥ σ3 ≥ 0 σ1≥σ2≥σ3≥0。那么最佳旋转R:
为了计算平移,我们最小化
这对应于定义线性系统
其中, I 3 I_3 I3是3×3单位矩阵。如果点对应的数量M为零, A 1 A_1 A1和 b 1 b_1 b1消失;如果平面对应的数量N为零, A 2 A_2 A2和 b 2 b_2 b2消失。最小二乘解由下式给出
为了唯一提取R和t,方程(6)中的相关矩阵K和方程(9)中的矩阵A应该满足某些条件。
为了唯一的计算R,K的秩应该大于1,并且必须至少满足以下条件之一:
(1) d e t ( U V T ) = 1 det(UV^T)=1 det(UVT)=1;
(2) K的最小奇异值是一个单根 ( σ 2 ! = σ 3 ) (σ2 !=σ3) (σ2!=σ3)
对于唯一确定的平移t,矩阵A应为秩3。注意,如果至少有一个点对应(M>0),则A的秩为3(因为是A1)
如果矩阵K和A的对应至少具有图3所示的以下其中一种,则矩阵K和矩阵A满足上述特性:
与2D图像空间中的对应相反,3D基本体提供了几个不变量,可用于删除错误的匹配。这些不变量是独立于坐标系的几何实体。我们确定了以下三个不变量:
不变量可以用向量 I = ( i 1 , i 2 , i 3 ) I=(i_1,i_2,i_3) I=(i1,i2,i3)表示,其中 i 1 i_1 i1、 i 2 i_2 i2和 i 3 i_3 i3分别表示类型 I 1 I_1 I1、 I 2 I_2 I2和 I 3 I_3 I3的不变量数。我们可以观察到,所有涉及点和平面的对应三元组共有三个不变量,如下所示:
在基于不变量的剪枝之前,我们需要获得一些对应的初始候选。在只有点的情况下,我们通过使用当前帧中的点测量值与地图中的点地标之间的最近邻描述符匹配来获得此类候选点。对于平面,我们使用所有可能的组合作为候选。我们使用3平面对应开始RANSAC程序,因为3D数据中的平面数通常比关键点的平面数小得多。此外,由于平面是由多个点生成的,因此它们受三维数据中的噪声影响较小,从而实现更精确的配准。如果测量包括少于3个平面,或者如果使用3个平面对应计算的内点数量很小,那么我们尝试使用2个平面和1个点对应等,如图3所示。我们通过使用要求取样的最小三元组数量的标准来终止RANSAC程序。
传统的BA方法使用从2D图像或3D传感器获得的测量值,同时优化所有关键帧和/或点标记的姿势。我们通过添加平面地标来扩展3D传感器的方法:我们同时优化点和平面地标以及所有关键帧的姿势。
我们将要优化的变量表示为:
对于点路标点,我们最小化了路标点 p l i p^i_l pli和第 k k k个关键帧中相关点测量 p m k = ( x m k , y m k , z m k ) T p^k_m=(x^k_m,y^k_m,z^k_m)^T pmk=(xmk,ymk,zmk)T之间的距离误差,表示为
使用当前估计的路标点 p ^ l i = ( x ^ i , y ^ i , z ^ i ) T \hat{p}^i_l =(\hat{x}^i , \hat{y}^i , \hat{z}^i)^T p^li=(x^i,y^i,z^i)T和关键帧位姿 [ R ^ k , t ^ k ] [\hat{R}^k , \hat{t}^k] [R^k,t^k],我们将方程线性化为
其中 p ^ m k = R ^ k p m k + t ^ k \hat{p}^k_m = \hat{R}^kp^k_m + \hat{t}^k p^mk=R^kpmk+t^k
对于每个(x,y,z)分量,我们分别得到3个方程。x分量的方程式为
对于y分量和z分量的值也可以类似地得到。
对于平面路标点,我们不是最小化平面之间的代数误差,而是最小化由平面路标点和关键帧中从相关平面测量中采样的3D点之间的距离之和定义的几何误差。具体来说,我们将均匀采样3D点, x m k , s x^{k,s}_m xmk,s,这些点来自平面 π m k π^k_m πmk的内点3D点,并计算每个采样点与相关平面 π l j π^j_l πlj之间的距离。最小值表示为:
我们使用当前估计的平面路标 π ^ = ( a ^ j , b ^ j , c ^ j , d ^ j ) \hat{\pi} =(\hat{a}^j,\hat{b}^j,\hat{c}^j,\hat{d}^j) π^=(a^j,b^j,c^j,d^j)和关键帧位姿 [ R ^ k , t ^ k ] [\hat{R}^k , \hat{t}^k] [R^k,t^k]将当前方程线性化
通过Eqs。(15) (18)对于所有点/平面路标和关键帧,我们得到一个线性系统 J ∆ = − ϵ 0 J∆ = −\epsilon_0 J∆=−ϵ0,其中 J J J代表雅可比矩阵, ϵ 0 \epsilon_0 ϵ0是给定变量与当前估计值的误差向量。和 ∆ ∆ ∆ 是更新向量,包括 ∆ p j i ∆p^i_j ∆pji, ∆ π l j ∆π^j_l ∆πlj,和 ∆ T k ∆T^k ∆Tk待计算。我们的系统目前在每次调用束平差过程时计算整个线性系统,并使用高斯-牛顿迭代法和Eigen中的稀疏线性解算器求解。它可以通过使用分层的[30]或基于树的[31]图结构来更有效地计算线性系统的增量更新和解。