李群与李代数大全(1) 在计算机视觉应用详细描述

  本次博文要讲述的是在上一次博文中没有完全展开描述的李群和李代数,可以参考博主这篇博文,大致了解一下李群和李代数以及刚体运动,算算本博文的简洁精炼版本,本博文的系列对其进行详细补充和描述,并且使得可以对李代数类似于字典一般便于查找。

  博主只是进行了大致浏览和概括,但是完全没有达到博主的期望,现在博主大刀阔斧的再次操刀,要进行一次最为齐全的李群李代数的讲解。

  本次的博文会十分的长,会包括部分公式的推导,用于处理表示2D和3D空间变换的李群。

  本博文主要是介绍关于李群和李代数在计算机视觉中的应用,原先博文的李群李代数为此博文的简化版本。后面系列的博文就讲纯粹的李群李代数理论及其推算以及相应的公式。

  首先我们要知道,李群是一个拓扑群,也是一个光滑的流形,具有一些其他不错的属性。 与每个李群相关联的是李代数,它是下面讨论的向量空间。 重要的是,李群及其李代数密切相关,允许将一个中的计算有效地映射到另一个中【或者相互转换,这点在我写过的博文指出过,指数映射和对数,这是一对反函数】。

  我们给出一些略微的李群总结

描述维度矩阵表示
S O ( 3 ) SO(3) SO(3)3D旋转33D旋转矩阵
S E ( 3 ) SE(3) SE(3)3D刚性变换6在齐次4维矢量上线性变换
S O ( 2 ) SO(2) SO(2)2D旋转12D旋转矩阵
S E ( 2 ) SE(2) SE(2)2D刚性变换3在齐次3维矢量上线性变换
S i m ( 3 ) Sim(3) Sim(3)3D相似变换
刚性变换+尺度
7在齐次4维矢量上线性变换

为什么说李群可以使用在机器人学和计算机视觉中

  机器人学和计算机视觉中的许多问题涉及3D几何中的操纵和估计。 如果没有一个连贯而强大的框架来表示和处理3D转换,这些任务繁重而且非常危险。 必须对变换进行组合,反转,分解和插值。 李群及其相关机制解决了所有这些操作,并以条理化方式进行,因此这样的事实一旦形成,就可以令人信服。

三维欧氏空间

  我们将使用 E 3 \mathbb{E}^3 E3 来表示熟悉的三维欧氏空间。 一般来说,欧氏空间是一个元素,其元素满足欧氏的五个公理。 在分析上,三维欧氏空间完全可以用笛卡尔坐标系表示:每个点 ρ ∈ E 3 \rho\in \mathbb{E}^3 ρE3可以用 R 3 \mathbb{R}^3 R3中的一个点用三个坐标来识别

X = ˙ [ x 1 , x 2 , x 3 ] T = [ x 1 x 2 x 3 ] ∈ R 3 X \dot= [x_1,x_2,x_3]^T = \begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\in \mathbb{R}^3 X=˙[x1,x2,x3]T=x1x2x3R3

  通过这种形式使得我们可以知道,在笛卡尔坐标下, E 3 \mathbb{E}^3 E3 R 3 \mathbb{R}^3 R3是一一对应关系,这样可以假设在谈论点和其坐标,二者是等价的。

  笛卡尔坐标是使测量距离和角度成为可能。 为此,必须为 E 3 \mathbb{E}^3 E3 赋予度量标准。 度量的精确定义依赖于向量的概念。

向量

  在欧氏空间中,向量 v v v由一对点 p , q ∈ E 3 p,q\in \mathbb{E}^3 p,qE3确定,并且被定义为连接p到q的有向箭头,表示为 v = p q → v=\overrightarrow{pq} v=pq

  点 p p p通常被称为向量 v v v的基点(base point)。在坐标中,向量 v v v由三元组 [ v 1 , v 2 , v 3 ] ∈ R 3 [v_1,v_2,v_3]\in \mathbb{R}^3 [v1,v2,v3]R3表示,其中每个坐标是两点的对应坐标之间的差:如果 p p p具有坐标 X X X并且 q q q具有坐标 Y Y Y,则 v v v具有坐标

v = ˙ Y − X ∈ R 3 v\dot=Y-X\in \mathbb{R}^3 v=˙YXR3

  前面的矢量定义称为绑定矢量(bound vector)。我们还可以引入自由向量的概念,向量的定义不依赖于其基点。

  如果我们有两对坐标满足 Y − X = Y ′ − X ′ Y-X=Y^\prime-X^\prime YX=YX的点 ( p , q ) (p,q) (p,q) ( p ′ , q ′ ) (p^\prime,q^\prime) (p,q),我们说它们定义了相同的自由向量。

  直观地,这允许向量 v v v E 3 \mathbb{E}^3 E3中的任何地方移动。 特别是,在不失一般性的情况下,可以假设基点是笛卡尔坐标系的原点,因此 X = 0 X = 0 X=0 Y = v Y = v Y=v

  但是,请注意,这种符号令人困惑:这里的 Y Y Y表示恰好与点 q q q的坐标相同的矢量坐标,因为我们选择了点 p p p作为原点。点和矢量是不同的几何对象。 这将很重要,我们将很快看到,因为刚体运动对点和向量的作用不同。

  所有自由向量的集合形成线性向量空间,其中两个向量 v , u ∈ R 3 v,u \in \mathbb{R}^3 vuR3的线性组合由

α v + β u = [ α v 1 + β u 1 , α v 2 + β u 2 , α v 3 + β u 3 ] T ∈ R 3 , ∀ α , β ∈ R \alpha v+\beta u=[\alpha v_1+\beta u_1,\alpha v_2+\beta u_2,\alpha v_3+\beta u_3]^T\in \mathbb{R}^3,\forall \alpha,\beta \in \mathbb{R} αv+βu=[αv1+βu1,αv2+βu2,αv3+βu3]TR3,α,βR

  然后, E 3 \mathbb{E}^3 E3的欧氏度量仅由向量空间 R 3 \mathbb{R}^3 R3上的内积定义。 可以证明,通过适当选择笛卡尔坐标系, E 3 \mathbb{E}^3 E3中的任何内积可以转换为以下标准形

&lt; u , v &gt; = ˙ u T v = u 1 v 1 + u 2 v 2 + u 3 v 3 , ∀ u , v ∈ R 3 &lt;u,v&gt;\dot=u^Tv=u_1v_1+u_2v_2+u_3v_3,\forall u,v\in \mathbb{R}^3 <u,v>=˙uTv=u1v1+u2v2+u3v3,u,vR3

  该内积也称为标准欧氏度量。 后面,我们将使用内积标准形式 &lt; u , v &gt; = u T v &lt;u,v&gt;=u^Tv <u,v>=uTv。因此,向量 v v v的范数(或长度)是 ∣ ∣ v ∣ ∣ = &lt; v , v &gt; = v 1 2 + v 2 2 + v 3 3 ||v||=\sqrt{&lt;v,v&gt;}=\sqrt{v_1^2+v_2^2+v_3^3} v=<v,v> =v12+v22+v33

  当两个矢量之间的内积为零时,即 ( u , v ) = 0 (u,v)=0 (u,v)=0时,它们被认为是正交的。

  最后,欧氏空间 E 3 ​ \mathbb{E}^3​ E3可以形式地描述为相对于笛卡尔坐标系可以用 R 3 ​ \mathbb{R}^3​ R3识别并且具有由上述内积给出的度量(在其向量空间上)的空间。 利用这样的度量,不仅可以测量矢量之间的点或角度之间的距离,还可以计算曲线(如果 E 3 ​ \mathbb{E}^3​ E3中的运动粒子 ρ ​ \rho​ ρ的轨迹由曲线 γ ( ⋅ ) : t ↦ X ( t ) ∈ R 3 , t ∈ [ 0 , 1 ] ​ \gamma(\cdot):t\mapsto X(t)\in \mathbb{R}^3,t\in [0,1]​ γ()tX(t)R3,t[0,1]描述,则曲线的总长度为,由下式给出)

l ( γ ( ⋅ ) ) ≡ ∫ 0 1 ∣ ∣ X ˙ ( t ) ∣ ∣ d t l(\gamma(\cdot))\equiv \int_0^1||\dot{X}(t)||dt l(γ())01X˙(t)dt

  的长度或区域的体积,其中 X ˙ ( t ) = d d t ( X ( t ) ) ∈ R 3 \dot{X}(t)=\frac{d}{dt}(X(t))\in \mathbb{R}^3 X˙(t)=dtd(X(t))R3是曲线的所谓切向量。

叉积(Cross product)

  给定两个向量 u , v ∈ R 3 u,v \in \mathbb{R}^3 uvR3,它们的叉积是第三个向量,坐标由下式给出

u × v = ˙ ( u 2 v 3 − u 3 v 2 u 3 v 1 − u 1 v 3 u 1 v 2 − u 2 v 1 ) ∈ R 3 u\times v\dot=\begin{pmatrix}u_2v_3-u_3v_2\\u_3v_1-u_1v_3\\u_1v_2-u_2v_1\end{pmatrix}\in \mathbb{R}^3 u×v=˙u2v3u3v2u3v1u1v3u1v2u2v1R3

  从这个定义可以看出,两个向量的叉积在每个参数中是线性的,如下式所示。

u × ( α v + β w ) ≡ α u × v + β u × w , ∀ α , β ∈ R u\times(\alpha v+\beta w)\equiv \alpha u\times v+\beta u\times w,\forall \alpha,\beta \in \mathbb{R} u×(αv+βw)αu×v+βu×w,α,βR

  此外,还可以验证如下的式子:

&lt; u × v , u &gt; = &lt; u × v , v &gt; = 0 , u × v = − v × u &lt;u\times v,u&gt;=&lt;u\times v,v&gt;=0,u\times v=-v\times u <u×v,u>=<u×v,v>=0u×v=v×u

利用上面定义的坐标换算可以求证,在此不进行证明

  因此,两个向量的叉积与其每个因子正交,并且因子的顺序定义了方向(如果我们改变因子的顺序,则叉积改变符号)。

  如果我们固定 u u u,则叉积可以用从 R 3 \mathbb{R}^3 R3 R 3 \mathbb{R}^3 R3的映射表示: v ↦ u × v v\mapsto u\times v vu×v。这个映射在 v v v中是线性的,因此可以用矩阵表示。 我们用 u ^ ∈ R 3 \hat{u}\in \mathbb{R}^3 u^R3表示这个矩阵,发音为“u hat”。 通过代入求解可得出矩阵如下的形式

(1) u ^ = ( 0 − u 3 u 2 u 3 0 − u 1 − u 2 u 1 0 ) ∈ R 3 × 3 \hat{u}=\begin{pmatrix}0&amp;-u_3&amp;u_2\\u_3&amp;0&amp;-u_1\\-u_2&amp;u_1&amp;0\end{pmatrix}\in \mathbb{R}^{3\times 3}\tag{1} u^=0u3u2u30u1u2u10R3×3(1)

值得一提, u ^ \hat{u} u^ u × u_\times u×以及 [ u ] × [u]_\times [u]×的表示意思等价

  因此叉积 u × v = u ^ v u\times v=\hat{u}v u×v=u^v。现在你应该要注意到 u ^ \hat{u} u^ 3 × 3 3\times 3 3×3的斜对称矩阵,其中 u ^ T = − u ^ \hat{u}^T=-\hat{u} u^T=u^

叉积例子(右手定则,Right-hand rule)

  对于 e 1 = ˙ [ 1 , 0 , 0 ] T , e 2 = ˙ [ 0 , 1 , 0 ] T ∈ R 3 e_1\dot=[1,0,0]^T,e_2\dot=[0,1,0]^T \in \mathbb{R}^3 e1=˙[1,0,0]T,e2=˙[0,1,0]TR3,我们有 e 1 × e 2 = [ 0 , 0 , 1 ] T = ˙ e 3 e_1\times e_2=[0,0,1]^T\dot=e_3 e1×e2=[0,0,1]T=˙e3。 也就是说,对于标准笛卡尔坐标系,轴 X X X Y Y Y的叉积给出轴 Z Z Z。因此,叉积符合右手定则,见图1。

图1:右手定则坐标系

  因此,叉积自然地定义了矢量 u u u 3 × 3 3×3 3×3斜对称矩阵 u ^ \hat{u} u^之间的映射。通过检查,该陈述的反过来显然是正确的,因为我们可以容易地识别与每个相关联的三维矢量。 3 × 3 3 \times 3 3×3斜对称矩阵(仅从式(1)中提出 u 1 , u 2 , u 3 u_1,u_2,u_3 u1,u2,u3)。

反对称矩阵

  矩阵 M ∈ R 3 × 3 M\in \mathbb{R}^{3\times 3} MR3×3是斜对称的,当且仅当对某个 u ∈ R 3 u\in \mathbb{R}^3 uR3使得满足 M = u ^ M=\hat{u} M=u^时。

  因此,向量空间 R 3 \mathbb{R}^3 R3和所有斜对称3×3矩阵的空间(被称为 s o ( 3 ) \mathfrak{so}(3) so(3)是同构的(即,存在保持向量空间结构的一对一映射)。 同构是所谓的hat算子(hat operator):

∧ : R → s o ( 3 ) : u ↦ v ^ \land : \mathbb{R} \rightarrow \mathfrak{so}(3):u\mapsto \hat{v} :Rso(3):uv^

  它的逆映射,称为vee算子,从斜对称矩阵 u ^ \hat{u} u^中提取向量 u u u的分量,由下式给出:

∨ : s o ( 3 ) → R 3 ; u ^ ↦ u ^ ∨ = u \vee : \mathfrak{so}(3)\rightarrow \mathbb{R}^3;\hat{u}\mapsto \hat{u}^{\vee}=u :so(3)R3;u^u^=u

刚体运动

  考虑在相机前移动的物体。 为了描述其运动,原则上应该指定物体上每个单点的轨迹,例如,通过将点的坐标指定为时间 X ( t ) X(t) X(t)的函数。 幸运的是,对于刚性物体,我们不需要指定每个点的运动。 正如我们稍后将看到的,仅指定一个(而不是每个)点的运动以及连接到该点的三个坐标轴的运动就足够了,如图2所示。 原因在于,对于每个刚性物体,物体上任何两点之间的距离不随物体移动而随时间变化

图2。 刚体的运动保持其上任何一对点 ( p , q ) (p,q) pq之间的距离 d d d

  因此,如果 X ( t ) X(t) X(t) Y ( t ) Y(t) Y(t)分别是对象上任意两个点 p p p q q q的坐标,则它们之间的距离是恒定的:

(2) ∣ ∣ X ( t ) − Y ( t ) ∣ ∣ ≡ c o n s t a n t , ∀ t ∈ R ||X(t)-Y(t)||\equiv {\rm constant},\forall t\in \mathbb{R}\tag{2} X(t)Y(t)constant,tR(2)

  刚体运动(或刚体变换)是一系映射,描述刚性物体上每个点的坐标在满足式(2)时如何随时间变化。 我们用这个映射来表示

g ( t ) : R 3 → R 3 ; X ↦ g ( t ) ( X ) , t ∈ [ 0 , T ] g(t):\mathbb{R}^3\rightarrow \mathbb{R}^3;X \mapsto g(t)(X),t\in[0,T] g(t):R3R3;Xg(t)(X),t[0,T]

  如果不是看着移动物体的整个连续路径,而是集中在它的初始和最终位姿之间的映射上,我们有一个刚体位移,用

g : R 3 → R 3 ; X ↦ g ( X ) g:\mathbb{R}^3\rightarrow \mathbb{R}^3;X \mapsto g(X) g:R3R3;Xg(X)

  除了变换点的坐标之外, g g g还引起向量的变换。 假设 v v v是由坐标 v = Y − X v = Y-X v=YX的两个点 p p p q q q定义的向量; 然后,在变换 g g g的作用下之后,我们获得一个新的向量

u = g ∗ ( v ) = ˙ g ( Y ) − g ( X ) u=g_*(v)\dot=g(Y)-g(X) u=g(v)=˙g(Y)g(X)

使用 g ∗ g_* g 这与微分几何中所谓的前推(推进,push-forward)映射或 g g g的微分算子一致,它表示可微分映射在其域的切空间上的作用。

  由于 g g g保留了点之间的距离,我们得到对于所有自由向量 v ∈ R 3 v\in \mathbb{R}^3 vR3,都有 g ∗ ( v ) = ∣ ∣ v ∣ ∣ g_*(v)=||v|| g(v)=v

  保留距离的映射称为欧氏变换。 在3-D空间中,所有欧氏变换的集合由 E ( 3 ) E(3) E(3)表示。 请注意,保持点之间的距离不足以表征在空间中移动的刚性物体。 实际上,存在保留距离的变换,但它们不是物理上可实现的。 例如,映射

f : [ X 1 , X 2 , X 3 ] T ↦ [ X 1 , X 2 , − X 3 ] T f:[X_1,X_2,X_3]^T \mapsto [X_1,X_2,-X_3]^T f:[X1,X2,X3]T[X1,X2,X3]T

  保留距离但不保留方向。 它对应于XY平面中的点作为双面镜的反射。 为了排除这种映射,我们要求任何刚体运动除了保持距离外,还要保留方向。 也就是说,除了保留向量的范数之外,它还必须保留它们的叉积。 由刚体运动引起的映射或变换称为特殊欧氏变换。 “特殊”一词表示变换是保向的。

刚体运动或特殊欧氏变换

  映射 g : R 3 → R 3 g:\mathbb{R^3 \rightarrow R^3} g:R3R3是一个刚体运动或特殊欧氏变换,仅当它保留任何两个向量的范数和叉积,

  1. 范数: ∣ ∣ g ∗ ( v ) ∣ ∣ = ∣ ∣ v ∣ ∣ , ∀ v ∈ R 3 ||g_*(v)||=||v||,\forall v\in \mathbb{R}^3 g(v)=v,vR3
  2. 叉积: g ∗ ( u ) × g ∗ ( v ) = g ∗ ( u × v ) , ∀ u , v ∈ R 3 g_*(u)\times g_*(v) =g_*(u\times v),\forall u,v \in \mathbb{R}^3 g(u)×g(v)=g(u×v),u,vR3

所有这些运动或变换的集合由 S E ( 3 ) SE(3) SE(3)表示。

  在刚体运动的上述定义中,保持矢量之间的角度并不是显而易见的。 但是,内积 &lt; ⋅ , ⋅ &gt; &lt;\cdot,\cdot&gt; <,>可以通过极化恒等式(Polarization Identity)用范数 ∣ ∣ ⋅ ∣ ∣ ||\cdot|| 表示。

&lt; u , v &gt; = 1 4 ( ∣ ∣ u + v ∣ ∣ 2 − ∣ ∣ u − v ∣ ∣ 2 ) &lt;u,v&gt;=\frac{1}{4}(||u+v||^2-||u-v||^2) <u,v>=41(u+v2uv2)

  由于 ∣ ∣ u + v ∣ ∣ = ∣ ∣ g ∗ ( u ) ∣ ∣ + ∣ ∣ g ∗ ( v ) ∣ ∣ ||u+v||=||g_*(u)||+||g_*(v)|| u+v=g(u)+g(v),可以得出结论,对于任何刚体运动 g g g

&lt; u , v &gt; = &lt; g ∗ ( u ) , g ∗ ( v ) &gt; , ∀ u , v ∈ R 3 &lt;u,v&gt;=&lt;g_*(u),g_*(v)&gt;,\forall u,v \in \mathbb{R}^3 <u,v>=<g(u),g(v)>,u,vR3

  换句话说,刚体运动也可以定义为保留内积和叉积的运动。

例子:三重积和体积

  从刚体运动的定义可以看出,它还保留了三个向量中所谓的三重积(Triple Product):

&lt; g ∗ ( u ) , g ∗ ( v ) × g ∗ ( w ) &gt; = &lt; u , v × w &gt; , ∀ u , v , w ∈ R 3 &lt;g_*(u),g_*(v)\times g_*(w)&gt;=&lt;u,v\times w&gt;,\forall u,v,w \in \mathbb{R}^3 <g(u),g(v)×g(w)>=<u,v×w>,u,v,wR3

  由于三重积对应于三个矢量所构成的平行六面体的体积,因此刚体运动也保持了体积。

  这些属性如何帮助我们简洁地描述刚体运动? 通过刚体运动保持距离和方向的事实意味着各个点不能相对于彼此移动。 因此,刚体运动可以通过身体上所选点的运动和附着于该点的坐标系的旋转来描述。 为了看到这一点,我们通过将笛卡尔坐标系附加到刚体上的某个点来表示刚体的配置,并且我们将跟踪该坐标系相对于固定世界(参考)系的运动。

  为此,考虑一个坐标系,其轴由三个正交向量 e 1 , e 2 , e 3 ∈ R 3 e_1,e_2,e_3\in \mathbb{R}^3 e1,e2,e3R3给出; 也就是说,它们满足

e i T e j = δ i j = ˙ { δ i j = 1 f o r i = j δ i j = 0 f o r i ≠ j e_i^Te_j=\delta_{ij}\dot=\begin{cases}\delta_{ij}=1 &amp;for \quad i= j \\\delta_{ij}=0 &amp;for \quad i \neq j \end{cases} eiTej=δij=˙{δij=1δij=0fori=jfori̸=j

  通常,对向量是排序的以至于形成右手坐标系: e 1 × e 2 = e 3 e_1\times e_2=e_3 e1×e2=e3。 然后,在刚体运动 g g g后,我们有:

g ∗ ( e i ) T g ∗ ( e j ) = δ i j , g ∗ ( e 1 ) × g ∗ ( e 2 ) = g ∗ ( e 3 ) g_*(e_i)^Tg_*(e_j)=\delta_{ij},g_*(e_1)\times g_*(e_2)=g_*(e_3) g(ei)Tg(ej)=δij,g(e1)×g(e2)=g(e3)

  也就是说,得到的三个矢量仍然形成右手正交坐标系。因此,刚性物体总是可以与右手正交坐标系相关联,并且其刚体运动可以完全由这种坐标系的运动来指定,我们称之为物体坐标系。

  也就是说,得到三个向量 g ∗ ( e 1 ) , g ∗ ( e 2 ) , g ∗ ( e 3 ) g_*(e_1),g_*(e_2),g_*(e_3) g(e1),g(e2),g(e3)仍然形成右手正交坐标系。因此,刚性对象总是可以与右手正交坐标系相关联,我们将其称为对象坐标系或体坐标系,其刚体运动可以完全由这种坐标系的运动来指定。

  在图3中,我们示出了一个物体,在这种情况下是一个相机,相对于预先选择的世界参考系 W : ( X , Y , Z ) W:(X,Y,Z) W:(X,Y,Z)移动。

图3。相机坐标系, C = ( x , y , z ) C=(x,y,z) C=(x,y,z)与世界坐标坐标系 W : ( X , Y , Z ) W:(X,Y,Z) W:(X,Y,Z)之间的刚体运动。

  为了指定相机相对于世界坐标系 W W W的配置,可以在相机上选择固定点 o o o并且在其上附接体坐标系,在这种情况下称为相机坐标系, C = ( x , y , z ) C=(x,y,z) C=(x,y,z)。 相机移动时,相机坐标系也会随相机移动。 然后,摄像机的配置由两个部分决定:

  1. 世界坐标系的原点 o o o与相机坐标系的原点 o o o之间的向量 g ( o ) g(o) g(o),称为“平移”部分,用 T T T表示;
  2. 相对于具有坐标轴 ( X , Y , Z ) (X,Y,Z) XYZ的固定世界坐标系 W W W,具有坐标轴 ( x , y , z ) (x,y,z) xyz的相机坐标系 C C C的相对方向,称为“旋转”部分,由 R R R表示。

  在我们考虑的问题中,世界参考系及其原点 o o o没有明确的选择。 因此,我们可以选择要附加到摄像机的世界坐标系并指定场景相对于该坐标系的平移和旋转(只要它是刚性的),或者我们可以将世界坐标系附加到场景并指定相对于该坐标系的相机运动。 重要的是场景和相机之间的相对运动; 从几何学的角度来看,世界参考坐标系系的选择是任意的。

  如果我们可以将刚性物体(例如,相机)从一个地方移动到另一个地方,我们当然可以反转动作并将其恢复到原始位置。 同样,我们可以组合几个动作来生成一个新的动作。 粗略地说,这种可逆性和组成的性质可以用“群”的概念在数学上进行表征。

  我们很快就会看到,刚体运动集确实是一个群,即所谓的特殊欧氏群。 然而,在我们给出一个显式表示并将其用于计算之前,群的抽象概念是没有用的。 在接下来将重点研究如何用矩阵表示刚体运动。 更具体地说,我们将证明任何刚体运动都可以表示为 4 × 4 4 \times 4 4×4矩阵。 为简单起见,我们从刚体运动的旋转分量开始。

旋转运动及其表示

旋转的正交矩阵表示

  假设我们有一个刚性物体绕固定点 o ∈ E o\in \mathbb{E} oE旋转。 我们如何描述相对于选定坐标系的方向,比如 W ? W? W。 不失一般性,我们可能总是假设世界坐标系的起源是旋转中心 o o o。 如果不是这种情况,只需将原点转换为点 o o o即可。 我们现在将另一个坐标系(例如 C C C)附加到旋转对象,比如相机,其原点也在 o o o处。 这两个坐标系之间的关系如图4所示。

图4。 刚体绕固定点 o o o和沿轴线 w w w旋转。 坐标系 W W W(实线)固定不动,坐标框 C C C(虚线)安装在旋转刚体上。

  坐标系 C C C相对于坐标系 W W W的配置(或“方向”)由相对于世界坐标系 W W W的三个正交矢量 r 1 = g ∗ ( e 1 ) , r 2 = g ∗ ( e 2 ) , r 3 = g ∗ ( e 3 ) ∈ R 3 r_1=g_*(e_1),r_2=g_*(e_2),r_3=g_*(e_3)\in \mathbb{R}^3 r1=g(e1),r2=g(e2),r3=g(e3)R3的坐标确定,如图4所示。 三个矢量 r 1 , r 2 , r 3 r_1,r_2,r_3 r1,r2,r3分别简单是沿着相机坐标系 C C C上的轴 x , y , z x,y,z x,y,z的单位矢量。然后,旋转物体的配置完全由 3 × 3 3×3 3×3矩阵确定

R w c = ˙ [ r 1 , r 2 , r 3 ] ∈ R 3 × 3 R_{wc}\dot=[r_1,r_2,r_3]\in \mathbb{R}^{3\times3} Rwc=˙[r1,r2,r3]R3×3

  其中 r 1 , r 2 , r 3 r_1,r_2,r_3 r1,r2,r3按顺序堆叠为三列。 由于 r 1 , r 2 , r 3 r_1,r_2,r_3 r1,r2,r3形成正交坐标系,因此遵循这一点

r i T r j = δ i j = ˙ { 1 f o r i = j , 0 f o r i ≠ j , ∀ i , j ∈ { 1 , 2 , 3 } r_i^Tr_j=\delta_{ij}\dot=\begin{cases}1 &amp;for \quad i= j ,\\0 &amp;for \quad i \neq j ,\end{cases}\forall i,j\in \{1,2,3\} riTrj=δij=˙{10fori=j,fori̸=j,i,j{1,2,3}

  这可以用矩阵形式写成

R w c T R w c = R w c R w c T = I R_{wc}^TR_{wc}=R_{wc}R_{wc}^T=I RwcTRwc=RwcRwcT=I

在线性代数上可以这么证明,一个向量在某基 e e e在的坐标为 a a a,经过旋转后在新基 e ′ e^\prime e下坐标为 a ′ a^\prime a,这里我们假设向量并没有随着坐标系旋转而运动,则满足 e a = e ′ a ′ ea=e^\prime a^\prime ea=ea。然后两边左乘乘以 e T e^T eT,可以得到 a = e T e ′ a ′ a=e^Te^\prime a^\prime a=eTea,也就是能得到两者之间的线性变换矩阵 e T e ′ e^Te^\prime eTe,也是旋转矩阵。

  满足上述恒等式的任何矩阵称为正交矩阵。 从上面的定义得出,正交矩阵的逆是简单的转置: R w c − 1 = R w c T R_{wc}^{-1}=R_{wc}^T Rwc1=RwcT。由于 r 1 , r 2 , r 3 r_1,r_2,r_3 r1,r2,r3形成右手坐标系,我们还有进一步的条件,即 R w c R_{wc} Rwc的行列式必须是 ± 1 \pm 1 ±1。 因此, R w c R_{wc} Rwc是一个特殊正交矩阵,与之前一样,“特殊”一词表示它是保向的。 R 3 × 3 \mathbb{R}^{3\times 3} R3×3中所有这些特殊正交矩阵的空间通常表示为

S O ( 3 ) = ˙ { R ∈ R 3 × 3 ∣ R R T = I , det ⁡ ( R ) = ± 1 } SO(3)\dot=\{R\in \mathbb{R}^{3\times 3}|RR^T=I,\det(R)=\pm 1\} SO(3)=˙{RR3×3RRT=I,det(R)=±1}

  一般的, 3 × 3 3\times3 3×3特殊正交矩阵被称为旋转矩阵。 可以证实 S O ( 3 ) SO(3) SO(3)在矩阵乘法下满足群的所有四个公理。简单说旋转矩阵乘法符合分配律,结合律。其逆是其转置也是旋转矩阵,单位元素是 I I I即不旋转。

  因此,空间 S O ( 3 ) SO(3) SO(3)也被称为 R 3 × 3 \mathbb{R}^{3\times 3} R3×3的特殊正交群,或简称为旋转群。 直接从定义中可以看出,旋转确实保留了向量的内积和叉积。

旋转矩阵

  表示围绕 Z Z Z轴旋转角度 θ \theta θ的矩阵是

R Z ( θ ) = [ c o s ( θ ) − s i n ( θ ) 0 s i n ( θ ) c o s ( θ ) 0 0 0 1 ] R_Z(\theta)=\begin{bmatrix}cos(\theta)&amp;-sin(\theta)&amp;0\\sin(\theta)&amp; cos(\theta) &amp;0\\0 &amp;0&amp;1\end{bmatrix} RZ(θ)=cos(θ)sin(θ)0sin(θ)cos(θ)0001

  回到图4,每个旋转矩阵 R w c ∈ S O ( 3 ) R_{wc}\in SO(3) RwcSO(3)表示物体围绕点 o o o旋转。 除此之外, R w c R_{wc} Rwc还表示从坐标系 C C C到坐标系 W W W的实际坐标变换的矩阵。

  为了看到这一点,假设对于给定的点 p ∈ E 3 p\in \mathbb{E}^3 pE3,其相对于坐标系 W W W的坐标是 X w = [ X 1 w , X 2 w , X 3 w ] T ∈ R 3 X_w = [X_{1w}, X_{2w}, X_{3w}]^T \in \mathbb{R}^3 Xw=[X1w,X2w,X3w]TR3。 自 r 1 , r 2 , r 3 r_1,r_2,r_3 r1,r2,r3形成 R 3 \mathbb{R}^3 R3的基(是坐标系 C C C的轴), X w X_w Xw也可以表示为这三个矢量的线性组合,例如 X w = X 1 c r 1 + X 2 c r 2 + X 3 c r 3 X_w=X_{1c}r_1+X_{2c}r_2+X_{3c}r_3 Xw=X1cr1+X2cr2+X3cr3,其中 X c = [ X 1 c , X 2 c , X 3 c ] T ∈ R 3 X_c = [X_{1c}, X_{2c}, X_{3c}]^T \in \mathbb{R}^3 Xc=[X1c,X2c,X3c]TR3。 显然, X c = [ X 1 c , X 2 c , X 3 c ] T X_c = [X_{1c}, X_{2c}, X_{3c}]^T Xc=[X1c,X2c,X3c]T是相对于坐标系 C C C的相同点 p p p的坐标。因此,我们有:

X w = X 1 c r 1 + X 2 c r 2 + X 3 c r 3 = R w c X c X_w=X_{1c}r_1+X_{2c}r_2+X_{3c}r_3=R_{wc}X_c Xw=X1cr1+X2cr2+X3cr3=RwcXc

  在该等式中,矩阵 R w c R_{wc} Rwc将点 p p p相对于坐标系 C C C的坐标 X c X_c Xc变换为相对于坐标系 W W W的坐标 X w X_w Xw。由于 R w c R_{wc} Rwc是旋转矩阵,因此其逆是简单的转置:

X c = R w c − 1 X w = R w c T X w X_c=R^{-1}_{wc}X_w=R_{wc}^TX_w Xc=Rwc1Xw=RwcTXw

请各位注意下标关系,莫要混淆

  也就是说,旋转的逆变换也是旋转; 我们称之为 R c w R_{cw} Rcw:

R c w = R w c − 1 = R w c T R_{cw}=R_{wc}^{-1}=R_{wc}^T Rcw=Rwc1=RwcT

  然后可以将物体的连续旋转描述为空间 S O ( 3 ) SO(3) SO(3)中的轨迹 R ( t ) : t ↦ S O ( 3 ) R(t):t\mapsto SO(3) R(t):tSO(3)。 当起始时间不是 t = 0 t = 0 t=0时,时间 t 2 t_2 t2和时间 t 1 t_1 t1之间的相对运动将表示为 R ( t 2 , t 1 ) ​ R(t_2,t_1)​ R(t2,t1)。由旋转群的结合律可以得到

R ( t 2 , t 0 ) = R ( t 2 , t 1 ) R ( t 1 , t 0 ) , ∀ t 0 &lt; t 1 &lt; t 2 ∈ R R(t_2,t_0)=R(t_2,t_1)R(t_1,t_0),\forall t_0&lt;t_1&lt;t_2\in \mathbb{R} R(t2,t0)=R(t2,t1)R(t1,t0),t0<t1<t2R

  然后,对于旋转摄像机,固定的3D点 p p p的世界坐标 X w X_w Xw通过以下方式变换为相对于摄像机坐标系C的坐标:

X c ( t ) = R c w X w X_c(t)=R_{cw}X_w Xc(t)=RcwXw

  或者,如果相对于具有坐标 X c X_c Xc的相机坐标系的点 p p p,则其作为 t t t的函数在其世界坐标 X w ( t ) X_w(t) Xw(t)由下式给出:

X w ( t ) = R w c ( t ) X c X_w(t)=R_{wc}(t)X_c Xw(t)=Rwc(t)Xc

回忆上面所讲的刚体运动,认为点轨迹变化是随着时间变动的函数

S O ( 3 ) SO(3) SO(3)上的指数坐标(映射)

  到目前为止,我们已经证明 E 3 \mathbb{E}^3 E3中的旋转刚体运动可以用 3 × 3 3\times 3 3×3旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3)表示。 在我们到目前为止的矩阵表示中,每个旋转矩阵R由其 3 × 3 = 9 3\times 3=9 3×3=9个元素描述和确定。 但是,这9个元素不是自由参数 - 它们必须满足约束 R T R = I R^TR=I RTR=I。这实际上对9个元素施加了6个独立约束(两两正交约束)。 因此,旋转矩阵空间 S O ( 3 ) SO(3) SO(3)的维度仅为 3 3 3,并且9中的6个参数实际上是多余的。 稍后我们将为旋转矩阵引入一些表示(或参数化)。

  给定曲线 R ( t ) : R → S O ( 3 ) R(t):\mathbb{R} \rightarrow SO(3) R(t):RSO(3) 描述连续旋转运动,旋转必须满足以下约束:

R ( t ) R T ( t ) = I R(t)R^T(t)=I R(t)RT(t)=I

想想点坐标是随着时间而变化的函数,自然每次都会变化 R R R,所以旋转矩阵在刚体运动过程中也是个时间函数

  计算上述方程相对于时间 t t t的导数,注意到右侧是一个常数矩阵,我们得到:

d d t ( R ( t ) R T ( t ) ) = R ˙ ( t ) R T ( t ) + R ( t ) R ˙ T ( t ) = 0 ⇒ R ˙ ( t ) R T ( t ) = − ( R ˙ ( t ) R T ( t ) ) T \frac{d}{dt}(R(t)R^T(t))=\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 dtd(R(t)RT(t))=R˙(t)RT(t)+R(t)R˙T(t)=0R˙(t)RT(t)=(R˙(t)RT(t))T

  得到的等式反映了矩阵 R ˙ ( t ) R T ( t ) ∈ R 3 × 3 \dot{R}(t)R^T(t)\in \mathbb{R}^{3\times 3} R˙(t)RT(t)R3×3是斜对称矩阵的事实。 然后,正如我们在前面叉积时所说的,必存在一个向量,比如 ω ( t ) ∈ R 3 \omega(t)\in \mathbb{R}^3 ω(t)R3,使得:

R ˙ ( t ) R T ( t ) = ω ^ ( t ) \dot{R}(t)R^T(t)=\hat{\omega}(t) R˙(t)RT(t)=ω^(t)

  将 R ( t ) R(t) R(t)乘以等式两端右侧得到:

R ˙ ( t ) = ω ^ ( t ) R ( t ) \dot{R}(t)=\hat{\omega}(t)R(t) R˙(t)=ω^(t)R(t)

  根据上面的等式,如果对于 t = t 0 t=t_0 t=t0,如果 R ( t 0 ) = I R(t_0)=I R(t0)=I,则我们有 R ˙ ( t 0 ) = ω ^ ( t 0 ) \dot{R}(t_0)=\hat{\omega}(t_0) R˙(t0)=ω^(t0)。 因此,在单位矩阵 I I I周围,斜对称矩阵给出了旋转矩阵的一阶近似(一阶泰勒展开):

R ( t 0 + d t ) ≈ I + ω ^ ( t 0 ) d t R(t_0+dt) \approx I+\hat{\omega}(t_0)dt R(t0+dt)I+ω^(t0)dt

  所有斜对称矩阵的空间都表示为

s o ( 3 ) = ˙ { ω ^ ∈ R 3 × 3 ∣ ω ∈ R 3 } \mathfrak{so}(3)\dot=\{\hat{\omega}\in \mathbb{R}^{3\times 3}|\omega\in \mathbb{R}^3\} so(3)=˙{ω^R3×3ωR3}

  它也被称为旋转群 S O ( 3 ) SO(3) SO(3)在原点(单位矩阵,identity)处的切空间

S O ( 3 ) SO(3) SO(3)被称为李群, s o ( 3 ) \mathfrak{so}(3) so(3)被称为李代数

切空间,在 x x x处的切空间 T x M T_xM TxM。来源于维基百科。

  如果 R ( t ) R(t) R(t)不是原点,则 R ( t ) R(t) R(t)处的切空间简单地通过 R ( t ) R(t) R(t)右乘 s o ( 3 ) \mathfrak{so}(3) so(3)变到 R ( t ) R(t) R(t) R ˙ ( t ) = ω ^ ( t ) R ( t ) \dot{R}(t)=\hat{\omega}(t)R(t) R˙(t)=ω^(t)R(t)。 这也表明 S O ( 3 ) SO(3) SO(3)的元素仅取决于三个参数 ( ω 1 , ω 2 , ω 3 ) (\omega_1,\omega_2,\omega_3) (ω1,ω2,ω3)

  在理解了它的局部近似之后,我们现在将使用这些知识来获得旋转矩阵的表示。 我们假设矩阵 ω ^ \hat{\omega} ω^ R ˙ ( t ) = ω ^ ( t ) R ( t ) \dot{R}(t)=\hat{\omega}(t)R(t) R˙(t)=ω^(t)R(t)是常数:

R ˙ ( t ) = ω ^ R ( t ) \dot{R}(t)=\hat{\omega}R(t) R˙(t)=ω^R(t)

  在上面的等式中, ω ^ \hat{\omega} ω^可以解释为以下线性常微分方程(ODE)的状态转移矩阵(state transition matrix):

x ˙ ( t ) = ω ^ x ( t ) , x ( t ) ∈ R 3 \dot{x}(t)=\hat{\omega}x(t),x(t)\in \mathbb{R}^3 x˙(t)=ω^x(t),x(t)R3

  然后立即验证上述ODE的解是由下式给出的:

(3) x ( t ) = e ω ^ t x ( 0 ) x(t)=e^{\hat{\omega}t}x(0)\tag{3} x(t)=eω^tx(0)(3)

  其中 e ω ^ t e^{\hat{\omega}t} eω^t是矩阵指数函数:

(4) e ω ^ t = ∑ n = 0 ∞ ( ω ^ t ) n n ! = I + ω ^ t + ( ω ^ t ) 2 2 ! + ⋯ + ( ω ^ t ) n n ! + ⋯ e^{\hat{\omega}t}=\sum\limits_{n=0}^{\infty}\frac{(\hat{\omega}t)^n}{n!}=I+\hat{\omega}t+\frac{(\hat{\omega}t)^2}{2!}+\cdots+\frac{(\hat{\omega}t)^n}{n!}+\cdots\tag{4} eω^t=n=0n!(ω^t)n=I+ω^t+2!(ω^t)2++n!(ω^t)n+(4)

   e ω ^ t e^{\hat{\omega}t} eω^t也被记为 exp ⁡ ( ω ^ t ) \exp (\hat{\omega}t) exp(ω^t)。由于式子(3)的ODE解唯一性,并假设 R ( 0 ) = I R(0)=I R(0)=I作为初始条件,我们有:

(5) R ( t ) = e ω ^ t R(t)=e^{\hat{\omega}t}\tag{5} R(t)=eω^t(5)

  为了证明矩阵 e ω ^ t e^{\hat{\omega}t} eω^t确实是一个旋转矩阵,可以直接从矩阵指数的定义中看出:

( e ω ^ t ) − 1 = e − ω ^ t = e ω ^ T t = ( e ω ^ t ) T (e^{\hat{\omega}t})^{-1}=e^{-\hat{\omega}t}=e^{\hat{\omega}^Tt}=(e^{\hat{\omega}t})^T (eω^t)1=eω^t=eω^Tt=(eω^t)T

斜对称矩阵 − w ^ = w ^ T -\hat{w}=\hat{w}^T w^=w^T

  因此 ( e ω ^ t ) T e ω ^ t = I (e^{\hat{\omega}t})^Te^{\hat{\omega}t}=I (eω^t)Teω^t=I。仍然表明 det ⁡ ( e ω ˙ t ) = ± 1 \det (e^{\dot{\omega}t})=\pm 1 det(eω˙t)=±1

   等式(5)的物理解释是:如果 ∣ ∣ ω ∣ ∣ = 1 ||\omega||=1 ω=1,则 R ( t ) = e ω ^ t R(t)=e^{\hat{\omega}t} R(t)=eω^t只是围绕旋转轴 ω ∈ R 3 \omega\in \mathbb{R}^3 ωR3旋转 t t t弧度。

我们也可以使用 e ω ^ θ e^{\hat{\omega}\theta} eω^θ,其中 θ \theta θ明确地表示旋转角度和 ∣ ∣ ω ∣ ∣ = 1 ||\omega||=1 ω=1,或者更简单地写成 e ω ^ e^{\hat{\omega}} eω^,其中 ∣ ∣ ω ∣ ∣ ||\omega|| ω表示旋转角度。

   因此,矩阵指数(等式4)确实定义了从空间 s o ( 3 ) \mathfrak{so}(3) so(3) S O ( 3 ) SO(3) SO(3)的映射,即所谓的指数映射:

exp ⁡ : s o ( 3 ) → S O ( 3 ) \exp:\mathfrak{so}(3)\rightarrow SO(3) exp:so(3)SO(3)

ω ^ ∈ s o ( 3 ) ↦ e ω ^ ∈ S O ( 3 ) \hat{\omega}\in \mathfrak{so}(3)\mapsto e^{\hat{\omega}}\in SO(3) ω^so(3)eω^SO(3)

备注: e ω ^ e^{\hat{\omega}} eω^是旋转矩阵 R R R

   注意,我们通过假设等式(5)中的 ω ( t ) \omega(t) ω(t)是常数来获得等式(4)的。 但情况并非总是如此。 因此,这里自然会出现一个问题:每个旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3)能否以等式(5)中的指数形式表示? 答案是肯定的。

S O ( 3 ) SO(3) SO(3)中的李对数

   对于任何旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3),存在 ω ∈ R 3 \omega\in \mathbb{R}^3 ωR3,使得 R = exp ⁡ ( ω ^ ) R=\exp(\hat{\omega}) R=exp(ω^)。 这样的元素用 ω ^ = log ⁡ ( R ) \hat{\omega}=\log (R) ω^=log(R)表示(指数映射的逆)。

指数映射存在满射性。

   j j j即对于任何 R ∈ S O ( 3 ) R\in SO(3) RSO(3),存在(不一定是唯一的) ω ∈ R 3 , ∣ ∣ ω ∣ ∣ = 1 \omega\in \mathbb{R}^3,||\omega||=1 ωR3,ω=1 t ∈ R t\in \mathbb{R} tR使得 R ( t ) = e ω ^ t R(t)=e^{\hat{\omega}t} R(t)=eω^t

证明

   该定理的证明是通过构造来证明。

   如果旋转矩阵 R R R给出为:

R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R=\begin{bmatrix}r_{11}&amp;r_{12}&amp;r_{13}\\r_{21}&amp;r_{22}&amp;r_{23}\\r_{31}&amp;r_{32}&amp;r_{33}\end{bmatrix} R=r11r21r31r12r22r32r13r23r33

   相应的 t t t ω \omega ω 由下给出:

t = cos ⁡ − 1 ( t r a c e ( R ) − 1 2 ) , ω = 1 2 sin ⁡ ( t ) ( r 32 − r 23 r 13 − r 31 r 21 − r 12 ) t=\cos^{-1}\left(\frac{{\rm trace}(R)-1}{2}\right),\omega=\frac{1}{2 \sin(t)}\begin{pmatrix}r_{32}-r_{23}\\ r_{13}-r_{31}\\r_{21}-r_{12} \end{pmatrix} t=cos1(2trace(R)1),ω=2sin(t)1r32r23r13r31r21r12

   该定理的重要性在于,可以通过围绕某个轴旋转一定角度来实现任何旋转矩阵

   然而,该定理仅保证了从 s o ( 3 ) \mathfrak{so}(3) so(3) S O ( 3 ) SO(3) SO(3)的指数映射的可靠性。 不幸的是,这个映射不是单射的,因此不是一对一的。 在我们引入所谓的罗德里格斯公式计算 R ( t ) = e ω ^ t R(t)=e^{\hat{\omega}t} R(t)=eω^t的公式后,这将变得清晰。

   现在我们现在知道如何计算给定旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3)的指数坐标 ω \omega ω。 另一方面,给定 ω \omega ω,我们如何有效地计算相应的旋转矩阵 R = e ω ^ R=e^{\hat{\omega}} R=eω^? 人们当然可以使用等式5来求解。 然而,以下定理大大简化了计算:

罗德里格斯公式(Rodrigues’ formula)及证明

   给定 ω ∈ R 3 \omega\in \mathbb{R}^3 ωR3,其中 ∣ ∣ w ∣ ∣ = 1 ||w||=1 w=1而且 t ∈ R t\in \mathbb{R} tR,则矩阵指数 R ( t ) = e ω ^ t R(t)=e^{\hat{\omega}t} R(t)=eω^t可以通过下面的公式给出:

e ω ^ t = I + ω ^ sin ⁡ ( t ) + ω ^ 2 ( 1 − cos ⁡ ( t ) ) e^{\hat{\omega}t}=I+\hat{\omega}\sin(t)+\hat{\omega}^2(1-\cos(t)) eω^t=I+ω^sin(t)+ω^2(1cos(t))

证明1

   这是直接验证 ω ^ \hat{\omega} ω^的幂! 可以通过以下两个公式来减少幂的次方:

ω ^ 2 = ω ^ ω ^ T − I \hat{\omega}^2=\hat{\omega}\hat{\omega}^T-I ω^2=ω^ω^TI

ω ^ 3 = − ω ^ \hat{\omega}^3=-\hat{\omega} ω^3=ω^

   因此,等式4的指数级数可以简化为:

e ω ^ t = I + ( t − t 3 3 ! + t 5 5 ! − ⋯ &ThinSpace; ) ⎵ sin(t) ω ^ + ( t 2 2 ! − t 4 4 ! + t 6 6 ! − ⋯ &ThinSpace; ) ⎵ 1-cos(t) ω ^ 2 e^{\hat{\omega}t}=I+\underbrace{(t-\frac{t^3}{3!}+\frac{t^5}{5!}-\cdots)}_\text{sin(t)} \hat{\omega}+\underbrace{(\frac{t^2}{2!}-\frac{t^4}{4!}+\frac{t^6}{6!}-\cdots)}_\text{1-cos(t)}\hat{\omega}^2 eω^t=I+sin(t) (t3!t3+5!t5)ω^+1-cos(t) (2!t24!t4+6!t6)ω^2

   所以得到

e ω ^ t = I + ω ^ sin ⁡ ( t ) + ω ^ 2 ( 1 − cos ⁡ ( t ) ) e^{\hat{\omega}t}=I+\hat{\omega}\sin(t)+\hat{\omega}^2(1-\cos(t)) eω^t=I+ω^sin(t)+ω^2(1cos(t))

证明2

   该证明摘自维基百科。

   如上图所示, k k k是单位向量,它定义了旋转轴,而 v v v是任意的一个向量,但是围绕 k k k轴旋转 θ \theta θ角得到 v r o t v_{rot} vrot.

   向量 v v v被分解为与 k k k轴平行 v ∥ v_{\|} v和与 k k k垂直的 v ⊥ v_{\perp} v分量,由内积可以得到这两个分量与 v v v的关系为 v = v ∥ + v ⊥ v=v_{\|}+v_{\perp} v=v+v

   与 k k k轴平行的分量 v ∥ v_{\|} v表示为:

v ∥ = ( v ⋅ k ) k v_{\|}=(v\cdot k)k v=(vk)k

v ⋅ k v\cdot k vk v v v在向量 k k k上的投影长度,然后乘以单位向量 k k k就得到 v v v k k k方向为分量的 v ∥ v_{\|} v

   上式被称为 v v v k k k的向量投影。

   而垂直于 k k k的分量为 v ⊥ v_{\perp} v,通过前两个式子可以得到:

v ⊥ = v − v ∥ = v − ( k ⋅ v ) k = − k × ( k × v ) v_{\perp}=v-v_{\|}=v-(k\cdot v)k=-k\times (k\times v) v=vv=v(kv)k=k×(k×v)

   称为来自 k k k v v v的向量拒绝( vector rejection )。

   从上图来说明, k × v k \times v k×v可以看作是 v ⊥ v_{\perp} v关于 k k k逆时针旋转 9 0 ∘ 90^\circ 90的副本,所以它们大小相等,但是方向垂直【你得注意到 k k k是单位向量的这个假设】。同样,向量 k × ( k × v ) k\times (k\times v) k×(k×v) v ⊥ v_{\perp} v关于 k k k逆时针旋转 18 0 ∘ 180^\circ 180的一个副本,所以 k × ( k × v ) k\times (k\times v) k×(k×v) v ⊥ v_{\perp} v在大小上相等,但方向相反(因为他们互为相反数,所以是减号)。

   三重积展开式建立了平行分量和垂直分量间的联系:

a × ( b × c ) = ( a ⋅ c ) b − ( a ⋅ b ) c , ∀ a , b , c a\times (b\times c)=(a\cdot c)b-(a\cdot b)c,\forall a,b,c a×(b×c)=(ac)b(ab)c,a,b,c

   平行于轴的分量在旋转下不会改变幅度和方向,所以 v ∥ r o t = v ∥ v_{\| rot}=v_{\|} vrot=v

   只有垂直分量会改变方向,但会保持其大小(仅旋转)。

∣ v ⊥ r o t = ∣ v ⊥ ∣ |v_{\perp rot}=|v_{\perp}| vrot=v

v ⊥ r o t = cos ⁡ θ v ⊥ + sin ⁡ θ   k × v ⊥ v_{\perp rot}=\cos \theta v_{\perp} + \sin \theta \ k\times v_{\perp} vrot=cosθv+sinθ k×v

   由于 k k k v ∥ v_{\|} v是平行的,所以叉积为零,即

k × v ∥ k\times v_{\|} k×v

   所以可以得到

k × v ⊥ = k × v − k × v ∥ = k × v k\times v_{\perp}=k\times v-k\times v_{\|}=k\times v k×v=k×vk×v=k×v

   因此

v ⊥ r o t = cos ⁡ θ   v ⊥ + sin ⁡ θ   k × v v_{\perp rot}=\cos \theta \ v_{\perp} + \sin \theta \ k\times v vrot=cosθ v+sinθ k×v

   这种选择是正确的,这是因为向量 v ⊥ v_{\perp} v k × v k\times v k×v具有相同的长度,而且 k × v k\times v k×v v ⊥ v_{\perp} v绕着 k k k轴逆时针旋转 9 0 ∘ 90^\circ 90得到的。

   使用三角函数正弦和余弦对 v ⊥ v_{\perp} v k × v k\times v k×v进行适当缩放给出旋转的垂直分量。

   旋转分量形式类似于笛卡尔基的2D平面极坐标 ( r , θ ) (r,\theta) (r,θ)中给出的径向向量

r = r cos ⁡ θ   e x + r sin ⁡ θ   e y r=r \cos \theta \ e_x+r \sin \theta \ e_y r=rcosθ ex+rsinθ ey

   其中 e x , e y e_x,e_y ex,ey则是坐标轴方向指向的单位向量。

   那么完整的选择矢量就有了表达:

v r o t = v ∥ + cos ⁡ θ   v ⊥ + sin ⁡ θ   k × v = v ∥ + cos ⁡ θ   ( v − v ∥ ) + sin ⁡ θ   k × v = cos ⁡ θ   v + ( 1 − cos ⁡ θ ) v ∥ + sin ⁡ θ   k × v = cos ⁡ θ   v + ( 1 − cos ⁡ θ ) ( k ⋅ v ) k + sin ⁡ θ   k × v \begin{aligned} v_{rot} &amp;=v_{\|}+\cos \theta \ v_{\perp} + \sin \theta \ k\times v \\ &amp;=v_{\|}+\cos \theta \ (v-v_{\|}) +\sin \theta \ k\times v \\ &amp;= \cos \theta \ v+(1-\cos \theta)v_{\|}+ \sin \theta \ k\times v\\&amp;= \cos \theta \ v+ (1-\cos \theta)(k\cdot v)k+ \sin \theta \ k\times v \end{aligned} vrot=v+cosθ v+sinθ k×v=v+cosθ (vv)+sinθ k×v=cosθ v+(1cosθ)v+sinθ k×v=cosθ v+(1cosθ)(kv)k+sinθ k×v

  以上是旋转向量的推导,然后将 v v v k × v k\times v k×v表示为列矩阵,叉积可以表示为矩阵乘积(之前的博文和本博文之前有描述叉积,帽运算):

k × v = [ ( k × v ) x ( k × v ) y ( k × v ) z ] = [ k y v z − k z v y k z v x − k x v z k x v y − k y v x ] = [ 0 − k z k y k z 0 − k x − k y k x − 0 ] [ v x v y v z ] k\times v = \begin{bmatrix}(k\times v)_x\\(k\times v)_y\\(k\times v)_z\end{bmatrix}=\begin{bmatrix}k_yv_z-k_zv_y\\k_zv_x-k_xv_z\\k_xv_y-k_yv_x\end{bmatrix}=\begin{bmatrix}0&amp;-k_z&amp;k_y\\k_z&amp;0&amp;-k_x\\-k_y&amp;k_x&amp;-0\end{bmatrix}\begin{bmatrix}v_x\\v_y\\v_z\end{bmatrix} k×v=(k×v)x(k×v)y(k×v)z=kyvzkzvykzvxkxvzkxvykyvx=0kzkykz0kxkykx0vxvyvz

  令 K K K表示单位向量 k k k的叉积矩阵

K = [ 0 − k z k y k z 0 − k x − k y k x − 0 ] K=\begin{bmatrix}0&amp;-k_z&amp;k_y\\k_z&amp;0&amp;-k_x\\-k_y&amp;k_x&amp;-0\end{bmatrix} K=0kzkykz0kxkykx0

  所以可得到下面等式

k × v = K v k\times v=Kv k×v=Kv

  对于任何向量 v v v(实际上, K K K是这个性质唯一的矩阵,它具有特征值 0 0 0 ± 1 \pm 1 ±1)。

  迭代右边叉积相当于左乘叉积矩阵:

K ( K v ) = K 2 v = k × ( k × v ) K(Kv)=K^2v=k\times (k\times v) K(Kv)=K2v=k×(k×v)

  由于 k k k是单位向量,所以具有单位2-范数。

  所以在矩阵语言上,我们有矩阵公式形式的旋转公式:

v r o t = v + ( sin ⁡ θ ) K v + ( 1 − cos ⁡ θ ) K 2 v , ∣ ∣ K ∣ ∣ 2 = 1 v_{rot}=v+(\sin \theta)Kv+(1-\cos \theta)K^2v,||K||_2=1 vrot=v+(sinθ)Kv+(1cosθ)K2v,K2=1

  上述形式的由来是这样的。

  我们知道 v r o t = cos ⁡ θ   v + ( 1 − cos ⁡ θ ) ( k ⋅ v ) k + sin ⁡ θ   k × v v_{rot} = \cos \theta \ v+ (1-\cos \theta)(k\cdot v)k+ \sin \theta \ k\times v vrot=cosθ v+(1cosθ)(kv)k+sinθ k×v,而且 v ⊥ = v − v ∥ = v − ( k ⋅ v ) k = − k × ( k × v ) v_{\perp}=v-v_{\|}=v-(k\cdot v)k=-k\times (k\times v) v=vv=v(kv)k=k×(k×v)

  所以我们可以得到

( k ⋅ v ) k = v + k × ( k × v ) (k\cdot v)k=v+k\times (k\times v) (kv)k=v+k×(k×v)

  所以

v r o t = cos ⁡ θ   v + ( 1 − cos ⁡ θ ) ( k ⋅ v ) k + sin ⁡ θ   k × v = cos ⁡ θ   v + ( 1 − cos ⁡ θ ) ( v + k × ( k × v ) ) + sin ⁡ θ   k × v = cos ⁡ θ   v + ( 1 − cos ⁡ θ ) v + ( 1 − cos ⁡ θ ) k × ( k × v ) + sin ⁡ θ   k × v = v + ( 1 − cos ⁡ θ ) k × ( k × v ) ⎵ K 2 v + sin ⁡ θ   k × v ⎵ K v = v + ( sin ⁡ θ ) K v + ( 1 − cos ⁡ θ ) K 2 v \begin{aligned} v_{rot} &amp;= \cos \theta \ v+ (1-\cos \theta)(k\cdot v)k+ \sin \theta \ k\times v \\ &amp;= \cos \theta \ v+ (1-\cos \theta)(v+k\times (k\times v))+ \sin \theta \ k\times v\\ &amp;=\cos \theta \ v+ (1-\cos \theta)v+(1-\cos \theta) k\times (k\times v)+ \sin \theta \ k\times v\\ &amp;= v+(1-\cos \theta) \underbrace{k\times (k\times v)}_{K^2v}+ \sin \theta \ \underbrace{k\times v}_{Kv} \\ &amp;=v+(\sin \theta)Kv+(1-\cos \theta)K^2v\end{aligned} vrot=cosθ v+(1cosθ)(kv)k+sinθ k×v=cosθ v+(1cosθ)v+k×(k×v)+sinθ k×v=cosθ v+(1cosθ)v+(1cosθ)k×(k×v)+sinθ k×v=v+(1cosθ)K2v k×(k×v)+sinθ Kv k×v=v+(sinθ)Kv+(1cosθ)K2v

  值得注意的是,这个公式的主要项现在是1。

  将 v v v因式分解可以得到紧凑的表达式:

v r o t = R v v_{rot}=Rv vrot=Rv

  其中

R = I + ( sin ⁡ θ ) K + ( 1 − c o s ( θ ) ) K 2 R=I+(\sin \theta)K+(1-cos(\theta))K^2 R=I+(sinθ)K+(1cos(θ))K2

  是围绕 k k k轴旋转为 θ \theta θ的旋转矩阵, I I I 3 × 3 3\times 3 3×3的单位矩阵。其中

K = k ^ K=\hat{k} K=k^

K 2 = k ^ k ^ = k k T − I K^2=\hat{k}\hat{k}=kk^T-I K2=k^k^=kkTI

  所以

R = I + sin ⁡ θ   k ^ + ( 1 − cos ⁡ θ ) ( k k T − I ) = cos ⁡ θ I + sin ⁡ θ   k ^ + ( 1 − cos ⁡ θ ) k k T = e k ^ θ \begin{aligned}R&amp;= I+\sin \theta \ \hat{k} +(1-\cos \theta)(kk^T-I)\\&amp;= \cos \theta I+\sin \theta \ \hat{k} +(1-\cos \theta) kk^T\\&amp;=e^{\hat{k} \theta}\end{aligned} R=I+sinθ k^+(1cosθ)(kkTI)=cosθI+sinθ k^+(1cosθ)kkT=ek^θ

  证明完毕。


罗德里格斯公式中元素与旋转矩阵的关系及证明

  下面我们证明,由罗德里格斯的公式:

R = e ω ^ t = I + ω ^ sin ⁡ ( t ) + ω ^ 2 ( 1 − cos ⁡ ( t ) ) R=e^{\hat{\omega}t}=I+\hat{\omega}\sin(t)+\hat{\omega}^2(1-\cos(t)) R=eω^t=I+ω^sin(t)+ω^2(1cos(t))

  如何得到下面的等式?

t = cos ⁡ − 1 ( t r a c e ( R ) − 1 2 ) , ω = 1 2 sin ⁡ ( t ) ( r 32 − r 23 r 13 − r 31 r 21 − r 12 ) t=\cos^{-1}\left(\frac{{\rm trace}(R)-1}{2}\right),\omega=\frac{1}{2 \sin(t)}\begin{pmatrix}r_{32}-r_{23}\\ r_{13}-r_{31}\\r_{21}-r_{12} \end{pmatrix} t=cos1(2trace(R)1),ω=2sin(t)1r32r23r13r31r21r12

  首先,证明:

t = cos ⁡ − 1 ( t r a c e ( R ) − 1 2 ) t=\cos^{-1}\left(\frac{{\rm trace}(R)-1}{2}\right) t=cos1(2trace(R)1)

  我们知道

R = e ω ^ t = I + ω ^ sin ⁡ ( t ) + ω ^ 2 ( 1 − cos ⁡ ( t ) ) R=e^{\hat{\omega}t}=I+\hat{\omega}\sin(t)+\hat{\omega}^2(1-\cos(t)) R=eω^t=I+ω^sin(t)+ω^2(1cos(t))

⇔ R = cos ⁡ θ   I + ω ^ sin ⁡ ( t ) + ( 1 − cos ⁡ ( t ) ) ω ω T \Leftrightarrow R=\cos\theta \ I+\hat{\omega}\sin(t)+(1-\cos(t))\omega\omega^T R=cosθ I+ω^sin(t)+(1cos(t))ωωT

  两边对其求迹【常数的迹还是常数】,可以得到

t r a c e ( R ) = cos ⁡ ( t )   t r a c e ( I ) ⎵ = 3 + sin ⁡ ( t )   t r a c e ( w ^ ) ⎵ = 0 + ( 1 − cos ⁡ ( t ) )   t r a c e ( ω ω T ) ⎵ = 1 = 3 cos ⁡ ( t ) + ( 1 − cos ⁡ ( t ) ) = 1 + 2 cos ⁡ ( t ) \begin{aligned}{\rm trace}(R) &amp;= \cos(t) \ \underbrace{ {\rm trace}(I)}_{=3}+\sin(t) \ \underbrace{ {\rm trace}(\hat{w}) }_{=0}+(1-\cos(t))\ \underbrace{ {\rm trace} (\omega\omega^T) }_{=1}\\&amp;=3\cos(t) +(1-\cos(t))\\&amp;=1+2\cos(t) \end{aligned} trace(R)=cos(t) =3 trace(I)+sin(t) =0 trace(w^)+(1cos(t)) =1 trace(ωωT)=3cos(t)+(1cos(t))=1+2cos(t)

单位矩阵的迹为3,反对称矩阵的迹为0,我们已经指出 ∣ ∣ ω ∣ ∣ = 1 ||\omega||=1 ω=1,而 ∣ ∣ ω ∣ ∣ = ω 1 2 + ω 2 2 + ω 3 3 = ω ω T = 1 ||\omega||=\sqrt{\omega_1^2+\omega_2^2+\omega_3^3}=\sqrt{\omega\omega^T}=1 ω=ω12+ω22+ω33 =ωωT =1,所以很容易推断出 ω ω T \omega\omega^T ωωT的迹为1。

  这就能得到:

t = cos ⁡ − 1 ( t r a c e ( R ) − 1 2 ) = arccos ⁡ ( t r a c e ( R ) − 1 2 ) t=\cos^{-1}\left(\frac{{\rm trace}(R)-1}{2}\right)=\arccos\left(\frac{{\rm trace}(R)-1}{2}\right) t=cos1(2trace(R)1)=arccos(2trace(R)1)

  对于 ω \omega ω,求解可能较复杂,我们用最愚蠢的方式证明,假设

ω = [ ω 1 ω 2 ω 3 ] \omega=\begin{bmatrix}\omega_1\\\omega_2\\\omega_3\end{bmatrix} ω=ω1ω2ω3

  则:

ω ^ = [ 0 − ω 3 ω 2 ω 3 0 − ω 1 − ω 2 ω 1 − 0 ] \hat{\omega}=\begin{bmatrix}0&amp;-\omega_3&amp;\omega_2\\\omega_3&amp;0&amp;-\omega_1\\-\omega_2&amp;\omega_1&amp;-0\end{bmatrix} ω^=0ω3ω2ω30ω1ω2ω10

R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R=\begin{bmatrix}r_{11}&amp;r_{12}&amp;r_{13}\\r_{21}&amp;r_{22}&amp;r_{23}\\r_{31}&amp;r_{32}&amp;r_{33}\end{bmatrix} R=r11r21r31r12r22r32r13r23r33

  由于

ω ^ T = − ω ^ \hat{\omega}^T=-\hat{\omega} ω^T=ω^

  所以

( w ^ 2 ) T = ( ω ^ T ) 2 = ω ^ 2 (\hat{w}^2)^T=(\hat{\omega}^T)^2=\hat{\omega}^2 (w^2)T=(ω^T)2=ω^2

  所以我们让 R = I + ω ^ sin ⁡ ( t ) + ω ^ 2 ( 1 − cos ⁡ ( t ) ) R=I+\hat{\omega}\sin(t)+\hat{\omega}^2(1-\cos(t)) R=I+ω^sin(t)+ω^2(1cos(t))两边都取转置得到:

R T = I − ω ^ sin ⁡ ( t ) + ω ^ 2 ( 1 − cos ⁡ ( t ) ) R^T=I-\hat{\omega}\sin(t)+\hat{\omega}^2(1-\cos(t)) RT=Iω^sin(t)+ω^2(1cos(t))

  所以很容易得到

ω ^ sin ⁡ ( t ) = R − R T 2 \hat{\omega}\sin (t)=\frac{R-R^T}{2} ω^sin(t)=2RRT

  由于

ω ^ sin ⁡ ( t ) = [ 0 − ω 3 ω 2 ω 3 0 − ω 1 − ω 2 ω 1 − 0 ] sin ⁡ ( t ) \hat{\omega}\sin(t)=\begin{bmatrix}0&amp;-\omega_3&amp;\omega_2\\\omega_3&amp;0&amp;-\omega_1\\-\omega_2&amp;\omega_1&amp;-0\end{bmatrix}\sin(t) ω^sin(t)=0ω3ω2ω30ω1ω2ω10sin(t)

  而且

R − R T = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] − [ r 11 r 21 r 31 r 12 r 22 r 32 r 13 r 23 r 33 ] R-R^T=\begin{bmatrix}r_{11}&amp;r_{12}&amp;r_{13}\\r_{21}&amp;r_{22}&amp;r_{23}\\r_{31}&amp;r_{32}&amp;r_{33}\end{bmatrix}-\begin{bmatrix}r_{11}&amp;r_{21}&amp;r_{31}\\r_{12}&amp;r_{22}&amp;r_{32}\\r_{13}&amp;r_{23}&amp;r_{33}\end{bmatrix} RRT=r11r21r31r12r22r32r13r23r33r11r12r13r21r22r23r31r32r33

⇔ R − R T = [ 0 r 12 − r 21 r 13 − r 31 r 21 − r 12 0 r 23 − r 32 r 31 − r 13 r 32 − r 23 0 ] \Leftrightarrow R-R^T=\begin{bmatrix}0&amp;r_{12}-r_{21}&amp;r_{13}-r_{31}\\r_{21}-r_{12}&amp;0&amp;r_{23}-r_{32}\\r_{31}-r_{13}&amp;r_{32}-r_{23}&amp;0\end{bmatrix} RRT=0r21r12r31r13r12r210r32r23r13r31r23r320

  然后两者联立得到

ω ^ = [ 0 − ω 3 ω 2 ω 3 0 − ω 1 − ω 2 ω 1 − 0 ] = 1 2 sin ⁡ ( t ) [ 0 r 12 − r 21 r 13 − r 31 r 21 − r 12 0 r 23 − r 32 r 31 − r 13 r 32 − r 23 0 ] \hat{\omega}=\begin{bmatrix}0&amp;-\omega_3&amp;\omega_2\\\omega_3&amp;0&amp;-\omega_1\\-\omega_2&amp;\omega_1&amp;-0\end{bmatrix}=\frac{1}{2\sin(t)}\begin{bmatrix}0&amp;r_{12}-r_{21}&amp;r_{13}-r_{31}\\r_{21}-r_{12}&amp;0&amp;r_{23}-r_{32}\\r_{31}-r_{13}&amp;r_{32}-r_{23}&amp;0\end{bmatrix} ω^=0ω3ω2ω30ω1ω2ω10=2sin(t)10r21r12r31r13r12r210r32r23r13r31r23r320

  故而得到

ω 1 = r 32 − r 23 , ω 2 = r 13 − r 31 , ω 3 = r 21 − r 12 \omega_1=r_{32}-r_{23},\omega_2=r_{13}-r_{31},\omega_3=r_{21}-r_{12} ω1=r32r23,ω2=r13r31,ω3=r21r12

  所以

ω = 1 2 sin ⁡ ( t ) ( r 32 − r 23 r 13 − r 31 r 21 − r 12 ) \omega=\frac{1}{2 \sin(t)}\begin{pmatrix}r_{32}-r_{23}\\ r_{13}-r_{31}\\r_{21}-r_{12} \end{pmatrix} ω=2sin(t)1r32r23r13r31r21r12


  使用罗德里格斯的公式,可以看出,如果 t = 2 k π , k ∈ Z t=2k \pi,k\in \mathbb{Z} t=2kπ,kZ,我们有

e ω ^ 2 k π = I , ∀ k e^{\hat{\omega}2k\pi}=I,\forall k eω^2kπ=I,k

  因此,对于给定的旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3),通常存在非常多的指数坐标 ( ω , t ) (\omega,t) (ω,t),使得 e ω ^ t = R e^{\hat{\omega}t}=R eω^t=R。指数映射 exp ⁡ : s o ( 3 ) → S O ( 3 ) \exp :\mathfrak{so}(3)\rightarrow SO(3) exp:so(3)SO(3)因此不是一对一的。

  知道指数映射也不是可交换的也是有用的,即对于两个 ω ^ 1 , ω ^ 2 ∈ s o ( 3 ) \hat{\omega}_1,\hat{\omega}_2\in \mathfrak{so}(3) ω^1,ω^2so(3)

e ω ^ 1 e ω ^ 2 ≠ e ω ^ 2 e ω ^ 1 ≠ e ω ^ 1 + ω ^ 2 e^{\hat{\omega}_1}e^{\hat{\omega}_2}\ne e^{\hat{\omega}_2}e^{\hat{\omega}_1}\ne e^{\hat{\omega}_1+\hat{\omega}_2} eω^1eω^2̸=eω^2eω^1̸=eω^1+ω^2

  除非 ω ^ 1 ω ^ 2 = ω ^ 2 ω ^ 1 \hat{\omega}_1\hat{\omega}_2=\hat{\omega}_2\hat{\omega}_1 ω^1ω^2=ω^2ω^1

李括号

  一般来说, ω ^ 1 ω ^ 2 \hat{\omega}_1\hat{\omega}_2 ω^1ω^2 ω ^ 2 ω ^ 1 \hat{\omega}_2\hat{\omega}_1 ω^2ω^1之间的差异在 s o ( 3 ) \mathfrak{so}(3) so(3)上称为李括号,表示为:

[ ω ^ 1 , ω ^ 2 ] = ω ^ 1 ω ^ 2 − ω ^ 2 ω ^ 1 , ∀ ω ^ 1 , ω ^ 2 ∈ s o ( 3 ) [\hat{\omega}_1,\hat{\omega}_2]=\hat{\omega}_1\hat{\omega}_2-\hat{\omega}_2\hat{\omega}_1,\forall \hat{\omega}_1,\hat{\omega}_2\in \mathfrak{so}(3) [ω^1,ω^2]=ω^1ω^2ω^2ω^1,ω^1,ω^2so(3)

  显然, [ ω ^ 1 , ω ^ 2 ] [\hat{\omega}_1,\hat{\omega}_2] [ω^1,ω^2]也是 s o ( 3 ) \mathfrak{so}(3) so(3)中的斜对称矩阵。 s o ( 3 ) \mathfrak{so}(3) so(3)的线性结构与李括号一起形成(Lie)群 S O ( 3 ) SO(3) SO(3)的李代数。 有关 S O ( 3 ) SO(3) SO(3)的李群结构的更多细节,会在此博文系列的下一博文描述。

  所有旋转矩阵的集合 e ω ^ t , t ∈ R e^{\hat{\omega}t},t\in \mathbb{R} eω^t,tR,然后被称为 S O ( 3 ) SO(3) SO(3)的一个参数子群,并且这种子群中的乘法是可交换的,即相同的 ω ∈ R 3 \omega\in \mathbb{R}^3 ωR3,我们有:

e ω ^ t 1 e ω ^ t 2 = e ω ^ t 2 e ω ^ t 1 = e ω ^ ( t 1 + t 2 ) , ∀ t 1 , t 2 ∈ R 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} eω^t1eω^t2=eω^t2eω^t1=eω^(t1+t2),t1,t2R

  上面介绍的指数坐标为旋转矩阵提供局部参数化。 还有其他方法可以参数化旋转矩阵,无论是全局还是局部,其中四元数和欧拉角(或者更正式地说,Lie-Cartan坐标)是两种流行的选择。 我们使用指数坐标,因为它们更简单,更直观。

四元数(Quaternions)和Lie-Cartan坐标

四元数

  有关四元数的知识,请阅读我的这篇博文。不再赘述,避免冗余。

Lie-Cartan坐标

  有关四元数的知识,请阅读我的这篇博文。不再赘述,避免冗余。

刚体运动及其表征

  前面,我们研究了纯粹的旋转刚体运动以及如何表示和计算旋转矩阵。 在本节中,我们将研究如何表示一般的刚体运动,即具有旋转和平移的运动。

  图5显示了一个移动的刚性物体,其上附有坐标系 C \rm C C

图5。 移动坐标系 C C C和世界坐标系 W W W之间的刚体运动。

  为了描述相对于坐标系 W \rm W W下对象上的点 p p p 的坐标,从图中很容易看出,向量 X w {\rm X}_w Xw简单的是坐标系 C \rm C C原点相对世界坐标系 W \rm W W的原点平移 T w c ∈ R 3 T_{wc}\in \mathbb{R}^3 TwcR3和相对坐标系 W \rm W W表达的向量 X c {\rm X}_c Xc的和。由于 X c {\rm X}_c Xc是点 p p p 相对于坐标系 C \rm C C的坐标,但相对于坐标系 W \rm W W,它变成了 R w c X c R_{wc}{\rm X}_c RwcXc,其中 R w c ∈ S O ( 3 ) R_{wc}\in SO(3) RwcSO(3)是两坐标系之间的相对旋转。 因此,坐标 X w X_w Xw由下式给出:

X w = R w c X c + T w c {\rm X}_w=R_{wc}{\rm X}_c+T_{wc} Xw=RwcXc+Twc

  通常,如果所涉及的坐标系从上下文中能够很明确清楚,我们将完全刚性运动表示为 g w c = ( R w c , T w c ) g_{wc}=(R_{wc},T_{wc}) gwc=(Rwc,Twc)或简单地表示 g = ( R , T ) g=(R,T) g=(R,T)。 然后 g g g不仅表示刚体对象的配置的描述,而且表示坐标系之间的坐标的变换。 在紧凑的形式中,我们可以简单地写:

X w = g w c ( W c ) {\rm X}_w=g_{wc}({\rm W}_{c}) Xw=gwc(Wc)

  然后可以将刚体的所有可能配置的集合描述为:

S E ( 3 ) = g = ( R , T ) ∣ R ∈ S O ( 3 ) , T ∈ R 3 = S O × R 3 SE(3)={g=(R,T)|R\in SO(3),T\in \mathbb{R}^3}=SO\times \mathbb{R}^3 SE(3)=g=(R,T)RSO(3),TR3=SO×R3

  这就是所谓的特殊欧式群 S E ( 3 ) SE(3) SE(3)。 为了简化,我们引入所谓的齐次坐标。

齐次表示

  从式 X w = R w c X c + T w c {\rm X}_w=R_{wc}{\rm X}_c+T_{wc} Xw=RwcXc+Twc中注意到,与纯旋转情况不同,完全刚体运动的坐标变换不是线性的,而是仿射的。

  我们说对于某个矩阵 A A A,若两个向量 u , v u,v u,v 是线性变换而相关仅当 u = A v u=Av u=Av。对于某个矩阵 A A A和向量 b b b,如果说两个向量 u , v u,v u,v是仿射变换相关仅当 u = A v + b u=Av+b u=Av+b

  但是,我们可以将仿射变换转换为线性变换。通过使用所谓的齐次坐标:将1加到一个点 p ∈ E 3 p\in \mathbb{E}^3 pE3的坐标 X = [ X 1 , X 2 , X 3 ] T ∈ R 3 {\rm X}=[X_1,X_2,X_3]^T\in \mathbb{R}^3 X=[X1,X2,X3]TR3,产生一个 R 4 \mathbb{R}^4 R4中的向量,表示为 X ˉ \bar{\rm X} Xˉ

X ˉ = [ X 1 ] = [ X 1 X 2 X 3 1 ] ∈ R 4 \bar{\rm X}=\begin{bmatrix}{\rm X}\\1\end{bmatrix}=\begin{bmatrix}\rm X_1\\X_2\\X_3\\1\end{bmatrix}\in \mathbb{R}^4 Xˉ=[X1]=X1X2X31R4

  在这种情况下,坐标的这种扩展已经将欧氏空间 E 3 \mathbb{E}^3 E3嵌入到 R 4 \mathbb{R}^4 R4中的超平面而不是 R 3 \mathbb{R}^3 R3中。 矢量 v = X ( q ) − X ( p ) v={\rm X}(q)-{\rm X}(p) v=X(q)X(p)的齐次坐标定义为两点的齐次坐标之间的差异,因此形式为:

v ˉ = [ v 0 ] = [ X ( q ) 1 ] − [ X ( p ) 1 ] = [ v 1 v 2 v 3 0 ] ∈ R 4 \bar{v}=\begin{bmatrix}v\\0\end{bmatrix}=\begin{bmatrix}{\rm X}(q)\\1\end{bmatrix}-\begin{bmatrix}{\rm X}(p)\\1\end{bmatrix}=\begin{bmatrix}v_1\\v_2\\v_3\\0\end{bmatrix}\in \mathbb{R}^4 vˉ=[v0]=[X(q)1][X(p)1]=v1v2v30R4

  注意,在 R 4 \mathbb{R}^4 R4中,上述形式的矢量产生子空间,因此原始矢量 v ∈ R 3 v\in \mathbb{R}^3 vR3的所有线性结构都被新的表示完美地保留。 使用新表示法,转换 X w = R w c X c + T w c {\rm X}_w=R_{wc}{\rm X}_c+T_{wc} Xw=RwcXc+Twc可以重写为:

X w = [ X w 1 ] = [ R w c T w c 0 1 ] [ X c 1 ] = ˙ g ^ w c X ˉ c {\rm X}_w=\begin{bmatrix}{\rm X}_w\\1\end{bmatrix}=\begin{bmatrix}R_{wc}&amp;T_{wc}\\0&amp;1\end{bmatrix}\begin{bmatrix}{\rm X}_c\\1\end{bmatrix}\dot=\hat{g}_{wc}\bar{\rm X}_{c} Xw=[Xw1]=[Rwc0Twc1][Xc1]=˙g^wcXˉc

  其中 4 × 4 4\times 4 4×4矩阵 g ^ w c ∈ R 4 \hat{g}_{wc}\in \mathbb{R}^4 g^wcR4被称为刚性运动 g w c = ( R w c , T w c ) g_{wc}=(R_{wc},T_{wc}) gwc=(Rwc,Twc)的齐次表示。 一般来说,如果 g = ( R , T ) g=(R,T) g=(R,T),则齐次表示为:

g ˉ = [ R T 0 1 ] ∈ R 4 × 4 \bar{g}=\begin{bmatrix}R&amp;T\\0&amp;1\end{bmatrix}\in \mathbb{R}^{4\times 4} gˉ=[R0T1]R4×4

  请注意,通过在符号中引入一点冗余,我们通过线性矩阵乘法表示坐标的刚体变换。 上式中 g g g的齐次表示产生了特殊欧式群 S E ( 3 ) SE(3) SE(3)的自然矩阵表示:

S E ( 3 ) ≡ { g ˉ = ( R T 0 1 ) ∣ R ∈ S O ( 3 ) , T ∈ R 3 } ⊂ R 4 × 4 SE(3)\equiv \left\{\bar{g}=\begin{pmatrix}R &amp;T\\0&amp;1\end{pmatrix}|R\in SO(3),T\in \mathbb{R}^3\right\}\sub \mathbb{R}^{4\times 4} SE(3){gˉ=(R0T1)RSO(3),TR3}R4×4

  然后,直接验证确实满足了群的所有要求(群的四个性质,在博文中有描述。)。 特别是 ∀ g ˉ 1 , g ˉ 2 \forall \bar{g}_1,\bar{g}_2 gˉ1,gˉ2 g ˉ ∈ S E ( 3 ) \bar{g} \in SE(3) gˉSE(3),我们有:

g ˉ 1 g ˉ 2 = [ R 1 T 1 0 1 ] [ R 2 T 2 0 1 ] = [ R 1 R 2 R 1 T 2 + T 1 0 1 ] ∈ S E ( 3 ) \bar{g}_1\bar{g}_2=\begin{bmatrix}R_1&amp;T_1\\0&amp;1\end{bmatrix}\begin{bmatrix}R_2&amp;T_2\\0&amp;1\end{bmatrix}=\begin{bmatrix}R_1R_2&amp;R_1T_2+T_1\\0&amp;1\end{bmatrix}\in SE(3) gˉ1gˉ2=[R10T11][R20T21]=[R1R20R1T2+T11]SE(3)

  而且

g ˉ − 1 = [ R T 0 1 ] − 1 = [ R T − R T T 0 1 ] ∈ S E ( 3 ) \bar{g}^{-1}=\begin{bmatrix}R&amp;T\\0&amp;1\end{bmatrix}^{-1}=\begin{bmatrix}R^T&amp;-R^TT\\0&amp;1\end{bmatrix}\in SE(3) gˉ1=[R0T1]1=[RT0RTT1]SE(3)

  在齐次表示中,刚体变换 g ∈ S E ( 3 ) g\in SE(3) gSE(3)对向量 v = X ( q ) − X ( p ) v={\rm X}(q)-{\rm X}(p) v=X(q)X(p)的作用变为:

g ˉ ∗ ( v ˉ ) = g ˉ X ˉ ( q ) − g ˉ X ˉ ( p ) = g ˉ v ˉ \bar{g}_*(\bar{v})=\bar{g}\bar{\rm X}(q)-\bar{g}\bar{\rm X}(p)=\bar{g}\bar{v} gˉ(vˉ)=gˉXˉ(q)gˉXˉ(p)=gˉvˉ

  也就是说,可以简单地用矩阵乘法表示,而且保留了内积和叉积的性质,能够代表刚体转换。

S E ( 3 ) SE(3) SE(3)上的指数坐标(映射)

  在前面,我们研究了旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3)的指数坐标。 对于完全刚体运动 g ∈ S E ( 3 ) g\in SE(3) gSE(3)的齐次表示也存在类似的形式。

  考虑连续移动的刚体对象的运动由 R R R S E ( 3 ) SE(3) SE(3)的曲线描述: g ( t ) = ( R ( t ) , T ( t ) ) g(t)=(R(t),T(t)) g(t)=(R(t),T(t)),或者是齐次表示:

g ( t ) = [ R ( t ) T ( t ) 0 1 ] ∈ R 4 × 4 g(t)=\begin{bmatrix}R(t)&amp;T(t)\\0&amp;1\end{bmatrix}\in \mathbb{R}^{4\times 4} g(t)=[R(t)0T(t)1]R4×4

  这里,为了简化表示法,我们将从符号中移除“bar”以进行齐次表示【即去掉字母上面横线】,并简单地将 g g g表示相同的矩阵。我们将对点使用相同的约定: X \rm X X表示 X ˉ \bar{\rm X} Xˉ和对于向量: 只要从上下文中清楚它们的维度,就可以用 v v v表示 v ˉ \bar{v} vˉ。与纯旋转情况类似,让我们首先看一下矩阵 g ˙ ( t ) g − 1 ( t ) \dot{g}(t)g^{-1}(t) g˙(t)g1(t)的结构:

g ˙ ( t ) g − 1 ( t ) = [ R ˙ ( t ) R T ( t ) T ˙ ( t ) − R ˙ ( t ) R T ( t ) T ( t ) 0 0 ] \dot{g}(t)g^{-1}(t)=\begin{bmatrix}\dot{R}(t)R^T(t)&amp;\dot{T}(t)-\dot{R}(t)R^T(t)T(t)\\0&amp;0\end{bmatrix} g˙(t)g1(t)=[R˙(t)RT(t)0T˙(t)R˙(t)RT(t)T(t)0]

顺带一提, g ˙ ( t ) \dot{g}(t) g˙(t) g ( t ) g(t) g(t) t t t求导

  根据我们对旋转矩阵的研究,我们知道 R ˙ ( t ) R T ( t ) \dot{R}(t)R^T(t) R˙(t)RT(t)是一个斜对称矩阵,即存在 ω ^ ( t ) ∈ s o ( 3 ) \hat{\omega}(t)\in \mathfrak{so}(3) ω^(t)so(3)使得 ω ^ ( t ) = R ˙ ( t ) R T ( t ) \hat{\omega}(t)=\dot{R}(t)R^T(t) ω^(t)=R˙(t)RT(t)

  定义一个向量 v ( t ) ∈ R 3 v(t)\in \mathbb{R}^3 v(t)R3使得 v ( t ) = T ˙ ( t ) − ω ^ ( t ) T ( t ) v(t)=\dot{T}(t)-\hat{\omega}(t)T(t) v(t)=T˙(t)ω^(t)T(t)。所以上面的式子变成了:

g ˙ ( t ) g − 1 ( t ) = [ ω ^ ( t ) v ( t ) 0 0 ] ∈ R 4 × 4 \dot{g}(t)g^{-1}(t)=\begin{bmatrix}\hat{\omega}(t)&amp;v(t)\\0&amp;0\end{bmatrix}\in \mathbb{R}^{4\times 4} g˙(t)g1(t)=[ω^(t)0v(t)0]R4×4

  如果我们进一步定义矩阵 ξ ^ ( t ) ∈ R 4 × 4 \hat{\xi}(t)\in \mathbb{R}^{4\times 4} ξ^(t)R4×4是:

ξ ^ ( t ) = [ ω ^ ( t ) v ( t ) 0 0 ] \hat{\xi}(t)=\begin{bmatrix}\hat{\omega}(t)&amp;v(t)\\0&amp;0\end{bmatrix} ξ^(t)=[ω^(t)0v(t)0]

  接着我们有:

(6) g ˙ ( t ) = ( g ˙ ( t ) g − 1 ( t ) ) g ( t ) = ξ ^ ( t ) g ( t ) \dot{g}(t)=(\dot{g}(t)g^{-1}(t))g(t)=\hat{\xi}(t)g(t)\tag{6} g˙(t)=(g˙(t)g1(t))g(t)=ξ^(t)g(t)(6)

   ξ ^ \hat{\xi} ξ^ 可以看作沿着 g ( t ) g(t) g(t)曲线的"切向量"并用于局部近似 g ( t ) g(t) g(t)

g ( t + d t ) ≈ g ( t ) + ξ ^ ( t ) g ( t ) d t = ( I + ξ ^ ( t ) d t ) g ( t ) g(t+dt)\approx g(t)+\hat{\xi}(t)g(t)dt=(I+\hat{\xi}(t)dt)g(t) g(t+dt)g(t)+ξ^(t)g(t)dt=(I+ξ^(t)dt)g(t)

  在机器人学中形式为 ξ ^ \hat{\xi} ξ^ 4 × 4 4\times 4 4×4矩阵为被称为运动旋量(twist)。 然后将所有运动旋量(twist)的集合表示为:

s e ( 3 ) ≡ { ξ ^ = ( w ^ v 0 0 ) ∣ w ^ ∈ s o ( 3 ) , v ∈ R 3 } ⊂ R 4 × 4 \mathfrak{se}(3)\equiv \left\{\hat{\xi}=\begin{pmatrix}\hat{w}&amp;v\\0&amp;0\end{pmatrix}\Bigg|\hat{w}\in \mathfrak{so}(3),v\in \mathbb{R}^3\right\}\sub \mathbb{R}^{4\times 4} se(3){ξ^=(w^0v0)w^so(3),vR3}R4×4

   s e ( 3 ) \mathfrak{se}(3) se(3)被称为矩阵群 S E ( 3 ) SE(3) SE(3)的切空间(或李代数)。 我们还定义了两个运算符 ∨ \vee ∧ \land 用于 ξ ^ ∈ s e ( 3 ) \hat{\xi}\in \mathfrak{se}(3) ξ^se(3)及其运动旋量 ξ ∈ R 6 \xi\in \mathbb{R}^6 ξR6之间的转换,如下所示:

[ ω ^ v 0 0 ] ∨ = ˙ [ v ω ] ∈ R 6 \begin{bmatrix}\hat{\omega}&amp;v\\0&amp;0\end{bmatrix}^{\vee}\dot=\begin{bmatrix}v\\\omega\end{bmatrix}\in \mathbb{R}^6 [ω^0v0]=˙[vω]R6

[ v ω ] = ˙ [ ω ^ v 0 0 ] ∧ ∈ R 4 × 4 \begin{bmatrix}v\\\omega\end{bmatrix}\dot=\begin{bmatrix}\hat{\omega}&amp;v\\0&amp;0\end{bmatrix}^{\land}\in \mathbb{R}^{4\times 4} [vω]=˙[ω^0v0]R4×4

  在运动旋量坐标 ξ \xi ξ中,我们将 v v v称为线速度和 ω \omega ω作为角速度,表示它们与整个运动的平移或旋转部分相关。 现在让我们考虑等式(6)一个特殊情况,当运动旋量坐标 ξ ^ \hat{\xi} ξ^是一个常数矩阵:

g ˙ ( t ) = ξ ^ g ( t ) \dot{g}(t)=\hat{\xi}g(t) g˙(t)=ξ^g(t)

  因此,我们再次得到一个时不变的线性常微分方程,它可以求解得到:

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

  假设初始条件 g ( 0 ) = I g(0)=I g(0)=I,我们可以得出结论:

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

  运动旋量指数进行泰勒展开是:

e ξ ^ t = I + ξ ^ t + ( ξ ^ t ) 2 2 ! + ⋯ + ( ξ ^ t ) n n ! + ⋯ e^{\hat{\xi}t}=I+\hat{\xi}t+\frac{(\hat{\xi}t)^2}{2!}+\cdots +\frac{(\hat{\xi}t)^n}{n!}+\cdots eξ^t=I+ξ^t+2!(ξ^t)2++n!(ξ^t)n+

  使用前面介绍的罗德里格斯公式,可以直接得到:

(7) e ξ ^ t = [ e ω ^ t ( I − e ω ^ t ) ω ^ v + ω ω T v t 0 1 ] e^{\hat{\xi}t}=\begin{bmatrix}e^{\hat{\omega}t}&amp;(I-e^{\hat{\omega}t})\hat{\omega}v+\omega\omega^Tvt\\0&amp;1\end{bmatrix}\tag{7} eξ^t=[eω^t0(Ieω^t)ω^v+ωωTvt1](7)

后期可能给出完整过程,目前先给出结论。

  从这个表达式中可以清楚地看出,指数 ξ ^ t \hat{\xi}t ξ^t确实是 S E ( 3 ) SE(3) SE(3)中的刚体变换矩阵。 因此,指数映射定义了从空间 s e ( 3 ) \mathfrak{se}(3) se(3) S E ( 3 ) SE(3) SE(3)的映射:

exp ⁡ : s e ( 3 ) → S E ( 3 ) \exp:\mathfrak{se}(3) \rightarrow SE(3) exp:se(3)SE(3)

ξ ^ ∈ s e ( 3 ) ↦ e ξ ^ ∈ S E ( 3 ) \hat{\xi}\in \mathfrak{se}(3)\mapsto e^{\hat{\xi}}\in SE(3) ξ^se(3)eξ^SE(3)

  运动旋量 ξ ^ ∈ s e ( 3 ) \hat{\xi}\in \mathfrak{se}(3) ξ^se(3)也称为 S E ( 3 ) SE(3) SE(3)的指数坐标,正如 ω ^ ∈ s o ( 3 ) \hat{\omega}\in \mathfrak{so}(3) ω^so(3) S O ( 3 ) SO(3) SO(3)一样。

  那么每个刚体运动 g ∈ S E ( 3 ) g\in SE(3) gSE(3)是否总能以这种指数形式表示? 答案是肯定的。

SE(3)上指数映射的满射性(Surjectivity)

  对于 ∀ g ∈ S E ( 3 ) \forall g\in SE(3) gSE(3),存在运动旋量(可能并不唯一)坐标 ξ = ( v , ω ) \xi=(v,\omega) ξ=(v,ω) t ∈ R t\in \mathbb{R} tR以至于 g = e ξ ^ t g=e^{\hat{\xi}t} g=eξ^t

证明

  假设 g = ( R , T ) g=(R,T) g=(R,T)。 对于旋转矩阵 R ∈ S O ( 3 ) R\in SO(3) RSO(3),我们总是找到 ( ω , t ) (\omega,t) (ω,t),其中 ∣ ∣ ω ∣ ∣ = 1 ||\omega||=1 ω=1,使得 e ω ^ t = R e^{\hat{\omega}t}=R eω^t=R。如果 t = 0 t=0 t=0,从等式(7),我们可以求解线性方程式中的 v ∈ R 3 v\in \mathbb{R}^3 vR3:

( I − e ω ^ t ) ω ^ v + ω ω T v t = T ⇒ v = [ ( I − e ω ^ t ) ω ^ + ω ω T t ] − 1 T (I-e^{\hat{\omega}t})\hat{\omega}v+\omega\omega^Tvt=T \Rightarrow v=[(I-e^{\hat{\omega}t})\hat{\omega}+\omega\omega^Tt]^{-1}T (Ieω^t)ω^v+ωωTvt=Tv=[(Ieω^t)ω^+ωωTt]1T

  如果 t = 0 t=0 t=0,则 R = I R=I R=I。我们可能简单的选择 ω = 0 , v = T / ∣ ∣ T ∣ ∣ \omega=0,v=T/||T|| ω=0,v=T/T而且 t = ∣ ∣ T ∣ ∣ t=||T|| t=T


  类似于旋转矩阵的指数坐标,从 s e ( 3 ) \mathfrak{se}(3) se(3) S E ( 3 ) SE(3) SE(3)的指数映射不是单射的,因此不是一对一的。 通常有很多指数坐标(或运动旋量)对应于每个 g ∈ S E ( 3 ) g\in SE(3) gSE(3)。 与纯旋转情况类似, s e ( 3 ) \mathfrak{se}(3) se(3)的线性结构与李括号操作下的封闭:

[ ξ ^ 1 , ξ ^ 2 ] = ξ ^ 1 ξ ^ 2 − ξ ^ 2 ξ ^ 1 = [ ω 1 × ω 2 ^ ω 1 × v 2 − ω 2 × v 1 0 0 ] ∈ s e ( 3 ) [\hat{\xi}_1,\hat{\xi}_2]=\hat{\xi}_1\hat{\xi}_2-\hat{\xi}_2\hat{\xi}_1=\begin{bmatrix}\widehat{\omega_1\times \omega_2} &amp; \omega_1\times v_2-\omega_2\times v_1\\0&amp;0\end{bmatrix}\in \mathfrak{se}(3) [ξ^1,ξ^2]=ξ^1ξ^2ξ^2ξ^1=[ω1×ω2 0ω1×v2ω2×v10]se(3)

  使 s e ( 3 ) \mathfrak{se}(3) se(3)成为 S E ( 3 ) SE(3) SE(3)的李代数。 两个刚体运动 g 1 = e ξ ^ 1 g_1=e^{\hat{\xi}_1} g1=eξ^1 g 2 = e ξ ^ 2 g_2=e^{\hat{\xi}_2} g2=eξ^2彼此可交换: f 1 g 2 = g 2 g 1 f_1g_2=g_2g_1 f1g2=g2g1,仅当 [ ξ ^ 1 , ξ ^ 2 ] = 0 [\hat{\xi}_1,\hat{\xi}_2]=0 [ξ^1,ξ^2]=0

坐标和速度转换(伴随映射的引出)

  在上面描述的刚体运动中,我们描述了三维点相对于相机坐标系的移动方式。在计算机视觉中,我们通常需要知道点的坐标和它们的速度相对于不同位置的相机坐标系是如何变化的。

  这主要是因为选择相机坐标系作为参考坐标系来描述相机运动和相对于它的3D点通常更方便和自然。由于相机可能正在移动,我们需要知道从一个相机坐标系转换到另一个相机坐标系的变化量(例如坐标和速度)有多少。特别是,如何根据移动摄像机的正确表达(特征)点的位置和速度。

坐标变换规则

  我们把时间 t ∈ R t\in \mathbb{R} tR始终用作注册摄像机运动的索引。即使在给出一些快照的离散情况下,我们也会按照一些时间索引对它们进行排序,就好像它们就是这个顺序一样!我们发现时间对于离散情况和连续情况都是一个很好的统一索引。所以我们将用 t t t作为相机位置和响应图像的索引。因此,我们将使用 g ( t ) = ( R ( t ) , T ( t ) ) g(t)=(R(t),T(t)) g(t)=(R(t),T(t))或:

g ( t ) = [ R ( t ) T ( t ) 0 1 ] ∈ S E ( 3 ) g(t)=\begin{bmatrix}R(t)&amp;T(t)\\0&amp;1\end{bmatrix}\in SE(3) g(t)=[R(t)0T(t)1]SE(3)

  来表示在时间 t ∈ R t\in \mathbb{R} tR处某个固定世界坐标系 W W W和相机坐标系 C C C之间的相对位移。这里我们将忽略来自所谓的 g c w ( t ) g_{cw}(t) gcw(t)的下标 c w cw cw,只要从上下文中清楚相关性即可。 默认情况下,我们假设 g ( 0 ) = I g(0)=I g(0)=I,即在时间 t = 0 t = 0 t=0,相机坐标系与世界坐标系重合。 因此,如果点 p ∈ E 3 p\in \mathbb{E}^3 pE3相对于世界坐标系的坐标是 X 0 = X ( 0 ) \rm X_0=X(0) X0=X(0),则其在时间t相对于相机的坐标是:

X ( t ) = R ( t ) X 0 + T ( t ) {\rm X}(t)=R(t){\rm X}_0+T(t) X(t)=R(t)X0+T(t)

  或以齐次的形式表示:

X ( t ) = g ( t ) X 0 {\rm X}(t)=g(t){\rm X}_0 X(t)=g(t)X0

  如果相机位于 g ( t 1 ) , . . . , g ( t m ) g(t_1),...,g(t_m) g(t1),...,g(tm)的位置的对应时间索引分别 t 1 , . . . , t m t_1,...,t_m t1,...,tm,则相同点 p p p的坐标相应为 X ( t i ) = g ( t i ) X 0 , i = 1 , . . . , m {\rm X}(t_i)=g(t_i){\rm X}_0,i=1,...,m X(ti)=g(ti)X0,i=1,...,m。 如果重要的只是位置而不是时间,我们将经常使用 g i g_i gi作为 g ( t i ) g(t_i) g(ti)的简写,并且类似地使用 X i {\rm X}_i Xi作为 X ( t i ) X(t_i) X(ti)

  当开始时间不是 t = 0 t = 0 t=0时,在时间 t 2 t_2 t2处的相机相对于在时间 t 1 t_1 t1处的相机之间的相对运动将表示为 g ( t 2 , t 1 ) ∈ S E ( 3 ) g(t_2,t_1)\in SE(3) g(t2,t1)SE(3)。 然后我们在同一点 p p p的坐标之间有以下关系:

X ( t 2 ) = g ( t 2 , t 1 ) X ( t 1 ) , ∀ t 1 , t 2 ∈ R {\rm X}(t_2)=g(t_2,t_1){\rm X}(t_1),\forall t_1,t_2\in \mathbb{R} X(t2)=g(t2,t1)X(t1),t1,t2R

  现在考虑在 t = t 3 ∈ R 3 t=t_3\in \mathbb{R}^3 t=t3R3处摄像机的第三个位置,如图6所示。

图6。刚体运动的组成。 X ( t 1 ) , X ( t 2 ) , X ( t 3 ) X(t_1),X(t_2),X(t_3) X(t1),X(t2),X(t3)分别是在时间 t = t 1 , t 2 , t 3 t=t_1,t_2,t_3 t=t1,t2,t3时相对于三个相机坐标系的点 p p p的坐标。

  摄像机在 t 3 t_3 t3 t 2 t_2 t2之间的相对运动是 g ( t 3 , t 2 ) g(t_3,t_2) g(t3,t2),而 t 3 t_3 t3 t 1 t_1 t1之间的相对运动是 g ( t 3 , t 1 ) g(t_3,t_1) g(t3,t1)。 然后我们在坐标之间有以下关系:

X ( t 3 ) = g ( t 3 , t 2 ) X ( t 2 ) = g ( t 3 , t 2 ) X ( t 1 ) {\rm X}(t_3)=g(t_3,t_2){\rm X}(t_2)=g(t_3,t_2){\rm X}(t_1) X(t3)=g(t3,t2)X(t2)=g(t3,t2)X(t1)

  与 t 3 t_3 t3 t 1 t_1 t1坐标之间的直接关系进行比较:

X ( t 3 ) = g ( t 3 , t 1 ) X ( t 1 ) {\rm X}(t_3)=g(t_3,t_1){\rm X}(t_1) X(t3)=g(t3,t1)X(t1)

  必须遵守以下连续运动的组合规则:

g ( t 3 , t 1 ) = g ( t 3 , t 2 ) g ( t 2 , t 1 ) g(t_3,t_1)=g(t_3,t_2)g(t_2,t_1) g(t3,t1)=g(t3,t2)g(t2,t1)

  组合规则描述了点 p p p相对于任何相机位置的坐标 X X X,如果它们相对于特定的一个已知相机。 相同的组合规则意味着反向规则:

g − 1 ( t 2 , t 1 ) = g ( t 1 , t 2 ) g^{-1}(t_2,t_1)=g(t_1,t_2) g1(t2,t1)=g(t1,t2)

  因为 g ( t 2 , t 1 ) g ( t 1 , t 2 ) = g ( t 2 , t 2 ) = I g(t_2,t_1)g(t_1,t_2)=g(t_2,t_2)=I g(t2,t1)g(t1,t2)=g(t2,t2)=I。如果时间对于特定问题没有物理意义,我们可以使用 g i j g_{ij} gij作为 g ( t i , t j ) g(t_i,t_j) g(ti,tj)的简写 ,其中 t 1 , t 2 ∈ R t_1,t_2\in \mathbb{R} t1,t2R

  了解了坐标的变换后,我们现在研究速度会发生什么。 我们知道点 p ∈ E 3 p\in \mathbb{E}^3 pE3相对于移动摄像机的坐标 X ( t ) X(t) X(t)是时间 t t t的函数:

X ( t ) = g c w ( t ) X 0 {\rm X}(t)=g_{cw}(t){\rm X}_0 X(t)=gcw(t)X0

  然后,点p相对于(瞬时)相机坐标系的速度为:

X ˙ ( t ) = g ˙ c w ( t ) X 0 \dot{\rm X}(t)=\dot{g}_{cw}(t){\rm X}_0 X˙(t)=g˙cw(t)X0

  按照在移动坐标系中的量表示为 X ˙ ( t ) \dot{\rm X}(t) X˙(t),我们用 X 0 = g c w − 1 ( t ) X 0 {\rm X}_0=g^{-1}_{cw}(t){\rm X}_0 X0=gcw1(t)X0代替并使用运动旋量的概念:

V ^ c w c ( t ) = g ˙ c w ( t ) g c w − 1 ( t ) ∈ s e ( 3 ) \widehat{V}_{cw}^c(t)=\dot{g}_{cw}(t)g^{-1}_{cw}(t)\in \mathfrak{se}(3) V cwc(t)=g˙cw(t)gcw1(t)se(3)

  在前面我们已经了解到 g ˙ ( t ) g − 1 ( t ) \dot{g}(t)g^{-1}(t) g˙(t)g1(t)是下式的等式:

g ˙ ( t ) g − 1 ( t ) = [ R ˙ ( t ) R T ( t ) T ˙ ( t ) − R ˙ ( t ) R T ( t ) T ( t ) 0 0 ] \dot{g}(t)g^{-1}(t)=\begin{bmatrix}\dot{R}(t)R^T(t)&amp;\dot{T}(t)-\dot{R}(t)R^T(t)T(t)\\0&amp;0\end{bmatrix} g˙(t)g1(t)=[R˙(t)RT(t)0T˙(t)R˙(t)RT(t)T(t)0]

  所以对于 V ^ c w c ( t ) = g ˙ c w ( t ) g c w − 1 ( t ) \widehat{V}_{cw}^c(t)=\dot{g}_{cw}(t)g^{-1}_{cw}(t) V cwc(t)=g˙cw(t)gcw1(t)可以改写为:

X ˙ ( t ) = V ^ c w c X ( t ) \dot{\rm X}(t)=\widehat{V}_{cw}^c{\rm X}(t) X˙(t)=V cwcX(t)

  由于 V ^ c w c \widehat{V}_{cw}^c V cwc是如下的形式:

V ^ c w c = [ ω ^ ( t ) v ( t ) 0 0 ] \widehat{V}_{cw}^c=\begin{bmatrix}\hat{\omega}(t)&amp;v(t)\\0&amp;0\end{bmatrix} V cwc=[ω^(t)0v(t)0]

  我们也可以用3D坐标(而不是齐次坐标)写出点的速度:

X ˙ ( t ) = ω ^ ( t ) X ( t ) + v ( t ) \dot{\rm X}(t)=\hat{\omega}(t){\rm X}(t)+v(t) X˙(t)=ω^(t)X(t)+v(t)

  符号 V ^ c w c \widehat{V}_{cw}^c V cwc的物理解释是世界坐标系相对于相机坐标系移动的速度,如相机坐标系中 V ^ c w c \widehat{V}_{cw}^c V cwc所示的下标和上标表示。 通常,为了清楚地指定速度的物理意义,我们需要指定:它是哪个坐标系相对移动到哪一个坐标系的速度,以及它在哪个坐标系中被观察。

  如果我们改变观察速度的位置,表达式将相应地改变。 例如,假设观察者处于通过刚体变换 g ∈ S E ( 3 ) g\in SE(3) gSE(3)相对于相机坐标系移位的另一坐标系中。 然后,相对于该坐标系的相同点 p p p的坐标是 Y ( t ) = g X ( t ) Y(t)=g{\rm X}(t) Y(t)=gX(t)。 计算我们所在的新坐标系中的速度:

Y ˙ ( t ) = g g ˙ c w ( t ) g c w − 1 ( t ) g − 1 Y ( t ) = g V ^ c w c g − 1 Y ( t ) \dot{\rm Y}(t)=g\dot{g}_{cw}(t)g_{cw}^{-1}(t)g^{-1}{\rm Y}(t)=g\widehat{V}_{cw}^cg^{-1}{\rm Y}(t) Y˙(t)=gg˙cw(t)gcw1(t)g1Y(t)=gV cwcg1Y(t)

  所以新的速度(或运动旋量)是:

V ^ = g V ^ c w c g − 1 \widehat{V}=g\widehat{V}_{cw}^cg^{-1} V =gV cwcg1

  这是简单相同的物理量,但从不同的有利位置观察。我们看到两个速度通过相对运动 g g g定义的映射相关,特别是:

a d g : s e ( 3 ) → s e ( 3 ) ξ ^ ↦ g ξ ^ g − 1 \begin{array}{rcr}{\rm ad}_g:\mathfrak{se}(3) &amp; \rightarrow &amp;\mathfrak{se}(3) \\ \widehat{\xi}&amp; \mapsto &amp;g\widehat{\xi}g^{-1}\end{array} adg:se(3)ξ se(3)gξ g1

  这是空间 s e ( 3 ) \mathfrak{se}(3) se(3)上的所谓伴随映射。 在前面的例子中使用这种表示法我们有 V ^ = a d g ( V ^ c w c ) \widehat{V}={\rm ad}_g(\widehat{V}_{cw}^c) V =adg(V cwc)。 显然,伴随映射将速度从一个坐标系转换为另一坐标系。 使用 g c w ( t ) g w c ( t ) = I g_{cw}(t)g_{wc}(t)=I gcw(t)gwc(t)=I的事实,可以直接验证:

V ^ c w c = g ˙ c w g c w − 1 = − g c w − 1 g ˙ w c = − g c w ( g ˙ w c g w c − 1 ) g c w − 1 = a d g c w ( − V ^ w c w ) \widehat{V}_{cw}^c=\dot{g}_{cw}g^{-1}_{cw}=-g^{-1}_{cw}\dot{g}_{wc}=-g_{cw}(\dot{g}_{wc}g^{-1}_{wc})g_{cw}^{-1}={\rm ad}_{g_{cw}}(-\widehat{V}_{wc}^w) V cwc=g˙cwgcw1=gcw1g˙wc=gcw(g˙wcgwc1)gcw1=adgcw(V wcw)

  因此,在(瞬时)相机坐标系中观察, V ^ c w c \widehat{V}_{cw}^c V cwc也可以被解释为相对于世界坐标系移动的相机的负速度(negated velocity)。

总结

   g ∈ S E ( 3 ) g \in SE(3) gSE(3)的两个最常用的元素表示是:

  • 齐次表示:

g ˉ = [ R T 0 1 ] , R ∈ S O ( 3 ) , T ∈ R 3 \bar{g}=\begin{bmatrix}R&amp;T\\0&amp;1\end{bmatrix},R\in SO(3),T\in \mathbb{R}^3 gˉ=[R0T1],RSO(3),TR3

  • 运动旋量表达:

    g ( t ) = e ξ ^ t , ξ ^ = ( v , ω ) ∈ R 6 , t ∈ R g(t)=e^{\hat{\xi}t},\hat{\xi}=(v,\omega)\in \mathbb{R}^6,t\in \mathbb{R} g(t)=eξ^t,ξ^=(v,ω)R6,tR

  在瞬时情况下,点相对于(瞬时)相机坐标系的速度为:

X ˙ ( t ) = V ^ c w c X ( t ) , V ^ c w c = g ˙ c w g c w − 1 \dot{\rm X}(t)=\widehat{V}_{cw}^c{\rm X}(t),\widehat{V}_{cw}^c=\dot{g}_{cw}g^{-1}_{cw} X˙(t)=V cwcX(t)V cwc=g˙cwgcw1

   g c w ( t ) g_{cw}(t) gcw(t)是相机相对于世界坐标系的配置。 使用实际的3D坐标,3D点的速度产生熟悉的关系:

X ˙ ( t ) = ω ^ ( t ) X ( t ) + v ( t ) \dot{\rm X}(t)=\hat{\omega}(t){\rm X}(t)+v(t) X˙(t)=ω^(t)X(t)+v(t)

旋转 S O ( 3 ) SO(3) SO(3)刚体运动 S E ( 3 ) SE(3) SE(3)
矩阵表示 R ∈ G L ( 3 ) R\in GL(3) RGL(3)
R T R = I R^TR=I RTR=I
det ⁡ ( R ) = 1 \det(R)=1 det(R)=1
g = ( R T 0 1 ) g=\begin{pmatrix}R&amp;T\\0&amp;1\end{pmatrix} g=(R0T1)
三维坐标 x = R x 0 x=Rx_0 x=Rx0 x = R x 0 + T x=Rx_0+T x=Rx0+T
R − 1 = R T R^{-1}=R^T R1=RT g − 1 = ( R T − R T T 0 1 ) g^{-1}=\begin{pmatrix}R^T&amp;-R^TT\\0&amp;1\end{pmatrix} g1=(RT0RTT1)
指数表示 R = exp ⁡ ( w ^ ) R=\exp(\hat{w}) R=exp(w^) g = exp ⁡ ( ξ ^ ) g=\exp(\hat{\xi}) g=exp(ξ^)
速度 x ˙ = w ^ x \dot{x}=\hat{w}x x˙=w^x x ˙ = w ^ x + v \dot{x}=\hat{w}x+v x˙=w^x+v
伴随映射 w ^ ↦ R w ^ R T \hat{w}\mapsto R\hat{w}R^T w^Rw^RT ξ ^ ↦ g ξ ^ g − 1 \hat{\xi}\mapsto g\hat{\xi}g^{-1} ξ^gξ^g1
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐