三维旋转&坐标系变换

旋转三维向量


图中u为单位向量,表示转轴。将xu逆时针旋转角度ϕ得到x。可将x分解为沿转轴的分量x和垂直转轴的分量xx在转动时不变,x在平面上旋转角度ϕ得到x,可得

(1)x=x+xcosϕ+(u×x)sinϕ


u×x=[u]×x

其中
[u]×[0u3u2u30u1u2u10]

为反对称矩阵。

那么式(1)可写成:

x=uuTx+(xuuTx)cosϕ+[u]×xsinϕ=((1cosϕ)uu+cosϕI+sinϕ[u]×)x

因此旋转作用可用一个矩阵表示。

旋转群

旋转是线性变换,将v变为r(v)。其保持:

  1. 向量长度
  2. 两向量的内积
  3. 相对方向 u×v=wr(u)×r(v)=r(w)

1和2是等价的。1推2可由r(uv)=uv得到,2推1可由r(u)r(u)=uu得到。

因此可定义旋转群:

SO(3):{R3R3v,wR3,r(v)=v,r(v)×r(w)=r(v×w)}

旋转矩阵

算符r是线性的,可用矩阵R表示,

r(v)=Rv

Rv=v,即
(Rv)(Rv)=vRRv=vv

可得:
RR=I

即旋转矩阵是正交矩阵。

由旋转性质3,对于向量u,v,w组成的六面体,旋转前后的有向体积应该相等,即

|RuRvRw|=det(R)|uvw|=|uvw|

det(R)=1

这就构成了SO(3)群(Special Orthogonal group),其中的special就是指det(R)=1

欧拉定理

是说存在向量u,使得旋转前后不变:

Ru=u

u就是转轴方向。

证明:
只要证明R有为1的特征值即可。

det(RI)=det((RI)T)=det(RTI)=det(R1R1R)=det(R1(IR))=det(R1)det((RI))=det(RI)det(RI)=0.

指数映射

ddt(RTR)=R˙TR+RTR˙=0

得:

RTR˙=(RTR˙)T

RTR˙是反对称矩阵。三维的反对称矩阵集合用so(3)表示,称为SO(3)的李代数。

那么有

RTR˙=[ω]×

得到:
R˙=R[ω]×

R=I时,R˙=[ω]×,即李代数是在幺元处的切空间。

如果ω为常数,上述方程解得

R(t)=R(0)e[ω]×t

其中矩阵的指数按泰勒级数定义。

这称为指数映射:

exp:so(3)SO(3);[ϕ]×exp([ϕ]×)=e[ϕ]×

还可以定义"大写的"指数映射:
Exp:R3SO(3);ϕExp(ϕ)=e[ϕ]×

如果绕转轴u转了角度ϕ,那么旋转矩阵:
R=eϕ[u]×

上式按泰勒展开后得:
R=I+sinϕ[u]×+(1cosϕ)[u]×2

这就是Rodrigues旋转公式。推导过程用到了
[a]×2=aaaaI

根据这个式子,又可写成:
(2)R=cosϕI+sinϕ[u]×+(1cosϕ)uu

这就是式(1)

R得到ϕu

(2)可得:

tr(R)=2cosϕ+1

即:
ϕ=arccos(tr(R)12)

又有

RRT=2sinϕ[u]×

因此
u=(RRT)2sinϕ

其中[]×的逆,即([v×])=v.

如果sinϕ=0,分两种情况:

  1. cosϕ=1,这时候R=I,转轴未定义
  2. cosϕ=1,这时R+I=2uuT,这个矩阵的每一列都平行于u,只要对非0的一列归一化即可。这时候u也满足条件,但是不影响,因为绕±u转180度效果是一样的。

四元数

四元数.md

旋转公式为:

(3)x=qxq

旋转要求
x=x=q2x

因此q2=1,即q是单位四元数:
qq=1=qq

这与RTR=I=RRT的条件类似。

还可以看到,自动保持了相对方向:

r(v)×r(w)=(qvq)×(qwq)=12((qvq)(qwq)(qwq)(qvq))=12(qvwqqwvq)=12(q(vwwv)q)=q(v×w)q=r(v×w)

其中第2和第5个等号是因为:

pvqvqvpv=2pv×qv

指数映射

d(qq)dt=q˙q+qq˙=0

得:

qq˙=(q˙q)=(qq˙)

qq˙是虚四元数。令:
qq˙=Ω

两边左乘q,得到:
q˙=qΩ

q=1时,q˙=Ω,可见虚四元数构成了单位四元数球S3的切空间。

如果Ω为常数,上式解得q(t)=q(0)eΩt(可代回验证),这就引出了指数映射。

如果绕转轴u转了角度ϕ,定义“大写的”指数映射:

(4)qExp(ϕu)=eϕu/2=cosϕ2+usinϕ2

旋转作用

将式(4)代入式(3), 推导可得式(1),这就验证了(3)的正确性。

在证明中有一步uxu=x(uTu)2u(uTx)用到了(a×b)×c=a(cb)+b(ca)

四元数到旋转矩阵的转换


qxq=[q]R[q]L[0x]=[0Rx]

可以得到:
R=(qw2qvqv)I+2qvqv+2qw[qv]×

旋转合成

假设旋转2作用于旋转1之后。

对于旋转矩阵,

R2(R1x)=(R2R1)x

对于四元数,
q2(q1xq1)q2=(q2q1)x(q2q1)

因此,后旋转的都是乘在左边。


坐标系变换

方向余弦矩阵(DCM)

用G表示global,或者n系;L表示local,或者b系。

rG,rL分别为向量r在坐标系GL中的坐标,由

r=(iGjGkG)rG=(iLjLkL)rL

得:

rG=(iGjGkG)(iLjLkL)rLRGLrL

表示从LG的坐标变换。

RGL的定义还可得基变换:

(iLjLkL)=(iGjGkG)RGL

对于一个与L系固连的向量r,经过主动旋转R,得到r,那么:

rG=RrG

rL=rG,因此
rG=RrL

而按定义:
rG=RGLrL

因此坐标变换矩阵与主动旋转矩阵R的关系是:
RGL=R

欧拉角

intrinsic rotation是指绕当前坐标系(而不是某个固定坐标系)的轴转动。

G绕某轴逆时针旋转θ,得到L。对于RLG,根据定义得出如下结果1

X轴旋转

Rx=[1000cθsθ0sθcθ]

Y轴旋转
Ry=[cθ0sθ010sθ0cθ]

Z轴旋转
Rz=[cθsθ0sθcθ0001]

如果按ZYX的顺序转动,
RLG=RxRyRz=[cyczcyszsysxsyczcxszsxsysz+cxczsxcycxsycz+sxszcxsyszsxczcxcy]

可得欧拉角和DCM的转换关系:
tan(θz)=R12R11sin(θy)=R13tan(θx)=R23R33

若是小角度转动,
(5)R=[1θzθyθz1θxθyθx1]=I[θ]×

可见小角度转动与转动顺序无关(即只与绕XYZ各轴转过的角度有关。如果只有俩轴,比如Z->X->Z,那么未出现的轴角度为0,出现两次的轴的角度相加),等效于一次转动:角度为θ=θx2+θy2+θz2,转轴为1θ(θxθyθz),也可以从Rodrigues旋转公式做小角近似看出来:
RLG=RTIϕ[u]×

Extrinsic rotation

设固定坐标系为A。坐标系BAu轴转动角度ϕ,这个转动用Rϕu表示,得坐标系C。求RCA

首先

RCA=RBD

其中DAu轴转动角度ϕ得到。这个结论对于二维转动很直观,对于三维其实也容易看出。按定义,只要证明两对坐标系的基的内积相等即可。把基分解到平行于转轴和垂直于转轴。平行部分的内积显然不变,垂直部分由二维情况可知也不变,且平行于垂直部分内积为0。因此得证。
RBD=RBARAD=RBARDA1=RBARϕu1=RBARϕu

因此得到结论,绕固定坐标系的轴转动,R是乘在右边的。

四元数

和DCM类比有

(6)xG=qGLxLqGL

其中qGL等于主动旋转q

运动方程

推导的要点是从当前L系做扰动得到新的L系,而陀螺仪的测量值刚好是在角速度在L系的值。

四元数

(6)可得,qGL2=qGL1qL1L2,即扰动是乘在右边的(L表示local):

q(t+Δt)=q(t)ΔqL=q(t)Exp(ΔϕL)

q˙limΔt0q(t+Δt)q(t)Δt=limΔt0qΔqqΔt=limΔt0q([cosΔϕ2usinΔϕ2][10])Δt=limΔt0q([1Δϕ/2][10])Δt()=limΔt0q[0Δϕ/2]Δt=12qωL

方向余弦矩阵

(5)得:

RL2L1=I[θ]×

因此
RL1L2=RL2L1T=I+[θ]×

RGL2=RGL1RL1L2,推导可得:
R˙GL=RGL[ωL]×

参考资料

Quaternion kinematics for the error-state Kalman filter


  1. sθ放置位置记忆方法:放在转动轴的上一列(循环)。
posted @ 2020-11-25 22:02  demoZ  阅读(1797)  评论(0编辑  收藏  举报