文章翻译—基于误差状态卡尔曼滤波器的四元数运动学—第2章

2. 旋转和互相关

2.1 3D向量旋转公式

在这里插入图片描述
图 1 : 向 量 x 绕 轴 u 旋 转 ϕ 角 度 。 详 情 见 文 本 。 图1:向量\mathbf{x}绕轴\mathbf{u}旋转\phi角度。详情见文本。 1xuϕ



我们在图1中说明了遵循右手法则,一般的3D向量 x \mathbf{x} x绕定义的单位矢量 u \mathbf{u} u旋转角度 ϕ \phi ϕ。通过将向量 x \mathbf{x} x分解成与 u \mathbf{u} u平行的部分 x ∣ ∣ \mathbf{x}_{||} x和正交的部分 x ⊥ \mathbf{x}_\bot x,即
x = x ∣ ∣ + x ⊥   . \mathbf{x = x_{||} + x_{\bot}}~. x=x+x .

这些部分可以被容易地计算出来( α \alpha α是向量 x \mathbf{x} x和轴 u \mathbf{u} u之间的夹角),
x ∣ ∣ = u ( ∣ ∣ x ∣ ∣ cos ⁡ α ) = u u ⊤ x x ⊥ = x − x ∣ ∣ = x − u u ⊤ x   . \mathbf{x}_{||} = \mathbf{u}(||\mathbf{x}||\cos \alpha) = \mathbf{uu}^\top \mathbf{x} \\ \mathbf{x}_\bot = \mathbf{x} - \mathbf{x}_{||} = \mathbf{x} - \mathbf{uu}^\top \mathbf{x}~. x=u(xcosα)=uuxx=xx=xuux .

【 注, ∣ ∣ x ∣ ∣ cos ⁡ α = ∣ ∣ u ∣ ∣ ⋅ ∣ ∣ x ∣ ∣ cos ⁡ α = u ⋅ x = u ⊤ x ||\mathbf{x}||\cos \alpha = ||\mathbf{u}|| \cdot ||\mathbf{x}||\cos \alpha = \mathbf{u \cdot x} = \mathbf{u}^\top \mathbf{x} xcosα=uxcosα=ux=ux

在旋转时,平行部分不旋转,
x ∣ ∣ ′ = x ∣ ∣   , \mathbf{x}'_{||} = \mathbf{x}_{||}~, x=x ,

而正交部分在垂直于 u \mathbf{u} u的平面中经过平面旋转。即,如果我们创建一个该平面的正交基 { e 1 , e 2 } \{\mathbf{e}_1, \mathbf{e}_2\} { e1,e2}
e 1 = x ⊥ e 2 = u × x ⊥ = u × x   , \mathbf{e}_1 = \mathbf{x}_\bot \\ \mathbf{e}_2 = \mathbf{u \times x}_\bot = \mathbf{u \times x}~, e1=xe2=u×x=u×x ,

【注,这里 e 1 \mathbf{e}_1 e1 e 2 \mathbf{e}_2 e2应该不是单位的; ∣ ∣ e 2 ∣ ∣ = ∣ ∣ u × x ∣ ∣ = ∣ ∣ u ∣ ∣ ⋅ ∣ ∣ x ⊥ ∣ ∣ ⋅ sin ⁡ ( π / 2 ) = ∣ ∣ x ⊥ ∣ ∣ = ∣ ∣ e 1 ∣ ∣ ||\mathbf{e}_2|| = ||\mathbf{u \times x}|| = ||\mathbf{u}||\cdot ||\mathbf{x}_\bot||\cdot \sin(\pi/2) = ||\mathbf{x}_\bot|| = ||\mathbf{e}_1|| e2=u×x=uxsin(π/2)=x=e1,向量 u \mathbf{u} u x ⊥ \mathbf{x}_\bot x垂直,夹角为 π / 2 \pi/2 π/2

满足 ∣ ∣ e 1 ∣ ∣ = ∣ ∣ e 2 ∣ ∣ ||\mathbf{e}_1|| = ||\mathbf{e}_2|| e1=e2,那么 x ⊥ = e 1 ⋅ 1 + e 2 ⋅ 0 \mathbf{x}_\bot = \mathbf{e}_1 \cdot 1 + \mathbf{e}_2 \cdot 0 x=e11+e20 。对于一个在该平面的 ϕ \phi ϕ弧度的旋转有,
x ⊥ ′ = e 1 cos ⁡ ϕ + e 2 sin ⁡ ϕ   , \mathbf{x}'_\bot = \mathbf{e}_1 \cos\phi + \mathbf{e}_2 \sin\phi~, x=e1cosϕ+e2sinϕ ,

进一步的,
x ⊥ ′ = x ⊥ cos ⁡ ϕ + ( u × x ) sin ⁡ ϕ   . \mathbf{x}'_\bot = \mathbf{x}_\bot \cos\phi + (\mathbf{u \times x}) \sin\phi~. x=xcosϕ+(u×x)sinϕ .

加上平行部分可得出旋转矢量的表达式, x ′ = x ∣ ∣ ′ + x ⊥ ′ \mathbf{x}' = \mathbf{x}'_{||} + \mathbf{x}'_\bot x=x+x,这就是所谓的vector rotation formula(向量旋转公式)
x ′ = x ∣ ∣ + x ⊥ cos ⁡ ϕ + ( u × x ) sin ⁡ ϕ   . (54) {\color{red} \mathbf{x}' = \mathbf{x}_{||} + \mathbf{x}_\bot \cos\phi + (\mathbf{u \times x})\sin\phi}~.\tag{54} x=x+xcosϕ+(u×x)sinϕ .(54)

2.2 旋转群 S O ( 3 ) SO(3) SO(3)

R 3 \mathbb{R}^3 R3中,旋转群 S O ( 3 ) SO(3) SO(3)是在复合作用下绕原点旋转的群。旋转是保持向量长度和相对向量方向(即旋向性)的线性变换。它在机器人学中的重要性在于表达刚体在3D空间中的旋转:一个rigid motion(刚体运动) 精确地要求刚体在运动时必须保持距离,角度和相对方向。否则,如果不能保持模长,角度或相对方向,则不能认为物体是刚性的。
    然后让我们通过满足如下属性的操作来定义旋转。可以根据欧几里得空间的度量,来定义一个作用在向量 v ∈ R 3 \mathbf{v} \in \mathbb{R}^3 vR3上的旋转操作 r   : R 3 → R 3 ;   v ↦ r ( v ) r~: \mathbb{R}^3 \to \mathbb{R}^3;~\mathbf{v} \mapsto r(\mathbf{v}) r :R3R3; vr(v) ,由如下的点乘和叉乘组成。

  • 旋转保持向量的范数,
    ∣ ∣ r ( v ) ∣ ∣ = ⟨ r ( v ) , r ( v ) ⟩ = ⟨ v , v ⟩ ≜ ∣ ∣ v ∣ ∣   ,     ∀ v ∈ R 3   . (55a) ||r(\mathbf{v})|| = \sqrt{\langle r(\mathbf{v}), r(\mathbf{v}) \rangle} = \sqrt{\langle \mathbf{v, v} \rangle} \triangleq ||\mathbf{v}||~, ~~~\forall \mathbf{v} \in \mathbb{R}^3~.\tag{55a} r(v)=r(v),r(v) =v,v v ,   vR3 .(55a)

  • 旋转保持向量间的角度,
    ⟨ r ( v ) , r ( w ) ⟩ = ⟨ v , w ⟩ = ∣ ∣ v ∣ ∣ ∣ ∣ w ∣ ∣ cos ⁡ α   ,     ∀ v ,   w ∈ R 3   . (55b) \langle r(\mathbf{v}), r(\mathbf{w}) \rangle = \langle \mathbf{v, w} \rangle = ||\mathbf{v}||||\mathbf{w}||\cos\alpha~, ~~~\forall \mathbf{v,~w} \in \mathbb{R}^3~.\tag{55b} r(v),r(w)=v,w=vwcosα ,   v, wR3 .(55b)

  • 旋转保持向量的相对旋转,
    u × v = w ⟺ r ( u ) × r ( v ) = r ( w )   . (56) \mathbf{u \times v = w} \Longleftrightarrow r(\mathbf{u}) \times r(\mathbf{v}) = r(\mathbf{w})~.\tag{56} u×v=wr(u)×r(v)=r(w) .(56)

很容易证明,前面2个条件恒成立。因此我们可以定义如下旋转群 S O ( 3 ) SO(3) SO(3)
S O ( 3 )   :   { r   : R 3 → R 3   /    ∀ v ,   w ∈ R 3 ,    ∣ ∣ r ( v ) ∣ ∣ = ∣ ∣ v ∣ ∣ ,    r ( v ) × r ( w ) = r ( v × w ) }   . (57) SO(3)~:~\{r~: \mathbb{R}^3 \to \mathbb{R}^3 ~/ ~~\forall \mathbf{v,~w} \in \mathbb{R}^3,~~||r(\mathbf{v})||=||\mathbf{v}||,~~r(\mathbf{v}) \times r(\mathbf{w}) = r(\mathbf{v \times w} ) \}~.\tag{57} SO(3) : { r :R3R3 /  v, wR3,  r(v)=v,  r(v)×r(w)=r(v×w)} .(57)

    旋转群通常由一组旋转矩阵表示。但是,四元数也组成了旋转群的一个很好表达。本节的旨在表明这两种表达同样有效。正如读者在表1中看到的那样,它们在概念上和代数上展现了很多的相似性。可能,最重要的不同是,单位四元数群组成了 S O ( 3 ) SO(3) SO(3)(因此,从技术上讲 S O ( 3 ) SO(3) SO(3)本身并不是这样的)的双覆盖,有时这在我们的大多数应用中并不重要【5】。该表是为了快速比较和评估而预先插入的。 S O ( 3 ) SO(3) SO(3)的旋转矩阵和四元数的表达将在下一节进行探究。

    【注5,当在旋转空间进行插值时,需要考虑双覆盖的效果。这如如2.7节那样很容易。】

表1:用于表达SO(3)的旋转矩阵和四元数

SO(3)

2.3 旋转群和旋转矩阵

操作 r ( ) r() r()是线性的,因为它是从在标量和向量的乘积中定义的。因此它可以通过矩阵 R ∈ R 3 × 3 \mathbf{R} \in \mathbb{R}^{3 \times 3} RR3×3来表达,它通过矩阵乘法产生对向量 v ∈ R 3 \mathbf{v} \in \mathbb{R}^3 vR3的旋转,
r ( v ) = R v   . (58) r(\mathbb{v}) = \mathbf{Rv}~. \tag{58} r(v)=Rv .(58)

将其插入到式(55a)中,使用点乘 ⟨ a , b ⟩ = a ⊤ b \mathbf{\langle a, b\rangle=a^\top b} a,b=ab,并将其应用到所有的 v \mathbf{v} v
( R v ) ⊤ R v = v ⊤ R ⊤ R v = v ⊤ v   , (59) (\mathbf{Rv})^\top \mathbf{Rv} = \mathbf{v^\top R^\top R v} = \mathbf{v}^\top \mathbf{v}~,\tag{59} (Rv)Rv=vRRv=vv ,(59)

得到 R \mathbf{R} Rorthogonality(正交性) 条件,
R ⊤ R = I = R R ⊤   . (60) {\color{red} \mathbf{R^\top R = I = R R^\top}}~. \tag{60} RR=I=RR .(60)
上面的条件确实是正交的条件,因为我们可以从中观察到,用 R = [ r 1 , r 2 , r 3 ] \mathbf{R} = [\mathbf{r}_1, \mathbf{r}_2, \mathbf{r}_3] R=[r1,r2,r3]代替上式, R \mathbf{R} R的列向量 r i ,   i ∈ { 1 , 2 , 3 } \mathbf{r}_i,~i \in \{1,2,3\} ri, i{ 1,2,3}是单位长度且相互正交,
⟨ r i , r i ⟩ = r i ⊤ r i = 1                  ⟨ r i , r j ⟩ = r i ⊤ r j = 0   ,    i ≠ j   . \langle \mathbf{r}_i, \mathbf{r}_i \rangle = \mathbf{r}_i^{\top} \mathbf{r}_i = 1 ~~~~~~~~~~~~~~~~\\ \langle \mathbf{r}_i, \mathbf{r}_j \rangle = \mathbf{r}_i^{\top} \mathbf{r}_j = 0~,~~i \neq j ~. ri,ri=riri=1                ri,rj=rirj=0 ,  i=j .

因此,保持向量模长和角度的一组变换称为Orthogonal group(正交群),用 O ( 3 ) O(3) O(3)表示。该正交群包括旋转(对于刚体运动)和投影(对于非刚体)。这里 group(群) 的概念本质上意味着两个正交矩阵的乘积总是正交的【6】,并且每个正交矩阵都有一个逆矩阵。事实上,正交性条件(60)意味着逆旋转可通过转置的矩阵实现,
R − 1 = R ⊤   . (61) \mathbf{R}^{-1} = \mathbf{R}^\top~.\tag{61} R1=R .(61)

【注6:令 Q 1 \mathbf{Q}_1 Q1 Q 2 \mathbf{Q}_2 Q2正交,并创建 Q = Q 1 Q 2 \mathbf{Q} = \mathbf{Q}_1 \mathbf{Q}_2 Q=Q1Q2。那么 Q ⊤ Q = Q 2 ⊤ Q 1 ⊤ Q 1 Q 2 = Q 2 ⊤ I Q 2 = I \mathbf{Q}^\top \mathbf{Q} = \mathbf{Q}_2^\top \mathbf{Q}_1^\top \mathbf{Q}_1 \mathbf{Q}_2 = \mathbf{Q}_2^\top \mathbf{I} \mathbf{Q}_2 = \mathbf{I} QQ=Q2Q1Q1Q2=Q2IQ2=I。】

    添加相对方向条件(56)可确保刚体运动(因此抛弃投影),从而导致 R \mathbf{R} R上的一个额外的约束【7】,
det ⁡ ( R ) = 1   . (62) {\color{red} \det(\mathbf{R} )= 1}~.\tag{62} det(R)=1 .(62)

单位行列式大于零的正交矩阵通常称为proper(适当,合适)special(特殊)。该特殊正交矩阵的集合是 O ( 3 ) O(3) O(3)的一个子群,即Special Orthogonal group(特殊正交群) S O ( 3 ) SO(3) SO(3)。作为一个群,两个旋转矩阵的乘积总是旋转矩阵【8】。

    【注7,注意,满足 ∣ R ∣ = det ⁡ ( R ) = − 1 |\mathbf{R}| = \det(\mathbf{R}) = -1 R=det(R)=1的映射,不形成一个群,因为 ∣ R 1 R 2 ∣ = 1 ≠ − 1 |\mathbf{R}_1 \mathbf{R}_2| = 1 \neq -1 R1R2=1=1
    【注8,在脚注【6】中,对于 O ( 3 ) O(3) O(3),将 ∣ R 1 ∣ = ∣ R 2 ∣ = 1 |\mathbf{R}_1| = |\mathbf{R}_2| = 1 R1=R2=1将加入 S O ( 3 ) SO(3) SO(3),那么有 ∣ R 1 R 2 ∣ = ∣ R 1 ∣ ∣ R 2 ∣ = 1 |\mathbf{R}_1 \mathbf{R}_2| = |\mathbf{R}_1||\mathbf{R}_2| = 1 R1R2=R1R2=1。】

2.3.1 指数映射

指数映射(以及下一节中提到的对数映射)是一个强大的数学工具,用于在旋转的3D空间中轻松而严谨地工作。它代表了适合旋转空间的无穷微积分的入口。指数映射允许我们合适地定义微分,扰动和速度,并操作它们。因此,在估计旋转或方向空间中的问题时是必不可少。
    旋转构成刚性运动。这种刚性意味着可以在 S O ( 3 ) SO(3) SO(3)中定义一条连续的轨迹或路径 r ( t ) r(t) r(t),以使刚体从其初始方向 r ( 0 ) r(0) r(0)连续旋转到当前方向 r ( t ) r(t) r(t)。由于是连续的,因此研究此类转换的时间导数是合理的。对此,我们通过推导刚刚提到的属性(60)和(62)来实现。
    首先,我们注意到在满足(60)的同时不可能持续地逃避单位行列式条件(62),因为这将意味着行列式从+1跳到-1【9】。因此我们只需要探讨正交条件(60)的时间微分,即
d d t ( R ⊤ R ) = R ˙ ⊤ R + R ⊤ R ˙ = 0   , (63) \frac{d}{dt}(\mathbf{R}^\top \mathbf{R}) = \dot {\mathbf{R}}^\top \mathbf{R} + \mathbf{R}^\top \dot \mathbf{R} = 0~, \tag{63} dtd(RR)=R˙R+RR˙=0 ,(63)

    【注9,换句话说,一个旋转不能通过一个持续的变换来变成一个映射。】

可以推出
R ⊤ R ˙ = − ( R ⊤ R ˙ ) ⊤   , (64) \mathbf{R}^\top \dot \mathbf{R} = -(\mathbf{R}^\top \dot \mathbf{R})^\top~, \tag{64} RR˙=(RR˙) ,(64)

这意味着矩阵 R ⊤ R ˙ \mathbf{R}^\top \dot \mathbf{R} RR˙是反对称的(即等于其转置的负数)。反对称的 3 × 3 3 \times 3 3×3矩阵可以用符号 s o ( 3 ) \mathfrak{so}(3) so(3)表示,名为 S O ( 3 ) SO(3) SO(3)的李代数。反对称 3 × 3 3 \times 3 3×3矩阵有如下形式,
[ ω ] × ≜ [ 0 − ω z ω y ω z 0 − ω x − ω y ω x 0 ]   ; (65) [\boldsymbol{\omega}]_\times \triangleq \left[\begin{matrix}0 & -\omega_z & \omega_y \\ \omega_z & 0 & -\omega_x \\ -\omega_y & \omega_x & 0 \end{matrix}\right]~;\tag{65} [ω]×0ωzωyωz0ωxωyωx0 ;(65)

它们有3个自由度,与我们在(20)中已经引入的叉乘矩阵相对应。这建立了一个一对一的映射 ω ∈ R 3 ↔ [ ω ] × ∈ s o ( 3 ) \boldsymbol{\omega} \in \mathbb{R}^3 \leftrightarrow [\boldsymbol\omega]_\times \in \mathcal{so}(3) ωR3[ω]×so(3)。然后让我们取一个向量 ω = ( ω x , ω y , ω z ) ∈ R 3 \boldsymbol\omega = (\omega_x, \omega_y, \omega_z) \in R^3 ω=(ωx,ωy,ωz)R3,并写成
R ⊤ R ˙ = [ ω ] ×   . (66) \mathbf{R}^\top \dot \mathbf{R} = [\boldsymbol\omega]_\times~.\tag{66} RR˙=[ω]× .(66)

这就得到了常微分方程(ODE),
R ˙ = R [ ω ] ×   . (67) \dot \mathbf{R} = \mathbf{R}[\boldsymbol\omega]_\times~.\tag{67} R˙=R[ω]× .(67)

在单位元附近,我们有 R = I \mathbf{R = I} R=I,然后上述等式可以简化成 R ˙ = [ ω ] ×   \dot \mathbf{R} = [\boldsymbol\omega]_\times~ R˙=[ω]× 。因此,我们可以将李代数 s o ( 3 ) \mathfrak{so}(3) so(3)解释为 r ( t ) r(t) r(t)在原点的微分空间;它构造了 S O ( 3 ) SO(3) SO(3)的正切空间,或者速度空间。基于这些事实,我们可以很好地称 ω \boldsymbol\omega ω为即时的角速度向量。

    如果 ω \boldsymbol\omega ω是常量,上面的差分方程可以变为时间积分的形式
R ( t ) = R ( 0 ) e [ ω ] × t = R ( 0 ) e [ ω t ] × (68) \mathbf{R}(t) = \mathbf{R}(0)e^{[\boldsymbol\omega]_\times t} = \mathbf{R}(0)e^{[\boldsymbol\omega t]_\times} \tag{68} R(t)=R(0)e[ω]×t=R(0)e[ωt]×(68)

其中指数 e [ x ] × e^{[x]_\times} e[x]×由泰勒级数定义,我们将在下一节提到。因为 R ( 0 ) \mathbf{R}(0) R(0) R ( t ) \mathbf{R}(t) R(t)是旋转矩阵,那么很明显 e [ ω t ] × = R ( 0 ) ⊤ R ( t ) e^{[\omega t]_\times} = \mathbf{R}(0)^\top \mathbf{R}(t) e[ωt]×=R(0)R(t)是一个旋转矩阵。定义向量 v ≜ ω Δ t \mathbf{v} \triangleq \boldsymbol\omega \Delta t vωΔt作为编码了时间间隔 Δ t \Delta t Δt内全部旋转的旋转向量,我们有,
R = e [ v ] ×   . (69) {\color{red}\mathbf{R} = e^{[\mathbf{v}]_\times}}~.\tag{69} R=e[v]× .(69)

这就是所谓的指数映射,一个从 s o ( 3 ) \mathfrak{so}(3) so(3) S O ( 3 ) SO(3) SO(3)的应用,
exp ⁡ : s o ( 3 ) → S O ( 3 ) ;    [ v ] × ↦ exp ⁡ ( [ v ] × ) = e [ v ] ×   . (70) \exp: \mathfrak{so}(3) \to SO(3);~~[\mathbf{v}]_\times \mapsto \exp([\mathbf{v}]_\times) = e^{[\mathbf{v}]_\times}~. \tag{70} exp:so(3)SO(3);  [v]×exp([v]×)=e[v]

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值