线特征基础知识
最近在研究线特征相关的SLAM
问题,学习了相关的基础知识,在此做个总结。以前一直都是研究基于点的SLAM
算法,对于线的SLAM
了解不是很多。经过阅读相关的文章,发现最近研究基于点和线特征的文章很多,前年和去年就有好几篇IROS
的文章是研究点和线SLAM
的。
点、线和平面的表示
首先介绍点、线和平面的表示方法,由于点可以由下面的两种方式得到:空间中的两个点确定一条线;两个不平行平面相交得到一条直线。
空间中的一个点可以由坐标
X=[x,y,z]T
X
=
[
x
,
y
,
z
]
T
表示,也可以由齐次坐标为
X––=[x––,y–,z–,w––]T
X
_
=
[
x
_
,
y
_
,
z
_
,
w
_
]
T
表示。齐次坐标系
X––=[x––,y–,z–,w––]T
X
_
=
[
x
_
,
y
_
,
z
_
,
w
_
]
T
等价于
X––=[x––/w––,y–/w––,z–/w––,1]T=[X,1]T
X
_
=
[
x
_
/
w
_
,
y
_
/
w
_
,
z
_
/
w
_
,
1
]
T
=
[
X
,
1
]
T
。
空间中的一条线
L
L
可以由两个点
p=X––1=[x––1,y–1,z–1,w––1]T
p
=
X
_
1
=
[
x
_
1
,
y
_
1
,
z
_
1
,
w
_
1
]
T
,
q=X––2=[x––2,y–2,z–2,w––2]T
q
=
X
_
2
=
[
x
_
2
,
y
_
2
,
z
_
2
,
w
_
2
]
T
确定
其中 n n 是经过原点、和 q q 的平面的法向量,是直线的方向向量。
线 L=[nv] L = [ n v ] 做线的Plucker表示方式,其中 nTv=0 n T v = 0 。
已知空间中某个点以及其方向向量,可以得到线的另外一种表示方法, L^=[av]=[v×n∥v∥2v] L ^ = [ a v ] = [ v × n ‖ v ‖ 2 v ] ,其中 a a 为坐标系原点到直线距离最近的点。
平面由4维的向量表示,经过点 p1=X1 p 1 = X 1 、 p2=X2 p 2 = X 2 和 p3=X3 p 3 = X 3 的平面为
线的另外一种表达方式为四个元素的正交表示 (U,W)∈SO3×SO2 ( U , W ) ∈ S O 3 × S O 2 ,这种表示由于没有冗余参数,不存在约束,从而适合做为后端优化的表示方式。
线 L=[nv] L = [ n v ] 转换成正交表示参数的公式为
矩阵 U=[n∥n∥v∥v∥n×v∥n×v∥]∈SO3 U = [ n ‖ n ‖ v ‖ v ‖ n × v ‖ n × v ‖ ] ∈ S O 3 是一个正交矩阵,