论文阅读: Building a 3-D Line-Based Map Using Stereo SLAM

Abstract

一个把直线用作feature的SLAM系统.

跟点相比, 直线对于环境的结构提供了更丰富的信息, 也让其鞥有可能推断地图的空间语义.

  • 使用了Plucker line coordiantes来高效的初始化新观测的线特征,以及3D线的投影.
  • orthonormal representation做图优化.

1. Introduction

线和线段提供了更多环境里的结构信息. 用线特征建立的环境一般都有更少的纹理

用两个端点的三维线表示方式明显不满足SLAM的要求, 因为提取和跟踪线的端点的准确性和可靠性都差那么点那意思. 但也没有没有很统治级的3D线的参数法方法.

我们用了plucker coordinate和orthonormal representation.

线的关联不会提供任何的相对运动的约束. 解决方案是用第三张图来限制gauge freedoms.

3. Preliminaries

4. 3D Line Feature

A. Line Representation

  1. Plucker Line Coordinate (mathcal{L} = (n^T, v^T)^T)

注意, (n)(v)不一定要是unit vector, 从原点到线最近点(Q)的计算是(||n||/||v||).

还有一个约束是 (n^Tv =0).

plucker coordinate的transformation也是个线性转换:

[left[egin{array}{c}{mathbf{n}_{j}} \ {mathbf{v}_{j}}end{array} ight]=left[egin{array}{cc}{mathrm{R}_{j i}} & {left[mathbf{t}_{j i} ight]_{ imes} mathbf{R}_{j i}} \ {mathbf{0}} & {mathrm{R}_{j i}}end{array} ight]left[egin{array}{l}{mathbf{n}_{i}} \ {mathbf{v}_{i}}end{array} ight] ]

  1. Orthonormal Representation

我们的实验表明这个表达形式有最小的4个参数,在准确度上和收敛性上变现都很好.

我们可以用plucker coor的QR分解来计算orthonormal representation$$(mathrm{U}, mathrm{W}) in S O(3) imes S O(2)$$

[[mathbf{n} | mathbf{v}]=Uleft[egin{array}{cc}{omega_{1}} & {0} \ {0} & {omega_{2}} \ {0} & {0}end{array} ight] ]

然后把(W)设定为如下式子:

[W=left[egin{array}{cc}{omega_{1}} & {-omega_{2}} \ {omega_{2}} & {omega_{1}}end{array} ight] ]

1565769851799

如上图所示, (U)(W)是三维和二维的旋转矩阵, 所以最小化的4参数表示方式是: $$mathbf{p}^{ op}=left(oldsymbol{ heta}^{ op}, heta ight)$$

这儿(oldsymbol{ heta})标识3-vector, ( heta)是标量.

这样的话((U, W))的更新形式变成: $$mathrm{U} leftarrow mathrm{U}R(oldsymbol{ heta})$$ 和 $$W leftarrow W R( heta)$$.

从orthonormal representation到plucker coordinate的转换如下:

[mathcal{L}=left(omega_{1} mathbf{u}_{1}^{ op}, omega_{2} mathbf{u}_{2}^{ op} ight)^{ op} ]

这里(u_i)表示U的第i列.

  • [ ] 感觉这儿的(omega)的序号有点问题.

B. Observation Model

1565769834696

如上图所示, 平面(pi_L)(mathcal{L})(C_L)决定, 并和平面(mathcal{I}_L)相较于(I_L).

所有在(pi_L)上的线投在平面上都是这个(I_L). 这意味着(mathcal{L})的投影只由(n)决定, 与方向(v)无关.

3D端点(C, D)投影成为(c, d).

在左侧的相机坐标系中, $$underline{mathbf{c}}=mathrm{KC}, underline{mathrm{d}}=mathrm{KD}, mathbf{n}=mathrm{C} imes mathrm{D}, ext { and } underline{1}=underline{mathbf{c}} imes underline{mathrm{d}}$$

这样我们也可以知道, 线的投影方程:

[1=mathcal{K} mathbf{n} ag{16} ]

[mathcal{K}=left[egin{array}{ccc}{f_{y}} & {0} & {0} \ {0} & {f_{x}} & {0} \ {-f_{y} x_{0}} & {-f_{x} y_{0}} & {f_{x} f_{y}}end{array} ight] ]

公式(16)表明, 在投影的时候只有normal vector会出现在投影方程里. 相反的, 在看图像观测的时候, 我们也只能得到plucker coordinate的 (n).

1565769802752

plucker coordinate的重投影方程和之前介绍的特征都不一样, 因为它不能直接将两个图像线相减, 我们把重投影误差定义为端点到预测线的距离.

这样的话, 对于端点(d)和线(l_L), cost的定义如下:

[z_{L}^{1}=frac{mathbf{d}^{ op} cdot mathbf{l}_{L}}{d_{3} sqrt{l_{1}^{2}+l_{2}^{2}}} in mathbb{R}^{1} ]

这里$$mathbf{d}=left(d_{1}, d_{2}, d_{3} ight)^{ op} ext { and } underline{l}{L}=left(l{1}, l_{2}, l_{3} ight)^{ op}$$

**因为针孔问题, 连续帧中线段有噪声的位置, 只有观测中和期望的线投影正交的部分才有有意义的信息. **

事实上, 我们也测试过其他重投影误差的方法, 比如线段间的旋转和平移的误差, 然而它降低了重建的精度.

这样, 在stereo image上的重投影误差如下:

[epsilon_{mathrm{z}}=left(z_{L}^{1}, z_{L}^{2}, z_{R}^{1}, z_{R}^{2} ight)^{ op} in mathbb{R}^{4} ]

C. Initialization

在左相机的观测中, 用左相机的光心和图像线可以计算一个平面:

[underline{oldsymbol{pi}}_{L}=mathrm{P}^{ op} underline{1}_{L} in mathbb{R}^{4} ]

我们回顾dual plucker matrix, 结果如下:

[mathrm{L}^{*}=oldsymbol{pi}_{L} oldsymbol{pi}_{R}^{ op}-underline{oldsymbol{pi}}_{R} underline{oldsymbol{pi}}_{L}^{ op} in mathbb{R}^{4 imes 4} ]

[mathrm{L}^{*}=left[egin{array}{cc}{[mathbf{v}]_{ imes}} & {mathbf{n}} \ {-mathbf{n}^{ op}} & {0}end{array} ight] ]

这样我们就可以直接提取plucker line coordinates.

D. Endpoints Trimming

所有的几何计算都把3D线看作是有限的直线, 特定的端点位置不会影响3D线计算的结果.

3D line-based map比之3D point map的优势在于, 它可以更高效的收敛.

在实际情况中, 光线从相机中心反投影很难在3D线上停驻. 我们提了一种方案.

1565770822919

图像e的生成方式是e-d垂直与直线(l_L), 这样3D平面(pi)就可以如下计算:

[egin{array}{l}{underline{1}_{e}=underline{e} imes underline{d}} \ {underline{pi}=mathrm{P}^{ op} underline{l}_e}end{array} ]

给定plucker line coordinates, $$mathcal{L}=left(mathbf{n}^{ op}, mathbf{v}^{ op} ight)^{ op}$$, plucker matrix的公式如下:

[mathrm{L}=left[egin{array}{cc}{[mathbf{n}]_{ imes}} & {mathbf{v}} \ {-mathbf{v}^{ op}} & {0}end{array} ight] ]

这样的话, 3D点(D)可以如下计算:

[underline{mathbf{D}}=mathrm{L} oldsymbol{pi} ]

E. Straight Line Detection and Tracking

...

F. Loop Closure Detection

...

5. Graph Optimization

...

Appendix

Plucker Matrix

给定两个点(A, B). Plucker Matrix如下:

[[L]_{ imes} propto AB^T-BA^T ]

是一个反对称矩阵.

它有一些特性:

  • 平面(E)包含了直线:(0=[L]_{ imes}E)
  • 平面(E)和直线相交: (X=[L]_{ imes}E)
  • 点在线上: (0=[ ilde{L}]_ imes X)
  • (E=[ ilde{L}]_ imes X)表示平面(E)包含点(X)和线(L).

Dual Plucker Matrix

点和平面都可以被标识为4-vector, 并且它们的几何关系的代数描述都是对称的. 通过在理论中交换两者(点和平面), 我们可以得到一个dual theorem.

在Plucker matrix中, 存在一种dual representation是两个平面相交表示一条线

存在两个平面 (E, F). Plucker Matrix是:

[[ ilde{L}]_{ imes} = EF^T-FE^T ]

然后

[G=[ ilde{L}]_{ imes}X ]

这个式子描述(G)平面包含点(X)和线(L).

也就是dual Plucker Matrix操作的是一条线和一个点生成一个平面.

Relationship between Primal and Dual Plucker Matrix

(X=[L]_ imes E) 的结果是一个线上的点或者是一个zero-vector.

两者相乘是0矩阵


在projective plane中, 两个点的连线也是一个直线:

[l propto a imes b = [l_0 l_1 l_2]^T\ [l]_ imes=ab^T-ba^T ]

Geometric Interpretation

[[L]_ imes=left( egin{matrix} [m]_ imes & d \ -d & 0 end{matrix} ag{1} ight) ]

[[ ilde{L}]_ imes = left( egin{matrix} [-d]_ imes & m\ -m & 0 end{matrix} ag{2} ight) ]

原文地址:https://www.cnblogs.com/tweed/p/11353285.html