硬核3-D视觉 - 三维空间的刚体运动

我将不会定义时间、空间、地点和运动,因为它们对于所有人来说都是显然既定的。

—— 艾萨克 · 牛顿

欧几里得运动,也叫做“刚体运动”,以及透视投影,是处于研究3D场景和它的2D图像之间几何关联的核心的两组基本变换。

刚体运动对相机如何运动进行建模,透视投影则描述相机的成像原理。

很早以前,刚体运动和透视投影是分开分别独立进行研究的。

本文介绍三维欧氏空间以及其中的刚体运动。下一章将关注相机的投影模型,可以参考链接:硬核3-D视觉:Image Formation​​​​​​​。两章内容都需要一些线性代数的基础知识。

2.1 三维欧氏空间

我们用E^3来表示三维欧氏空间。三维欧氏空间可以用笛卡尔坐标系表示,空间中的点p \in E^3可以用在\mathbb{R}^3中的三个坐标表示:

X = \begin{bmatrix} X_1 & X_2 & X_3 \end{bmatrix}^T = \begin{bmatrix} X_1\\ X_2 \\ X_3 \end{bmatrix} \in \mathbb{R}^3

有时我们也用\begin{bmatrix} X & Y & Z \end{bmatrix}表示单独一个坐标系下的点。至此,就建立了E^3\mathbb{R}^3的一一对应。

定义2.1 向量:欧氏空间中,向量v由一对点p, q \in E^3确定,表示为v = \vec{pq}

p经常被作为v的基础点,在坐标系中,v被表示为\begin{bmatrix} v_1 & v_2 & v_3 \end{bmatrix}^T \in \mathbb{R}^3。如果点p有坐标X,而q有坐标Y,那么v就有坐标为:v = Y - X \in \mathbb{R}^3

我们在前面定义的向量是有界向量(bound vector)。

我们也可以定义自由向量(free vector)的概念。自由向量不依赖基础点,如果我们有两组点(p, q) , (p{}', q{}'),并且其坐标满足Y- X = Y{}' - X',我们就可以说它们定义了同一个向量。直觉告诉我们,向量v就可以在E^3当中自由移动了。为了不是一般性,我们可以认为自由向量的基础点就是它所在的坐标系的坐标原点,那么就有X = 0, Y = v。当然,这里就会给读者带来混淆,Y在这儿表示的是向量的坐标,而由于我们将p点设称了坐标原点,那么q点的坐标变成了和Y坐标相同的了。

读者必须始终在脑海中保持这样的概念,即点和向量是不同的几何对象。这一点非常重要,因为我们将会很快发现,刚体运动在点和向量上的表现是不一样的。

所有三维向量的集合构成了线性向量空间(linear vector space)。两个向量v, u \in \mathbb{R}^3的线性组合定义为:\alpha v + \beta u = \begin{bmatrix} \alpha v_1 + \beta u_1 ,& \alpha v_2 + \beta u_2 ,& \alpha v_3 + \beta u_3 \end{bmatrix}^T \in \mathbb{R}^3, \forall \alpha, \beta \in \mathbb{R}

E^3的欧氏度量被简单的定义为向量空间\mathbb{R}^3的内积。当两个向量的内积为0,我们就说这两个向量正交。

有了内积这样一个E^3的度量,我们就不仅仅可以度量两个点的距离和两个向量的夹角,还可以计算曲线的长度,或者一个区域的大小。

内积的结果是一个实标量。而叉积则是一个向量。

定义2.2 向量叉积:欧氏空间中,向量v, u \in \mathbb{R}^3的叉积是由如下公式给定的一个三维坐标向量:

u \times v = \begin{bmatrix} u_2v_3 - u_3v_2\\ u_3v_1 - u_1v_3\\ u_1v_2 - u_2v_1 \end{bmatrix} \in \mathbb{R}^3

向量叉积满足下面的公式:

u \times (\alpha v + \beta w) = \alpha u \times v + \beta u \times w, \forall \alpha ,\beta \in \mathbb{R}

显然也可以证明下列各式:

\left \langle u \times v, u \right \rangle = \left \langle u \times v, v \right \rangle = 0, u \times v = - v \times u

可以证明,向量的叉积u \times v还可以表示成\hat u v,其中\hat u为如下形式的矩阵:

\hat u \doteq \begin{bmatrix} 0 & -u_3 & u_2\\ u_3 & 0 & -u_1\\ -u_2 & u_1 & 0 \end{bmatrix} \in \mathbb{R}^{3\times3}

显然,\hat u是一个反对称矩阵,这意味着,\hat u = - \hat u^T

叉积满足右手定则。

同时,我们也可以看到,叉积很自然的定义了一个从三维向量到3x3的反对称矩阵\hat u的映射。它相反的映射从反对称矩阵到三维向量也是true。

向量空间\mathbb{R}^3和所有的反对称矩阵所组成的空间so(3)(后面会对这个空间进行解释)同构(数学上同构意味着存在一一的映射保存着向量空间的结构)。该同构经常用下面的符号和反映射符号表示:

\wedge : so(3) \rightarrow \mathbb{R}^3; u \mapsto \hat u

\vee : so(3) \rightarrow \mathbb{R}^3 ; \hat u \mapsto \hat u^\vee = u.

2.2 刚体运动

对于刚体运动,我们没必要描述刚体上每一个点的运动,可以从下图看到,我们只需要描述一个点以及以这个点为原点的坐标系的运动即可。

硬核3-D视觉 - 三维空间的刚体运动_第1张图片

因此,如果X(t)Y(t)如果是任意两个在刚体上的点pq的坐标(时间t的函数)。那么这两点之间的距离是恒定的:X(t) - Y(t) \equiv constant, \forall t \in \mathbb{R}.

刚体运动就成了一组描述刚体上每个点的坐标如何在满足上式的情况下,在时间上的变化的映射簇。映射是这样的:g(t) : \mathbb{R}^3 \mapsto \mathbb{R}^3; X \mapsto g(t) (X).如果我们只关心刚体运动的初始和结束,那么就有如下的刚体替代,g : \mathbb{R}^3 \mapsto \mathbb{R}^3; X \mapsto g(X).

除了对点坐标进行变换,变换g也对向量进行变换。假设v是由两个点p, q确定的向量,v = Y - X,那么经过了变换g,向量变为:u = g_*(v) \doteq g(Y) - g(X).

由于变换g保留着向量的模长,所以有,对于所有的三维空间向量v \in \mathbb{R}^3都有\left \| g_*(v) \right \| = \left \| v \right \|

如果一个映射,能够保持距离不变,那么这种映射就叫做欧氏变换。在3维空间,所有的欧氏变换表示为\mathbb{E}(3)表示。

仅仅保持距离不变是不够的,对于刚体变换来说,还要保持相对角度或者姿态是不变的。所以刚体运动的变换被称为特殊欧氏变换(special euclideam transform)。特殊意味着,角度也是保持不变的。所有的特殊欧氏变换组成的矩阵变换群写作:SE(3).

定义2.5 刚体运动或者特殊欧氏变换。映射g : \mathbb{R}^3 \mapsto \mathbb{R}^3是一个刚体运动或者特殊欧氏变换,当且仅当满足下面两条性质:

1. norm: \left \| g_*(v) \right \| = \left \| v \right \|, \forall v \in \mathbb{R}^3

2. cross product: g_*(u) \times g_*(v) = g_*(u \times v), \forall u ,v \in \mathbb{R}^3

那么很自然的就有推论:

1. \left \langle u,v \right \rangle = \left \langle g_*(u), g_*(v) \right \rangle

2. \left \langle g_*(u), g_*(v) \times g_*(w) \right \rangle = \left \langle u, v \times w \right \rangle

由于上式2表示的是由三个不共面向量张成的四方体的体积,因此刚体运动同样保持体积不变。

为什么要如此强调特殊欧氏变换的性质呢?

因为如果我们假定物体上有一个附着的坐标系,附着在物体的固定点上,并且有三个相互正交的坐标轴向量e_1, e_2, e_3满足:

e_i^Te_j = \delta_{ij} \doteq \left\{\begin{matrix} 1 for \: i = j \\ 0 for \: i \neq j \end{matrix}\right. \; (2.6)

如果e_1 \times e_2 = e_3,那么经过刚体运动g,还有g_*(e_i)^T g_*(e_j) = \delta_{ij}, g_*(e_1) \times g_*(e_2 ) = g_*(e_3)

到这,我们就可以说,刚体的运动,可以通过这样一个附着在刚体上的坐标系来进行描述了。

下图2.3中,有一个相机坐标系C : (x, y, z)和一个世界坐标系W : (X, Y, Z),相机的位姿由以下两部分确定:

1. 平移部分:世界坐标系原点到相机坐标系原点的向量,我们写作T

2. 旋转部分:相机坐标系三轴相对于世界坐标系的旋转部分,用旋转矩阵R表示。

硬核3-D视觉 - 三维空间的刚体运动_第2张图片

世界坐标系的选择本质上,是任意选取的。我们关注的只是后续相机坐标系相对于世界坐标系的相对运动。

如果我们移动一个刚体,我们显然也可以相反的把它移回去,我们也同样可以把很多移动过程组合称一个。这种可以反向和组合的性质在数学上通过群加以刻画。我们将很快看到,刚体运动可以组成一个叫做特殊欧氏群的矩阵群。同时,仅仅有这样的概念是不够的,我们还要了解如何定义明确的表示并将其用于数学计算。接下来的部分,我们将研究通过矩阵来表示刚体的运动。我们将说明任何刚体的运动都能够通过一个4x4的矩阵来表示。

我们将从旋转部分开始。

2.3 旋转运动及其表示

2.3.1 正交矩阵表示旋转

假设我们有一个刚体绕固定点o \in \mathbb{E}^3。为了不是一般性,我们假定世界坐标系的原点就是旋转中心o,如果不是这样,我们就把世界坐标系W的原点移到o。我们现在将另外一个坐标系C的原点也放到oCW之间的旋转如图2.4:

硬核3-D视觉 - 三维空间的刚体运动_第3张图片

C坐标系相对于W坐标系的旋转可以由三个相互正交的向量完全确定:r_ 1 = g_*(e_1), r_2 = g_*(e_2), r_3 = g_*(e_3)

三个向量r_1, r_2, r_3分别就是相机坐标系三个坐标轴方向的单位向量(三个向量的坐标由世界坐标系下表示)。旋转可以通过一个3 \times 3矩阵表示:

R_{WC} \doteq \begin{bmatrix} r_1 & r_2 & r_3 \end{bmatrix} \in \mathbb{R}^3

三个向量r_1, r_2, r_3满足正交性质,可以写成R_{WC}^TR_{CW} = R_{CW}R_{WC}^T = I

所有这些正交性质满足的矩阵组成特殊正交群:

SO(3): \left \{ R \in \mathbb{R}^3 | R^TR= I, det(R) = +1 \right \}

绕Z轴的旋转角\theta可以表示为,其他几个轴的旋转也可以类似的获得:

R_Z(\theta) = \begin{bmatrix} \cos(\theta) & -sin(\theta) & 0\\ \sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}

回到图2.4,只要我们知道一个点在相机坐标系下的坐标X_{1c}, X_{2c}, X_{3c},同时还知道相机坐标系的三个向量的在世界坐标系下的坐标表示(就是把相机坐标系原点移动到世界坐标系下,相机三个正交的坐标轴的单位向量在世界坐标系下的表示),就可以得到点在世界坐标系下的坐标:X_w = [r_1X_{1c} + r_2X_{2c} + r_3X_{3c}] = R_{wc} X_c,其中R_{wc}就表示相机坐标系到世界坐标系的旋转向量。

2.3.2 旋转的正则指数坐标

我们知道旋转矩阵R是3 \times 3矩阵,并且\in SO(3)。看起来R有9个元素,但是由于R存在额外的约束R^TR = I,也就是正交性,实际上给R施加了六个独立约束,所以R的自由度小于9个,旋转矩阵的维度空间的维数只有3个。

本章将介绍如何将R参数化的过程。

给定一系列的连续旋转R(t) \rightarrow SO(3)。必须满足如下约束条件:

R(t)R(t)^T = I, 将该式对时间求导,得

\dot{R}(t)R^T(t) + R(t) \dot{R}^T(t) = 0 \Rightarrow \dot{R}(t)R^T(t) = - (\dot{R}(t)R^T(t))^T.

结果表明,矩阵\dot{R}(t)R^T(t)是一个3\times 3反对称矩阵。那么,我们就根据本书中之前的结论,一个反对称矩阵,必然对应着唯一的一个三维向量,\omega (t) \in \mathbb{R}^3,有\dot{R}(t)R^T(t) = \hat \omega(t),等式的两边同时右乘R(t),得\dot{R}(t) = \hat \omega(t)R(t) \; (2.9),对于该式,假定在t = t_0时,R(t_0) = I,我们就有了旋转矩阵的在t_0的一阶倒数\dot{R}(t_0) = \hat \omega (t_0),那么根据泰勒展开准则,在单位矩阵I附近,可以利用导数的性质对矩阵进行近似,就可以用反对称矩阵来近似旋转矩阵:R(t_0 + dt) \approx I + \hat \omega (t)dt.

那么,就有,所有的反对称矩阵所组成的空间可以如下表示:

so(3) \doteq \left \{ \hat \omega \in \mathbb{R}^{3 \times 3} | \omega \in \mathbb{R}^3 \right \}{\color{Red} }

它们还有一个别名,叫做旋转矩阵群SO(3)的切空间(tangent space)。

以上表明,SO(3)的局部元素只依赖三个参数,(\omega_1, \omega_2, \omega_3)

知道了局部性质之后,那么接下来我们进一步讨论。

先假设\hat \omega(t)是常数\hat \omega那么就不是t的函数了。那么就有:\dot{R}(t) = \hat \omega R(t) \; (2.10)

根据上文,容易得到R(t)可以解释为下面线性常微分方程的状态转移矩阵:

\dot{x}(t) = \hat \omega x(t), x(t) \in \mathbb{R}^3 \;, (2.11)

那么常微分方程有解:

x(t) = e^{\hat \omega t} x(0) ,\; (2.12)

e^{\hat \omega t}是矩阵的指数映射,e^{\hat \omega t} = I + \hat \omega t + \frac{(\hat \omega t)^2}{2!} + \cdots + \frac{(\hat \omega t)^n }{n!} + \cdots \;, (2.13)e^{\hat \omega t}经常写作\exp(\hat \omega t),由于我们假设R(0)I作为初始条件,那么就有R(t) = e^{\hat \omega t} \;, (2.14)

为了证明矩阵e^{\hat \omega t}的确是旋转矩阵,我们可以通过2.13式证明,(e^{\hat \omega t})^{-1} = e^{- \hat \omega t} = e^{\hat \omega^T t} = (e^{\hat \omega t})^T.

因此(e^{\hat \omega t})^Te^{\hat \omega t} = I

对于2.14式的物理解释是,如果\left \| \omega \right \| = 1,那么R(t) = e^{\hat \omega t}就是绕轴\omega \in \mathbb{R}^3弧度t的旋转。更一般的,t可以被吸收进\hat \omega t,从而有R = e ^ {\hat \omega}\omega拥有任意的范数。2.13式所表示的指数映射,就是从so(3)SO(3)的映射。

\exp : so(3) \rightarrow SO(3); \hat \omega \mapsto e^{\hat \omega}.

到现在,我们是怎么获得2.14式的呢,我们做了一个假设,假设\omega(t)是常数,但是这个假设显然不会是经常成立的,问题来了:

所有的旋转矩阵R \in SO(3)都可以用式2.14的形式表达吗?

答案是可以。

定理2.8 对数映射:对于任意R \in SO(3),都存在一个\omega \in \mathbb{R}^3,使得R = \exp(\omega)。这个映射的相反映射是\hat \omega = \log(R)

定理证明如下:

如果R不是单位阵,那么有:

R = \begin{bmatrix} r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33} \end{bmatrix},对应的\omega为:

\left \| \omega \right \| = \cos^{-1}(\frac{trace(R) - 1}{2}), \frac{\omega}{\left \| \omega \right \|} = \frac{1}{2 \sin(\left \| \omega \right \|)}\begin{bmatrix} r_{32} - r_{23}\\ r_{13} - r_{31}\\ r_{21} - r{12} \end{bmatrix}

如果R是单位矩阵,那么\omega = 0,旋转角任意。

至此,我们可以得到,任何旋转矩阵,都可以通过一个旋转轴\omega以及其模\left \| \omega \right \|作为旋转角来获得。然而,从so(3)SO(3)的映射并不是唯一的,由于任何2k\pi\omega的旋转,都可以获得相同的旋转矩阵R。其对应方式就是罗德里格斯公式计算得到R = e^{\hat \omega }

根据定理2.8,我们也可以通过特定的旋转矩阵计算得到对应的\omega。当给定一个\omega我们当然可以通过2.13式中的指数映射获得对应的旋转矩阵R,但是罗德里格斯公式给了我们一个更为简便的计算方法。

定理2.9 罗德里格斯公式:给定一个\omega \in \mathbb{R}^3,矩阵的指数映射R = e^{\hat \omega}可以通过下式计算:

e^{\hat \omega} = I + \frac{\hat \omega}{\left \| \omega \right \|}\sin(\left \| \omega \right \|) + \frac{\hat \omega ^ 2}{\left \| \omega \right \|^2} (1 - \cos(\left \| \omega \right \|)). \; (2.16)

证明:令t = \left \| \omega \right \|,重新定义\omega为单位向量,我们能发现,\hat \omega^2 = \omega \omega^T - I, \hat \omega ^ 3 = - \hat \omega,那么指数映射就能够简化为e^{\hat \omega t} = I + (t - \frac{t^3}{3!} + \frac{t^5}{5!} - \cdots) \hat \omega+ (\frac{t^2}{2!} - \frac{t^4}{4!} + \frac{t^6}{6!} - \cdots)\hat \omega^2,而(t - \frac{t^3}{3!} + \frac{t^5}{5!} - \cdots)恰好就是\sin(t)的泰勒展开式,(\frac{t^2}{2!} - \frac{t^4}{4!} + \frac{t^6}{6!} - \cdots)恰好是(1 - \cos(t))的泰勒展开式,从而得证。

通过泰勒公式,我们很容易就得到,如果\left \| \omega \right \| = I以及t = 2k\pi,我们就有:

e^{\hat \omega 2k\pi} = I ,\; \; \forall k \in \mathbb{Z}

此外也能够得出结论,指数映射不具备交换性和结合律,也就是说:e^{\hat \omega_1}e^{\hat \omega_2} \ne e^{\hat \omega_2}e^{\hat \omega_1} \ne e^{\hat \omega_2 + \hat \omega_1},除非有\hat \omega_1 \hat \omega_2 = \hat \omega_2 \hat \omega_1

一般的,\hat \omega_1 \hat \omega_2\hat \omega_2 \hat \omega_1之间的区别,被称为so(3)上的李括号,写作:

\left [ \hat \omega_1, \hat \omega_2 \right ] = \hat \omega_1\hat \omega_2 - \hat \omega_2\hat \omega_1, \forall \hat \omega_1, \hat \omega_2 \in so(3).从这里的定义也可以发现,\left [ \hat \omega_1, \hat \omega_2 \right ]也是so(3)上的反对城矩阵,so(3)的线性结构以及李括号一道,组成了李代数中的李群SO(3)

给定一个\hat \omega,所有由此映射得到的旋转矩阵e^{\hat \omega t} , \forall t \in \mathbb{R},就组成了SO(3)一个子群,在这个子群(也即平面旋转群)里面,是满足结合律和交换律的,对于同一个\omega \in \mathbb{R}^3,我们有e^{\hat \omega t_1}e^{\hat \omega t_2} = e^{\hat \omega t_2}e^{\hat \omega t_1} = e^{\hat \omega (t_1 + t_2)}, \forall t_1, t_2 \in \mathbb{R}

当然,还有其他的对于旋转矩阵进行局部参数化的方法,比如四元数以及欧拉角。选择指数映射,是因为它的形式更简单并且也更加具有启发性。

2.4 刚体运动及其表示

此前我们研究了纯旋转。我们现在将更加一般性的研究刚体运动,旋转(rotation)和平移(translation)。

图2.5展示了一个刚体的C坐标系,如果要描述物体上的点p在世界坐标系下的坐标,显然向量X_w是刚体坐标系原点C相对于世界坐标W的平移T_{wc} \in \mathbb{R}^3和在世界坐标系W下面描述的向量X_c的结合。

硬核3-D视觉 - 三维空间的刚体运动_第4张图片

由于X_c是在相机坐标系下的p点的坐标,那么相对于世界坐标系,它就变成了R_{wc}X_cR_{wc}是两个坐标系之间的相互旋转,那么最终:

X_w = R_{wc}X_c + T_{wc}, \; (2.17).

通常,我们将刚体运动记做:g_{wc} = (R_{wc}, T_{wc}),或者简单的记为g= (R,T ),g同时描述了刚体的平移和旋转。紧凑的形式上,我们写作:

X_w = g_{wc}X_c

所有可能的刚体运动我们称之为特使欧式变换:

SE(3) \doteq \left \{ g = (R,T ) | R \in SO(3), T \in \mathbb{R}^3 \right \}

必须指出,g = (R,T)尚不是一个SE(3)当中的矩阵。为了获得这样的矩阵表示,我们必须引入奇次坐标的概念。

2.4.1 奇次坐标

显然,式2.17描述的变换过程已经不是线性变换,而是仿射变换,下面我们将通过奇次坐标的使用,使得这种仿射变换变为线性变换的形式。通过在X = [X_1, X_2, X_3]^T \in \mathbb{R}^3的坐标末尾再添加一位1,使得属于三维欧氏空间的点成为一个四维的向量,记做:

X = \begin{bmatrix} X_1\\ X_2\\ X_3\\ 1 \end{bmatrix} \in \mathbb{R}^4

事实上,向量的奇次坐标可以由此由点的奇次坐标指定,向量v的奇次坐标为:X(q) - X(p)

\bar{v} = \begin{bmatrix} v\\ 0 \end{bmatrix} = \begin{bmatrix} X(q)\\ 1 \end{bmatrix} - \begin{bmatrix} X(p)\\ 1 \end{bmatrix} = \begin{bmatrix} v_1\\ v_2\\ v_3\\ 0 \end{bmatrix} \in \mathbb{R}^4.

注意到,在\mathbb{R}^4中,上式中的向量组成了一个子空间,所有原来的形式的向量v \in \mathbb{R}^3都完美的被这种表示保存了。

使用新的表示方式,放射变换(2.17)就可以写成“线性”形式:

\bar{X}_w = \begin{bmatrix} X_w\\ 1 \end{bmatrix} = \begin{bmatrix} R_{wc} & T_{wc}\\ 0 & 1 \end{bmatrix}\begin{bmatrix} X_c\\ 1 \end{bmatrix} \doteq \bar{g}_{wc} \bar{X}_c,

这个式子当中4 \times 4矩阵\bar{g}_{wc} \in \mathbb{R}^{4 \times 4}就叫做刚体运动的奇次表示,对于一个刚体运动g = (R, T),它的奇次表示就是:

\bar{g} = \begin{bmatrix} R & T\\ 0 & 1 \end{bmatrix} \in \mathbb{R}^{4 \times 4}. \;\;\;\;\;\;\;\;\;\;\; (2.18)

特殊欧氏变换(special Euclidean transformation)的定义如下:

SE(3) \doteq \left \{ \bar{g} = \begin{bmatrix} R &T \\ 0&1 \end{bmatrix} \left.\begin{matrix} \\ \end{matrix}\right| R \in SO(3) , T \in \mathbb{R}^3 \right \} \subset \mathbb{R}^{4 \times 4}

说明,特殊欧氏变换矩阵是\mathbb{R}^{4 \times 4}矩阵空间的子集。

SE(3)满足群的所有性质,\forall g_1, g_2以及g \in SE(3),我们有:

\bar{g}_1\bar{g}_2 = \begin{bmatrix} R_1 & T_1\\ 0 & 1 \end{bmatrix} \begin{bmatrix} R_2 & T_2\\ 0 & 1 \end{bmatrix} = \begin{bmatrix} R_1R_2 & R_1T_2 + T_1\\ 0 & 1 \end{bmatrix} \in SE(3)

以及:

\bar{g}^{-1} = \begin{bmatrix} R & T\\ 0 & 1 \end{bmatrix}^{-1} = \begin{bmatrix} R_T & -R^TT\\ 0 & 1 \end{bmatrix} \in SE(3)

在奇次坐标的表示下面,刚体运动g \in SE(3)作用于向量v = X(q) - X(p) \in \mathbb{R}^3就成为了:

\bar{g}_*(\bar{v}) = \bar{g}\bar{X}(q) - \bar{g}\bar{X}(p) = \bar{g}\bar{v}.

综上,对于(自由)向量而言(本书提到的向量都是自由向量),刚体变换只是旋转部分会起到作用,而对于点而言,刚体变换的作用包含两个部分,旋转和平移。

2.4.2 刚体运动指数参数化表示

类似旋转矩阵R,完整的刚体运动也有类似的指数坐标。

考虑一个连续刚体的轨迹,g(t) = (R(t), T(t)),或者用奇次坐标表示:

g(t) = \begin{bmatrix} R(t) & T(t)\\ 0 & 1 \end{bmatrix} \in \mathbb{R}^{4 \times 4}

从现在开始,当不存在歧义的时候,就不再用\bar{g}表示奇次的刚体变换表示,而直接用g。对于点和向量的奇次表示也是类似的。

导数和逆相乘,有:

\dot{g}(t)g^{-1}(t) = \begin{bmatrix} \dot{R}(t)R^T(t) & \dot{T}(t) - \dot{R}(t)R^T(t)T(t)\\ 0 & 0 \end{bmatrix} \in \mathbb{R}^{4 \times 4}. \;\;\;\;\;\;\;\; (2.19)

根据前文,我们知道\dot{R}(t)R^T(t)是一个反对称矩阵,也就是说,存在\hat{\omega}(t) \in so(3)使得\hat{\omega}(t) = \dot{R}(t)R^T(t).

定义一个向量v(t) \in \mathbb{R}^3v(t) = \dot{T}(t) - \hat\omega(t)T(t)。上述2.19式可以写成:

\dot{g}(t)g^{-1}(t) = \begin{bmatrix} \hat{\omega}(t) & v(t)\\ 0 & 0 \end{bmatrix} \in \mathbb{R}^{4 \times 4}

如果我们更进一步定义一个矩阵\hat{\xi}(t) \in \mathbb{R}^{4 \times 4}使得

\hat{\xi} = \begin{bmatrix} \hat{\omega}(t) & v(t)\\ 0 & 0 \end{bmatrix}

那么有:

\dot{g}(t) = (\dot{g}(t)g^{-1}(t))g(t) = \hat{\xi}(t)g(t) \;\;\;\;\;\;\;\;\;\; (2.20)

这里的\hat{\xi}就可以看成是一个沿着曲线g(t)的“切向量”,虽然这个g(t)显然不是一个曲线,而是一个刚体运动变换矩阵。但是,大可以发挥想象力这么去想象一下(这里涉及到的更多的代数学知识)。

类似旋转矩阵,我们在这里得到了\hat \xi(t)之后,就可以用来近似g(t),用什么方式呢?当然是大名顶顶的泰勒展开:

g(t + dt) \approx g(t) + \dot{g}(t)dt = g(t) + \hat \xi (t) g(t)dt = (I + \hat \xi (t)dt )g(t)

所有的\hat \xi(t)的集合,写作:

se(3) \doteq \left \{ \hat \xi = \begin{bmatrix} \hat \omega & v\\ 0 & 0 \end{bmatrix} | \hat \omega \in so(3) , v \in \mathbb{R}^3 \right \} \subset \mathbb{R}^{4 \times 4}

se(3)组成的集合,又叫做矩阵群SE(3)的切空间(或者也经常叫做李代数)。

接下来,我们定义两个符号\wedge\vee来表示在se(3)和他在向量空间\mathbb{R}^{6 \times 6}中的坐标:

\begin{bmatrix} \hat \omega & v\\ 0 & 0 \end{bmatrix}^{\vee } \doteq \begin{bmatrix} v\\ \omega \end{bmatrix} \in \mathbb{R}^{6 } ,                  \begin{bmatrix} v\\ \omega \end{bmatrix}^{\wedge } \doteq \begin{bmatrix} \hat \omega & v \\ 0 & 0 \end{bmatrix} \mathbb{R}^{4 \times 4}.

在twist坐标\xi中,我们把v看做是线速度,\omega看做是角速度。这表明,它们和平移和旋转是相关的。

接下来,让我们考虑方程2.20的一个特殊情形,也就是说,令\hat \xi(t)为常矩阵,也就是说矩阵的元素不随时间变化,得:

\dot{g}(t) = \hat \xi g(t)

那么我们又可以得到一个以时间为自变量的线性常微分方程,可以通过积分得到:

g(t) = e^{\hat \xi t}g(0).

如果我们假设初始状态的g(0) = I,有:

g(t) = e^{\hat \xi t},

e^{\hat \xi t} = I + \hat \xi t + (\hat \xi)^2 / 2! + (\hat \xi)^3 / 3! + \cdots + (\hat \xi)^n / n! + \cdots \;\;\;\;\;\;\;\;\; (2.21)

根据罗德里格斯公式2.16,以及矩阵指数映射性质,可以建立如下的联系:

e^{\hat \xi} = \begin{bmatrix} e^{\hat \omega} & \frac{(I-e^{\hat\omega})\hat\omega v + \omega\omega^T v}{\left \| \omega \right \|}\\ 0 & 1 \end{bmatrix}, if \;\; \omega \neq 0. \;\;\;\;\;\;\;\;\; (2.22)

如果\omega=0,那么上式就是一个比较简单的形式:e^{\hat \xi} = \begin{bmatrix} I & v\\ 0 & 1 \end{bmatrix},李代数的指数映射,可以描述一个完整的刚体运动过程。指数映射的过程定义了如下的从se(3)到SE(3)的变换:

\exp : se(3) \rightarrow SE(3); \;\;\; \hat \xi \mapsto e^{\hat \xi}

\hat \xi \in se(3)也被称为是SE(3)的指数坐标,类似\hat \omega \in so(3)对于SO(3)的情形。

定理2.11 (SE(3)的对数映射)对于任意g \in SE(3),存在(但并非单独的)一个twist coordinates \xi = (v,\omega),使得g = exp(\hat \xi)。我们把这个映射的相反映射,写作\hat \xi = \log(g)

以下是定理2.11的证明:

证明:

假设g = (R, T),根据定理2.8,对于旋转矩阵R \in SO(3)总是可以找到一个\omega使得e^{\hat \omega} = R.

对于R \neq I, i.e. \; \left \| \omega \right \| \neq 0,从2.22式中,我们可以解得

\frac{(I-e^{\hat\omega})\hat\omega v + \omega\omega^T v}{\left \| \omega \right \|} = T \;\;\;\;\;\;\;\;\; (2.23)

如果旋转矩阵R = I,那么\left \| \omega \right \| = 0。在这种情况下,我们可以简单的令\omega = 0, v = T.

类似的从so(3)SO(3)的映射,从se(3)SE(3)的映射也不是单射,而是存在多个(事实上是无穷多个)se(3)的元素对应到同一个SE(3)中的变换。

Remark 2.12 由于se(3)的线性结构,同时考虑李括号性质:

\left [ \hat \xi_1, \hat \xi_2 \right ] = \hat \xi_1 \hat \xi_2 - \hat \xi_2 \hat \xi_1 = \begin{bmatrix} \widehat{\omega_1\times\omega_2} & \omega_1 \times v_2 - \omega_2 \times v_1 \\ 0 & 0 \end{bmatrix} \in se(3)就使得se(3)成为了SE(3)的李代数。两个刚体运动g_1 = e^{\widehat{\xi_1}} \; and \; g_2 = e^{\widehat{\xi_2}},之间可以交换的前提只有一个,即\left [ \widehat{\xi_1}, \widehat{\xi_2} \right ] = 0

Examples 2.13 (螺旋运动)

螺旋运动是这样一种运动,绕一轴旋转\theta角,并且沿着 该旋转轴的方向移动d。

定义pitch为位移和旋转角度的比例,h = d/\theta,假设\theta \neq 0。如果我们在旋转轴x上选择一个点X,并且定义一个\omega \in \mathbb{R}^3为单位向量从而确定旋转的方向,旋转轴就是这样的一个点集组成的线,L = \left \{ X + \mu \omega \right \},这样的运动可以通过下面的式子予以准确描述:

g = \begin{bmatrix} e^{\hat\omega \theta} & (I - e^{\hat\omega \theta})X + h\theta \omega\\ 0 & 1 \end{bmatrix} \in SE(3) \;\;\;\;\;\;\;\;\; (2.24)

所有的绕同一个旋转轴的螺旋运动组成的集合构成了一个SE(3)的子群SO(2) \times R

沙勒定理(Chasles theorem)是一个关于变换的著名定理,该定理断言:既非旋转也非平移的空间第一种合同变换是一个旋转与一个平移之积,且旋转轴平行于这平移的方向。简言之,既非旋转又非平移的空间第一种合同变换(运动变换)是一个螺旋运动。

沙勒定理展现了一个事实,任何刚体运动都可以实现为在空间中绕固定轴旋转,和绕该轴的平移。

2.5 坐标和速度转换

在这本书里,我们经常需要知道一个点的坐标和它的速度如何发生变化(当相机相对于该点移动的时候)。这么做的原因之一是因为通常情况下,我们选取相机坐标系作为参考坐标系是十分方便的,进而,我们需要描述的是相机坐标系下的相机运动以及3-D点相对于相机的位置。

显然的是,相机经常就是在不停的运动,所以我们需要知道当一个相机从一个坐标系变换到另一个坐标系下的时候,坐标和速度是如何变化的。

也就是说,我们想要知道,如何正确的表示一个相对于移动的相机的点的位置和速度。在这里我们将介绍一个约定,这个约定将在接下来一直被用到:

坐标变换法则

我们将用时间t \in \mathbb{R}来索引相机的运动。

比如当我们说到相机的运动和位置时我们会说,t时刻的相机位置和速度是多少。

我们将使用g(t) = (R(t), T(t)) \in SE(3)或者:

g(t) = \begin{bmatrix} R(t) &T(t) \\ 0 & 1 \end{bmatrix} \in SE(3)

来表示在某个固定的世界坐标系W和t时刻的运动中的相机坐标系的相对变换,在这个意义下,其实还有一个下标g_{cw}(t),但是此处省略掉了。

然后呢,我们还假设g(0) = I, \; i.e.在t = 0时刻,相机坐标系和世界坐标系相合。所以如果t = 0时刻的点在世界坐标系下的坐标为X_0 = X(0),那么就有其在相机坐标系下的坐标为:

X_C(t) = R_{CW}(t)X_W + T_{CW}(t) \;\;\;\;\;\;\;\;\;\;\;\;\; (2.25)

在2.25式中,由于世界坐标系默认固定不动,所以点在世界坐标系下坐标表示就加上了下标W,并且在式中,还是指明了变换方式,以免引起歧义,这点可能跟书中不太一样,请注意。以下也会酌情加上下标以表明变换的方向。

在奇次坐标下,其表示为:

X_C(t) = g_{CW}(t)X_W \;\;\;\;\;\;\;\;\;\;\; (2.26)

如果我们知道了在t_1, t_2, t_3, t_4, ... ,t_m等一系列时刻的相机的“位置”(此处要打上引号,因为这个位置只是为了表明一个相机的运动,而非真正我们通常理解的位置)g_{CW}(t_1),g_{CW}(t_2),g_{CW}(t_3), ... , g_{CW}(t_m),那么相机坐标系下的点的位置就会产生一个点在相机坐标系下的序列,这个序列可以如下表示,在下面的表示中,进行了简化,用i直接代表t_i,原因是此处只关心位置,不关心时间,另外由于有了下标,就把表示坐标系的部分放到上标了:

X_{i}^C = R_{i}^{CW}X^W + T_i^{CW} \;\;\;\;\;\;\;\;\;\;(2.27)

接下来,除非特别的额外说明,都默认变换的方向是从世界坐标系到相机坐标系的。

如果起始时间不是0,那么也可以得到变换g(t_2, t_1) \in SE(3),表示t_2和t_1时刻之间的相机运动。从而,我们就可以得到点在不同时刻相机坐标系下的位置,这里的下标C_i表示第i时刻t_i的相机位置:

X_{C_2}(t_2) = g_{C_1 C_2}(t_2, t_1)X_{C_1}(t_1) \;\;\;\;\;\;\;\;\; \forall t_1, t_2 \in \mathbb{R}

如图2.6,我们考虑一下t_3时刻的相机位置,在t_3到t_2之间的相机运动为g(t_3, t_2),t_3和t_1之间为g(t_3, t_1),我们就有了下面的变换关系:

X(t_3) = g(t_3, t_2)X(t_2) = g(t_3, t_2)g(t_2, t_1)X(t_1)

X(t_3) = g(t_3, t_1)X(t_1)

从而:

g(t_3, t_1) = g(t_3, t_2)g(t_2, t_1)

这就是刚体变换的结合律。这样的结合律同样满足逆法则:g^{-1}(t_2, t_1) = g(t_1, t_2),这是由于g(t_1, t_2)g(t_2, t_1) = I.

在时刻t不代表特定的物理含义的时候,我们还可以在符号的表示上做这样的简化:用g_{ij}代替g(t_i, t_j)。上述法则就可以写成(奇次坐标表示下):

X_i = g_{ij}X_j, \; g_{ik} = g_{ij}g_{jk},\;g_{ij}^{-1} = g_{ji} \;\;\;\;\;\;(2.28)

速度变换法则

前文梳理的坐标变换,现在研究变换过程对于速度的影响。我们知道点相对于相机坐标系的坐标是时间的函数:

X_C(t) = g_{CW}(t)X_W

那么速度就是位置的微分:

\dot X_C(t) = \dot g_{CW}(t)X_W

接下来,我们先用g_{CW}^{-1}(t)X_C(t)代替X_W,并且使用李代数的符号,定义\hat V_{CW}^C(t) = \dot g_{CW}(t)g_{CW}^{-1}(t) \in se(3), \;\;\;\;\;\; (2.30)

对于\dot g_{CW}(t)g^{-1}_{CW}(t)的描述可以见2.19式,式2.29可以被重新写作:

\dot X_C(t) = \hat V_{CW}^C(t)X_C(t),               (2.31)

由于\hat V_{CW}^C(t)拥有如下的形式:

\hat V_{CW}^C(t) = \begin{bmatrix} \hat \omega(t) & v(t)\\ 0 & 0 \end{bmatrix}

我们还可以把一个点的在相机坐标系下的速度写成非奇次坐标的形式:

\dot X_C(t) = \hat \omega(t)X_C(t) + v(t). \;\;\;\;\;\; (2.32)

对于\hat V_{CW}^C(t)的物理解释就是,在相机坐标系下,世界坐标系相对于相机坐标系的移动的速度。通常情况下,为了说清楚速度的含义,我们必须指定这个速度是哪个坐标系相对于哪个坐标系的,而且必须指定以哪个坐标系为观察系的。如果我们改变我们的观察系,相应的速度也会改变。

比如,我们将观察系变到一个由当前观察系经过刚体运动g\in SE(3)得到的参考系,那么点p的坐标也会随之改变为Y(t) = gX(t). 我们在新的参考系下计算点的速度,就会得到:

\dot Y(t) = g\dot g_{CW}(t)g^{-1}_{CW}(t)g^{-1}Y(t) = g\hat V_{CW}^C(t)g^{-1}Y(t).

那么新的twist(原文也说是速度,不过应该与点的速度加以区分)就是:

\hat V = g \hat V_{CW}^Cg^{-1}

这就是从不同的参考系观察得到的速度,显然两个速度之间存在一个和g有关的映射:

ad_g : se(3) \rightarrow se(3); \hat \xi \mapsto g \hat \xi g^{-1}

这就是所谓的se(3)李代数空间上的伴随映射,\hat V = ad_g(\hat V_{CW}^C)。伴随映射将速度从一个坐标系变换到另一个坐标系。

由于g_{CW}(t)g_{WC}(t) = I,很容易证明:

\hat V^C_{CW} = \dot g_{CW} g^{-1}_{CW} = - g_{CW}(\dot g_{WC}g^{-1}_{WC})g^{-1}_{CW} = ad_{g_{CW}}(-\hat V^W_{WC}).

笔者注,还是写下证明。

由于g_{CW}(t)g_{WC}(t) = I,等式两边求导,\dot g_{CW}g_{WC} = -g_{CW}\dot g_{WC},省略了t,且有g_{CW} = g^{-1}_{WC}。代入公式,就可以得到,\hat V^C_{CW} = \dot g_{CW} g^{-1}_{CW} = -g_{CW}\dot g_{WC} = - g_{CW} \dot g_{WC}g^{-1}_{WC} g^{-1}_{CW} = ad_{g_{CW}}(- \hat V_{WC}^W)

通过上述式子,可以这么说,\hat V^C_{CW}也可以解释为,在即时的相机坐标系视角下,相机相对于世界坐标系移动的速度的相反速度。(这句话没太理解

2.6 总结

放一张表格。

硬核3-D视觉 - 三维空间的刚体运动_第5张图片

END of Chapter 2.

参考文献

[1] Yi Ma, Stefano Soatto, Jana Kosecka, S. Shankar Sastry. An Invitation to 3D Vision. 

你可能感兴趣的:(An,Invitation,to,3D,Vision,计算机视觉,算法)