定位:(plücker coordination)直线的普吕克表示与正交表示,及其相互转换

文章目录

  • 前言
  • 一、向量的叉乘与点乘
  • 二、普吕克坐标系(plücker coordination)
    • 1. 定义
    • 2. 性质
    • 3. 世界坐标系下线的普吕克坐标转换到相机坐标系
  • 三、线的正交表示
    • 1. 普吕克表示转换到正交表示
    • 2. 正交表示转换到普吕克表示
  • 总结
  • 参考文献


前言

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} ab=baa×b=b×aa(b×c)=(a×b)ca×(b×c)=(ac)b(ab)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=p1p2(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 pp=λ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+(pp))×d=p×d+(pp)×d=n+λd×d=n(3)

定位:(plücker coordination)直线的普吕克表示与正交表示,及其相互转换_第1张图片

2. 性质

2.1. 一点 p p p 在线 ℓ \ell 上的充分必要条件: q × d = n \boldsymbol {q\times d = n} q×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=∣∣d2d×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=(pq)×d =p×d q×d =nq×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 ×(qq)×d =(d d )(qq)(d (qq))d =qq(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 xyz 轴的旋转角,显然, R ( θ ) \boldsymbol R(\boldsymbol\theta) R(θ) 就是绕 x − y − z x-y-z xyz 旋转后的旋转矩阵。
矩阵 [ ∣ ∣ 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ϕ]=[w1w2w2w1]=∣∣n2+∣∣d2 1[∣∣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)

你可能感兴趣的:(高精定位,同步定位与建图,视觉定位,机器学习,算法,人工智能)