
旋转矩阵表示形式
由欧拉旋转定理可得:刚体在三位空间里的一般运动可以分解为刚体上某一点的平移,以及绕过该点旋转轴的转动;
只考虑旋转:
三维空间中的点p在坐标系(e1,e2,e3)中的坐标为(a1,a2,a3),当坐标系(e1,e2,e3)旋转到坐标系(e1′,e2′,e3′),点p的坐标为(a1′,a2′,a3′),如式1所示:
[e1,e2,e3]⎣⎡a1a2a3⎦⎤=[e1′,e2′,e3′]⎣⎡a1′a2′a3′⎦⎤(1)
等式两边同乘[e1,e2,e3]T,由于e1,e2,e3为正交向量有:
⎣⎡a1a2a3⎦⎤=⎣⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′⎦⎤⎣⎡a1′a2′a3′⎦⎤≜Ra′(2)
则称 R 为旋转矩阵,其包含以下性质:
- R是正交矩阵: R−1=R, RTR=I
- R的行列是为1:∣R∣=1
注:上式两个条件是充分必要条件,只要满足上式两个条件的矩阵都可以作为一个旋转矩阵,即:
SO(n)={R∈Rn×n∣RRT=I,det(R)=1}(3)
将所有满足式3的矩阵称为 Special Orthognal Group (特殊正交群),下面只考虑三维空间中的特殊正交群,坐标系1到坐标系2的之间的旋转关系可由式4来表示:
a1=R12a2a2=R21a1(4)
其中 R21=R12−1=R12T,若一个旋转矩阵取转置或取逆,则表示一个相反方向的旋转;
旋转+平移:
若同时考虑平移,则两个坐标系下p点的坐标关系如式5所示:
a′=Ra+t(5)
具体表示形式为:
a2=R21⋅a1+t21a1=R12⋅a2+t12
注:t12=−t21
其次坐标表示:
由于刚体在三维空间中可能发生多次旋转与平移,如式6所示:
b=R1a+t1,c=R2b+t2.⟹c=R2(R1a+t1)+t2.(6)
为了方便表达这种运动,引入了其次坐标表示形式如式7所示:
[a′1]=[R0Tt1][a1]≜T[a1]
其中T=[R0Tt1] 为变换矩阵(同时包含旋转与平移),变换矩阵的逆T−1为:
T−1=[RT0T−RTt1]
将变换矩阵的集合称为特殊欧式群SE(3) (Special Euclidean Group):
SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3}(7)
其中[a′1] 为齐次坐标,齐次坐标乘以任意非零常熟仍然表示三维空间中的同一个坐标:
a~=[a1]=k[a1](8)
则多次的旋转与平移可以如式9所示:
b~=T1a~,c~=T2b~⇒c~=T2T1a~(9)
用9个元素的旋转矩阵仅仅表示3个自由度的信息,表达形式过于复杂,不节省内存空间。从直观上看,旋转可以表示为绕某个轴 n 旋转一定的角度 θ,为此引入了**旋转向量(Rotation Vector)**或角轴/轴角(Angle Axis)
旋转矩阵与旋转向量是等价的,可以互相转换:
旋转向量到旋转矩阵的变换: 罗德里格斯公式(Rodrigus’s Formula):
R=cosθI+(1−cosθ)nnT+sinθn∧(10)
其中cosθI 为3x3矩阵,(1−cosθ)nnT也为3x3的矩阵,n∧表示旋转向量 n 的叉积。
旋转矩阵到旋转向量:
θ=arccos(2tr(R)−1)Rn=n(11)
n 为 R 矩阵对应特征值为1的特征向量;
旋转向量表示的旋转方式不够直观,无法从旋转向量中直接看出旋转轴的位置,欧拉角将旋转分解为三个方向上的旋转(如Z-Y-X)方向,轴可以为定轴或者动轴,轴的顺序也可以改变,如最常用绕动轴的Z-Y-X旋转方式:
- 绕物体的Z轴转动,得到偏航角yaw;
- 绕旋转之后的Y轴旋转,得到俯仰角pitch;
- 绕旋转之后的X轴旋转,得到滚转角roll;

万向锁(Gimbal Lock):欧拉角在某些旋转情况下,旋转自由度会减1,存在奇异性;由于万向锁的存在,欧拉角不适合做插值或迭代,应用不广泛;
四元数
四元素基础
四元数是一种既节省空间,又不存在奇异性的刚体旋转表示方式;
在复数平面坐标系下,可以用单位复数来表达旋转操作:
z=x+iy=ρeiθ(12)
当 z 乘以一个纯虚数 i 表示原来的向量旋转90度:
zi=(x+iy)i=ρei(θ+2π)(13)
在三维情况下, 四元数可以作为复数的扩充:
q=q0+q1i+q2j+q3k(14)
四元数包含1个实部与3个虚部,虚部之间满足以下的关系(自己与自己运算像复数运算,自己与别人运算像叉乘):
⎩⎪⎪⎨⎪⎪⎧i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j(15)
单位四元数可以表达旋转:
q=q0+q1i+q2j+q3k,q=[s,v],s=q0∈R,v=[q1,q2,q3]T∈R3(16)
基本运算如下所示:
加减法:
qa±qb=[sa±sb,va±vb]
乘法:
qaqb=sasb−xaxb−yayb−zazb+(saxb+xasb+yazb−zayb)i+(sayb−xazb+yasb+zaxb)j+(sazb+xayb−ybxa+zasb)k
qaqb=[sasb−vaTvb,savb+sbva+va×vb]
共轭:
qa∗=sa−xai−yaj−zak=[sa,−va]
取模长:
∥qa∥=sa2+xa2+ya2+za2
取逆:
q−1=q∗/∥q∥2
数乘:
kq=[ks,kv]
点乘:
qa⋅qb=sasb+xaxbi+yaybj+zazbk
旋转角转换为四元数:
q=[cos2θ,nxsin2θ,nysin2θ,nzsin2θ]T(17)
四元数转为旋转向量:
{θ=2arccosq0[nx,ny,nz]T=[q1,q2,q3]T/sin2θ(18)
若点 p 经过一次以四元数 q 表示的旋转后得 p′ ,包含以下两个步骤:
- 将 p 坐标用纯虚的四元数表示:p=[0,x,y,z]
- 使用四元数q将其旋转(前面乘以 q ,后面乘以 q−1 ):p′=qpq−1(19)