任何旋转,都可以用一个旋转轴ω^和一个旋转角θ来描述。
1. 坐标系的线速度和角速度

如上图,在旋转的刚体上,附加一个body frame{b},记为{x^,y^,z^}。对于三个轴而言,绕着ω^旋转的轨迹为圆。当然,上述坐标轴{x^,y^,z^}和ω^是在fixed frame{S}坐标系下的,下面将ω^记为ω^s,
绕着轴ω^的角速度为,
ws=w^θ˙(1)
运动的线速度记为x^˙,三个轴的线速度则为,
x^˙y^˙z^˙=ws×x^=ws×y^=ws×z^(2)
将三个轴的线速度统一写为,
R˙=[ws×x^ws×y^ws×z^]=ws×R(3)
为了简化公式(3)中的叉乘,特引入了[]符号,将w×R可以记为矩阵的乘法[w]R,其中[w]的定义如下:
对于R3中的向量x=[x1x2x3],定义[x]为一个反对称矩阵,
[x]=⎣⎡0x3−x2−x30x1x2−x10⎦⎤(4)
[x]=−[x]T(5)
上述所有3×3的反对称矩阵统称为so(3),小的。前面说过,旋转矩阵属于SO(3),大的。下面有一个两者结合起来有趣的性质,假定riT为R的第i行,即ri是RT的第i列,则
R[w]RT=R[ws×r1ws×r2ws×r3]=⎣⎡r1T(ws×r1)r2T(ws×r1)r3T(ws×r1)r1T(ws×r2)r2T(ws×r2)r3T(ws×r2)r1T(ws×r3)r2T(ws×r3)r3T(ws×r3)⎦⎤=⎣⎡0r3Tws−r2Tws−r3Tws0r1Twsr2Tws−r1Tws0⎦⎤=[Rws](6)
对于(6)中矩阵中的r1T(ws×r2),是三个向量r1,ws,r2的混合积,也就是三个向量组成的六面体的体积,而我们知道矩阵的行列式的值的物理意义就是体积。根据下面的混合积的图,很容易得到矩阵中对应元素的反对称的关系。

下面我们将三个轴的线速度表示为[w]的写法,
R˙=[ws]R(7)
[ws]=R˙R−1(8)
前面我们提到的所有的向量和R都是在fixed frame{S}下描述的,下面我们将ws在body frame{b}下进行描述,易得,
ws=Rsbwb(9)
则旋转轴在body frame{b}下,
wb=Rsb−1ws=R−1ws=RTws(10)
因此可以得到,
[wb]=[RTws]=RT[ws]R=RT(R˙RT)R=RTR˙=R−1R˙(11)
需要注意的是wb是在body frame{b}下的描述,所以它描述的角速度不是一个旋转的坐标系的角速度(例如{b}相对于{S}旋转),而是在某一瞬时,wb相对于body frame{b}的旋转。
2. 微分方程的解
给定下面一个简单的线性微分方程,其中x(t)∈R,a∈R,初始状态x(t)=x(0),
x˙(t)=ax(t)(12)
易得上述的解为,
x(t)=eatx(0)(13)
对eat在0附近进行泰勒展开,可得,
eat=1+at+2!(at)2+3!(at)3+⋯(14)
同理,当a为矩阵A时,x(t)为列向量,
x˙(t)=Ax(t)(15)
可得解为,
x(t)=eAtx(0)(16)
其中,
eAt=1+At+2!(At)2+3!(At)3+⋯(17)
3. 指数形式的旋转
任何旋转,都可以用一个旋转轴ω^和一个旋转角θ来描述。其中ω^∈R3,∥ω^∥=1,θ∈R3。
下面我们来分析如何利用一根旋转轴和旋转角来描述旋转,

假设向量p(t)从p(0)绕着ω^以恒定的角速度1rad/s旋转了θ秒,最终到p(θ),定义p(t)间断的线速度为,
p˙=ω^×p(18)
由前面的分析,引入[ω^],则
p˙=[ω^]p(19)
该微分方程如前面介绍为,
p(t)=e[ω^]tp(0)(20)
则,
p(θ)=e[ω^]θp(0)(21)
容易得到[ω^]两个计算性质,如下,
[ω^][ω^]=ω^ω^T−I(22)
[ω^][ω^][ω^]=[ω^]3=−[ω^](23)
所以公式21可以化简为,
e[ω^]θ=I+[ω^]θ+[ω^]22!θ2+[ω^]33!θ3+⋯=I+(θ−3!θ3+5!θ5−⋯)[ω^]+(2!θ2−4!θ4+6!θ6−⋯)[ω^]2=I+sin(θ)[ω^]+(1−cos(θ))[ω^]2(24)
上式就是著名的罗德里格斯公式,即指数形式的旋转,
Rot(ω^,θ)=e[ω^]θ=I+sinθ[ω^]+(1−cosθ)[ω^]2∈SO(3)(25)
经过指数映射,将so(3)和旋转的角度θ通过指数映射为SO(3),即三维的旋转矩阵。
在前面文章中介绍过,旋转矩阵左乘和右乘的区别,这里也是类似的,假设body frame{b}在fixed frame{S}中的描述为Rsb,则Rot(ω^,θ)Rsb,左乘,表示将Rsb顺着{S}中的ω^旋转θ。而RsbRot(ω^,θ),右乘,表示将Rsb顺着{b}中的ω^旋转θ。
4. 旋转矩阵的对数
上面描述的是从ω^θ到旋转矩阵R的过程,下面介绍从旋转矩阵R求ω^θ的过程,也就是求得旋转向量和具体的旋转角度,求R矩阵的“对数”。可以将两个对应的过程描述成下面的形式,
exp:log:[ω^]θ∈so(3)R∈SO(3)→→R∈SO(3)[ω^]θ∈so(3)
下面将公式(25)展开,如下,
⎣⎡cθ+ω^12(1−cθ)ω^1ω^2(1−cθ)+ω^3Sθω^1ω^3(1−cθ)−ω^2Sθω^1ω^2(1−cθ)−ω^3sθcθ+ω^22(1−cθ)ω^2ω^3(1−cθ)+ω^1sθω^1ω^3(1−cθ)+ω^2sθω^2ω^3(1−cθ)−ω^1sθcθ+ω^32(1−cθ)⎦⎤(26)
其中,ω^=⎣⎡w1^w2^w3^⎦⎤,cθ=cos(θ),sθ=sin(θ)。
记旋转矩阵R为rij,则可以得到,
r32−r23r13−r31r21−r12=2ω^1sin(θ)=2ω^2sin(θ)=2ω^3sin(θ)(27)
上式在sin(θ)=0的情况下,可以得到,
ω^1=2sin(θ)1(r32−r23)ω^2=2sin(θ)1(r13−r31)ω^3=2sin(θ)1(r21−r12)(28)
上式也可以写成,
[ω^]=⎣⎡0ω^3−ω^2−ω^30ω^1ω^2−ω^10⎦⎤=2sinθ1(R−RT)(29)
此外,由式(26)可以得到另外一个计算θ的公式,
trR=r11+r22+r33=1+2cosθ(30)
至此,sin(θ)=0的情况下,利用旋转矩阵R,我们计算出了ω^和θ。接下来讨论sin(θ)=0的情况:
- 当θ=kπ,且k是偶数的情况下,此时相当于没有旋转,回到了原位置,R=I;
- 当θ=kπ,且k是奇数的情况下,此时有,
R=e[ω^]π=I+2[ω^]2(31)
因为式(31)三个矩阵都是对角矩阵,所以可以得到下面的结果(利用R对角元素)
ω^i=±2rii+1,i=1,2,3(32)
利用R非对角元素,可得,
2ω^1ω^22ω^2ω^32ω^1ω^3=r12=r23=r13(33)
利用式(32)和式(33)我们就能计算出ω^,同时此时旋转的角为θ=±π,±3π,…。
从上面的计算过程很容易看出来,旋转角度是以2π为周期,其实也是符合物理意义的,旋转π和旋转3π的效果是一样的,因此我们可以将旋转的角度限定在[−π,π]。此时计算的ω^θ的长度是≤π的。因此我们可以把SO(3)想象为一个半径为π的实心球,如下图所示,

当给定球中的一点r∈R3,我们可以将ω^=∥r∥r作为单位长度的旋转轴,∥r∥作为θ。和r相对应的旋转矩阵R可以被看作是绕着ω^旋转了θ角。对于R∈SO(3),同时trR=−1,此时在实心球中总能找到一个唯一的r,使得e[r]=R。当trR=−1时,此时∥r∥=π,在实心球的表面有一对正好相反的一对点,两者的效果是一样的,r和−r都对应了同一个R。