文章目录
前言
3D空间下的直线可以用普吕克 ( n , d ) (\boldsymbol n,\boldsymbol d) (n,d)表示,方便参与几何运算,但其维度为6,在优化中普吕克表达不占优,而正交表示 ( U , W ) (\boldsymbol U,\boldsymbol W) (U,W)有4个自由度,主要参与优化运算。本文主要记录以下几点
- 线的普吕克表示
- 与线的正交表示
- 两者之间的关系及相互转换过程
一、向量的叉乘与点乘
面的讲解会用到叉乘与点乘,为了避免陌生感,首先来复习一下向量的基本运算:
a
⋅
b
=
b
⋅
a
a
×
b
=
−
b
×
a
a
⋅
(
b
×
c
)
=
(
a
×
b
)
⋅
c
a
×
(
b
×
c
)
=
(
a
⋅
c
)
b
−
(
a
⋅
b
)
c
\boldsymbol{a\cdot b=b \cdot a} \\ \boldsymbol{a\times b = - b \times a }\\ \boldsymbol{a \cdot(b \times c) = (a \times b) \cdot c} \\ \boldsymbol{a \times (b \times c) = (a \cdot c)b - (a \cdot b)c}
a⋅b=b⋅aa×b=−b×aa⋅(b×c)=(a×b)⋅ca×(b×c)=(a⋅c)b−(a⋅b)c
二、普吕克坐标系(plücker coordination)
1. 定义
3D空间中刚体有6个自由度,而线有4个自由度,因为线绕自己旋转(roll),或在线的方向上平移还是同一个直线,因此少了两个自由度。
plücker coordination是Julius Plücker在19世纪定义的,也叫Grassmann coordinates。普吕克坐标系定义为
(
n
,
d
)
(\boldsymbol n,\boldsymbol d)
(n,d),
n
\boldsymbol n
n为矩向量 (moment vector) 也是法向量,
d
\boldsymbol d
d为线
ℓ
\ell
ℓ 的方向向量。具体:已知线上两点
p
1
,
p
2
p_1,p_2
p1,p2,则线的方向向量
d
\boldsymbol d
d:
d
=
p
1
−
p
2
(1)
\boldsymbol d = \boldsymbol p_1-\boldsymbol p_2 \tag{1}
d=p1−p2(1)
法向量
n
\boldsymbol n
n:
n
=
p
×
d
(2)
\boldsymbol{ n =p\times d } \tag{2}
n=p×d(2)
其中,
n
\boldsymbol n
n 垂直于线
ℓ
\ell
ℓ 与坐标原点所形成的平面。
p
\boldsymbol p
p 为线上任一点(可以是
p
1
p_1
p1或
p
2
p_2
p2)在世界坐标的向量表示。点
p
p
p可以任意选取的原因在于,线上任一点
p
′
p'
p′ 满足
p
′
−
p
=
λ
d
\boldsymbol {p'-p}=\lambda \boldsymbol d
p′−p=λd:
p
′
×
d
=
(
p
+
(
p
′
−
p
)
)
×
d
=
p
×
d
+
(
p
′
−
p
)
×
d
=
n
+
λ
d
×
d
=
n
(3)
\begin{aligned} \boldsymbol {p' \times d} &= \boldsymbol{(p+(p'-p))\times d}\\ &=\boldsymbol{p\times d +(p'-p)\times d}\\ &=\boldsymbol{n}+\lambda \boldsymbol{d \times d}\\ &=\boldsymbol n \end{aligned} \tag{3}
p′×d=(p+(p′−p))×d=p×d+(p′−p)×d=n+λd×d=n(3)
2. 性质
2.1. 一点
p
p
p 在线
ℓ
\ell
ℓ 上的充分必要条件:
p
×
d
=
n
\boldsymbol {p\times d = n}
p×d=n。
2.2. 坐标原点到
ℓ
\ell
ℓ 的距离为
∣
∣
n
∣
∣
∣
∣
d
∣
∣
\frac{||\boldsymbol n||}{||\boldsymbol d||}
∣∣d∣∣∣∣n∣∣。
2.3. 线
(
n
,
d
)
(\boldsymbol {n,d} )
(n,d)与线
(
α
n
,
α
d
)
,
α
≠
0
(\alpha \boldsymbol n,\alpha \boldsymbol d ), \alpha \ne 0
(αn,αd),α=0 表示的是同一直线。
2.4. 线
ℓ
\ell
ℓ 与过原点的垂线的交点(垂足)记为
p
⊥
p_\bot
p⊥,则:
p ⊥ = p − ( d ^ ⋅ p ) d ^ = ( d ^ ⋅ d ^ ) p − ( d ^ ⋅ p ) d ^ = d ^ × ( p × d ^ ) = d ∣ ∣ d ∣ ∣ × ( p × d ∣ ∣ d ∣ ∣ ) = d ∣ ∣ d ∣ ∣ × n ∣ ∣ d ∣ ∣ = d × n ∣ ∣ d ∣ ∣ 2 (4) \begin{aligned} \boldsymbol p_\bot &= \boldsymbol{ p - ( \widehat{d} \cdot p ) \widehat{d} } \\ &=\boldsymbol{(\widehat{d} \cdot \widehat{d}) p - (\widehat{d} \cdot p) \widehat{d} } \\ &=\boldsymbol{ \widehat{d} \times (p \times \widehat{d})}\\ &=\boldsymbol{ \frac{d}{||d||} \times (p \times \frac{d}{||d||})}\\ &=\boldsymbol{\frac{d}{||d||} \times \frac{n}{||d||}}\\ &=\boldsymbol{ \frac{d\times n}{||d||^2}}\\ \end{aligned} \tag{4} p⊥=p−(d ⋅p)d =(d ⋅d )p−(d ⋅p)d =d ×(p×d )=∣∣d∣∣d×(p×∣∣d∣∣d)=∣∣d∣∣d×∣∣d∣∣n=∣∣d∣∣2d×n(4)
2.5.
n
=
0
\boldsymbol {n=0}
n=0时,直线
ℓ
\ell
ℓ 经过坐标原点。 那么,经过坐标原点的线的普吕克表示为
(
0
,
_
)
(\boldsymbol 0,\_ )
(0,_)。
2.6. 平面
Π
\Pi
Π 经过坐标原点,那么位于面
Π
\Pi
Π 上的所有无穷远处的直线的具有相同的普吕克表示为
(
n
,
0
)
(\boldsymbol {n},\boldsymbol {0})
(n,0),
n
\boldsymbol {n}
n 为面
Π
\Pi
Π 的法线。
2.7. 直线
ℓ
\ell
ℓ 关于空间任一点
q
q
q 的矩向量(moment vector)为
n
q
\boldsymbol n_q
nq,
q
q
q 在
ℓ
\ell
ℓ 上的投影为
q
⊥
q_\bot
q⊥,则:
n
q
=
(
p
−
q
)
×
d
^
=
p
×
d
^
−
q
×
d
^
=
n
−
q
×
d
^
(5)
\begin{aligned} \boldsymbol{n}_q &=(\boldsymbol p-\boldsymbol q)\times \widehat{\boldsymbol d}\\ &=\boldsymbol p \times \widehat{\boldsymbol d} - \boldsymbol q \times \widehat{\boldsymbol d} \\ &= \boldsymbol n- \boldsymbol q \times \widehat{\boldsymbol d} \end{aligned} \tag{5}
nq=(p−q)×d
=p×d
−q×d
=n−q×d
(5)
又,
d
^
×
n
q
=
d
^
×
(
q
⊥
−
q
)
×
d
^
=
(
d
^
⋅
d
^
)
(
q
⊥
−
q
)
−
(
d
^
⋅
(
q
⊥
−
q
)
)
d
^
=
q
⊥
−
q
(6)
\begin{aligned} \widehat{\boldsymbol d} \times \boldsymbol{n}_q &= \widehat{\boldsymbol d} \times (\boldsymbol q_\bot -\boldsymbol q)\times \widehat{\boldsymbol d} \\ &=( \widehat{\boldsymbol d} \cdot \widehat{\boldsymbol d})(\boldsymbol q_\bot -\boldsymbol q) - ( \widehat{\boldsymbol d} \cdot (\boldsymbol q_\bot -\boldsymbol q)) \widehat{\boldsymbol d}\\ &= \boldsymbol q_\bot -\boldsymbol q \end{aligned} \tag{6}
d
×nq=d
×(q⊥−q)×d
=(d
⋅d
)(q⊥−q)−(d
⋅(q⊥−q))d
=q⊥−q(6)
因此,
q
⊥
=
q
+
d
^
×
n
q
(7)
\boldsymbol q_\bot =\boldsymbol q + \widehat{\boldsymbol d} \times\boldsymbol{n}_q \tag{7}
q⊥=q+d
×nq(7)
直线的普吕克表示适合几何运算,但不适合优化,而直线的正交表示可以应用到优化过程。
3. 世界坐标系下线的普吕克坐标转换到相机坐标系
已知世界坐标系到相机坐标系的变换矩阵
T
w
c
=
[
R
w
c
t
w
c
0
1
]
\boldsymbol{T}_w^c = \left[\begin{matrix} \boldsymbol R_w^c & \boldsymbol t_w^c \\ \boldsymbol 0 & \boldsymbol 1 \end{matrix} \right]
Twc=[Rwc0twc1],世界坐标系下的直线普吕克表示
L
w
\mathcal{L}_w
Lw,则相机坐标系下的普吕克表示
L
c
\mathcal{L}_c
Lc可通过式
(
8
)
(8)
(8) 得到:
L
c
=
[
n
c
d
c
]
=
T
w
c
L
w
=
[
R
w
c
[
t
w
c
]
×
R
w
c
0
R
w
c
]
L
w
(8)
\mathcal{L}_c = \left[\begin{matrix} \boldsymbol n_c\\ \boldsymbol d_c \end{matrix} \right] = \boldsymbol{ \mathcal{T}}_w^c \mathcal{L}_w= \left[\begin{matrix} \boldsymbol R_w^c & \left[\boldsymbol t_w^c\right]_\times \boldsymbol R_w^c\\ \boldsymbol 0 & \boldsymbol R_w^c \end{matrix} \right] \mathcal{L}_w \tag{8}
Lc=[ncdc]=TwcLw=[Rwc0[twc]×RwcRwc]Lw(8)
其中,
[
t
w
c
]
×
[\boldsymbol t_w^c]_\times
[twc]× 为平移向量
t
w
c
\boldsymbol t_w^c
twc 的反对称矩阵(Skew-symmetric matrix),
T
w
c
\boldsymbol{ \mathcal{T}}_w^c
Twc 为直线的普吕克坐标从世界坐标系到相机坐标系的变换矩阵。同理,将直线从相机坐标系转换到世界坐标系的变换矩阵
T
c
w
\boldsymbol{ \mathcal{T}}_c^w
Tcw,如式(9)所示:
T
c
w
=
T
w
c
T
=
[
R
w
c
T
−
[
R
w
c
T
t
w
c
]
×
R
w
c
T
0
R
w
c
T
]
(9)
\boldsymbol{ \mathcal{T}}_c^w = {\boldsymbol{ \mathcal{T}}_w^c}^T= \left[\begin{matrix} {\boldsymbol R_w^c}^T & -\left[{\boldsymbol R_w^c}^T\boldsymbol t_w^c\right]_\times{\boldsymbol R_w^c}^T\\ \boldsymbol 0 & {\boldsymbol R_w^c}^T \end{matrix} \right] \tag{9}
Tcw=TwcT=[RwcT0−[RwcTtwc]×RwcTRwcT](9)
三、线的正交表示
正交表示只需要4个变量 ( θ , ϕ ) ∈ R 3 × R 1 (\boldsymbol \theta,\phi)\in \mathbb R^3\times \mathbb R^1 (θ,ϕ)∈R3×R1,对应两个正交矩阵 ( U , W ) ∈ S O ( 3 ) × S O ( 2 ) (\mathbf U,\mathbf W)\in SO(3) \times SO(2) (U,W)∈SO(3)×SO(2),比较适合在优化过程中对线的表示。
1. 普吕克表示转换到正交表示
正交表示和普吕克表示可以相互转换,在SLAM中可灵活应用。正交表示可以通过对普吕克坐标进行QR分解得到,但实际应用中很容易构造如下所示的矩阵:
[
n
d
]
=
[
n
∣
∣
n
∣
∣
d
∣
∣
d
∣
∣
n
×
d
∣
∣
n
×
d
∣
∣
]
[
∣
∣
n
∣
∣
0
0
∣
∣
d
∣
∣
0
0
]
=
[
u
1
u
2
u
3
]
[
∣
∣
n
∣
∣
0
0
∣
∣
d
∣
∣
0
0
]
(10)
\begin{aligned} \left[\boldsymbol {n \quad d} \right] &= \left[\begin{matrix} {\frac{ \boldsymbol n}{|| \boldsymbol n||}} & {\frac{ \boldsymbol d}{|| \boldsymbol d||}} & \boldsymbol{\frac{n\times d}{||n\times d||}}\end{matrix}\right] \left[\begin{matrix} \boldsymbol{||n||} & 0\\ 0& \boldsymbol {||d||} \\ 0 & 0\end{matrix}\right]\\ &=\left[\begin{matrix} \boldsymbol u_1 & \boldsymbol u_2 & \boldsymbol u_3\end{matrix}\right] \left[\begin{matrix} \boldsymbol{||n||} & 0\\ 0& \boldsymbol {||d||} \\ 0 & 0\end{matrix}\right] \end{aligned} \tag{10}
[nd]=[∣∣n∣∣n∣∣d∣∣d∣∣n×d∣∣n×d]
∣∣n∣∣000∣∣d∣∣0
=[u1u2u3]
∣∣n∣∣000∣∣d∣∣0
(10)
因此,很容易得到一个表示旋转的正交矩阵,也就是旋转矩阵
U
\boldsymbol U
U:
U
=
R
(
θ
)
=
R
x
(
θ
1
)
R
y
(
θ
2
)
R
z
(
θ
3
)
=
[
u
1
u
2
u
3
]
=
[
n
∣
∣
d
∣
∣
d
∣
∣
d
∣
∣
n
×
d
∣
∣
n
×
d
∣
∣
]
(11)
\begin{aligned} \boldsymbol U &=\boldsymbol R(\boldsymbol\theta)= \boldsymbol R_x(\theta_1)\boldsymbol R_y(\theta_2)\boldsymbol R_z(\theta_3)\\ &=\left[\begin{matrix} \boldsymbol u_1 & \boldsymbol u_2 & \boldsymbol u_3\end{matrix}\right]\\ &=\left[\begin{matrix} {\frac{ \boldsymbol n}{|| \boldsymbol d||}} & {\frac{ \boldsymbol d}{|| \boldsymbol d||}} & \boldsymbol{\frac{n\times d}{||n\times d||}}\end{matrix}\right] \end{aligned} \tag{11}
U=R(θ)=Rx(θ1)Ry(θ2)Rz(θ3)=[u1u2u3]=[∣∣d∣∣n∣∣d∣∣d∣∣n×d∣∣n×d](11)
其中,
θ
\boldsymbol\theta
θ 为依次绕
x
−
y
−
z
x-y-z
x−y−z 轴的旋转角,显然,
R
(
θ
)
\boldsymbol R(\boldsymbol\theta)
R(θ) 就是绕
x
−
y
−
z
x-y-z
x−y−z 旋转后的旋转矩阵。
矩阵
[
∣
∣
n
∣
∣
0
0
∣
∣
d
∣
∣
0
0
]
\left[\begin{matrix} \boldsymbol{||n||} & 0\\ 0& \boldsymbol {||d||} \\ 0 & 0\end{matrix}\right]
∣∣n∣∣000∣∣d∣∣0
只有一个自由度,将其归一化后可用一个
S
O
(
2
)
SO(2)
SO(2)更新,用三角函数表示为:
W
=
[
cos
ϕ
−
sin
ϕ
sin
ϕ
cos
ϕ
]
=
[
w
1
−
w
2
w
2
w
1
]
=
1
∣
∣
n
∣
∣
2
+
∣
∣
d
∣
∣
2
[
∣
∣
n
∣
∣
−
∣
∣
d
∣
∣
∣
∣
d
∣
∣
∣
∣
n
∣
∣
]
(12)
\begin{aligned} \boldsymbol W&= \left[\begin{matrix} \cos\phi & -\sin\phi\\ \sin\phi& \cos\phi \end{matrix}\right]\\ &=\left[\begin{matrix} w_1 & -w_2\\ w_2 & w_1 \end{matrix}\right]\\ &=\frac{1}{\sqrt{||\boldsymbol n||^2+||\boldsymbol d||^2}} \left[\begin{matrix} ||\boldsymbol n|| & -||\boldsymbol d||\\ ||\boldsymbol d||& ||\boldsymbol n|| \end{matrix}\right] \end{aligned} \tag{12}
W=[cosϕsinϕ−sinϕcosϕ]=[w1w2−w2w1]=∣∣n∣∣2+∣∣d∣∣21[∣∣n∣∣∣∣d∣∣−∣∣d∣∣∣∣n∣∣](12)
从式 (12) 可以看出 W \boldsymbol W W 包含了距离信息。故正交表示 ( U , W ) (\mathbf U,\mathbf W) (U,W)包含3自由度的旋转和1自由度的距离。
2. 正交表示转换到普吕克表示
已知线d正交表示
(
U
,
W
)
(\mathbf U,\mathbf W)
(U,W),或
(
θ
,
ϕ
)
(\boldsymbol{\theta}, \phi)
(θ,ϕ),很容易求得普吕克表示:
[
n
d
]
=
[
w
1
u
1
T
w
2
u
2
T
]
(13)
\left[\boldsymbol {n \quad d} \right] =\left[{w_1 \boldsymbol u_1^T\quad w_2 \boldsymbol u_2^T} \right] \tag{13}
[nd]=[w1u1Tw2u2T](13)
其中, w 1 = cos ϕ , w 2 = sin ϕ w_1=\cos\phi, w_2=\sin\phi w1=cosϕ,w2=sinϕ。
总结
本文主要记录了线的普吕克表示和正交表示,以及两者相互转化公式,有不对之处欢迎指正,谢谢!
参考文献
Jia, Yan-Bin. “Plücker Coordinates for Lines in the Space.” (2020).
He, Yijia et al. “PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features.” Sensors (Basel, Switzerland) 18 (2018)